Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos...

33
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

Transcript of Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos...

Page 1: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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

Page 2: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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

Page 3: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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/”)

Page 4: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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...)

Page 5: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

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

Log y LogCat

Page 6: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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);

Page 7: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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

Page 8: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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.

Page 9: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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)

Page 10: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de 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.

Page 11: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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

Page 12: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

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

Funcionalidades de DDMS - Eclipse

Page 13: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

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

Pruebas unitariascon JUnit

Page 14: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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.

Page 15: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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

Page 16: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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

Page 17: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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( ) ...

Page 18: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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(); }}

Page 19: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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);}

Page 20: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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());

Page 21: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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);

Page 22: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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:

Page 23: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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

Page 24: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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

Page 25: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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

Page 26: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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

Page 27: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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(); }}

Page 28: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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"));}

Page 29: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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)

Page 30: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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

Page 31: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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

Page 32: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

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

Page 33: Arquitectura de Aplicaciones€¦ · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA 11 Funcionalidades de DDMS

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

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

¿Preguntas...?