Tecnologia e Applicazioni Internet 2009/10

Documenti analoghi
Tecnologia e Applicazioni Internet 2008/9

Solutions in motion.

Decomponibilità dei sistemi software

Sviluppo software guidato dal testing. metodologie e strumenti

Programmazione in Java e gestione della grafica (I modulo) Lezione 1: Presentazione corso

Introduzione al TDD. Test Driven Development: Quando, Come, Perchè Facoltà di Ingegneria Pavia 27 Novembre Marco Fracassi Roberto Grandi

Stored Procedures. Massimo Mecella Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti Sapienza Università di Roma

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

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

U Corso di italiano, Lezione Quindici

GESTIONE INFORMATICA DEI DATI AZIENDALI

Manutenzione del software

U Corso di italiano, Lezione Dieci

Corso Eclipse. Prerequisiti. 3 Window Builder

Corrado Aaron Visaggio Research Centre on Software Technology - RCOST University of Sannio Benevento, Italy

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Introduzione alla programmazione Java. Dott. Ing. M. Banci, PhD

U Corso di italiano, Lezione Dodici

Tale attività non è descritta in questa dispensa

Problem Management. Obiettivi. Definizioni. Responsabilità. Attività. Input

4.1 Che cos è l ideazione

Ingegneria del Software. Introduzione ai pattern

API e socket per lo sviluppo di applicazioni Web Based

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Realizzazione di una classe con un associazione

sito web sito Internet

Java. Traditional portability (ideal)

U Corso di italiano, Lezione Tre

Modellazione del flusso di attività a partire da testo in linguaggio naturale: il caso di una compagnia di assicurazioni

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Le cellule staminali dell embrione: cosa possono fare Embryonic stem cells are exciting because they can make all the different types of cell in the

CREARE UNA LIBRERIA IN C

CONFIGURATION MANUAL

Eclipse. Avviare un progetto e compilare un semplice programma

U Corso di italiano, Lezione Otto

Laboratorio di Amministrazione di Sistema (CT0157) parte A : domande a risposta multipla

Laboratorio di Algoritmi e Strutture Dati

3. La sintassi di Java

U Corso di italiano, Lezione Sedici

Finite Model Theory / Descriptive Complexity: bin

PHPUnit Ricettario Del Programmatore Scontroso

Laboratorio di Informatica Lezione 2

ESPERIMENTO SULLA PROPORZIONALITA DIRETTA

