Introducción a XCode y Objective-C · Especialista Universitario en Desarrollo de Aplicaciones...

Post on 30-May-2020

11 views 0 download

Transcript of Introducción a XCode y Objective-C · Especialista Universitario en Desarrollo de Aplicaciones...

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