Contenuti - Concetti e terminologia - Verifica, validazione, integrazione e collaudo - Verifica statica - Inspection e walkthrough - Verifica e validazione di qualità Verifica e validazione - Attività necessarie - Accertare che il processo non abbia introdotto difetti nel prodotto - Accertare che il prodotto realizzato sia quello atteso Guasti, difetti, malfunzionamenti - Guasto (Fault) - Atto od omissione * possibile causa (anche umana) di comportamento fuori norma * esempio: programmatore distratto - Può non avere effetto - Errore o Difetto (Error) - Stato erroneo di sistema introdotto da un guasto * esempio: dato erroneo in una procedura - Può restare latente, va eliminato - Malfunzionamento (Failure) - Effetto di un errore, risulta in deviazione da specifica * esempio: emissione di un valore sbagliato - Può causare danni rilevanti Verifiche statiche e dinamiche - Verifiche statiche - Non comportano esecuzione del codice - Usate prevalentemente per attività di verifica - Effettuate sulle componenti (non sul sistema) - Verifiche dinamiche (prove = test) - Comportano esecuzione del codice - Usate per attività di verifica e/o di validazione - Effettuate sulle componenti e/o sul sistema Ambiente di prova - Ripetibilità della prova - Ambiente definito (hardware, condizioni, …) - Casi di prova definiti (ingressi e comportamenti attesi) - Procedure definite - Strumenti - Driver = componente attiva fittizia per pilotare un modulo - Stub = componente passiva fittizia per simulare un modulo - Registrazione ed analisi dei dati di prova Verifiche sulle componenti - Approcci possibili - Statico - Dal controllo di routine (desk-check) all’ispezione - Dinamico - Con realizzazione di driver e stub - Responsabilità - Del programmatore stesso (non pianificata) - Con l’intervento di una controparte (pianificata) - Esempio: verifica dinamica non pianificata + verifica statica pianificata - Il debugging è responsabilità specifica del programmatore Integrazione - Costruzione e verifica del sistema - Componenti realizzate in parallelo - Componenti realizzate e verificate indipendentemente - In condizioni ottime, l’integrazione è priva di problemi - Problemi - Errori nella realizzazione delle componenti - Modifica delle interfacce o cambiamenti nei requisiti - Riuso di componenti dal comportamento oscuro o inadatto - Integrazione con altre applicazioni non ben conosciute Collaudo - Validazione del sistema - Attività svolta dal fornitore (alpha test o pre-collaudo) - Attività svolta dal committente (beta test o collaudo) - Su casi di prova definiti nel contratto - Valore contrattuale - Il collaudo è un’attività formale - Al collaudo segue il rilascio del sistema - Conclusione della commessa (a meno di servizi e garanzie) Verifica statica - Verifica senza esecuzione del codice - Metodi manuali - Basati sulla lettura del codice (desk check) - Più frequentemente usati, ma di scarsa efficacia per sistemi di elevata complessità - Più o meno formalmente documentati - Metodi formali - Basati sulla prova assistita di proprietà del codice - La cui dimostrazione dinamica può essere eccessivamente onerosa - Verifica di equivalenza o generazione automatica Metodi di lettura del codice - Inspection e Walkthrough - Metodi pratici - Basati sulla lettura del codice - Efficacia dipendente dall’esperienza dei verificatori - Per organizzare le attività di verifica - Per documentare l’attività ed i suoi risultati - Tra loro complementari Inspection - Obiettivi - Rivelare la presenza di difetti - Eseguire una lettura mirata del codice - Agenti - Verificatori distinti e separati dai programmatori - Strategia - Focalizzare la ricerca su presupposti - Error guessing Attività di ispezione - Fase 1: pianificazione - Fase 2: definizione della lista di controllo - Fase 3: lettura del codice - Fase 4: correzione dei difetti - Documentazione (rapporto delle attività) Walkthrough - Obiettivo - Rivelare la presenza di difetti - Eseguire una lettura critica del codice - A largo spettro - Agenti - Gruppi misti ispettori/sviluppatori, ma con ruoli ben distinti - Strategia - Percorrere il codice simulandone possibili esecuzioni Attività di walkthrough - Fase 1: pianificazione - Fase 2: lettura del codice - Fase 3: discussione - Fase 4: correzione dei difetti - Documentazione (rapporto delle attività) Inspection contro walkthrough - Affinità - Controlli statici basati su desk check - Programmatori e verificatori su fronti contrapposti - Documentazione formale - Differenze - Inspection basato su (errori) presupposti - Walkthrough basato sull’esperienza - Walkthrough più collaborativo - Inspection più rapido Verifica e validazione di qualità - Evidenza di qualità - A fronte di una metrica e di livelli definiti - Verificare (validare) per dare evidenza - Controllo (interno) ed accertamento (esterno) della qualità - ISO/IEC 9126 come riferimento - Quali strumenti per quali caratteristiche? - La qualità in uso è esclusa - 4 caratteristiche residue nella visione utente e 2 nella visione produttore Funzionalità - Dimostrabile tramite prove - Verifica statica come attività preliminare - Liste di controllo rispetto ai requisiti - Completezza ed economicità - Tutte e sole le funzionalità richieste - Interoperabilità - Compatibilità tra le soluzioni adottate - Sicurezza (delle soluzioni adottate) - Adesione alle norme ed alle prescrizioni - Prove per accuratezza Affidabilità - Dimostrabile tramite analisi e prove - Verifica statica come attività preliminare - Liste di controllo rispetto ai requisiti - Robustezza - Tolleranza ai guasti (fault tolerance) - Capacità di ripristino e recupero da errori - Aderenza alle prescrizioni - Prove per maturità Usabilità - Le prove sono imprescindibili - Verifica statica come attività complementare - Liste di controllo rispetto ai manuali d’uso - Comprensibilità - Apprendibilità - Aderenza alle prescrizioni - Questionari all’utenza (a seguito di prove) - Facilità d’uso - Piacevolezza d’uso Efficienza - Prove necessarie con la tecnologia attuale - Verifica statica come attività preliminare - Liste di controllo rispetto ai criteri realizzativi richiesti - Efficienza temporale - algoritmica - Efficienza spaziale - Uso delle risorse - Miglioramento e confidenza - L’efficienza provata fornisce confidenza - La verifica statica non da confidenza (attualmente), ma indicazioni importanti per migliorare il codice Manutenibilità - Verifica statica come strumento ideale - Liste di controllo rispetto alle norme di codifica - Analizzabilità - Modificabilità - Aderenza alle prescrizioni - Liste di controllo rispetto all’insieme delle prove - Ripetibilità - Verificabilità - Prove per la stabilità Portabilità - Verifica statica come strumento ideale - Liste di controllo rispetto alle norme di codifica - Adattabilità - Aderenza alle prescrizioni - Prove come strumento complementare - Facilità d’installazione - Compatibilità ambientale - Facilità di sostituzione Riepilogo - Concetti e terminologia - Verifica, validazione, integrazione e collaudo - Verifica statica - Inspection e walkthrough - Verifica e validazione di qualità Riferimenti - Standard for Software Component Testing, British Computer Society SIGIST, 1997 - M.E. Fagan, Advances in Software Inspection, IEEE Transaction on Software Engineering, luglio 1986 - G.A. Cignoni, P. De Risi, “Il test e la qualità del software”, Il Sole 24 Ore, 1998