Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A.

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A."

Transcript

1 Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Ingegneria del software A Testing Michele Tomaiuolo

2 Qualità interne ed esterne Le qualità su cui si basa la valutazione di un sistema software possono essere: Interne, riguardano le caratteristiche legate allo sviluppo del software e non sono visibili agli utenti Esterne, riguardano le funzionalità fornite dal sistema e sono visibili agli utenti Le categorie sono legate, non è possibile ottenere qualità esterne se il sistema non gode di qualità interne 2

3 Qualità del prodotto e del processo È anche possibile valutare un sistema secondo qualità Relative al prodotto, riguardano le caratteristiche stesse del sistema e sono sempre valutabili Relative al processo, riguardano i metodi utilizzati durante lo sviluppo del software Le categorie sono legate, non è possibile ottenere qualità del prodotto se il sistema non gode di qualità del processo Product quality is process quality 3

4 Qualità esterne Correttezza: il sistema rispetta le specifiche Affidabilità (dependability): l utente può dipendere dal sistema Robustezza: il sistema si comporta in modo ragionevole anche in circostanze non previste dalle specifiche Efficienza: usa bene le risorse di calcolo Scalabilità: migliori prestazioni con più risorse Sicurezza: authentication, authorization, accounting Facilità d uso: un sistema è facile da usare se l interfaccia che presenta all utente gli permette di esprimersi in modo naturale 4

5 Valutazione delle qualità Valutazione sulla base delle specifiche Correttezza e affidabilità Robustezza: riguarda tutti i casi non trattati dalle specifiche Valutazione dei committenti Correttezza e facilità d uso Valutazione degli sviluppatori Robustezza ed efficienza 5

6 Qualità interne Verificabilità: sistema basato su modello formale Riusabilità: parti usabili per costruire nuovi sistemi Manutenibilità Riparabilità: facilitata la ricerca degli errori Evolvibilità: aggiungere nuove funzionalità al sistema Adattabilità: rispetto a cambiamenti del dominio applicativo Interoperabilità: capacità di co-operare con altri sistemi, anche di altri produttori Portabilità: può funzionare su più piattaforme hw/sw Comprensibilità: codice leggibile, documentazione Modularità: interazione tra componenti coesi 6

7 Qualità del processo Produttività, misura l efficienza del processo nei termini della velocità di consegna del sistema Tempestività, misura la capacità del processo di valutare e rispettare i tempi di consegna del sistema Trasparenza, un processo di produzione è trasparente se permette di capire il suo stato e di controllarne i passi Agilità, misura la capacità del processo di consentire la produzione in tempi ridotti (ridotto time-to-market) 7

8 Costi del software I costi del software sono spesso predominanti nei costi di un sistema Il costo del software in un PC spesso è maggiore di quello dell intero hardware Il costo del software è principalmente nel mantenimento piuttosto che nello sviluppo Uno degli obiettivi principali dell ingegneria del software è ottenere un sviluppo cost-effective prevenendo per quanto possibile i costi di manutenzione 8

9 Costo diretti Costo delle risorse per lo sviluppo (costi diretti) Costo del personale sviluppatore, spesso predominante sugli altri Costo del personale di supporto Costo delle risorse di sviluppo Materiali di consumo Altri costi generali della struttura 9

10 Costi indiretti Altri costi, più aleatori (costi indiretti) Capacità, motivazione e coordinamento del personale Complessità del sistema da realizzare Stabilità dei requisiti Caratteristiche dell ambiente di sviluppo Costo di manutenzione ed evoluzione 10

11 Evoluzione di un sistema software Il software deve evolvere perché: Non sono stati colti correttamente i requisiti I requisiti non sono inizialmente noti Cambiano le condizioni operative L evoluzione è ineliminabile per gran parte delle tipologie di sistemi, anche se i requisiti iniziali sono corretti e completi 11

12 Manutenzione Manutenzione è il processo di modifica di un sistema dopo il suo rilascio al fine di Eliminare anomalie (manutenzione correttiva) Migliorare le prestazioni o altri attributi di qualità (manutenzione perfettiva) Adattare a mutamenti dell ambiente (manutenzione adattativa) Costi della manutenzione: Spesso maggiori del 50% del costo totale del software 75% (fonte Hewlett-Packard) 70% (fonte Dipartimento della Difesa degli Stati Uniti) Manutenzione correttiva: 20% Manutenzione perfettiva: 60% Manutenzione adattativa: 20% 12

13 Dati sulla manutenzione Esperienza di Hewlett-Packard La maggior parte degli errori potrebbe essere scoperta mediante tecniche sistematiche di revisione di progetto I moduli con maggior complessità del flusso di controllo hanno maggiore probabilità di contenere errori Alcuni dati Su 10 difetti scoperti durante il test, 1 si propaga nella manutenzione Eliminare i difetti costa, in tempo, 4-10 volte per sistemi grossi e maturi rispetto a piccoli e ancora in sviluppo Il costo di rimozione degli errori aumenta con il ritardo rispetto al quale gli errori sono introdotti 13

14 Problemi più attuali Gestire sistemi vecchi ma non sostituibili (legacy system) Necessità di manutenzione adattativa Problemi dovuti alla tecnologia obsoleta Gestire l eterogeneità dei sistemi I sistemi sono sempre distribuiti e sono composti da una grande varietà di sistemi hardware e software Riduzione dei tempi di consegna C è una sempre maggiore pressione per ottenere tempi di consegna brevi 14

15 Verifica e validazione La verifica e la validazione servono per mostrare che il sistema È conforme alle specifiche Incontra i requisiti dell utente Comprende revisione e testing del sistema Il testing di un sistema richiede di eseguire il sistema su casi di test (test case) derivati dalle specifiche 15

16 Testing Le operazioni di testing possono individuare la presenza di errori nel software ma non ne possono dimostrare la correttezza -- E. Dijkstra A cosa serve il testing Verificare il comportamento del sistema in un insieme di casi sufficientemente ampio da rendere plausibile che il suo comportamento sia analogo anche nelle restanti situazioni Le operazioni di testing si suddividono in: Testing in the small, riguardano moduli singoli Testing in the large, riguardano il sistema nella sua globalità 16

17 Processo di Testing Unit testing Module testing Sub-system testing System testing Acceptance testing Component testing Integration testing User testing 17

18 Fasi di Testing (1/2) Unit testing Ogni singolo componente Module testing Ogni modulo, insieme di componenti interdipendenti Sub-system testing Integrazione tra moduli in sotto-sistemi per individuare problemi nelle interfacce tra i moduli System testing Sistema nel suo complesso, eventuali proprietà emergenti del sistema Acceptance testing Con i committenti per verificare l accettabilità del sistema 18

19 Fasi di Testing (2/2) Requir ements specification System specification System design Detailed design Acceptance test plan System integration test plan Sub-system integration test plan Module and unit code and tess Service Acceptance test System integration test Sub-system integration test 19

20 Statement test Valuta il corretto funzionamento di una porzione del codice Analizzando il suo output in relazione ad input significativi Verifica di copertura dei programmi (statement test) Un errore non può essere scoperto se la parte di codice che lo contiene non viene eseguita almeno una volta Criterio: selezionare un insieme di test T tali che, a seguito dell esecuzione del programma P su tutti i casi di T, ogni istruzione elementare di P venga eseguita almeno una volta Può essere eseguito solo conoscendo la struttura interna della porzione di codice (white-box testing) 20

