+ All Categories
Home > Software > Unit test

Unit test

Date post: 07-Aug-2015
Category:
Upload: roberto-cappelletti
View: 201 times
Download: 0 times
Share this document with a friend
Popular Tags:
24
Unit Test “If it ain't tested, it's broken” - Bruce Eckel Approfondimento e linee guida sulla creazione di Unit Test nelle applicazioni
Transcript
Page 1: Unit test

Unit Test

“If it ain't tested, it's broken” - Bruce Eckel

Approfondimento e linee guida sulla creazione di Unit Test nelle applicazioni

Page 2: Unit test

Agendao Definizione di UnitTesto Perchè fare UnitTesto Framework per Unit Testo Esepioo Dal esempio al mondo realeo Implementazione Domain Modelo Dal mondo reale alla nostra realtào Guide Lineo Buildo Code Coverageo Obbiettivi

Settembre 2011Unit Test

2

Page 3: Unit test

Settembre 2011Unit Test

3

Unit Test

Uno Unit Test è un test che verifica il corretto funzionamento di una unità funzionale (ad esempio un metodo) del sistema.

•Ripetibile•Automatico•Indipendente•Veloce

Unit Test non individua l'assenza di errori ma ne evidenza la presenza

Page 4: Unit test

Settembre 2011Unit Test

4

Perché fare Unit Test?

Test come VerificaVerifichiamo che il codice sia aderente ai requisiti.

Test come ConfidenzaI requisiti non sono scolpiti nella roccia "Change Happens" quando cambiano o quando facciamo refactoring ci segnalano eventuali errori.I test sui bug ci aiutano ad evitare i bug di regressione.

Test come SpecificaTi aiuta a capire se le specifiche sono complete ragionando sui casi limite e a colmarle quando mancano.

Page 5: Unit test

Settembre 2011Unit Test

5

Perché fare Unit Test?

Test come Buon DesignSe è difficile o impossibile testare una cosa vuol dire che il design non è buono. Probabilmente l'accoppiamento tra i componenti è alto o il componente ha più responsabilità di quelle che dovrebbe avere.

Test come Banco di ProvaTi permette di verificare porzioni di codice difficili da debuggare perché inseriti in contesti complessi facendoti risparmiare tempo.

Test come DocumentazioneLeggendo i test si ha una idea di come il componente possa essere utilizzato.

Page 6: Unit test

Settembre 2011Unit Test

6

In pratica…

Per fare test utilizzo un framework- MsTest- MbUnit- NUnit

La maggior parte dei framework di test si basa sulle Asserzioni

Cosa posso Asserire:- A partire da un determinato input avrò un determinato output- A partire da un input avrò una determinata eccezione- Una determinata istruzione verrà richiamata

Page 7: Unit test

Settembre 2011Unit Test

7

MsTest

Framework di testing integrato in Visual Studio 2010.Consente di creare Unit Test, Web Test, Load Test e CodedUi Test.

Le classi sono marcate con l’attributo TestClass i metodi con TestMethod e le asserzioni vengono fatte con la classe Assert.

ClassInitialize ClassCleanup vengono chiamati rispettivamente all’inizio e alla fine dell’esecuzione di test in una classe e TestInitialize TestCleanup prima e dopo l’esecuzione di un metodo.

Page 8: Unit test

Settembre 2011Unit Test

8

Il mio primo Test

Requisiti

Il conto corrente ha un saldo che riporta il denaro attualmente depositato.Sul conto corrente posso prelevare o depositare denaro.Non posso prelevare più di quello che ho sul conto.Quando il conto corrente viene creato il saldo è 0.

Page 9: Unit test

Settembre 2011Unit Test

9

Dal primo test -> al Mondo Reale

Quando passiamo da un esempio al mondo reale quello che succede è che la complessità aumenta.Ci accorgiamo quindi che dobbiamo testare molte cose e testare alcune di queste diventa difficile.

Design for testabilityProgettare bene una applicazione significa più facilità nello scrittura dei test.Principi (Basso Accoppiamento, Alta Coesione, SOLID, ecc)Pattern (Domain Model, Inversion of control, ecc)

Priorità nei testI test hanno un costoDevo testare prima le parti più critiche e più importanti

Page 10: Unit test

Settembre 2011Unit Test

10

Dal Mondo Reale -> alla nostra realtà

