Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del...

27
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles © 2011-2012 Depto. Ciencia de la Computación e IA Android avanzado Sesión 4: Depuración y pruebas

Transcript of Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del...

Page 1: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IA 

Android avanzado

Sesión 4: Depuración y pruebas

Page 2: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 2

Puntos a tratar

• Depuración con Eclipse• Log y LogCat• Dalvik Debug Monitor Server (DDMS)

• Pruebas unitarias con JUnit para Android• Pruebas de regresión con Robotium• Pruebas de estrés con Monkey

Page 3: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 3

Log

• El logging es el sistema de depuración más ampliamente utilizado.

• Android clasifica los mensajes de log por:• Etiqueta (tag)• Prioridad• Fecha / hora • Aplicación que los lanza (PID)

private static final String TAG = "MiActivity";//... en los métodos:

Log.i(TAG, "Mensaje de ejemplo: indice=" + i);

Page 4: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 4

Log

• Según el nivel de depuración utilizaremos una llamada de las siguientes:• Log.v(): Verbose• Log.d(): Debug• Log.i(): Info• Log.w(): Warning• Log.e(): Error

• Con esta información el Log podrá ser mostrado filtrando los mensajes menos importantes

Page 5: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 5

Log y LogCat

• En Eclipse contamos con la vista LogCat • Si no se muestra por defecto se puede añadir• Podemos realizar filtrado por etiquetas para ver sólo los mensajes

que nos interesan. • Los mensajes van apareciendo en tiempo real, tanto si estamos

con un emulador como si estamos con un dispositivo móvil conectado por USB.

• Se recomienda eliminar todas las llamadas a Log cuando se publica un programa en el Android Market, a pesar de que en los dispositivos de los usuarios no se vería ningún log ni salida estándar.

Page 6: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 6

Dalvik Debug Monitor Server (DDMS)

• DDMS: Servidor de depuración ejecutable desde terminal o desde Eclipse

• Cada aplicación se ejecuta en su propia VM• Cada VM tiene un puerto al que el debugger se conecta• Cuando conectamos un dispositivo se crea un servicio de

monitorización entre adb y DDMS, que notifica a DDMS cuando una VM del dispositivo arranca o termina

• DDMS recoge su PID a través de adb y abre una conexión con el debugger de la VM

• DDMS maneja múltiples depuradores conectados cada uno a una VM

Page 7: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 7

Funcionalidades de DDMS

• Visualización del uso de memoria heap• Seguimiento de reservas de memoria para objetos• Trabajar con el sistema de ficheros del emulador o del

dispositivo• Examinar la información de hilos• Profiling de métodos: seguimiento de medidas tales como

número de llamadas, tiempo de ejecución, etc.• LogCat• Emulación de operaciones de telefonía y localización• Cambiar el estado de red y simular red lenta

Page 8: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 8

Funcionalidades de DDMS - Eclipse

Page 9: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 9

Pruebas con JUnit

• Pruebas unitarias: pruebas de métodos aislados• Pruebas de regresión: pruebas de los componentes en

conjunto a lo largo de la evolución del software• JUnit para Android permite programar distintos tipos de

pruebas agrupados en casos de prueba, a su vez agrupables en suites de pruebas.

• Se pueden incluir las pruebas dentro del mismo proyecto o en un proyecto aparte

Page 10: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 10

Crear un proyecto de pruebas

Page 11: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 11

Crear un caso de prueba

• Se crea una clase que herede de ActivityInstrumentationTestCase2<Activity>

• Debe estar en un (sub)paquete del paquete donde está el código (aunque esté en un proyecto aparte)

• Incluirá constructor y métodos setUp( ) y tearDown( )• Las pruebas serán métodos cuyo nombre empieza por

“test”• Se utilizan sentencias assert para invalidar pruebas:

assertEquals( ), assertTrue( ), assertNotNull( ) ...

Page 12: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 12

Crear un caso de prueba

Page 13: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 13

