Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA
Android avanzado
Sesión 6: Depuración y pruebas
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 2
Puntos a tratar
• Conectar un dispositivo Hardware
• 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
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 3
Conectar un dispositivo Hardware
• En Windows → Instalar driver USBhttp://developer.android.com/tools/extras/oem-usb.html
• En Mac funciona directamente.• En Ubuntu:
• Crear el fichero: /etc/udev/rules.d/51-android.rules• Añade una línea como la siguiente por cada dispositivo a contectar:
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"
donde tendremos que cambiar el idVendor (“0bb4”) según el dispositivo:
http://developer.android.com/tools/device.html#VendorIds • Ejecuta: chmod a+r /etc/udev/rules.d/51-android.rules• Comprueba que se ha detectado mediante “adb devices” (en “platform-tools/”)
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 4
Conectar un dispositivo Hardware
• Activar “modo depuración USB” en el dispositivo:
• Settings > Applications > Development.
• A partir de Android 4.0:
Settings > Developer options
• A partir de Android 4.2 las opciones de desarrollador aparecen
escondidas:
• Tenemos que ir a: Settings > About phone
• Apretar 7 veces encima del “Build number” (JOP40C...)
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 5
Log y LogCat
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 6
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);
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 7
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
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 8
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.
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 9
Dalvik Debug Monitor Server
(DDMS)
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 10
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.
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 11
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
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 12
Funcionalidades de DDMS - Eclipse
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 13
Pruebas unitariascon JUnit
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 14
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.
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 15
Crear un proyecto de pruebasNew → Other → Android → Android Test Project
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 16
Crear un caso de prueba
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 17
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( ) ...
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 18
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(); }}
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 19
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);}
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 20
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());
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 21
Simular eventos de usuario
• Clase TouchUtils
TouchUtils.tapView(this, miEditText);sendKeys("S");sendKeys("i");sendKeys( KeyEvent.KEYCODE_PERIOD );TouchUtils.clickView(this, bt);
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 22
Ejecutar las pruebas
• Run as → Android JUnit Test• Resultados mostrados en una vista de Eclipse:
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 23
Pruebas de regresióncon Robotium
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 24
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
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 25
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
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 26
Crear pruebas con Robotium
• Incluir robotium-solo-3.1.jar en el proyecto
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 27
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(); }}
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 28
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"));}
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 29
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)
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 30
Pruebas de estrés
con Monkey
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 31
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
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 32
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
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA 33
¿Preguntas...?