Prima di vedere i test applicati sulle nostre applicazioni abbiamo bisogno di aprire una parentesi parlando di come è cambiato il modo di implementare il pattern Domain Model.

Requisiti

Quando un cliente viene messo in black list bisogna indicarne il motivo e congelare tutti gli ordini.

Page 11: Unit test

Settembre 2011Unit Test

11

Domain Model Anemico

Presentation

Business Logic

Page 12: Unit test

Settembre 2011Unit Test

12

Domain Model

“An object model of the domain that incorporates both behaviour and data.”POEAA – Martin Fowler

Insieme di classi correlate tra loro in un grafo che rappresentano il dominio di nostro interesse, ordini di vendita, tubi, farmaci, spedizioni …

• Focalizzando l’attenzione su• Dati (proprietà)• Comportamento (metodi)

Page 13: Unit test

Settembre 2011Unit Test

13

Domain Model NON Anemico

Presentation

Business Logic

Domain

Page 14: Unit test

Settembre 2011Unit Test

14

Guide Line - Cosa

Cosa dobbiamo testare?Nella maggior parte della applicazioni che stiamo realizzano abbiamo scelto di utilizzare il Domain Model.

Il DOMINIO è quindi la parte del nostro software che:• Contiene tutta la logica di Business• È la parte più facile da testare

Cosa non va testato?Teoricamente niente ma in realtà• Proprietà vuote• Dto non hanno comportamento

Page 15: Unit test

Settembre 2011Unit Test

15

Guide Line - Come

Come dobbiamo testare?• Test brevi• Alta leggibilità

– Se fallisce il test devo capire subito il motivo• Manutenibilità• Testare una cosa sola

I test devono essere• Ripetibile• Automatico• Indipendente• Veloce

Page 16: Unit test

Settembre 2011Unit Test

16

Guide Line - Quando

Quando fare Test?• Durante lo sviluppo della funzionalità stessa

Come gestire i costi• Prima di iniziare a fare test il Gestore di Progetto e il Responsabile

Tecnico devono esserne a conoscenza.• Aver creato da subito una buona architettura consente di avere

costi sulla creazione dei test inferiori.

Page 17: Unit test

Settembre 2011Unit Test

17

Guide Line - Naming

Quali Naming Guideline ci sono?

• Nome di progetto Progetto.Test• Nome delle calssi ClasseTest• Nome del metodo da testare

Metodo_ Scenario _ RisultatoAtteso• I test sullo stesso metodo sono raggruppati in region

Page 18: Unit test

Settembre 2011Unit Test

18

Domain scenario

Uno scenario di test è un’istanza del dominio che rappresenta il maggior numero possibile degli stati (scenari) che le singole entità possono assumere.

QuandoIl dominio è complesso e le entità sono strettamente connesse.

Perché• Scrivere test più velocemente• Rendere i test più leggibili

ComeLo scenario ideale deve essere credibile, complesso, e facile da usare.

Page 19: Unit test

Settembre 2011Unit Test

19

Build

La build è l’indicatore di salute del progetto

L’esecuzione dei test viene automatizzata nell’ambiente di Build tramite un processo di Continus Integration.

Quando una build si rompe tutto il team deve concentrarsi sul risolvere il problema.

Risulta importante che siano state rispettate le caratteristiche di test:• Ripetibile• Automatico• Veloce

Page 20: Unit test

Settembre 2011Unit Test

20

Code coverage

Il code coverage è la misura che descrive la percentuale del codice sorgente che è stato testato in un programma.

É un indicatore e quindi va contestualizzato e interpretato ma fornisce una buona indicazione.

In MsTest vengono conteggiate le righe che vengono eseguite durante l’esecuzione dei test.

Page 21: Unit test

Code coverage

Possiamo vedere le linee non coperte dai test

Il code coverage viene analizzato durante l’esecuzione della build.

Settembre 2011Unit Test

21

Page 22: Unit test

Report di Qualità

Settembre 2011Unit Test

22

Page 23: Unit test

Settembre 2011Unit Test

23

Obbiettivi

In Pico nei prossimi giorni verrà inserito il documento con gli Obbiettivi di code coverage da raggiungere per ogni progetto.

Page 24: Unit test

Settembre 2011Unit Test

24

Fine

Work Item 39773

Firmate il foglio

Rispettate gli obbiettivi


Recommended