En aquest tema, aprendrem com assegurar-nos que el nostre codi funcioni correctament mitjançant tècniques de proves i depuració. Aquestes habilitats són essencials per a qualsevol desenvolupador, ja que ajuden a identificar i corregir errors, millorant la qualitat del codi i l'experiència de l'usuari.
- Introducció a les Proves
1.1. Tipus de Proves
Hi ha diversos tipus de proves que podem realitzar per assegurar-nos que el nostre codi funcioni correctament:
- Proves Unitàries: Proves que verifiquen el funcionament de components individuals del codi, com ara funcions o mètodes.
- Proves d'Integració: Proves que verifiquen la interacció entre diferents components del sistema.
- Proves de Sistema: Proves que verifiquen el sistema complet per assegurar-se que compleix amb els requisits especificats.
- Proves d'Acceptació: Proves que verifiquen si el sistema compleix amb les expectatives i necessitats de l'usuari final.
1.2. Eines de Proves
Algunes eines populars per realitzar proves en Objective-C són:
- XCTest: El framework de proves unitàries d'Apple per a Objective-C i Swift.
- OCMock: Una biblioteca per crear mocks en Objective-C, útil per a proves d'unitat.
- Proves Unitàries amb XCTest
2.1. Configuració de XCTest
XCTest ve integrat amb Xcode, així que no cal instal·lar res addicional. Per crear una prova unitària, segueix aquests passos:
-
Crear un nou fitxer de prova:
- A Xcode, selecciona
File > New > File...
. - Tria
Unit Test Case Class
i fes clic aNext
. - Dona un nom a la classe de prova i assegura't que estigui associada amb el teu projecte.
- A Xcode, selecciona
-
Afegir proves:
- Obre el fitxer de prova creat i afegeix les teves proves dins dels mètodes
testExample
.
- Obre el fitxer de prova creat i afegeix les teves proves dins dels mètodes
2.2. Exemple de Prova Unitària
A continuació, es mostra un exemple de prova unitària per a una funció que suma dos nombres:
#import <XCTest/XCTest.h> #import "Calculator.h" @interface CalculatorTests : XCTestCase @end @implementation CalculatorTests - (void)testAddition { Calculator *calculator = [[Calculator alloc] init]; NSInteger result = [calculator addNumber:5 toNumber:3]; XCTAssertEqual(result, 8, @"La suma de 5 i 3 hauria de ser 8"); } @end
2.3. Executar Proves
Per executar les proves, selecciona Product > Test
o utilitza la drecera de teclat Cmd + U
. Xcode executarà totes les proves i mostrarà els resultats a la consola.
- Depuració
3.1. Ús de l'Entorn de Depuració de Xcode
Xcode proporciona un entorn de depuració potent que inclou:
- Punts de trencament (Breakpoints): Permeten aturar l'execució del programa en un punt específic per inspeccionar l'estat del programa.
- Consola de depuració: Permet executar comandes per inspeccionar i modificar l'estat del programa durant l'execució.
3.2. Afegir i Gestionar Punts de Trencament
Per afegir un punt de trencament:
- Fes clic a la barra de números de línia al costat de la línia de codi on vols aturar l'execució.
- Un punt blau apareixerà indicant que s'ha afegit un punt de trencament.
Per gestionar els punts de trencament:
- Fes clic dret sobre el punt de trencament per veure opcions com desactivar-lo o eliminar-lo.
- Utilitza el panell de punts de trencament (
View > Navigators > Show Breakpoint Navigator
) per veure i gestionar tots els punts de trencament del projecte.
3.3. Inspeccionar Variables
Quan l'execució s'atura en un punt de trencament, pots inspeccionar les variables:
- Passa el cursor sobre una variable per veure el seu valor.
- Utilitza la consola de depuració per executar comandes com
po
(print object) per imprimir el valor d'una variable.
3.4. Exemple de Depuració
Suposem que tenim una funció que calcula el factorial d'un nombre, però sembla que no funciona correctament:
- (NSInteger)factorialOfNumber:(NSInteger)number { if (number == 0) { return 1; } return number * [self factorialOfNumber:number - 1]; }
Afegim un punt de trencament a la línia return number * [self factorialOfNumber:number - 1];
i executem el programa. Quan l'execució s'aturi, inspeccionem el valor de number
per assegurar-nos que la funció està calculant correctament el factorial.
- Errors Comuns i Solucions
4.1. Errors de Sintaxi
Els errors de sintaxi són fàcils de detectar perquè Xcode els subratlla en vermell. Revisa el codi per assegurar-te que no hi ha errors tipogràfics o de sintaxi.
4.2. Errors de Temps d'Execució
Aquests errors es produeixen durant l'execució del programa. Utilitza punts de trencament i la consola de depuració per identificar la causa de l'error.
4.3. Errors de Lògica
Els errors de lògica són més difícils de detectar perquè el codi es compila i s'executa sense errors, però no produeix els resultats esperats. Les proves unitàries són una eina valuosa per identificar i corregir aquests errors.
- Resum
En aquesta secció, hem après la importància de les proves i la depuració en el desenvolupament de programari. Hem vist com configurar i executar proves unitàries amb XCTest, així com utilitzar l'entorn de depuració de Xcode per identificar i corregir errors. Amb aquestes habilitats, estàs millor preparat per assegurar-te que el teu codi funcioni correctament i sigui de la màxima qualitat.
Curs de Programació en Objective-C
Mòdul 1: Introducció a Objective-C
- Introducció a Objective-C
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsiques
- Tipus de Dades i Variables
- Operadors i Expressions
Mòdul 2: Flux de Control
Mòdul 3: Funcions i Mètodes
- Definició i Crida de Funcions
- Paràmetres de Funció i Valors de Retorn
- Sintaxi de Mètodes en Objective-C
- Mètodes de Classe i d'Instància
Mòdul 4: Programació Orientada a Objectes
Mòdul 5: Gestió de Memòria
- Introducció a la Gestió de Memòria
- Comptatge Automàtic de Referències (ARC)
- Retenció i Alliberament Manual
- Millors Pràctiques de Gestió de Memòria
Mòdul 6: Temes Avançats
Mòdul 7: Treballant amb Dades
- Gestió d'Arxius
- Serialització i Deserialització
- Conceptes Bàsics de Xarxes
- Treballant amb JSON i XML
Mòdul 8: Desenvolupament d'Interfícies d'Usuari
- Introducció a UIKit
- Vistes i Controladors de Vista
- Disseny Automàtic
- Gestió de l'Entrada de l'Usuari