21 Branch test Verifica di copertura delle decisioni (branch test) Per ogni condizione presente nel codice è utilizzato un test che produca risultato vero e falso Criterio: selezionare un insieme di test T tali che, a seguito dell esecuzione del programma P su tutti i casi di T, ogni arco del grafo di controllo di P sia attraversato almeno una volta Può essere eseguito solo conoscendo la struttura interna della porzione di codice 21

22 Branch and condition test Verifica di copertura delle decisioni e delle condizioni Per ogni porzione di condizione composta presente nel codice, sia utilizzato un test che produca il risultato vero e falso Criterio: selezionare un insieme di test T tali che, a seguito dell esecuzione del programma P su tutti i casi di T, ogni arco del grafo di controllo di P sia attraversato e tutti i possibili valori delle condizioni composte siano valutati almeno una volta Produce un analisi più approfondita rispetto al criterio di copertura delle decisioni Può essere eseguito solo conoscendo la struttura interna della porzione di codice 22

23 Testing in the large Il white-box testing è impossibile per sistemi di grandi dimensioni Il sistema è visto come una scatola nera (black-box testing) e si vanno a verificare le corrispondenze di input e output L insieme di test da utilizzare viene selezionato sulla base delle specifiche 23

24 Esempio: fatture Problema: il sistema riceve come input una fattura di cui è nota la struttura dettagliata La fattura deve essere inserita in un archivio ordinato per data Se esistono altre fatture con la stessa data fa fede l ordine di arrivo È inoltre necessario verificare che: Il cliente sia già stato inserito in archivio e Vi sia corrispondenza tra la data di inserimento del cliente e quella della fattura, Test set: 1. Fattura con data odierna 2. Fattura con data passata e per la quale esistono altre fatture 3. Fattura con data passata e per la quale non esistono altre fatture 4. Fattura il cui cliente non è stato inserito 5. 24

25 Ispezione del software Analisi del codice per capirne le caratteristiche e le funzionalità Può essere effettuata sul codice oppure sullo pseudocodice Permette la verifica unitaria di un insieme di condizioni È soggetta agli errori di colui che la effettua Si basa su un modello della realtà e non su dati reali I due principali approcci Code walk-through Code inspection 25

26 Code walk-through Analisi informale eseguita da un team di persone 1. Opportuna selezione di porzioni del codice e valori di input 2. Simulazione su carta del comportamento del sistema Il numero di persone coinvolte deve essere ridotto Al fine di aumentare il clima di cooperazione all analisi non devono partecipare i manager Il progettista deve fornire in anticipo documentazione del codice L analisi non deve durare più di alcune ore L analisi deve essere indirizzata solamente alla ricerca dei problemi e non alla loro soluzione 26

27 Code inspection Analisi eseguita da un team di persone e organizzata come nel caso del code walk-through Mira a ricercare classi specifiche di errori Il codice viene esaminato controllando soltanto la presenza di una particolare categoria di errore, piuttosto che simulando una generica esecuzione Le classi di errori che vengono solitamente ricercate con questa tecnica sono Uso di variabili non inizializzate Loop infiniti Letture di porzioni di memoria non allocata Rilascio improprio della memoria 27

28 Program testing Program testing is the process of executing a program with the intent of finding errors -- Glen Myers, The art of Software Testing Buon test: buone probabilità di trovare errori Non può dimostrare l assenza di errori Può solo mostrare la presenza di errori Ad alto consumo di risorse e tempo Non è insolito dedicare al testing il 40% degli sforzi complessivi di un progetto 28

29 Classificazione dei test Tipi di test White box Black box test Livelli di test Unit test Integration test System test Ripetizione di test Regression test 29

30 Testabilità Qualità del software che influiscono sulla capacità di rilevare errori Osservabilità Risultato di un test raggiungibile e visibile Controllabilità Ingressi e stato di un programma devono essere controllabili prima di eseguire un test Decomponibilità Il programma deve essere diviso in parti che possano essere testate individualmente Comprensibilità L intenzione del programmatore, sul comportamento corretto del programma, deve essere disponibile per il tester Progettazione per testabilità 30

31 Test utopia In un mondo ideale, tutti i possibili percorsi di esecuzione di un programma dovrebbero essere testati Test totale di un programma: esecuzione di tutte le possibili combinazioni di comandi ed espressioni relative alle strutture di controllo Anche in piccoli programmi, il numero di percorsi in un test totale è molto ampio In molti programmi, non è noto il limite di percorsi di un test totale Nel mondo reale, bisogna selezionare il sottinsieme di percorsi del test totale con maggiore probabilità di rilevare errori nel programma 31

32 Prove matematiche Una dimostrazione matematica di un programma è una alternativa (principalmente accademica) al testing Le post condizioni devono essere verificate dato che Le precondizioni siano verificate Il programma termina Si basa su Annotazione del programma con asserzioni matematiche che riflettono il comportamento attesi dal programma Proprietà che valgono per i vari costrutti del programma Le dimostrazioni eseguite a mano avranno probabilmente più errori che il programma stesso Maggiore fiducia solo da dimostrazioni automatiche 32

33 Testing white box Usa le strutture di controllo di un programma per derivare i test case Scopo: garantire che tutti i comandi e le espressioni di un programma siano eseguiti almeno una volta Desiderata Tutti i percorsi indipendenti di una unità del programma siano eseguiti almeno una volta Tutte le derivazioni logiche siano esercitate Tutti i cicli e le strutture dati siano esercitati ai loro limiti 33

34 Basic path testing Tecnica di testing white box, che aiuta a scegliere un insieme minimo di percorsi in un programma che coprono tutte le istruzioni e condizioni Un percorso in una unità di programma è una sequenza di comandi e condizioni, dall inizio alla fine Cammino indipendente: aggiunge almeno una nuova istruzione o condizione rispetto ai cammini indipendenti già identificati Approccio complessivo 1. Tracciare un diagramma di flusso della unità 2. Astrarre il diagramma in un grafo 3. Trovare la complessità ciclomatica (diciamo n) metrica di test 4. Trovare n casi di test che seguono ciascun cammino indipendente 34

