Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistemas Ubicuos
Tema 4.
FIABILIDAD Y ROBUSTEZ
Sistemas Empotrados y Ubicuos
Máster Universitario en Ingeniería Informática
Tabla de contenidos
Introducción
Matriz de pruebas
Importancia de las pruebas
App nativas vs. App web
Caso de estudio: Testing y debug en Android
Remotamente en un servidor:
◦ El dispositivo visualiza los resultados y permite interactuar
◦ Ej: Mobile TV, email, redes sociales, etc.
◦¡PROBLEMA A RESOLVER!
Sistemas Empotrados y Ubicuos
Máster Universitario en Ingeniería Informática
¿Preguntas a realizar?
¿Con qué dispositivos y versiones de S.O funcionará esta aplicación?
¿Cómo realizamos pruebas para asegurar que funcionan en esas plataformas?
¿Cambios necesarios para ajustar las diferencias entre plataformas?
¿Cómo se adecúa el proceso de desarrollo y testing a las diferencias entre
protocolos wireless y servicios móviles?
¿Cuánto debemos probar?
Etc.
Diversidad de redes.
No disponibilidad de N dispositivos físicos para testing (costes).
◦ Obligando a usar emuladores...
Estáis preparados.
Pruebas en
Aplicaciones Móviles
module-name/src/androidTest/java/
Test instrumentados a ejecutar sobre dispositivo o emulador
Empaquetados como apk
Con dependencias que NO se pueden “mockear”
Anotación Funcionalidad
@RequiresDevice Requiere ejecutarse en dispositivo físico
@SdkSupress Impide que la prueba se ejecute en un nivel de Android API inferior al nivel en
cuestión (ej: @SDKSupress(minSdkVersion=18))
@SmallTest, clasifica el tiempo que lleva la ejecución de una prueba y, posteriormente, la
@MediumTest frecuencia con la que puedes ejecutarla
@LargeTest
@Before
public void setUp() throws Exception {
super.setUp();
Testing de actividades
@After
public void tearDown() throws Exception {
super.tearDown();
}
}
Stub
Test Driver Módulo
Stub
◦ Mockito http://code.google.com/p/mockito/
@Mock
Context mMockContext;
@Test
public void readStringFromContext_LocalizedString() {
// Da un contexto inyectado “mockeado” al objeto a probar...
when(mMockContext.getString(R.string.hello_word))
.thenReturn(FAKE_STRING);
ClassUnderTest myObjectUnderTest = new ClassUnderTest(mMockContext);
// Escribir datos
Parcel parcel = Parcel.obtain();
mLogHistory.writeToParcel(parcel, mLogHistory.describeContents());
// Leer datos
LogHistory createdFromParcel = LogHistory.CREATOR.createFromParcel(parcel);
List<Pair<String, Long>> createdFromParcelData = createdFromParcel.getData();
@Test
public void sayHello(){
onView(withText("Say hello!")).perform(click());
onView(withId(R.id.textView)).check(matches(withText("Hello, World!")));
}
}
@Test
Ejemplo: public void testWithBoundService() throws TimeoutException {
// Crea el Intent de servicio
Intent serviceIntent =
new Intent(InstrumentationRegistry.getTargetContext(), LocalService.class);
@Override
protected void setUp() throws Exception {
setContext(InstrumentationRegistry.getTargetContext());
super.setUp();
}
...
// añadir tests
}
Ejemplos:
$ adb shell monkey –help // muestra la ayuda
$ adb shell monkey -p com.lsi.myapp 5000 // ejecuta la app con 5000 eventos
$ adb shell monkey -p com.lsi.myapp -p com.google.map 5000 // ejecuta permitiendo la
apertura de la aplicación de mapas (en caso contrario no “sale” de la app)
$ adb shell monkey --pct-touch 30 -p com.lsi.myapp 5000 // 30% de eventos son toques en
pantalla
monkeyrunner
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
# Takes a screenshot
result = device.takeSnapshot()
Uso de batería
◦ Ver:
◦ http://www.google.com/intl/es-ES/events/io/2009/sessions/CodingLifeBatteryLife.html
Integra a su vez:
Android Device Monitor
El antiguo DDMS (Dalvik Debug Monitor Server) de versiones previas
● Depuración en Android
● https://developer.android.com/studio/debug/
Este obra está bajo una licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Unported.
No se permite un uso comercial de esta obra ni de las posibles obras derivadas, la distribución de las cuales se debe
hacer con una licencia igual a la que regula esta obra original