En aquest tema, aprendrem com assegurar-nos que el nostre codi Dart funciona correctament mitjançant proves i depuració. Aquest procés és essencial per garantir la qualitat del programari i detectar errors abans que arribin als usuaris finals.

Continguts

Introducció a les Proves

Les proves són una part fonamental del desenvolupament de programari. Ens ajuden a verificar que el nostre codi funciona com s'espera i a detectar errors abans que es converteixin en problemes més grans.

Beneficis de les Proves

  • Detecció primerenca d'errors: Les proves permeten identificar errors en les primeres fases del desenvolupament.
  • Millora de la qualitat del codi: Escriure proves fomenta la creació de codi més net i mantenible.
  • Facilitat de refactorització: Amb proves adequades, podem refactoritzar el codi amb confiança, sabent que les proves ens alertaran si alguna cosa es trenca.

Tipus de Proves

Hi ha diversos tipus de proves que podem utilitzar en el desenvolupament de programari:

  1. Proves Unitàries: Verifiquen el funcionament de components individuals del codi, com ara funcions o mètodes.
  2. Proves d'Integració: Verifiquen que diferents components del sistema funcionen correctament junts.
  3. Proves de Sistema: Verifiquen el sistema complet per assegurar-se que compleix els requisits especificats.
  4. Proves d'Acceptació: Verifiquen que el sistema compleix les necessitats i expectatives dels usuaris finals.

Escriptura de Proves Unitàries

Les proves unitàries són essencials per assegurar-nos que cada part del nostre codi funciona correctament de manera aïllada. En Dart, podem utilitzar el paquet test per escriure i executar proves unitàries.

Instal·lació del Paquet test

Per començar a escriure proves unitàries, primer hem d'instal·lar el paquet test. Afegim la següent dependència al nostre fitxer pubspec.yaml:

dev_dependencies:
  test: ^1.16.0

Després, executem pub get per instal·lar el paquet.

Exemple de Prova Unitària

A continuació, es mostra un exemple de com escriure una prova unitària en Dart:

import 'package:test/test.dart';

int suma(int a, int b) {
  return a + b;
}

void main() {
  test('La funció suma ha de retornar la suma de dos nombres', () {
    expect(suma(2, 3), equals(5));
  });
}

Explicació del Codi

  • Importació del paquet test: Importem el paquet test per utilitzar les seves funcions.
  • Funció suma: Definim una funció simple que suma dos nombres.
  • Funció main: Definim una prova que verifica que la funció suma retorna el resultat correcte.

Escriptura de Proves d'Integració

Les proves d'integració verifiquen que diferents components del sistema funcionen correctament junts. Aquestes proves són més complexes que les proves unitàries, però són igualment importants.

Exemple de Prova d'Integració

A continuació, es mostra un exemple de com escriure una prova d'integració en Dart:

import 'package:test/test.dart';

class Calculadora {
  int suma(int a, int b) {
    return a + b;
  }

  int resta(int a, int b) {
    return a - b;
  }
}

void main() {
  group('Proves d\'integració de la classe Calculadora', () {
    final calculadora = Calculadora();

    test('La funció suma ha de retornar la suma de dos nombres', () {
      expect(calculadora.suma(2, 3), equals(5));
    });

    test('La funció resta ha de retornar la resta de dos nombres', () {
      expect(calculadora.resta(5, 3), equals(2));
    });
  });
}

Explicació del Codi

  • Classe Calculadora: Definim una classe amb dues funcions: suma i resta.
  • Funció main: Definim un grup de proves que verifiquen el funcionament de la classe Calculadora.

Depuració del Codi

La depuració és el procés de trobar i corregir errors en el codi. Dart proporciona diverses eines per ajudar-nos a depurar el nostre codi de manera eficient.

Eines de Depuració

  1. print: La funció print és una eina simple però efectiva per depurar el codi. Podem utilitzar-la per imprimir valors i missatges en la consola.
  2. Debugger: Dart inclou un depurador integrat que ens permet establir punts de ruptura, inspeccionar variables i executar el codi pas a pas.
  3. IDE: La majoria dels entorns de desenvolupament integrats (IDE) com Visual Studio Code i IntelliJ IDEA tenen suport per a la depuració de codi Dart.

Exemple de Depuració amb print

void main() {
  int a = 5;
  int b = 3;
  int resultat = suma(a, b);
  print('El resultat de la suma és: $resultat');
}

int suma(int a, int b) {
  return a + b;
}

Exemple de Depuració amb el Depurador

  1. Establir un punt de ruptura: Col·loquem un punt de ruptura en la línia on volem aturar l'execució del codi.
  2. Executar el codi en mode de depuració: Executem el codi en mode de depuració des de l'IDE.
  3. Inspeccionar variables: Utilitzem el depurador per inspeccionar el valor de les variables i seguir l'execució del codi pas a pas.

Exercicis Pràctics

Exercici 1: Escriure Proves Unitàries

Escriu proves unitàries per a la següent funció que calcula el factorial d'un nombre:

int factorial(int n) {
  if (n <= 1) return 1;
  return n * factorial(n - 1);
}

Solució

import 'package:test/test.dart';

int factorial(int n) {
  if (n <= 1) return 1;
  return n * factorial(n - 1);
}

void main() {
  test('La funció factorial ha de retornar el factorial d\'un nombre', () {
    expect(factorial(5), equals(120));
    expect(factorial(0), equals(1));
    expect(factorial(1), equals(1));
  });
}

Exercici 2: Depurar el Codi

Depura el següent codi per trobar i corregir l'error:

void main() {
  int a = 5;
  int b = 3;
  int resultat = resta(a, b);
  print('El resultat de la resta és: $resultat');
}

int resta(int a, int b) {
  return a + b; // Error: hauria de ser a - b
}

Solució

void main() {
  int a = 5;
  int b = 3;
  int resultat = resta(a, b);
  print('El resultat de la resta és: $resultat');
}

int resta(int a, int b) {
  return a - b; // Correcció: ara resta correctament
}

Conclusió

En aquesta secció, hem après la importància de les proves i la depuració en el desenvolupament de programari. Hem vist com escriure proves unitàries i d'integració, així com utilitzar eines de depuració per trobar i corregir errors en el nostre codi. Aquestes habilitats són essencials per garantir la qualitat i la fiabilitat del nostre programari.

© Copyright 2024. Tots els drets reservats