lunedì 27 gennaio 2025

Corso di Programmazione Strutturata e OOP: 8 Test di un programma


🧪 Test di un programma


🎯 Obiettivi

  • Comprendere l’importanza dei test nel ciclo di vita del software
  • Distinguere tra test manuali e test automatici
  • Saper scrivere unit test per funzioni e classi in Python
  • Validare applicazioni con input previsti e imprevisti

📘 Contenuti del Modulo

🔹 1. Cos’è un test

  • Un test è una verifica del comportamento del programma rispetto agli output attesi.
  • Serve per garantire che funzioni, classi e moduli facciano ciò che devono.
  • I test aiutano a:
    • Scoprire bug
    • Verificare modifiche (regressioni)
    • Garantire la manutenibilità

🔹 2. Test manuale vs test automatico

Tipo di test Come si fa Quando usarlo Esempio
Test manuale Inserimento diretto di input e osservazione dell’output In fase iniziale o esplorativa Avviare una funzione e vedere se stampa ciò che ci si aspetta
Test automatico Codice che verifica altre funzioni In sviluppo e debugging professionale Uso del modulo unittest

🔹 3. Scrivere test per funzioni e classi

Esempio – Funzione da testare:

def somma(a, b):
    return a + b

✅ Test manuale:

print(somma(2, 3))  # Output atteso: 5

✅ Test automatico:

import unittest

class TestSomma(unittest.TestCase):
    def test_somma_interi(self):
        self.assertEqual(somma(2, 3), 5)

    def test_somma_zero(self):
        self.assertEqual(somma(0, 0), 0)

    def test_somma_negativi(self):
        self.assertEqual(somma(-1, -2), -3)

if __name__ == '__main__':
    unittest.main()

🔹 4. Validazione del software

Cosa succede se l’input non è previsto?

💥 Codice con errore:

print(somma("a", 2))  # Errore: TypeError

🎯 Possiamo gestire l’errore oppure testarlo:

def somma(a, b):
    if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
        raise TypeError("Devono essere numeri")
    return a + b

✅ E relativo test:

def test_tipo_errato(self):
    with self.assertRaises(TypeError):
        somma("a", 2)

🛠️ Attività Pratiche

✍️ 1. Scrivi casi di test per funzioni esistenti

Funzione di esempio:

def dividi(a, b):
    return a / b

Scrivi 3 test:

  • Divisione normale
  • Divisione con b = 1
  • Divisione per 0 (gestire con try/except o testare con assertRaises)

🧰 2. Introdurre il modulo unittest

Crea un file test_calcoli.py e importa:

import unittest
from calcoli import somma, dividi

Usa setUp() per inizializzare valori, tearDown() per pulire.


🚀 3. Progetto finale – Mini App e test

👩‍💻 App: un calcolatore che fa somma, sottrazione, moltiplicazione, divisione.

📦 Struttura:

progetto_calcolatrice/
│
├── calcolatrice.py         # Funzioni
├── app.py                  # Interfaccia utente
└── test_calcolatrice.py    # Test con unittest

👨‍🔬 Esempi di test da includere:

  • test_somma_positivi
  • test_divisione_zero
  • test_input_stringa (che solleva errore)

🧠 Test di valutazione – 6 domande

1. Perché servono i test nei programmi?
A) Per scrivere meno codice
B) Per controllare che il programma funzioni ✅
C) Per evitare i commenti

2. Cosa fa assertEqual() in unittest?
A) Confronta due numeri
B) Controlla che due valori siano uguali ✅
C) Aggiunge due numeri

3. Come si scrive un test per un errore previsto?
A) assertErrore()
B) assertRaises()
C) tryAssert()

4. Qual è la differenza tra test manuale e test automatico?
A) Il manuale si scrive da soli, l’automatico no
B) Il manuale si osserva, l’automatico è codice ✅
C) Nessuna

5. Dove si scrivono i test automatici?
A) In fogli di calcolo
B) In file .txt
C) In file .py con unittest

6. Il test self.assertEqual(somma(2, 2), 5) è…
A) Corretto
B) Fallito ✅
C) Sintattico


Nessun commento:

Posta un commento

Corso Fondamenti di Informatica e Reti: 4 Architettura del computer

  ARCHITETTURA DEL COMPUTER come funziona davvero una macchina Capire un computer non significa solo saperlo accendere o aprire file: die...