Crear un caso de pruebapackage es.ua.jtech.av.suma.test;import android.test.ActivityInstrumentationTestCase2;import es.ua.jtech.av.suma.MainActivity; public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> { public MainActivityTest() { super("es.ua.jtech.av.suma", MainActivity.class); } protected void setUp() throws Exception { super.setUp(); } public void test1(){ // asserts } protected void tearDown() throws Exception { super.tearDown(); }}

Page 14: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 14

Obtener referencias a componentes

• Se pueden declarar como campos de la clase• Se obtienen a través de getActivity().findViewById(id)

private Button bt; protected void setUp() throws Exception { super.setUp(); MainActivity activity = getActivity(); bt = (Button)activity.findViewById(

es.ua.jtech.av.suma.R.id.button1);}

Page 15: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 15

Trabajar con los componentes

• Se pueden cambiar valores• Se pueden obtener y comprobar valores• Ejemplo de evaluación de un resultado

assertEquals("32.3", miTextView.getText().toString());

Page 16: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 16

Simular eventos de usuario

• Clase TouchUtils

TouchUtils.tapView(this, miEditText);sendKeys("S");sendKeys("i");sendKeys("NUMPAD_DOT");TouchUtils.clickView(this, bt);

Page 17: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 17

Ejecutar las pruebas

• Run as / Android JUnit Test• Resultados mostrados en una vista de Eclipse:

Page 18: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 18

Otros tipos de pruebas

• Aparte de ActivityInstrumentationTestCase2 hay otras alternativas que también heredan de las clases de JUnit:• AndroidTestCase que sólo ofrece el contexto local y no el de la

aplicación.• ServiceTestCase que se usa para probar servicios.• ActivityUnitTestCase que crea la actividad pero no la conecta al

entorno, de manera que se puede utilizar un contexto o aplicación mock.

• ApplicationTestCase para probar subclases propias de Application.

Page 19: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 19

Robotium

• "Robotium es como Selenium pero para Android" • Robotium no permite grabar las acciones del usuario sino

que la secuencia de acciones debe ser programada a través de sencillas llamadas a los métodos de Robotium.

• Soporta• Activity• Dialog• Toast• Menu• ContextMenu

Page 20: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 20

Robotium

• Ventajas• Desarrollar casos de prueba sin necesidad de conocer el

funcionamiento interno de la aplicación probada.• Automatizar el manejo múltiples actividades de Android.• Pruebas realistas, al realizarse sobre los componentes GUI en

tiempo de ejecución• Integración con Maven y Ant para ejecutar pruebas como parte de

una integración continua.

• Desarrollado sobre JUnit

Page 21: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 21

Crear pruebas con Robotium

• Incluir robotium-solo-3.1.jar en el proyecto

Page 22: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 22

Crear pruebas con Robotiumpackage es.ua.jtech.av.miproyecto.test;import android.test.ActivityInstrumentationTestCase2;import es.ua.jtech.av.miproyecto.MainActivity;import com.jayway.android.robotium.solo.Solo; public class TestMainActivity extends ActivityInstrumentationTestCase2<MainActivity> { private Solo solo; public TestMainActivity(){ super("es.ua.jtech.av.miproyecto", MainActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); solo = new Solo(getInstrumentation(), getActivity()); } @Override protected void tearDown() throws Exception { solo.finishOpenedActivities(); }}

Page 23: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 23

Métodos de Robotium

• Una prueba de ejemplo usando la clase Solo de Robotium:

public void test1(){ solo.enterText(0,"10"); solo.enterText(1,"22.4"); solo.clickOnButton("+"); assertTrue(solo.searchText("32.4"));}

Page 24: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 24

Métodos de Robotium

• Otros ejemplos:• getView(id)• getCurrentTextViews(textView)• setActivityOrientation(Solo.LANDSCAPE)• sendKey(Solo.MENU)• clickOnButton(text)• clickOnText(text)• clickOnEditText(text)• clearText(text)• enterText(text)• goBack()• sleep(millis)

Page 25: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 25

Pruebas de estrés con Monkey

• Simula input del usuario aleatorio• Probar que haga lo que haga el usuario con la GUI, la

aplicación no tendrá un comportamiento inesperado• No tiene por qué tener sentido• Simula eventos de teclado, tanto qwerty como teclas

hardware especializadas, movimientos de trackball, apertura y cierre del teclado, rotaciones de la pantalla

• Ejemplo: solicitamos 1000 eventos simulados cada 100 milisegundos obteniendo la lista de ellos (opción -v) y afectará a las aplicaciones del paquete es.ua.jtech.av

adb shell monkey -p es.ua.jtech.av -v --throttle 100 1000

Page 26: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 26

Reproducir prueba de Monkey

• Fijar la semilla aleatoria para reproducir la misma secuencia de acciones aleatorias. Opción -s

• Sirve para reproducir un problema encontrado tantas veces como sea necesario

• Por otro lado se puede obtener la secuencia de acciones

Page 27: Arquitectura de Aplicaciones · 2012. 5. 14. · • Trabajar con el sistema de ficheros del emulador o del dispositivo • Examinar la información de hilos • Profiling de métodos:

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IADepuración y pruebas Android avanzado - 27

¿Preguntas...?