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

Post on 21-Jan-2021

2 views 0 download

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

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

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

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

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

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.

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

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

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

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

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

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

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

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

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

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

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

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:

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.

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

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

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

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

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

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)

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

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

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