L o. Walter Ambu japs: una soluzione agile (

Strumenti per la programmazione

Francesco Castagna. Roberto Cerchione. Università degli Studi di Napoli Federico II. Università degli Studi di Napoli Federico II

Informa(ca Appun% dal laboratorio 2

DESIGN PATTERNS Parte 6. State Proxy

Implementing a new ADT based on the HL7 version 3 RIM. Esempio

2. Simulazione discreta: approcci alla simulazione

IL CASO DELL AZIENDA. Perché SAP.

Test di unità con JUnit4

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Pianificazione e progettazione

Mod. EASYCUP EASYCUP WITH LED PANEL: MINIMUM THICK!!!

regola(1,[e,f],b) regola(2,[m,f],e) regola(3,[m],f) regola(4,[b,f],g) regola(5,[b,g],c) regola(6,[g,q],a)

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Algoritmi su array / 2

Struttura di un programma Java

U Corso di italiano, Lezione Diciassette

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Test e collaudo del software Continuous Integration and Testing

Programmazione Orientata agli Oggetti in Linguaggio Java

Architetture Applicative

XML e PHP. Gestire XML con PHP. Appendice

Abstract Data Type (ADT)

Architetture Web: un ripasso

1. Soluzione esercizio XYZ SpA

Il problema. ! Si chiede di sviluppare un applicazione per la

Procedure memorizzate SQL-2003/PSM. Forma base di PSM. Parametri in PSM

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Corso di Fondamenti di Informatica Algoritmi su array / 2

Università degli Studi "Roma Tre" Dipartimento di Informatica ed automazione. Facoltà di Ingegneria

SUDOKU MATCH (beta) Gianpaolo Francesco Trotta

introduzione al corso di ingegneria del software

Capitolo 7. Esercizio 7.1

U Corso di italiano, Lezione Uno

Project Cycle Management

U Corso di italiano, Lezione Sette

Ambienti di Sviluppo

CONCETTO DI ANNIDAMENTO

Tecnologia e Applicazioni Internet 2011/12

TNCguide OEM Informativa sull introduzione di documentazione aggiuntiva nella TNCguide

Dipartimento di Sistemi e Informatica Università degli Studi di Firenze. Dev-C++ Ing. Michele Banci 27/03/2007 1

Fabio Baione. Roma, 28 novembre 2012

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

the creative point of view

Il Piano di Marketing.

U Corso di italiano, Lezione Due

Java: Compilatore e Interprete

La portata del software

THINKING DIGITAL SYNCHRONIZING WITH THE FUTURE PENSIERO DIGITALE: SINCRONIZZARSI COL FUTURO

Real Time Control (RTC): modalità di invio dei dati

Università degli Studi di Roma La Sapienza, Facoltà di Ingegneria. Corso di INGEGNERIA DEL SOFTWARE (Ing. Informatica, Nuovo Ordinamento)

Introduzione all ambiente di sviluppo

Ricorsione. (da lucidi di Marco Benedetti)

Introduzione. Corso di Informatica Applicata. Università degli studi di Cassino

Progetto di Informatica III. Introduzione al corso

Transcript:

Tecnologia e Applicazioni Internet 2009/10 Lezione 0 - Test-Driven Development Matteo Vaccari http://matteo.vaccari.name/ vaccari@pobox.com

Argomenti del corso Progettazione applicativa moderna Test unitario e funzionale di applicazioni web Applicazioni web basate su database Java Servlet API JavaScript Ajax Architetture REST

Obiettivo del corso Diventare programmatori più efficaci Software come Lego Object-oriented programming

Che cos è la programmazione a oggetti?

Application Design

What is design? Source code Architec ture detailed abstract Il design del software è un continuo, che va dai modelli architetturali astratti fatti di diagrammi e descrizioni a parole, via via fino al design più dettagliato, che è rappresentato dal codice sorgente. Il codice sorgente è il design più preciso.

Una metafora sbagliata La produzione di software non assomiglia alla manifattura. In particolare è perniciosa l idea che i programmatori siano operai poco educati che eseguono i progetti prodotti da architetti più capaci. Nella produzione di software i programmatori sono progettisti a tutti gli effetti. Gli unici operai nel mondo del software sono i compilatori, che producono il codice eseguibile dai sorgenti.

SW Development!= Manufacturing The most accurate design model of software is the code

Modular programming Decompose the system in modules: yes but how?...it is almost always incorrect to begin the decomposition of a system into modules on the basis of a flowchart. We propose instead that one begins with a list of difficult design decisions or design decisions which are likely to change. Each module is then designed to hide such a decision from the others. -- David Parnas, 1972

Perché imparare a fare design? Le tecniche di programmazione istintiva (cut&paste, code&fix, ecc...) danno all'inizio del progetto una falsa sensazione di velocità. Perché falsa? Perché: 1. La velocità è destinata a diminuire progressivamente. Queste tecniche sono degenerative, raggiungono velocemente degli obiettivi (implementazione di funzionalità) nel breve periodo, ma degradano la qualità della base di codice, il che comporta un rallentamento durante l'implementazione della funzionalità successiva, ecc... fino al raggiungimento del collasso del codice (ovvero il momento in cui i programmatori o scappano, o si impuntano per una riscrittura dell'intero progetto)... Gabriele Lana, http://milano-xpug.pbwiki.com/velocita

Perché imparare a fare design?... 2. La velocità iniziale non può essere aumentata. Le tecniche di cui sopra non sono fisicamente migliorabili attraverso l'esperienza, la pratica o l'impegno (forse solo leggermente). L'unico modo di aumentare la velocità è di aumentare il numero delle persone coinvolte nella scrittura del progetto; peccato che questo aumenti anche la velocità di degradazione del codice, che porta al peggioramento della situazione in breve tempo. Gabriele Lana, http://milano-xpug.pbwiki.com/velocita

Perché imparare a fare design? The fantasy of cutting quality to deliver faster lives on in part because we do not measure that long period at the end where we are taking out the critical bugs that we put in. We assume, wrongly, that that period is necessary, part of the universe.... Low quality has an immediate and visible negative impact on delivering fast enough. That negative impact is the stabilization period. That is lost time due directly to low quality.... To a first approximation, then, looking at a random project, if we want to speed up, we must increase quality. Ron Jeffries, http://is.gd/kzcp

What is a good design? Simple No duplication Testable Expressive Easy to change Modular

Why testable? Test-driven-development is a design technique Automated tests enable refactoring

Come funziona JUnit?

Il pattern AAA Arrange creo una collezione di oggetti Act: eseguo un operazione sull oggetto da testare Assert: asserisco che sia successo quello che mi aspettavo

Test-Driven Development

Write a test public class AdderTest { @Test public void testtwoplusthree() { Adder a = new Adder(); assertequals(5, a.add(2, 3)); } } m.vaccari@sourcesense.com

Now it compiles public class AdderTest { @Test public void testtwoplusthree() { Adder a = new Adder(); assertequals(5, a.add(2, 3)); } } public class Adder { public int add(int a, int b) { return 0; } } m.vaccari@sourcesense.com

Red bar! public class AdderTest { @Test public void testtwoplusthree() { Adder a = new Adder(); assertequals(5, a.add(2, 3)); } } public class Adder { public int add(int a, int b) { return 0; } } Expected 5, was 0 m.vaccari@sourcesense.com

Do the simplest thing public class AdderTest { @Test public void testtwoplusthree() { Adder a = new Adder(); assertequals(5, a.add(2, 3)); } } public class Adder { public int add(int a, int b) { return 5; } } m.vaccari@sourcesense.com

Refactor public class AdderTest { @Test public void testtwoplusthree() { Adder a = new Adder(); assertequals(5, a.add(2, 3)); } } public class Adder { public int add(int a, int b) { return a+b; } } m.vaccari@sourcesense.com

The procedure 1. Write a test 2. Make it compile 3. Make it pass Expected 5, was 0 4. Refactor m.vaccari@sourcesense.com

Red Refactor Green Repeat every 2-10 min. m.vaccari@sourcesense.com

Esercizio

Esercizio: il programma paste filea fileb standard output prova uno due tre alfa beta + gamma delta provaalfa unobeta duegamma tredelta paste -- merge corresponding lines of files $ paste filea fileb > filec $ java -jar paste.jar filea fileb > filec

Nuovi requisiti! uno due tre alfa xxx + beta + yyy gamma zzz uno, alfa, xxx due, beta, yyy tre, gamma, zzz numero arbitrario di file in ingresso output separato da virgole La soluzione veloce può avere risolto il problema originariamente. Ma quando dobbiamo, tempo dopo, risolvere un problema simile ma più complesso, adattare il vecchio software può risultare difficile.

Risolvere l esercizio con Test-Driven Development. Cerca di mantenere il codice il più semplice, disaccoppiato e testabile possibile.