En aquest tema, ens centrarem en les tècniques i eines per a la prova i depuració de les aplicacions desenvolupades en Delphi/Object Pascal. La prova i la depuració són parts essencials del cicle de vida del desenvolupament de programari, ja que asseguren que el codi funcioni correctament i compleixi amb els requisits especificats.
Objectius del Tema
- Comprendre la importància de les proves i la depuració.
- Aprendre a utilitzar les eines de depuració de Delphi.
- Implementar proves unitàries per assegurar la qualitat del codi.
- Identificar i corregir errors comuns en el codi.
- Importància de les Proves i la Depuració
Les proves i la depuració són crucials per garantir que el programari funcioni correctament i sigui fiable. A continuació, es detallen alguns dels beneficis clau:
- Detecció d'Errors: Identificar i corregir errors abans que el programari arribi als usuaris finals.
- Millora de la Qualitat: Assegurar que el codi compleixi amb els requisits funcionals i no funcionals.
- Mantenibilitat: Facilitar el manteniment i l'actualització del codi en el futur.
- Confiança: Proporcionar confiança als desenvolupadors i als usuaris finals sobre la fiabilitat del programari.
- Eines de Depuració en Delphi
Delphi proporciona diverses eines per a la depuració del codi. A continuació, es presenten algunes de les més importants:
2.1. Breakpoints
Els breakpoints permeten aturar l'execució del programa en un punt específic per inspeccionar l'estat del programa.
procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage('Hello, World!'); // Col·loca un breakpoint aquí end;
- Com Utilitzar-los: Fes clic a la vora esquerra de l'editor de codi per col·locar un breakpoint.
- Inspecció de Variables: Quan el programa s'atura en un breakpoint, pots inspeccionar les variables locals i globals.
2.2. Watches
Els watches permeten monitoritzar el valor de les variables durant l'execució del programa.
- Com Afegir un Watch: Fes clic dret sobre una variable i selecciona "Add Watch".
- Monitorització: Els watches es mostren en una finestra separada i s'actualitzen en temps real durant la depuració.
2.3. Call Stack
El call stack mostra la seqüència de crides de funcions que han portat al punt actual d'execució.
- Com Utilitzar-lo: La finestra del call stack es pot obrir des del menú "View" -> "Debug Windows" -> "Call Stack".
- Navegació: Pots navegar per les diferents funcions del call stack per entendre el flux d'execució.
- Proves Unitàries
Les proves unitàries són una tècnica de prova que verifica el funcionament de les unitats individuals de codi (funcions, procediments, mètodes).
3.1. Creació de Proves Unitàries
Delphi proporciona suport per a proves unitàries mitjançant el framework DUnit.
unit UnitTests; interface uses TestFramework; type TMyTest = class(TTestCase) published procedure TestAddition; end; implementation procedure TMyTest.TestAddition; begin CheckEquals(4, 2 + 2, '2 + 2 should equal 4'); end; initialization RegisterTest(TMyTest.Suite); end.
- Definició de Proves: Les proves es defineixen com a mètodes dins d'una classe que hereta de
TTestCase
. - Execució de Proves: Les proves es poden executar des de l'IDE de Delphi o mitjançant una aplicació de consola.
3.2. Avantatges de les Proves Unitàries
- Detecció Primerenca d'Errors: Les proves unitàries permeten detectar errors en fases primerenques del desenvolupament.
- Refactorització Segura: Les proves unitàries proporcionen una xarxa de seguretat durant la refactorització del codi.
- Documentació: Les proves unitàries serveixen com a documentació viva del comportament del codi.
- Identificació i Correcció d'Errors
4.1. Errors Comuns
- Errors de Sintaxi: Errors en la sintaxi del codi que impedeixen la seva compilació.
- Errors de Lògica: Errors en la lògica del codi que produeixen resultats incorrectes.
- Errors de Temps d'Execució: Errors que es produeixen durant l'execució del programa, com ara accessos a memòria no vàlida.
4.2. Estratègies per a la Correcció d'Errors
- Revisió de Codi: Revisar el codi amb altres desenvolupadors per identificar errors.
- Depuració Pas a Pas: Utilitzar breakpoints i el call stack per depurar el codi pas a pas.
- Proves Automatitzades: Implementar proves unitàries i d'integració per detectar errors automàticament.
Exercicis Pràctics
Exercici 1: Depuració amb Breakpoints
- Crea una aplicació Delphi amb un botó.
- Afegeix un breakpoint en l'esdeveniment
OnClick
del botó. - Executa l'aplicació i fes clic al botó.
- Inspecciona les variables locals quan l'execució s'aturi en el breakpoint.
Exercici 2: Creació de Proves Unitàries
- Crea una unitat de codi amb una funció que sumi dos nombres.
- Implementa una prova unitària per verificar que la funció retorna el resultat correcte.
- Executa la prova unitària i assegura't que passa correctament.
Solucions als Exercicis
Solució a l'Exercici 1
procedure TForm1.Button1Click(Sender: TObject); var a, b, sum: Integer; begin a := 2; b := 3; sum := a + b; // Col·loca un breakpoint aquí ShowMessage('Sum: ' + IntToStr(sum)); end;
Solució a l'Exercici 2
unit UnitTests; interface uses TestFramework; function Add(a, b: Integer): Integer; type TMyTest = class(TTestCase) published procedure TestAdd; end; implementation function Add(a, b: Integer): Integer; begin Result := a + b; end; procedure TMyTest.TestAdd; begin CheckEquals(5, Add(2, 3), '2 + 3 should equal 5'); end; initialization RegisterTest(TMyTest.Suite); end.
Conclusió
En aquesta secció, hem après la importància de les proves i la depuració, com utilitzar les eines de depuració de Delphi, i com implementar proves unitàries per assegurar la qualitat del codi. Aquestes habilitats són essencials per a qualsevol desenvolupador que vulgui crear aplicacions fiables i mantenibles. En el següent tema, ens centrarem en el desplegament i manteniment de les aplicacions.
Curs de Programació Delphi/Object Pascal
Mòdul 1: Introducció a Delphi/Object Pascal
- Introducció a Delphi i Object Pascal
- Configuració de l'Entorn de Desenvolupament
- Primera Aplicació Delphi
- Sintaxi i Estructura Bàsiques
- Variables i Tipus de Dades
Mòdul 2: Estructures de Control i Procediments
- Declaracions Condicionals
- Bucles i Iteració
- Procediments i Funcions
- Abast i Durada de les Variables
- Gestió d'Errors i Depuració
Mòdul 3: Treballant amb Dades
- Arrays i Cadenes
- Registres i Conjunts
- Tipus Enumerats i Subrang
- Gestió d'Arxius
- Accés a Bases de Dades
Mòdul 4: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Herència i Polimorfisme
- Interfícies i Classes Abstractes
- Gestió d'Excepcions en POO
Mòdul 5: Funcions Avançades de Delphi
- Generics i Col·leccions
- Multifil i Programació Paral·lela
- Desenvolupament Basat en Components
- Biblioteca d'Execució de Delphi (RTL)
- Tècniques Avançades de Depuració
Mòdul 6: Desenvolupament d'Interfícies Gràfiques amb VCL i FMX
- Introducció a VCL
- Creació de Formularis i Controls
- Programació Basada en Esdeveniments
- Introducció a FireMonkey (FMX)
- Desenvolupament Multiplataforma amb FMX
Mòdul 7: Desenvolupament Web i Mòbil
- Desenvolupament Web amb Delphi
- Serveis RESTful
- Desenvolupament Mòbil amb Delphi
- Desplegament d'Aplicacions Mòbils
- Integració amb Serveis Web
Mòdul 8: Millors Pràctiques i Patrons de Disseny
- Organització del Codi i Documentació
- Patrons de Disseny en Delphi
- Tècniques de Refactorització
- Proves Unitàries i Desenvolupament Basat en Proves
- Optimització del Rendiment