Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A.
|
|
- Cristoforo Foti
- 8 anni fa
- Visualizzazioni
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 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
DettagliUso 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
DettagliFunzioni 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
DettagliConcetti 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
Dettagli12 - 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,
DettagliTesting: 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
DettagliTipi 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
DettagliOggetti 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
DettagliProgettazione : 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
DettagliDatabase. 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
DettagliSiti 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
DettagliDispensa 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
Dettaglitesi 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
DettagliVerifica 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
DettagliArchitetture Applicative
Alessandro Martinelli alessandro.martinelli@unipv.it 6 Marzo 2012 Architetture Architetture Applicative Introduzione Alcuni esempi di Architetture Applicative Architetture con più Applicazioni Architetture
DettagliProgrammazione 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
DettagliEsercitazioni 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
DettagliCosa è 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
DettagliPiano 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.
DettagliAutomazione 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
DettagliArchitettura 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
DettagliLa 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,
DettagliProgrammazione 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
DettagliUniversità 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
DettagliInizializzazione, 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
DettagliFONDAMENTI 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
DettagliIndice 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)
DettagliConfiguration Management
Configuration Management Obiettivi Obiettivo del Configuration Management è di fornire un modello logico dell infrastruttura informatica identificando, controllando, mantenendo e verificando le versioni
DettagliIntroduzione 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
DettagliGESTIONE 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
DettagliLa 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
DettagliEsempi 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
DettagliEsercitazione 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:
DettagliSistemi 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
Dettagli10 - 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
DettagliA 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
Dettagli11. 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,
DettagliIL 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
DettagliGenerazione 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:
Dettagli3 - 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
DettagliPer 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
DettagliSoluzione 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
DettagliCorrettezza. 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
DettagliArduino: 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
DettagliTricks & 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
DettagliCollaudo 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
DettagliLa 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
DettagliVisual 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
DettagliProgettaz. 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
DettagliOrganizzazione 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
DettagliProcesso 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
DettagliCorso 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
DettagliGestione 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
DettagliProva 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
DettagliINFORMATICA 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
DettagliVerifica 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
DettagliCorso 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
DettagliCOS È 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
DettagliCorso 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
DettagliSOFTWARE 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
DettagliStefania 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
DettagliApproccio 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
DettagliSOMMARIO 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
DettagliEsempi 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
DettagliConsidera 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
DettagliArtifact 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
DettagliModulo 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
DettagliRealizzazione 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
DettagliIndice. 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
DettagliProgetto: 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
DettagliIDENTIFICAZIONE 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
DettagliIntroduzione 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
DettagliI 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à
DettagliGestione 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
DettagliAutomatizzare 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
DettagliGli 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
DettagliIl 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
DettagliStrumenti 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
DettagliIntroduzione 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
DettagliProgettazione 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
DettagliEsercizi 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à
DettagliJava: 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
DettagliArchivio 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
DettagliRegione 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
DettagliI 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
DettagliIngegneria 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
DettagliCorso 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
DettagliGestione 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
DettagliLa 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.
DettagliRMI 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:
DettagliConcetto 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
DettagliIntroduzione 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
Dettagliper 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
DettagliEVOLUZIONE 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
Dettagli12. 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,
DettagliLINGUAGGI 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
DettagliCome 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
DettagliDDL, 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
DettagliIntroduzione 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
DettagliSistemi 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