Please enable JavaScript.
Coggle requires JavaScript to display documents.
Concetti generali - Coggle Diagram
Concetti generali
VERIFICA VS VALIDAZIONE
- Verifica: sto costruendo bene il prodotto? è conforme alle specifiche?
il nostro obiettivo è il controllo di qualità delle attività svolte nello sviluppo, il prodotto è conforme alle specifiche? (confronto l'input di una fase con l'output della stessa fase)
- Validazione: sto costruendo il il giusto prodotto? è conforme alle richieste del committente?
controllo qualità rispetto ai requisiti del committente, il prodotto è conforme alle attese del committente? la 'somma delle validità' è conforme?
- con V&V rassicuriamo l'utilizzatore che il sistema è adatto allo scopo, basato su una 'confidenza' dipendente da diversi fattori
Come dimostro che il mio programma rispetti le specifiche?
- verifica formale: se il mio programma P è una funzione, ed S è la specifica, allora dati input del dominio D e output del codominio C, P(d) = c = S(d)
:red_cross: è logico-matematica, dovrei dimostrarlo per ogni valore!
- sw test/debug: cerco di scoprire se P ha qualche imperfezione, concentrandomi sulle differenze tra P ed S, individuandole e rimuovendole
DEFINIZIONI
- Nell'ambito di sw è sbagliato parlare di 'correttezza', poichè una cosa corretta è senza errori, ma non è definito quali siano gli errori.
- Un errore/error causa difetto/fault che causa malfunzionamento/failure.
- Failure: comportamento non corretto ed osservabile del sistema, es: sist. non risponde, risponde diversamente.
Con il testing cerco di farle emergere.
- fault/bug : non implica per forza una failure, ma è sintomo della presenza di un errore.
- error: causa un fault, è un errore umano concettuale/interpretativo/etc..
Con il Debugging cerco di evidenziarle.
- con Failure containment applico failure prevention, nascondo all'user il malfunzionamento (es: andare a piedi su un'isola)
- con Fault detection opero sul fault.
- con prevention opero sull'errore.
Software Testing
- esecuzione di 'esperimenti' in ambiente controllato al fine di acquisire fiducia sul suo funzionamento, su aspetti funzionali di solito. Proviamo se la Nostra rappresentazione va bene.
:check: vedo se sistema risponde alle esigenze, o genera malfunzionamenti.
:red_cross: dimostro che un malfunzionamento esiste, ma no che non esista. Inoltre dominio D è vasto, non posso provare tutto, devo usare un 'sample' di dati. Questo vuol dire fare un test.
- Normalmente si usano Assert per confrontare risultato atteso (da specifiche, storici) con ottenuto, mediante un oracolo.
- Non si parla più di correttezza (che è assoluta) ma di reliability, che è una stima della probabilità di successo a partire da un insieme estratto casualmente dal dominio (poi può dipendere da budget o altro). E' un attributo statico, non asserzione di correttezza. Reliability = 1 - P(difetto)
- L'insieme di input che do sono profili operazioni, stimati attraverso requisiti, specifiche, o effettivamente misurati (log/report). La reliability dipende da questi profili, sia cambiando gli elementi, che le probabilità.
-