35 Complessità ciclomatica public static void P(){ // Entry while(a) { X; if (B) { if(c) Y; else Z; // p else { V; W; // q // Exit: r 35

36 Diagramma di flusso 36

37 Grafo di flusso Piccola astrazione rispetto ad un diagramma di flusso A, r A, X, B, C, Y, p, q, A, r A, X, B, C, Z, p, q, A, r A, X, B, V, W, q, A, r 37

38 Grafo di flusso 38

39 Metrica e casi di test Calcolare la metrica e trovare i casi di test sulla base della complessità Complassità ciclomatica: determinata sul grafo, usando semplici concetti della teoria dei grafi Numero di regioni del grafo di flusso, o Numero di nodi predicato + 1 Costruire un caso di test per ogni cammino indipendente Il caso di test dovrebbe seguire il controllo del percorso 39

40 Esempio: GCD int gcd(int i, int j) { int small, large, remainder; if (i <= j) small = i; else small = j; if (i <= j) large = j; else large = i; while (small > 0) { remainder = large % small; large = small; small = remainder; return large; void main() { int i, j; printf("enter two positive integers: "); scanf("%d %d", &i, &j); printf("gcd of %d and %d is %d\n\n", i, j, gcd(i,j)); 40

41 Complessità di GCD La complessità ciclomatica di GCD è 4 In generale, la complessità ciclomatica è un limite superiore per il numero di test case necessari Nella funzione GCD, è possibile coprire tutte le righe di codice con due test case Si noti che in gcd le condizioni delle due strutture di controllo sono accoppiate Cattiva programmazione! Potrebbe essere impossibile trovare dat che esercitino tutti I cammini indipendenti 41

42 Black box testing Usa l interfaccia di una unità di programma per costruire I test case Lo scopo è dimostrare che viene prodotta l uscita corretta per input validi in relazione ai requisiti funzionali Desiderata Trovare gli errori funzionali: otteniamo i risultati attesi per dati input di un metodo? Trovare errori di interfaccia: i dati sono passati correttamente tra i metodi? Trovare errori di efficienza: il metodo è abbastanza veloce? 42

43 Input per un test black box Non è realistico da un punto di vista combinatorio testare un programma su tutti i possibili ingressi Questione centrale: scelta valori d ingresso Partizionamento degli ingressi in classi di equivalenza Si ipotizza che sia sufficiente testare l unità di programma su un solo caso per classe Si includono i casi limite Tipo collezioni vuote o piene Si includono uno o più casi di input non valido Con controllo sui tipi e precondizioni lo spazio è limitato 43

44 Partizioni d equivalenza // Exchange element i and j in table public void swapelements(t[] table, int i, int j) {... Partizioni d equivalenza tutte le combinazioni di: Table Vuota, o non vuota i, j Almeno uno tra i e j fuori dai limiti Sia i che j dentro i limiti: i < j, i > j, i = j L uso di controllo dei tipi e controllo dei limiti riduce il numero di casi di test 44

45 Partizioni d equivalenza // Find the largest element in table in between from and to. // Precondition: 0 <= from <= to <= table.count-1 public int findmaxindex(t[] table, int from, int to) {... Precondizioni ben scelte riducono il numbero di test Partizioni d equivalenza tutte le combinazioni di: Table Vuota Elemento maggiore primo, ultimo o a metà in table Tutti elementi uguali from e to from e to ai limiti della tabella from = to, from = to - 1, oppure lontani tra loro 45

46 Regression testing Lo scopo del regression test è trovare errori di regressione Errori in un programma che prima era corretto, ed è stato modificato di recente Un errore di regressione è un errore che non c era Dopo la modifica di una perte P nel programma Q Testare che la parte P funzioni correttamente Testare che l intero programma Q non sia stato danneggiato dalla modifica 46

47 Annotazioni Forniscono dati su un programma Usi: Non sono parte delle istruzioni del programma stesso Informazioni per il compilatore - Per rilevare errori o sopprimere warning Elaborazione durante la compilazione o il deployment Gli strumenti software possono generare code, file XML ecc. Elaborazione durante l esecuzione Alcune annotazioni sono disponibili a runtime Le annotazioni possono essere applicate a classi, campi, metodi e altri elementi del programma 47

48 Sintassi All inizio di una riga, (per convenzione su una riga propria), può includere elementi con ) name = "Benjamin Franklin", date = "3/27/2003 class MyClass() = "unchecked") void mymethod() // name omitted, just one element named "value void mymethod() void mysupermethod() { 48

49 Documentazione // metadata in comments public class Generation3List extends Generation2List { // Author: John Doe // Date: 3/17/2002 // Current revision: 6 // Last modified: 4/12/2004 // By: Jane Doe // Reviewers: Alice, Bill, Cindy // class code goes here // metadata in ClassPreamble { String author(); String date(); int currentrevision() default 1; String lastmodified() default "N/A"; String lastmodifiedby() default "N/A"; String[] reviewers(); // Note use of array 49

50 Documentazione Dopo aver definito un tipo d annotazione, si può usare fornendo i valori // keep info for // add metadata to javadoc ( author = "John Doe", date = "3/17/2002", currentrevision = 6, lastmodified = "4/12/2004", lastmodifiedby = "Jane Doe reviewers = {"Alice", "Bob", "Cindy" // Note array notation ) public class Generation3List extends Generation2List { // class code goes here 50

51 Annotazioni per il compilatore Tre annotazioni predefinite nelle specifiche del Indica elementi non più in uso Il compoilatore genera un warning se un programma lo usa Viene documentato in Informa il compilatore che si sovrascrive un elemento della Il compilatore non genera warning deprecation: unchecked: uso di codice senza generics 51

52 Elaborazione delle annotazioni Possibile scrivere processori di annotazioni, per leggere un programma e agire a seconda delle annotazioni Generazione automatica di codice ripetitivo Occorre implementare AnnotationProcessor Java 5: apt (annotation processing tool) Java 6: funzionalità inclusa nel compilatorejavac 52

53 JUnit Caratteristiche principali Novità delle ultime versioni Test parametrici, di eccezione e temporizzati Fixture flessibili Raggruppamento ad esclusione di test Testing con Eclipse e Ant 53

54 Il vecchio JUnit Prima dell aggiunta delle annotazioni in Java 5, il framework JUnit (ver<4) aveva stabilito due convenzioni essenziali per il suo funzionamento 1. Ogni metodo scritto per funzionare come un test logico cominciava con la parola test Se un metodo cominciava così, es.testusercreate, veniva incluso nel processo di test (fixture eseguite prima e dopo) 2. Una classe veniva riconosciuta da JUnit come contenitore di test solo se estendevatestcase Un test che violava una delle due convenzioni, non veniva eseguito 54

55 Esempio JUnit (ver<4) import java.util.regex.matcher; import java.util.regex.pattern; import junit.framework.testcase; public class RegexTest extends TestCase { private String zipregex = "^\\d{5([\\-]\\d{4)?$"; public void testzipcode() throws Exception { Pattern pattern = Pattern.compile(zipRegEx); Matcher m = this.pattern.matcher("12345"); boolean isvalid = m.matches(); asserttrue("zip code wasn t validated", isvalid); 55

56 JUnit 4 JUnit 4 usa le annotazioni di Java 5 per eliminare completamente entrambe le convenzioni 1. La gerarchia di classi non è più richiesta 2. Ogni metodo che si vuole far fuzionare come test deve essere annotato come@test Static import Gli static import di Java 5 permettono di usare più facilmente i metodi della classe Assert, es. assertfalse I test non estendono piùtestcase, nè alcuna classe 56

57 Esempio JUnit 4 import java.util.regex.matcher; import java.util.regex.pattern; import org.junit.test; import static org.junit.assert.asserttrue; public class RegexTest { private String zipregex = public void verifygoodzipcode() throws Exception { Pattern pattern = Pattern.compile(zipRegEx); Matcher m = this.pattern.matcher("22101"); boolean isvalid = m.matches(); asserttrue("zip code wasn t validated", isvalid); 57

58 Vantaggio delle annotazioni Le annotazioni documentano chiaramente ciò che un metodo dovrebbe fare Non richiedono di conoscere il modello interno del framework e tutte le convenzioni In precedenza era richiesta familiarità con le convenzioni di JUnit anche solo per capire un test case Inoltre le annotazioni aggiungono altre potenzialità al processo di test 58

59 Test di eccezioni Come nelle vecchie versioni di JUnit, bisogna specificare che i test possono lanciareexception Funzionamento normale: se un test lancia una eccezione, il framework marca il test come fallito Caso particolare se si vuole testare il lancio di una certa eccezione Sull annotazione@test si può specificare il parametro expected Rappresenta il tipo di eccezione che dovrebbe venir lanciata L esempio seguente mostra il test delle eccezioni prima nella vecchia forma, e poi nella nuova, più chiara 59

60 Esempio con eccezioni (ver<4) import java.util.regex.matcher; import java.util.regex.pattern; import junit.framework.testcase; public class RegexTest extends TestCase { private String zipregex = "^\\d{5([\\-]\\d{4)?$"; private Pattern pattern; protected void setup() throws Exception { this.pattern = Pattern.compile(this.zipRegex); public void testzipcodegroupexception() throws Exception { Matcher m = this.pattern.matcher(" "); boolean isvalid = m.matches(); try { m.group(2); fail("no exception was thrown"); catch(indexoutofboundsexception e) { 60

61 Aggiornamento test di eccezioni Le vecchie versioni di JUnit richiedono un po di codice per creare un semplice test sulle eccezioni Aggiungere un blocco try/catch Invocare il fallimento del test se l eccezione non viene catturata Test di eccezioni in JUnit 4 Differenza principale: si usa il nuovo paramentoexpected È possibile aggiornare vecchi test aggiungendo l eccezione alla annotazione@test 61

62 Esempio con eccezioni import java.util.regex.matcher; import java.util.regex.pattern; import org.junit.beforeclass; import org.junit.test; public class RegexTest { private static String zipregex = "^\\d{5([\\-]\\d{4)?$"; private static Pattern public static void setupbeforeclass() throws Exception { pattern = public void verifyzipcodegroupexception() throws Exception { Matcher m = this.pattern.matcher(" "); boolean isvalid = m.matches(); m.group(2); 62

63 Test temporizzati In JUnit 4, un test può prendere un valore ditimeout come parametro Il valore ditimeout rappresenta il massimo intervallo di tempo che l esecuzione del test può impiegare Se il tempo scade, il test public void verifyfastzipcodematch() throws Exception { Pattern pattern = Pattern.compile("^\\d{5([\\-]\\d{4)?$"); Matcher m = pattern.matcher("12345"); boolean isvalid = m.matches(); asserttrue("pattern did not validate zip code", isvalid); 63

64 Test da ignorare Prima di JUnit 4, ignorare un test sbagliato o incompleto era possibile in maniera piuttosto rozza Alterare il nome del metodo in modo da infrangere la convenzione Spesso si aggiungeva un underscore prima del nome del metodo, per indicare che il test non era da eseguire JUnit 4 ha introdotto la chiara annotazione@ignore Indica al framework di ignorare un certo metodo di test Si può anche passare un messaggio per documentare la decisione agli altri sviluppatori, altrimenti ignari dei motivi dell esclusione 64

65 Esempio di test da regular expression isn't complete public void verifyzipcodematch() throws Exception { Pattern pattern = Pattern.compile("^\\d{5([\\-]\\d{4)"); Matcher m = pattern.matcher("12345"); boolean isvalid = m.matches(); asserttrue("pattern did not validate zip code", isvalid); 65

66 Perché usare le fixture Le fixture incoraggiano il riuso, definendo del codice che deve essere eseguito prima o dopo i test Nelle vecchie versioni di JUnit ciò era implicito, sia che le fixture fossero implementate o no JUnit 4 ha reso le fixture esplicite con le annotazioni Codice fixture eseguito solo se necessario Si può specificare che certe fixture siano eseguite prima o dopo di certi test, codice riusato 66

67 Esempi di fixture Esempi Inizializzare una classe che verrà testata in modi diversi Popolare un database prima di eseguire test dipendenti dai dati In ogni caso, l uso delle fixture permette di gestire meglio i test, sfruttando logica comune Le fixture tornano utili specialmente quando molti test usano in parte la stessa logica In caso di problemi, si può analizzare il codice di setup concentrato in un solo punto, anzichè scorrere tutti i test 67

68 Fixture inflessibili Le vecchie versioni di JUnit impiegavano un modello di fixture poco flessibile L esecuzione di ogni test veniva preceduta dal metodo setup e seguita dal metodoteardown Svantaggio: metodi eseguiti più volte, una per ogni test definito Nelle versioni precedenti di JUnit era possibile specificare di eseguire una fixture solo una volta Si istanziava un oggettotestsetup nel metodosuite Ma era una operazione abbastanza scomoda Maneggiare le fixture poteva portare più grattacapi che benefici 68

69 Esempio di fixture di test (ver<4) import... public class RegexTest extends TestCase { private Pattern pattern; protected void setup() throws Exception { this.pattern = Pattern.compile("^\\d{5([\\-]\\d{4)?$"); public void testzipcodegroup() throws Exception { Matcher m = this.pattern.matcher(" "); assertequals("group(1) didn't match", "-4321", m.group(1)); public void testzipcodegroupexception() throws Exception { Matcher m = this.pattern.matcher(" "); boolean isvalid = m.matches(); try{ m.group(2); fail("no exception was thrown"); catch(indexoutofboundsexception e) { 69

70 Esempio di fixture di classe (ver<4) import java.util.regex.*; import junit.extensions.testsetup; import junit.framework.test; import junit.framework.testcase; import junit.framework.testsuite; import junit.textui.testrunner; public class RegexTest extends TestCase { private static Pattern pattern; public static Test suite() { TestSetup setup = new TestSetup( new TestSuite(OneTimeRegexTest.class)) { protected void setup() throws Exception { pattern = Pattern.compile("^\\d{5([\\-]\\d{4)?$"); ; return setup;... 70

71 Esempio di fixture di classe (ver<4)... public void testzipcodegroup() throws Exception { Matcher m = pattern.matcher(" "); boolean isvalid = m.matches(); assertequals("group(1) didn't match", "-4321", m.group(1)); public void testzipcodegroupexception() throws Exception { Matcher m = pattern.matcher(" "); boolean isvalid = m.matches(); try { m.group(2); fail("no exception was thrown"); catch (IndexOutOfBoundsException e) { 71

72 Fixture in JUnit 4 Nuovo e migliorato modello di fixture in JUnit 4 JUnit 4 usa le annotazioni per eliminare molto overhead relativo alle fixture Permette di eseguire una fixture per ogni test, per una intera classe, o non eseguirla affatto 2 annotazioni per le fixture di livello classe A livello di classe ci sono@beforeclass e@afterclass Utili per ottimizzazione (es. collegamento a DB) 2 annotazioni per le fixture di livello metodo (test) A livello di metodo (o test) ci sono@before e@after Possibile specificare dei test con una 72

73 Fixture di test import... public class RegexTest { private static Pattern public static void setupbeforeclass() throws Exception { pattern = public void verifyzipcodenomatch() throws Exception { Matcher m = this.pattern.matcher("1357"); boolean notvalid = m.matches(); assertfalse("pattern did validate zip code", public void verifyzipcodegroupexception() throws Exception { Matcher m = this.pattern.matcher(" "); boolean isvalid = m.matches(); m.group(2); 73

74 Fixture di classe import... public class RegexTest { private static Pattern public static void setupbeforeclass() throws Exception { pattern = public void verifyzipcodenomatch() throws Exception { Matcher m = this.pattern.matcher("1357"); boolean notvalid = m.matches(); assertfalse("pattern did validate zip code", public void verifyzipcodegroupexception() throws Exception { Matcher m = this.pattern.matcher(" "); boolean isvalid = m.matches(); m.group(2); 74

75 Fixture multiple Si possono specificare più fixture per un test case Le annotazioni di JUnit4 possono essere ripetute, marcando diversi metodi Ma non si può specificare l ordine di esecuzione Vengono eseguite prima le fixture delle classi genitore 75

76 Test suite Meccanismo usato per raggruppare logicamente dei test ed eseguirli assieme L annotazione@suiteclasses raggruppa una lista di classi, passate come parametro, in una test suite L annotazione@runwith permette di impostare diversi esecutori di test Di solito si usasuite, già incluso nel framework Esempio che mostra come gestire le suite nelle diverse versioni di JUnit 76

77 Esempio di test suite (ver<4) import junit.framework.test; import junit.framework.testsuite; public class JUnit3Suite { public static Test suite() { TestSuite suite = new TestSuite(); suite.addtest(regextest.class); suite.addtest(parametricregextest.class); suite.addtest(timedregextest.class); return suite; 77

78 Esempio di test suite import org.junit.runner.runwith; import org.junit.runners.suite; ParametricRegexTest.class, RegexTest.class, TimedRegexTest.class) public class JUnit4Suite { 78

79 Esecuzione dei test Si può eseguire una classe di test di JUnit 4 da un IDE come Eclipse Run As JUnit test Oppure da linea di comando Eseguire la classe org.junit.runner.junitcore, passando come argomento il nome completo di una classe di test java org.junit.runner.junitcore <test class name> 79

80 Profilo d esecuzione in Eclipse 80

81 Esecuzione in Ant <!-- Define any necessary Ant properties --> <property name="src" value="./src" /> <property name="lib" value="./lib" /> <property name="classes" value="./classes" /> <property name="test.class.name" value="com.xyz.mytestsuite" /> <!-- Set up the CLASSPATH to be used by JUnit --> <path id="test.classpath"> <pathelement location="${classes" /> <pathelement location="/path/to/junit.jar" /> <fileset dir="${lib"><include name="**/*.jar"/></fileset> </path> <!-- Define the Ant task for running JUnit --> <target name="test"> <junit fork="yes" haltonfailure="yes"> <test name="${test.class.name" /> <formatter type="plain" usefile="false" /> <classpath refid="test.classpath" /> </junit> </target> 81

82 Esecuzione di più test in Ant... <!-- Define the Ant task for running JUnit --> <target name="test"> <junit printsummary="yes" haltonfailure="yes">... <batchtest fork="yes"> <fileset dir="${test.dir"> <include name="**/*test.java" /> <include name="**/test*.java" /> </fileset> </batchtest> </junit> </target> 82

83 Assert su array Nuovo metodo di assert per confrontare il contenuto di due array L esempio seguente fallisce per le differenze tra gli public void verifyarraycontents() throws Exception { String[] actual = new String[] { "JUnit 3.8.x", "JUnit 4", "TestNG"; String[] var = new String[] { "JUnit 3.8.x", "JUnit 4.1", "TestNG 5.5"; assertequals("the two arrays are not equal", actual, var); 83

84 Test parametrici In alcune applicazioni, può essere necessario scrivere un enorme quantità di test Nelle vecchie versioni di JUnit, la situazione era complicata Per ripetere un test con diversi parametri occorreva scrivere un test case per ogni gruppo di parametri JUnit permette le creazione di test generici che possono essere eseguiti su parametri modificabili Si può quindi creare un unico test case da eseguire più volte, una per ogni gruppo di parametri 84

85 Test parametrici Serie di passi per creare dei test parametrici 1. Creare un normale test, senza parametri 2. Creare un metodo statico di fornitura dati: restituisce unacollection, è annotato 3. Aggiungere campi di classe per i parametri 4. Scrivere un costruttore che riceve dei parametri e inizializza i campi 5. Specificare nella annotazione@runwith che il test case deve essere eseguito con la classe Parameterized 85

86 Esempio di test parametrico Provare una espressione regolare su molti valori Si noti che i valori diphrase ematch non sono public void verifygoodzipcode() throws Exception { Matcher m = this.pattern.matcher(phrase); boolean isvalid = m.matches(); assertequals("pattern did not validate zip code", isvalid, match); 86

87 Fornitura dei parametri Il passo successivo è creare un metodo di fornitura Deve essere static e deve restituire unacollection Deve essere associato all Es. nel metodo si può creare un array multi-dimensionale di Object e convertirlo in una public static Collection regexvalues() { return Arrays.asList(new Object[][] { {"22101", true, {"221x1", false, {" ", true, {" ", false ); 87

88 Creare i campi e il costruttore Ci sono due parametri, di tipostring eboolean, che devono corrispondere a due campi nella classe Poi bsogna creare un costruttore che colleghi i campi ai valori dei parametri private String phrase; private boolean match; public ParametricRegexTest(String phrase, boolean match) { this.phrase = phrase; this.match = match; 88

89 Specificare la classe parametrizzata Infine, bisogna specificare a livello di classe che il test deve essere eseguito con la classeparameterized, usando l public class ParametricRegexTest {... 89

90 Esecuzione di test parametrici Nel test precedente, il metodo verifygoodzipcode viene eseguito 4 volte Una volta per ciascuna coppia riportata dal metodo di produzione datiregexvalues 90

Test di unità con JUnit4

Test di unità con JUnit4 Test di unità con JUnit4 Richiamo sul test di unità Il test d unità è una metodologia che permette di verificare il corretto funzionamento di singole unità di codice in determinate condizioni. Nel caso

Dettagli

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

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012 Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Concetti di base di ingegneria del software

Concetti di base di ingegneria del software Concetti di base di ingegneria del software [Dalle dispense del corso «Ingegneria del software» del prof. A. Furfaro (UNICAL)] Principali qualità del software Correttezza Affidabilità Robustezza Efficienza

Dettagli

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

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Testing: basato su analisi dinamica del codice. Metodi Formali: basato su analisi statica del codice.

Testing: basato su analisi dinamica del codice. Metodi Formali: basato su analisi statica del codice. Convalida: attività volta ad assicurare che il SW sia conforme ai requisiti dell utente. Verifica: attività volta ad assicurare che il SW sia conforme alle specifiche dell analista. Goal: determinare malfunzionamenti/anomalie/errori

Dettagli

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:

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: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

Progettazione : Design Pattern Creazionali

Progettazione : Design Pattern Creazionali Progettazione : Design Pattern Creazionali Alessandro Martinelli alessandro.martinelli@unipv.it 30 Novembre 2010 Progettazione : Design Pattern Creazionali Aspetti generali dei Design Pattern Creazionali

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Siti web centrati sui dati Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Dispensa di database Access

Dispensa di database Access Dispensa di database Access Indice: Database come tabelle; fogli di lavoro e tabelle...2 Database con più tabelle; relazioni tra tabelle...2 Motore di database, complessità di un database; concetto di

Dettagli

tesi di laurea Anno Accademico 2009/2010 relatore Ch.mo prof. Porfirio Tramontana candidato Pasquale Ludi Matr. 534\000438

tesi di laurea Anno Accademico 2009/2010 relatore Ch.mo prof. Porfirio Tramontana candidato Pasquale Ludi Matr. 534\000438 tesi di laurea Anno Accademico 2009/2010 relatore Ch.mo prof. Porfirio Tramontana candidato Pasquale Ludi Matr. 534\000438 Obbiettivi del progetto: Sviluppo di un applicazione Flex in AdobeFlashBuilder

Dettagli

Verifica parte IIA. Test (o analisi dinamica) Mancanza di continuità. Esempio

Verifica parte IIA. Test (o analisi dinamica) Mancanza di continuità. Esempio Test (o analisi dinamica) Verifica parte IIA Rif. Ghezzi et al. 6.3-6.3.3 Consiste nell osservare il comportamento del sistema in un certo numero di condizioni significative Non può (in generale) essere

Dettagli

Architetture Applicative

Architetture Applicative Alessandro Martinelli alessandro.martinelli@unipv.it 6 Marzo 2012 Architetture Architetture Applicative Introduzione Alcuni esempi di Architetture Applicative Architetture con più Applicazioni Architetture

Dettagli

Programmazione a Oggetti Modulo B

Programmazione a Oggetti Modulo B Programmazione a Oggetti Modulo B Progetto Dott. Alessandro Roncato 4/10/2011 Progetto Da svolgere singolarmente Scadenza consegna: una settimana prima dello scritto; Valutazione in base a: Corretta compilazione

Dettagli

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010) Sapienza - Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Corso di Laurea in Ingegneria Informatica ed Automatica, Ingegneria dei Sistemi Informatici Esercitazioni

Dettagli

Cosa è un foglio elettronico

Cosa è un foglio elettronico Cosa è un foglio elettronico Versione informatica del foglio contabile Strumento per l elaborazione di numeri (ma non solo...) I valori inseriti possono essere modificati, analizzati, elaborati, ripetuti

Dettagli

Piano di gestione della qualità

Piano di gestione della qualità Piano di gestione della qualità Pianificazione della qualità Politica ed obiettivi della qualità Riferimento ad un eventuale modello di qualità adottato Controllo della qualità Procedure di controllo.

Dettagli

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it Automazione Industriale (scheduling+mms) scheduling+mms adacher@dia.uniroma3.it Introduzione Sistemi e Modelli Lo studio e l analisi di sistemi tramite una rappresentazione astratta o una sua formalizzazione

Dettagli

Architettura MVC-2: i JavaBeans

Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans Alberto Belussi anno accademico 2008/2009 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

La struttura dati ad albero binario

La struttura dati ad albero binario La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,

Dettagli

Programmazione a Oggetti Lezione 10. Ereditarieta

Programmazione a Oggetti Lezione 10. Ereditarieta Programmazione a Oggetti Lezione 10 Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare

Dettagli

Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica. Ingegneria del Software.

Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica. Ingegneria del Software. Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica Ingegneria del Software La fase di Test Giulio Destri Ing. del Software: Test - 1 Scopo del modulo Definire

Dettagli

Inizializzazione, Assegnamento e Distruzione di Classi

Inizializzazione, Assegnamento e Distruzione di Classi Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della

Dettagli

FONDAMENTI di INFORMATICA L. Mezzalira

FONDAMENTI di INFORMATICA L. Mezzalira FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software

Dettagli

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi Indice generale OOA Analisi Orientata agli Oggetti Introduzione Analisi Metodi d' analisi Analisi funzionale Analisi del flusso dei dati Analisi delle informazioni Analisi Orientata agli Oggetti (OOA)

Dettagli

Configuration Management

Configuration Management Configuration Management Obiettivi Obiettivo del Configuration Management è di fornire un modello logico dell infrastruttura informatica identificando, controllando, mantenendo e verificando le versioni

Dettagli

Introduzione ai tipi di dato astratti: applicazione alle liste

Introduzione ai tipi di dato astratti: applicazione alle liste Universitàdegli Studi di L Aquila Facoltàdi Scienze M.F.N. Corso di Laurea in Informatica Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2005/2006 Introduzione ai tipi di dato astratti: applicazione

Dettagli

GESTIONE DEI PROCESSI

GESTIONE DEI PROCESSI Sistemi Operativi GESTIONE DEI PROCESSI Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in Java Concetto

Dettagli

La Metodologia adottata nel Corso

La Metodologia adottata nel Corso La Metodologia adottata nel Corso 1 Mission Statement + Glossario + Lista Funzionalià 3 Descrizione 6 Funzionalità 2 Schema 4 Schema 5 concettuale Logico EA Relazionale Codice Transazioni In PL/SQL Schema

Dettagli

Esempi di errori/difetti. algoritmi sintassi calcolo e precisione documento stress capacità ricovery sistema hardware e software standard e procedure

Esempi di errori/difetti. algoritmi sintassi calcolo e precisione documento stress capacità ricovery sistema hardware e software standard e procedure COLLAUDO Esempi di errori/difetti algoritmi sintassi calcolo e precisione documento stress capacità ricovery sistema hardware e software standard e procedure Verifica e Validazione Validazione Requisiti

Dettagli

Esercitazione n 4. Obiettivi

Esercitazione n 4. Obiettivi Esercitazione n 4 Obiettivi Progettare e implementare per intero un componente software in Java Linguaggio Java: Classi astratte Utilizzo di costruttori e metodi di superclasse Polimorfismo Esempio guida:

Dettagli

Sistemi elettronici per la sicurezza dei veicoli: presente e futuro. Il ruolo della norma ISO 26262 per la Sicurezza Funzionale

Sistemi elettronici per la sicurezza dei veicoli: presente e futuro. Il ruolo della norma ISO 26262 per la Sicurezza Funzionale La Sicurezza Funzionale del Software Prof. Riccardo Sisto Ordinario di Sistemi di Elaborazione delle Informazioni Dipartimento di Automatica e Informatica Sicurezza Funzionale del Vari Aspetti Sicurezza

Dettagli

10 - Programmare con gli Array

10 - Programmare con gli Array 10 - Programmare con gli Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini. Algoritmi di routing dinamici (pag.89) UdA2_L5 Nelle moderne reti si usano algoritmi dinamici, che si adattano automaticamente ai cambiamenti della rete. Questi algoritmi non sono eseguiti solo all'avvio

Dettagli

11. Evoluzione del Software

11. Evoluzione del Software 11. Evoluzione del Software Andrea Polini Ingegneria del Software Corso di Laurea in Informatica (Ingegneria del Software) 11. Evoluzione del Software 1 / 21 Evoluzione del Software - generalità Cosa,

Dettagli

IL SOFTWARE SECONDO LA NORMA UNI EN ISO 13849-1:2008 (IIA PARTE) 1

IL SOFTWARE SECONDO LA NORMA UNI EN ISO 13849-1:2008 (IIA PARTE) 1 Ernesto Cappelletti (ErnestoCappelletti) IL SOFTWARE SECONDO LA NORMA UNI EN ISO 13849-1:2008 (IIA PARTE) 6 April 2012 1. Requisiti per la scrittura del software secondo la norma UNI EN ISO 13849-1:2008

Dettagli

Generazione Automatica di Asserzioni da Modelli di Specifica

Generazione Automatica di Asserzioni da Modelli di Specifica UNIVERSITÀ DEGLI STUDI DI MILANO BICOCCA FACOLTÀ DI SCIENZE MATEMATICHE FISICHE E NATURALI Corso di Laurea Magistrale in Informatica Generazione Automatica di Asserzioni da Modelli di Specifica Relatore:

Dettagli

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

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 3 - Variabili Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di

Dettagli

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per

Dettagli

Soluzione dell esercizio del 2 Febbraio 2004

Soluzione dell esercizio del 2 Febbraio 2004 Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo

Dettagli

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 10 Correttezza A. Miola Novembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Correttezza 1 Contenuti Introduzione alla correttezza

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

Tricks & Tips. [Access] Tutorial - ActiveX - Controllo Tree View. - Michele de Nittis - Versione: 1 Data Versione: venerdì 30 agosto 2002

Tricks & Tips. [Access] Tutorial - ActiveX - Controllo Tree View. - Michele de Nittis - Versione: 1 Data Versione: venerdì 30 agosto 2002 Tricks & Tips [Access] - Michele de Nittis - Tutorial - ActiveX - Controllo Tree View Versione: 1 Data Versione: venerdì 30 agosto 2002 1 SOMMARIO PREMESSA...3 INSERIMENTO DEL CONTROLLO...3 AGGIUNTA DELLE

Dettagli

Collaudo e qualità del software Quali test eseguire

Collaudo e qualità del software Quali test eseguire Collaudo e qualità del software Relatore Ercole Colonese Roma, Tipologie di test Temi trattati nel libro Modello a V Livelli di testing Tipi di test Test funzionali Test delle funzionalità Test di gestione

Dettagli

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1)

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1) La gestione di un calcolatore Sistemi Operativi primo modulo Introduzione Augusto Celentano Università Ca Foscari Venezia Corso di Laurea in Informatica Un calcolatore (sistema di elaborazione) è un sistema

Dettagli

Visual Basic.NET La Gestione degli Errori di Federico BARBATI

Visual Basic.NET La Gestione degli Errori di Federico BARBATI Generalità Visual Basic.NET La Gestione degli Errori di Federico BARBATI La gestione degli errori, è una parte fondamentale di un codice ben progettato. Fino ad oggi, gli errori nelle applicazioni scritte

Dettagli

Progettaz. e sviluppo Data Base

Progettaz. e sviluppo Data Base Progettaz. e sviluppo Data Base! Progettazione Basi Dati: Metodologie e modelli!modello Entita -Relazione Progettazione Base Dati Introduzione alla Progettazione: Il ciclo di vita di un Sist. Informativo

Dettagli

Organizzazione degli archivi

Organizzazione degli archivi COSA E UN DATA-BASE (DB)? è l insieme di dati relativo ad un sistema informativo COSA CARATTERIZZA UN DB? la struttura dei dati le relazioni fra i dati I REQUISITI DI UN DB SONO: la ridondanza minima i

Dettagli

Processo parte VII. Strumenti. Maggiore integrazione. Sviluppo tecnologico

Processo parte VII. Strumenti. Maggiore integrazione. Sviluppo tecnologico Strumenti Processo parte VII Leggere Cap. 9 Ghezzi et al. Strumenti software che assistono gli ingegneri del software in tutte le fasi del progetto; in particolare progettazione codifica test Evoluzione

Dettagli

Corso di Access. Prerequisiti. Modulo L2A (Access) 1.1 Concetti di base. Utilizzo elementare del computer Concetti fondamentali di basi di dati

Corso di Access. Prerequisiti. Modulo L2A (Access) 1.1 Concetti di base. Utilizzo elementare del computer Concetti fondamentali di basi di dati Corso di Access Modulo L2A (Access) 1.1 Concetti di base 1 Prerequisiti Utilizzo elementare del computer Concetti fondamentali di basi di dati 2 1 Introduzione Un ambiente DBMS è un applicazione che consente

Dettagli

Gestione del workflow

Gestione del workflow Gestione del workflow Stefania Marrara Corso di Tecnologie dei Sistemi Informativi 2004/2005 Progettazione di un Sistema Informativo Analisi dei processi Per progettare un sistema informativo è necessario

Dettagli

Prova di Laboratorio di Programmazione

Prova di Laboratorio di Programmazione Prova di Laboratorio di Programmazione 6 febbraio 015 ATTENZIONE: Non è possibile usare le classi del package prog.io del libro di testo. Oltre ai metodi richiesti in ciascuna classe, è opportuno implementare

Dettagli

INFORMATICA 1 L. Mezzalira

INFORMATICA 1 L. Mezzalira INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello

Dettagli

Verifica e Validazione (V & V) Software e difetti. Processo di V & V. Test

Verifica e Validazione (V & V) Software e difetti. Processo di V & V. Test Software e difetti Il software con difetti è un grande problema I difetti nel software sono comuni Come sappiamo che il software ha qualche difetto? Conosciamo tramite qualcosa, che non è il codice, cosa

Dettagli

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP Accademia Futuro info@accademiafuturo.it Programma Generale del Corso Analista Programmatore Web PHP Tematiche Trattate

Dettagli

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

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware COS È UN LINGUAGGIO? Un linguaggio è un insieme di parole e di metodi di combinazione delle

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down

Dettagli

SOFTWARE PER LA RILEVAZIONE DEI TEMPI PER CENTRI DI COSTO

SOFTWARE PER LA RILEVAZIONE DEI TEMPI PER CENTRI DI COSTO SOFTWARE PER LA RILEVAZIONE DEI TEMPI PER CENTRI DI COSTO Descrizione Nell ambito della rilevazione dei costi, Solari con l ambiente Start propone Time&Cost, una applicazione che contribuisce a fornire

Dettagli

Stefania Marrara - Esercitazioni di Tecnologie dei Sistemi Informativi. Integrazione di dati di sorgenti diverse

Stefania Marrara - Esercitazioni di Tecnologie dei Sistemi Informativi. Integrazione di dati di sorgenti diverse Politecnico di Milano View integration 1 Integrazione di dati di sorgenti diverse Al giorno d oggi d la mole di informazioni che viene gestita in molti contesti applicativi è enorme. In alcuni casi le

Dettagli

Approccio stratificato

Approccio stratificato Approccio stratificato Il sistema operativo è suddiviso in strati (livelli), ciascuno costruito sopra quelli inferiori. Il livello più basso (strato 0) è l hardware, il più alto (strato N) è l interfaccia

Dettagli

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

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software

Dettagli

Esempi di algoritmi. Lezione III

Esempi di algoritmi. Lezione III Esempi di algoritmi Lezione III Scopo della lezione Implementare da zero algoritmi di media complessità. Verificare la correttezza di un algoritmo eseguendolo a mano. Imparare a valutare le prestazioni

Dettagli

Considera tutti i requisiti funzionali (use cases) NON deve necessariamente modellare i requisiti non funzionali

Considera tutti i requisiti funzionali (use cases) NON deve necessariamente modellare i requisiti non funzionali Corso di Laurea Specialistica in Ingegneria Informatica Corso di Ingegneria del Software A. A. 2008 - Progettazione OO E. TINELLI Punto di Partenza Il modello di analisi E una rappresentazione minima del

Dettagli

Artifact Centric Business Processes (I)

Artifact Centric Business Processes (I) Introduzione Autore: Docente: Prof. Giuseppe De Giacomo Dipartimento di Informatica e Sistemistica SAPIENZA - Universitá di Roma 16 Novembre 2008 Una visione assiomatica La modellazione dei processi di

Dettagli

Modulo 4: Ereditarietà, interfacce e clonazione

Modulo 4: Ereditarietà, interfacce e clonazione Modulo 4: Ereditarietà, interfacce e clonazione Argomenti Trattati: Classi, Superclassi e Sottoclassi Ereditarietà Ereditarietà ed Attributi Privati Override super Ereditarietà e Costruttori Polimorfismo

Dettagli

Realizzazione di una classe con un associazione

Realizzazione di una classe con un associazione Realizzazione di una classe con un associazione Nel realizzare una classe che è coinvolta in un associazione, ci dobbiamo chiedere se la classe ha responsabilità sull associazione. Diciamo che una classe

Dettagli

Indice. Ingegneria dei requisiti e gestione agile. User-Centered Development Esempi di artefatti. Domain Driven Design. Design for Testability

Indice. Ingegneria dei requisiti e gestione agile. User-Centered Development Esempi di artefatti. Domain Driven Design. Design for Testability Indice Ingegneria dei requisiti e gestione agile User-Centered Development Esempi di artefatti Domain Driven Design Design for Testability Model-based GUI Testing c IDS Srl 2014 Software solido e usabile

Dettagli

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

Progetto: ARPA Fonte Dati. ARPA Fonte Dati. Regione Toscana. Manuale Amministratore ARPA Fonte Dati Regione Toscana 1 Redatto da L. Folchi (TAI) Rivisto da Approvato da Versione 1.1 Data emissione 09/10/13 Stato FINAL 2 Versione Data Descrizione 1,0 06/08/13 Versione Iniziale 1.1 09/10/2013

Dettagli

IDENTIFICAZIONE DEI BISOGNI DEL CLIENTE

IDENTIFICAZIONE DEI BISOGNI DEL CLIENTE IDENTIFICAZIONE DEI BISOGNI DEL CLIENTE 51 Dichiarazione d intenti (mission statement) La dichiarazione d intenti ha il compito di stabilire degli obiettivi dal punto di vista del mercato, e in parte dal

Dettagli

Introduzione alle basi di dati. Gestione delle informazioni. Gestione delle informazioni. Sistema informatico

Introduzione alle basi di dati. Gestione delle informazioni. Gestione delle informazioni. Sistema informatico Introduzione alle basi di dati Introduzione alle basi di dati Gestione delle informazioni Base di dati Modello dei dati Indipendenza dei dati Accesso ai dati Vantaggi e svantaggi dei DBMS Gestione delle

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

Gestione ed analisi di base dati nell epidemiologia. delle malattie infettive

Gestione ed analisi di base dati nell epidemiologia. delle malattie infettive Università degli Studi di Torino - Facoltà di Medicina Veterinaria Laboratorio di epidemiologia delle malattie infettive Scuola Specializzazione in Sanità Animale, Allevamento e Produzioni Zootecniche

Dettagli

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione Automatizzare i compiti ripetitivi I file batch Anno accademico 2000-01 1 Spesso capita di dover eseguire ripetutatmente una data sequenza di comandi Introdurli uno a uno da tastiera è un processo lento

Dettagli

Gli algoritmi: definizioni e proprietà

Gli algoritmi: definizioni e proprietà Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Gli algoritmi: definizioni e proprietà La presente dispensa e da

Dettagli

Il modello di ottimizzazione SAM

Il modello di ottimizzazione SAM Il modello di ottimizzazione control, optimize, grow Il modello di ottimizzazione Il modello di ottimizzazione è allineato con il modello di ottimizzazione dell infrastruttura e fornisce un framework per

Dettagli

Strumenti di modellazione. Gabriella Trucco

Strumenti di modellazione. Gabriella Trucco Strumenti di modellazione Gabriella Trucco Linguaggio di modellazione Linguaggio formale che può essere utilizzato per descrivere (modellare) un sistema Il concetto trova applicazione soprattutto nell

Dettagli

Introduzione alla Progettazione per Componenti

Introduzione alla Progettazione per Componenti Introduzione alla Progettazione per Componenti Alessandro Martinelli 6 ottobre 2014 Obiettivo del Corso Il Progetto Software Reale Il Componente Software La Programmazione Ad Oggetti Fondamenti di Informatica

Dettagli

Progettazione di Basi di Dati

Progettazione di Basi di Dati Progettazione di Basi di Dati Prof. Nicoletta D Alpaos & Prof. Andrea Borghesan Entità-Relazione Progettazione Logica 2 E il modo attraverso il quale i dati sono rappresentati : fa riferimento al modello

Dettagli

Esercizi su. Funzioni

Esercizi su. Funzioni Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità

Dettagli

Java: Compilatore e Interprete

Java: Compilatore e Interprete Java: Compilatore e Interprete Java Virtual Machine Il bytecode non è Linguaggio Macchina. Per diventarlo, deve subire un ulteriore trasformazione che viene operata dall interprete Java in modalità JIT

Dettagli

Archivio CD. Fondamenti di Programmazione

Archivio CD. Fondamenti di Programmazione Archivio CD Una persona possiede un certo numero di CD musicali e desidera organizzare il proprio archivio tramite uno strumento software. Il programma deve permettere: - l inserimento di un nuovo CD nella

Dettagli

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

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da ARPA Fonte Dati Regione Toscana Redatto da L. Folchi (TAI) Rivisto da Approvato da Versione 1.0 Data emissione 06/08/13 Stato DRAFT 1 Versione Data Descrizione 1,0 06/08/13 Versione Iniziale 2 Sommario

Dettagli

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere. UML e i Casi d USO I casi d uso specificano una sequenza di azioni che producono un risultato visibile agli attori del sistema. Essi nascono per fornire descrizioni delle capacità del sistema. I casi d

Dettagli

Ingegneria del Software

Ingegneria del Software Ingegneria del Software Testing - Tecniche di Collaudo del Software Collaudabilità Un attributo di qualità del software E il grado di semplicità con cui il software può essere collaudato Si compone di

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 19 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 18 Maggio 2010 idea: sfruttare i

Dettagli

Gestione Turni. Introduzione

Gestione Turni. Introduzione Gestione Turni Introduzione La gestione dei turni di lavoro si rende necessaria quando, per garantire la continuità del servizio di una determinata struttura, è necessario che tutto il personale afferente

Dettagli

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.

Dettagli

RMI Remote Method Invocation

RMI Remote Method Invocation RMI Remote Method Invocation [Pagina intenzionalmente vuota] (1 12 2004) slide 4:1/18 (p.106) Un applicazione RMI è un applicazione distribuita ad oggetti. Applicazione RMI tipica, strutturata in: server:

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

per immagini guida avanzata Uso delle tabelle e dei grafici Pivot Geometra Luigi Amato Guida Avanzata per immagini excel 2000 1

per immagini guida avanzata Uso delle tabelle e dei grafici Pivot Geometra Luigi Amato Guida Avanzata per immagini excel 2000 1 Uso delle tabelle e dei grafici Pivot Geometra Luigi Amato Guida Avanzata per immagini excel 2000 1 Una tabella Pivot usa dati a due dimensioni per creare una tabella a tre dimensioni, cioè una tabella

Dettagli

EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO

EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO Linguaggi di programmazione classificati in base alle loro caratteristiche fondamentali. Linguaggio macchina, binario e fortemente legato all architettura. Linguaggi

Dettagli

12. Evoluzione del Software

12. Evoluzione del Software 12. Evoluzione del Software Andrea Polini Ingegneria del Software Corso di Laurea in Informatica (Ingegneria del Software) 12. Evoluzione del Software 1 / 21 Evoluzione del Software - generalità Cosa,

Dettagli

LINGUAGGI DI PROGRAMMAZIONE

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

Come archiviare i dati per le scienze sociali

Come archiviare i dati per le scienze sociali Come archiviare i dati per le scienze sociali ADPSS-SOCIODATA Archivio Dati e Programmi per le Scienze Sociali www.sociologiadip.unimib.it/sociodata E-mail: adpss.sociologia@unimib.it Tel.: 02 64487513

Dettagli

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione SQL DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE SQL è più di un semplice linguaggio di interrogazione! Linguaggio di definizione dati (Data-definition language, DDL):! Crea/distrugge/modifica relazioni

Dettagli

Introduzione al MATLAB c Parte 2

Introduzione al MATLAB c Parte 2 Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 18 gennaio 2008 Outline 1 M-file di tipo Script e Function Script Function 2 Costrutti di programmazione

Dettagli

Sistemi Informativi I Caso di studio con applicazione di UML

Sistemi Informativi I Caso di studio con applicazione di UML 9 CASO DI STUDIO CON APPLICAZIONE DI UML...2 9.1 IL CASO DI STUDIO...2 9.1.1 Il sistema attuale...2 9.2 IL PROBLEM STATEMENT...3 9.2.1 Formulazione del Problem statement per il caso proposto...3 9.3 USE

Dettagli