Lab 1: Test Driven Development

Dept. of Computer Science
Lab 1: Test Driven Development
Matteo Camilli
!
[email protected]
http://camilli.di.unimi.it
Progettazione del Software a.a. 2014/15
1
Matteo Camilli
Regole per l’esame
L'esame è composto da due parti:
1) parte teoria (max 27 punti, sufficienza 18)
2) parte laboratorio (max 5 punti, sufficienza 0)
!
per verbalizzare il voto, le due parti devono essere sufficienti! NOTA: La somma può portare a 32: voti maggiori di 30 corrispondono a 30 e lode
!
PARTE TEORIA
Orale di un'ora sugli argomenti del corso
!
PARTE LABORATORIO (ESERCIZI + PROGETTO)
•
•
•
•
•
Verranno fatti 11 laboratori
Primi 5 lab di esercizi (fino ad 1 punto a lab)
Seconda parte di Progetto (fino ad 1 punto per “lavoro settimanale”)
Il voto peggiore (spesso sarà lo zero di una assenza) verrà scartato
Si parte da -5, quindi prendendo sempre il massimo 11 - 5 - 1 (scarto) = 5 punti
2
Matteo Camilli
TDD
• Test Driven Development (TDD) è una
metodologia.
!
• TDD è progettazione e sviluppo del software
• TDD non è testing
!
• Ci permette di pensare al programma
attraverso i suoi requisiti.
• Prima di implementare una nuova
funzionalità scriviamo sempre un test per
definirne le specifiche.
3
Matteo Camilli
TDD
• Mantenere le iterazioni brevi
• Ad ogni iterazione, produrre esclusivamente il codice necessario a fare passare il test
• Refactoring è importante… da fare sia sul codice del programma sia sui test
• Obbiettivi: produrre codice pulito, funzionante, che rispetta i requisiti.
• Make it Fail
• No code without a failing test
• Make it Work
• As simply as possible
• Make it Better
• Refactor
4
Matteo Camilli
Refactoring
• Modifica di porzioni di codice senza modificare il comportamento esterno del
software. Viene applicato per migliorare alcune caratteristiche non funzionali:
Leggibilità
Riusabilità
Manutenibilità
Testabilità
• Su cosa lavorare durante il refactoring: • nomi di variabili, metodi, classi sensati?
• troppi livelli di indentazione? • if-else intricati? • responsabilità alle classi appropriate? • troppe responsabilità ad una singola classe o metodo?
• classi/metodi troppo grossi?
• …
5
Matteo Camilli
Unit testing
• Attività di testing di singole unità software. • Per unità si intende il minimo componente di un programma dotato di
funzionamento autonomo (singola classe o un singolo metodo nella
programmazione a oggetti)
• Junit: Framework opensource per scrivere ed eseguire test ripetibili (usiamo
versione JUnit 4).
6
Matteo Camilli
Esercizio
• Scrivere un programma Java per giocare a Tris.
• Obbligatorio seguire l’approccio TDD.
• I test si trovano nella classe TrisTest.java, partendo dal primo test in alto
!
• > bash inizia!
prima
di
iniziare
!
• scommento nuovo test
• red
•
> bash salva!
• green, •
> bash salva!
per
ogni
test
• refactoring
•
> bash salva
•
>
bash consegna
prima
di
consegnare
7