Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-2013 Depto. Ciencia de la Computación e IA
Introducción a XCode y Objective-C
Sesión 5: Depuración y pruebas
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Índice de contenidos• Trazas de seguimiento• NSLogs• Asserts
• El depurador de XCode• Breakpoints: Uso y tipos• Acciones disponibles en depuración
• Objetos Zombie• ¿Qué son y para qué sirven?• Configuración en XCode
• Instruments• Activar Instruments• Encontrando fugas de memoria
• Pruebas de unidad
2
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Trazas de segumiento• Trazas de seguimiento• NSLogs• Asserts
3
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
NSLogs (1)• Framework: FoundationKit• Equivalente a: fprintf(...).• Modificar el código fuente• Mostrar en consola el estado de variables• Parámetro NSString• Uso de especificadores de formato:• %@: Cadenas de texto y objetos.• %i: Enteros (integer)• %d: Decimal (float)• %.02f: Número con dos decimales• %ld: Entero Long• %p: Puntero, referencia a un objeto.• Otros...
4
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
NSLogs (2)• Especificador de texto para mostrar la descripción de un objeto:
• Mostrará la información más relevante del elemento window.• Otros objetos:
NSStringNSDictionary...
5
NSLog(@"Descripción del objeto window: %@", self.window);
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Trazas de seguimiento• Trazas de siguimiento• NSLogs• Asserts
6
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Asserts (1)• Usado por los programadores para comprobar partes del
código:• Valores de variables.• Condiciones.
• Usar sólo durante el desarrollo.• Si falla el Assert lanzará una excepción.• Objective-C: NSAssert y NSAssert2.• NSAssert es equivalente a assert• NSAssert2 permite más parámetros en la descripción.
7
// Uso de la macro assert()assert(valor < maximoValor && @"El valor es demasiado grande!"); // Uso de NSAssert2NSAssert2(valor < maximoValor, @"El valor %i es demasiado grande (max.:%i)!", valor, maximoValor);
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Asserts (2)• Uso de NSAsserts:
8
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Asserts (3)• Desactivar los asserts para compilar el proyecto para
distribución (release).• Directiva NS_BLOCK_ASSERTIONS
9
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
El depurador de XCode• El depurador de XCode• Breakpoints: Uso y tipos• Acciones disponibles en depuración
10
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Breakpoints• Internamente: GDB, el depurador de GNU. Aunque podemos
cambiarlo a LLDB.• Podremos usar la línea de comandos: http://www.gnu.org/s/gdb/documentation/
• Sistema mejorado con XCode 4.• Ejecutar el proyecto en modo depuración (debug).• Activar breakpoints desde XCode
11
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Breakpoints: creación en XCode (1)• Pulsar el número de línea en donde queremos activarlo.• Estado de un breakpoint:• Activado: Color azul.• Desactivado: Color azul semitransparente.
• Navegador de breakpoints:
12
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Breakpoints: creación en XCode (2)• Breakpoints condicionales:• Opción de activar un breakpoint si cumple una condición:
ctrl + click en un breakpoint.
13
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Breakpoints: Tipos• Además del breakpoint común existen dos tipos más:• Exception Breakpoint• Symbolic Breakpoint.
• Se crean desde el botón (+) de la parte inferior del navegador de breakpoints.
14
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Exception Breakpoint• Se ejecuta cada vez que salta una excepción en la ejecución.• Detiene la ejecución en el bloque catch o en throw.• Acción personalizable (log o sonido).• Opción de continuar la ejecución.
15
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Symbolic Breakpoint• Se ejecuta cuando una función o método específico se ejecuta.• El campo “símbolo” puede ser: • El nombre de un método: pathsMatchingExtensions:• El método de una clase: [SKTLine drawHandlesInView]• Un nombre de una función: _objc_msgForward
• Acción personalizable (log o sonido).• Opción de continuar la ejecución.
16
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
El depurador de XCode• El depurador de XCode• Breakpoints: Uso y tipos• Acciones disponibles en depuración
17
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Acciones disponibles en depuración (1)• Analizar los valores de las variables.• Crear un watchpoint: breakpoint en variable. La ejecución se
detendrá cuando el valor de la variable cambie.• Usar la línea de comandos. Comandos de GDB.• Editar el listado de breakpoints. Podemos desactivar, activar,
borrar breakpoints durante la depuración.• Cambiar la localización de la aplicación (simular GPS).
18
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Acciones disponibles en depuración (2)• Continuar hasta la siguiente línea in entrar en funciones (step
over, n)• Continuar hasta el siguiente breakpoint (continue, c)• Continuar hasta la siguiente línea entrando en las funciones
(step into, s)• Empezar de nuevo o abortar la ejecución (finish, f)
19
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Objetos Zombie• Objetos Zombie• ¿Qué son y para qué sirven?• Configuración en XCode
20
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
¿Qué son y para qué sirven? (1)• Parámetro de compilación.
• Proporciona más detalles cuando se producen excepciones relacionadas con accesos a memoria.• ¿Os suena EXC_BAD_ACCESS?
• Nombre parámetro: NSZombieEnabled.
21
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
¿Qué son y para qué sirven? (2)• Ejemplo:• Liberamos de memoria una variable que ya hemos liberado
anteriormente.• Sin usar objetos Zombie:
• Usando objetos Zombie:
22
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Objetos Zombie• Objetos Zombie• ¿Qué son y para qué sirven?• Configuración en XCode
23
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Configuración en XCode• Activar: Edit Scheme > Diagnostics > Enable Zombie Objects.
24
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Instruments• Instruments• Activar Instruments• Encontrando fugas de memoria
25
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Activar Instruments (1)• Aplicación adicional al depurador de XCode. Se instala junto
con XCode.• Varias herramientas disponibles divididas por el componente del
sistema a analizar: Memoria, CPU y Sistema de ficheros.
• Objetivo: analizar el uso de la memoria y comprobar si existen fugas de memoria (memory leaks).
26
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Activar Instruments (2)
27
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Activar Instruments (3)• Menú principal de XCode: Product > Profile.• Podemos analizar la ejecución del simulador o del dispositivo.• Para analizar las fugas de memoria seleccionamos las
herramientas Allocations y Leaks.• Allocations -> Analizar el uso de la memoria.• Leaks -> Analizar fugas de memoria.
28
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Herramienta Allocations• Allocations:• En azul las reservas de memoria que se van produciendo.• Listado de objetos que van reservando memoria ordenados por la
cantidad que reservan.
29
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Herramienta Leaks• Leaks:• En rojo las fugas de memoria (objetos que han reservado
memoria y la han liberado).• Si seleccionamos una fuga de memoria accederemos al código
fuente en donde se genera esta fuga.• Podemos corregir las fugas de memoria desde Instruments
cambiando el código fuente.
30
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Encontrando fugas de memoria• Instruments• Activar Instruments• Encontrando fugas de memoria
31
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Encontrando fugas de memoria (1)• Pantalla principal de Leaks en funcionamiento:
32
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Encontrando fugas de memoria (2)• Configuración de detección de Leaks cada cierto tiempo:
33
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Encontrando fugas de memoria (3)• Análisis de la traza de una fuga de memoria:
34
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Pruebas de unidad• Pruebas de unidad
35
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Pruebas de unidad• Objetivo: probar el funcionamiento de un módulo o un método
concreto y reducir el número de fallos.• XCode integra la generación de tests de unidad.• Un grupo de tests de unidad (test bundle) contiene varios tests.• Un test bundle prueba una funcionalidad de la aplicación.• Framework: SenTestingKit
36
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Creando tests de unidad (1)• Al crear un proyecto en XCode podemos incluir tests de unidad.
37
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Creando tests de unidad (2)• Target específico en XCode:
38
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Creando tests de unidad (3)• Macros disponibles en el framework SenTestingKit• Método setUp: crear las variables y configurarlas.• Método tearDown: liberar los objetos de memoria.
39
- (void)testMiTestDePrueba { ... // Configuración inicial (setup) ST... // Asserts ... ! // Liberación de memoria y variables auxiliares}
- (void)setUp { objeto_test = [[[MiClase alloc] init] retain]; STAssertNotNil(objeto_test, @"No se puede crear un objeto de la clase MiClase");} - (void)tearDown { [objeto_test release];}
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
Algunas macros...• STFail: Falla el test.• STAssertEqualObjects: Falla cuando dos objetos no son
iguales.• STAssertEquals: Falla cuando dos valores no son iguales.• STAssertNil: Falla cuando la expresión no es nil.• STAssertNotNil: Falla cuando la expresión es nil.• STAssertTrue: Falla cuando la expresión no es true.• STAssertFalse: Falla cuando la expresión no es false.• STAssertThrows: Falla cuando la expresión no lanza una
excepción.• etc...
40
https://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/UnitTesting/AB-Unit-Test_Result_Macro_Reference/result_macro_reference.html
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
Introducción a XCode y Objective-C
© 2012-2013 Depto. Ciencia de la Computación e IA Depuración y pruebas
• ¿Preguntas...?
41