Una fugace occhiata al Test Driven Development



Documenti analoghi
Il Processo Software

Poca documentazione: uso di Story Card e CRC (Class Responsibility Collabor) Collaborazione con il cliente rispetto alla negoziazione dei contratti

Il Processo Software

Libero Emergency PC. Sommario

Registratori di Cassa

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

CMS ERMES INFORMATICA

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Specifiche dello sviluppo di un progetto software e indicazioni sulla documentazione e sulle modalità di esercizio delle prestazioni

Metodologie Agili per lo sviluppo di applicazioni Internet Distribuite. Agile Group DIEE, Università di Cagliari

Progetto: ARPA Fonte Dati. ARPA Fonte Dati. Regione Toscana. Manuale Amministratore

Database Manager Guida utente DMAN-IT-01/09/10

FH-SY capitolo Versione 3 - FH-SY.NET - FAQ -

Sviluppo Agile. Prof. Filippo Lanubile. Processo software

Guida alla registrazione on-line di un DataLogger

THAIREPORT. Cordialmente. Matelica, lì 19/12/2007. Halley Informatica Area Web

FPf per Windows 3.1. Guida all uso

Come usare P-touch Transfer Manager

E possibile modificare la lingua dei testi dell interfaccia utente, se in inglese o in italiano, dal menu [Tools

Strumenti di gestione del ciclo di vita del software

Approccio stratificato

StoneFax User Guide. (Settembre 2011 ver.1.1) StoneFax-User-Guide-ita-1.1.docx

MODULO 5 Appunti ACCESS - Basi di dati

DATA BASE ON LINE (BANCA DATI MODULI SPERIMENTALI)

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Alcuni consigli per un uso di base delle serie di dati automatiche in Microsoft Excel

Crotone, maggio Windows. Ing. Luigi Labonia

Sviluppo software guidato dal testing. metodologie e strumenti

per immagini guida avanzata Organizzazione e controllo dei dati Geometra Luigi Amato Guida Avanzata per immagini excel

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Manuale Utente Amministrazione Trasparente GA

Ingegneria del Software

APPALTIPA PRESENTAZIONE SOFTWARE

Progetto breve: Programmazione informatica

Gestione Turni. Introduzione

Olga Scotti. Basi di Informatica. File e cartelle

FITS UPLOAD. Software di upload automatico file di immagini astronomiche Versione 1.2

NOTE OPERATIVE. Prodotto Inaz Download Manager. Release 1.3.0

Funzioni in C. Violetta Lonati

Il web server Apache Lezione n. 3. Introduzione

Il presente supporto consente la gestione delle gare Giovanili. Premere il pulsante Immissione Dati Gara

ICARO Terminal Server per Aprile

L o. Walter Ambu japs: una soluzione agile (

Guida all uso di Java Diagrammi ER

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

Presentation. Scopi del modulo

Personalizza. Page 1 of 33

GESGOLF SMS ONLINE. Manuale per l utente

Aprire, preparare un documento da utilizzare come documento principale per una stampa unione.

Modulo 6 Strumenti di presentazione

ALLEGATO 14 PROBLEMATICHE APPLICATIVE PASSERELLA ESPORTAZIONE DATI E CAPRES

Manuale utente Volta Control

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

Ciclo di vita del software: strumenti e procedure per migliorarne la sicurezza. Roberto Ugolini roberto.ugolini@postecom.it

Tutorial 3DRoom. 3DRoom

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL

Laboratorio base di: 19/11/2013. Francesca Biancani. Ravenna, 10 dicembre Come si accede a Statistics explorer

Gestione delle informazioni necessarie all attività di validazione degli studi di settore. Trasmissione degli esempi da valutare.

Obiettivo Principale: Aiutare gli studenti a capire cos è la programmazione

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

Archimede ver GUIDA FUNZIONALE ARCHIMEDE VER

Gestione dei file e delle cartelle

Esercitazione n. 10: HTML e primo sito web

Costruzione del layout in gino cms

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

La VPN con il FRITZ!Box Parte I. La VPN con il FRITZ!Box Parte I

SDLXLIFF in Word. Revisionare file SDLXLIFF in MS Word. Guida

BMSO1001. Virtual Configurator. Istruzioni d uso 02/10-01 PC

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

Gestione del workflow

GestVetrine 1.1 versione novembre 2014

Database. Si ringrazia Marco Bertini per le slides

BASI DI DATI per la gestione dell informazione. Angelo Chianese Vincenzo Moscato Antonio Picariello Lucio Sansone

ACCESSO AL SISTEMA HELIOS...

Dexma Newsletter System

STRUMENTI DI PRESENTAZIONE MODULO 6

Scrum. Caratteristiche, Punti di forza, Limiti. versione del tutorial: Pag. 1

SOMMARIO... 3 INTRODUZIONE...

Antivirus. Lezione 07. A cosa serve un antivirus

2.0 Gli archivi. 2.1 Inserire gli archivi. 2.2 Archivio Clienti, Fornitori, Materiali, Noleggi ed Altri Costi. Impresa Edile Guida all uso

Test e collaudo del software Continuous Integration and Testing

MANUALE UTENTE. TeamPortal Liste Distribuzioni

Esempio di utilizzo di Excel per la gestione delle liste - Predisposizione ed allineamento -

Modulo 3 - Elaborazione Testi 3.5 Stampa unione

Sistema Informativo Gestione Fidelizzazione Clienti MANUALE D USO

Trip è un motore di ricerca progettato per consentire agli utenti di trovare rapidamente e facilmente documentazione EBM. Online dal 1997, è stato

CP Customer Portal. Sistema di gestione ticket unificato

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

UTILIZZO DEL MODULO DATA ENTRY PER L IMPORTAZIONE DEI DOCUMENTI (CICLO PASSIVO)

WEBGIS 1.0. Guida per l utente

intranet.ruparpiemonte.it

Progettaz. e sviluppo Data Base

GESTIONE INCASSI SAGRA. Ver. 2.21

Transcript:

Una fugace occhiata al Test Driven Development Roberto Bettazzoni roberto@bettazzoni.it http://creativecommons.org/licenses/by-sa/3.0/ 1

Cosa è il TDD? 2

Cosa è il TDD? Una pratica agile. 3

Pratiche agili... cosa sono? Pratiche agili... cosa sono? Sono le pratiche utilizzate nelle metodologie agili. 4

Metodologie agili... cosa sono? Metodologie agili... cosa sono? Sono le metodologie basate sui valori dell'agile Manifesto 5

Il Manifesto dell'alleanza Agile Stiamo portando alla luce metodi migliori di sviluppare software facendolo in prima persona e aiutando altri a farlo. Attraverso questo tipo di lavoro siamo giunti ai seguenti valori: Persone e interazioni più che processi e tools Software che funziona più che una documentazione esaustiva Collaborazione con il cliente più che negoziazione contrattuale Rispondere al cambiamento più che seguire un piano prestabilito Cioè, mentre c'è un valore nelle voci sulla destra, attribuiamo un valore maggiore a quelle sulla sinistra. Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland, Dave Thomas. 2001, gli autori sopra citati. Questa dichiarazione può essere copiata in ogni forma, ma solo nella sua interezza, compresa la presente nota. 6

Metodologie e pratiche Pratica Modalità per il conseguimento di uno scopo. Spesso è formulata in sequenze di passi. Es: TDD Metodologia Insieme di pratiche legate tra loro da una visione filosofica d'insieme. Es: Scrum Queste definizioni, nella loro accezione generica, sono fonte di numerose discussioni. Devono essere considerate come semplificazione per i nostri scopi. 7

Metodologie Agili Rispondere al cambiamento più che seguire un piano prestabilito Cambia il metodo di approccio al problema. 8

Metodologie Agili Le metodologie 'storiche' hanno un approccio PREDITTIVO (elaborare un piano e seguirlo) Le metodologie agili hanno un approccio ADATTATIVO (rispondere al cambiamento) 9

Basi del TDD Un linguaggio di programmazione Un sistema di Test (unit test) Il Refactoring 10

Refactoring Processo di modifica evolutiva di un sistema software in modo da non modificarne il comportamento esterno migliorandone la sua struttura 11

Refactoring modifica il codice in piccoli passi migliora continuamente il design il codice diventa «parlante» richiede disciplina la pratica rende perfetti richiede un buon «fiuto» 12

Refactoring Alcune «puzze» comuni 1. codice duplicato 2. metodi/classi lunghe 3. lunghe liste di parametri 4. cambiamenti divergenti 5. shotgun surgery 6. codice «invidioso» 7. liste di switch/if 8. generalizzazione speculativa: «astronauti» 9. commenti!...ed alcune soluzioni 1. estrai la parte duplicata 2. separa le competenze 3. introduci/estrai oggetti 4. separa le competenze 5. riunire la responsabilità 6. muovi/estrai metodo 7. polimorfismo 8. canc, canc, canc, canc, canc, canc, canc, canc 9. nascosto dal deodorante! 13

Test Driven Development (TDD) Nei processi di sviluppo software tradizionali il collaudo si fa alla fine... Nella realtà il collaudo non viene mai fatto :( Perchè? + stress => - test - test => + stress 14

Test Driven Development (TDD) In TDD i test guidano lo sviluppo! Implementa Rifattorizza il codice Scrivi i test per una nuova funzionalità Commit 15

Test Driven Development (TDD) Per un buon TDD: Pensa ai test prima di pensare l'implementazione Una «barra rossa» è meglio di uno schermo bianco I test devono essere semplici e leggibili I test devono essere isolati I test devono essere veloci e lanciati spesso Verifica prima il risultato atteso, verifica i casi limite, verifica le eccezioni Rifattorizza sia l'implementazione che i test 16

Test Driven Development (TDD) TDD significa anche «Test Driven Design» Permette di definire l'interfaccia degli oggetti prima di buttarsi sull'implementazione Permette di concentrarsi sul comportamento dell'oggetto Permette di rifattorizzare il codice con maggiore confidenza Porta alla realizzazione di architetture con basso accoppiamento 17

Test Driven Development (TDD) Con TDD posso anche... Documentare l'utilizzo dei miei componenti attraverso i test Evitare la regressione dei bug Isolare codice legacy Dormire un po' più tranquillo la sera dopo il rilascio 18

Test Driven Development (TDD) TDD non è Unit Testing...ma sono ottimi amici :) Come testare le interfacce utente? Utilizzando tool ad-hoc Rimuovendo la logica dalle interfacce Come testare liberandosi da risorse esterne? Mock TDD può creare dipendenza! :) 19

Test Driven Development (TDD) Strumenti: *Unit: JUnit, PyUnit, NUnit, CPPUnit, PHPUnit,... DBUnit, SQLUnit, PL/SQL Unit,... EasyMock, Moquer, MockEJB,... Selenium, HttpUnit, Jmeter,... Fit, Fitnesse,......forse pure troppi 20

Test Driven Development (TDD) DOMANDE? 21

Esempi di TDD (Test Driven Development) Roberto Bettazzoni roberto@bettazzoni.it http://creativecommons.org/licenses/by-sa/3.0/ 22

Primo Esempio di TDD Prima User Story. Una funzione XML-RPC che, dato il nome di un file presente sul server, ne ritorni il contenuto

Primo Esempio di TDD #!/usr/bin/env python Acceptance test. from xmlrpclib import ServerProxy srv = ServerProxy('http://localhost:8000') f = open( file, "rt") try: assert srv.load( file ) == f.read() finally: f.close()

test.py import unittest, os from load import * class Test(unittest.TestCase): def test_load_file_not_exists(self): assert load("") == "" try: os.remove("donotexist") except OSError: pass assert load("donotexist") == "" def test_load_an_existing_file(self): text = "I'm a lumberjack and I'm okay" fname = "TEST.tmp" f = open(fname, "wt") f.write(text) f.close() assert load(fname) == text os.remove(fname) if name == ' main ': unittest.main()

def load(name): try: f = open(name, "rt") try: return f.read() finally: f.close() except IOError: return "" load.py

import unittest, os, pyprocess, xmlrpclib from load import * def createfile(fname, text): f = open(fname, "wt") f.write(text) f.close() test.py class Test(unittest.TestCase): def test_load_file_not_exists(self):... def test_load_an_existing_file(self):... class TestServer(unittest.TestCase): def test(self): proc = pyprocess.pyprocess("load.py") proc.start() createfile("other", "text") try: rpc = xmlrpclib.serverproxy('http://localhost:8000') assert rpc.load("other") == "text" finally: proc.kill() os.remove("other")

load.py import os, SimpleXMLRPCServer def load(name): try: f = open(name, "rt") try: return f.read() finally: f.close() except IOError: return "" if name == ' main ': srv = SimpleXMLRPCServer.SimpleXMLRPCServer(("",8000)) srv.register_function(load) srv.serve_forever()

Primo Esempio di TDD Eseguendo il file load.py il test di accettazione gira senza errori. End of Job (?)