la definizione di verifica | confronto del software con le specifiche formali prodotte dall'analizta |
definizione di convalida | confronto del software con i requisiti informali posti dal cliente |
quale e' la differenza fra difetto e sbaglio? | per anomalia o difetto si intende un errore nel codice che non produce errori interni, ma genera un output che non è necessariamente reputato corretto
es: raddoppia(3) -> 9 ANOMALIA
per sbaglio si intende: un errore umano (un errore di battitura, grammatica errata)
es: raddoppia(x) : x + 2 al posto di x * 2 |
cosa significa che un criterio di test e' affidabile? | se per qualsiasi coppia di test il successo del primo coimplica il successo del secondo
affidabile(C, P) ↔
(∀T1 ∈ C, ∀T2 ∈ C successo(T1, P) ↔ successo(T2, P)) |
cosa significa che un criterio di test e' valido? | se conoscendo che un programma non e' corretto allora esiste almeno un metodo di test che fallisce (cioe' che trova l'errore con successo)
valido(C, P) ↔ (¬ok(P, D) → ∃T ∈ C successo(T, P)) |
in che cosa consiste il criterio di copertura dei comandi? | Un test T soddisfa il criterio di copertura dei comandi se ogni comando eseguibile del programma e' eseguito in corrispondenza di almeno un caso di test t in T |
in che cosa consiste il criterio di copertura delle decisioni? | Un test T
soddisfa il criterio di copertura delle decisioni se e solo se ogni decisione (effettiva) viene resa sia vera che falsa in corrispondenza di almeno un caso di test t∈T |
in cosa consiste il criterio di copertura delle condizioni? | Un test T
soddisfa il criterio di copertura delle condizioni se e solo se ogni singola condizione (effettiva) viene resa sia vera che falsa in corrispondenza di almeno un caso di test t∈T
(in caso di condizioni composte, come per esempio x != 0 && y < 3, la copertura delle decisioni imporrebbe che l’intera condizione sia resa sia vera che falsa, mentre la copertura delle condizioni richiede di rendere vere e false le singole condizioni atomiche x != 0 e y < 3) |
che cosa si intende per malfunzionamento?(failure) | Un malfunzionamento è uno scostamento dal corretto funzionamento del programma.
Non dipende dal codice e in generale non ci si accorge di esso osservando il codice ma solo da un punto di vista più esterno, utilizzando il programma. Il malfunzionamento potrebbe riguardare sia le specifiche (quindi relativo alla fase di verifica) che i requisiti (fase di convalida, ovvero “non rispetta le aspettative”)
un malfunzionamento implica una anomalia ma una anomalia non implica un malfunzionamento |
che cosa si intende per difetto? | Un difetto è il punto del codice che causa il verificarsi del malfunzionamento.(strettamente legato al codice)
È condizione necessaria (ma non sufficiente) per la verifica di un malfunzionamento.
un malfunzionamento implica una anomalia ma una anomalia non implica un malfunzionamento |
quali sono le differenze fra tecniche di verifica statiche e tecniche di verifica dinamiche? | - tecniche statiche, basate sull’analisi degli elementi sintattici del codice.
Ad esempio: metodi formali, analisi del dataflow e modelli statistici;
- tecniche dinamiche, basate sull’esecuzione del programma.
Ad esempio: testing e debugging. |
vantaggi dei metodi di verifiica formali? | Efficacia: i metodi formali possono essere molto efficaci nel dimostrare l'assenza di anomalie nel prodotto finale. Questo perché si basano su un approccio logico che può essere molto potente.
Completezza: i metodi formali possono essere utilizzati per dimostrare la correttezza di proprietà complesse. Questo perché non sono limitati a verificare le proprietà che possono essere verificate tramite l'esecuzione del programma. |
svantaggi dei metodi di verifica formali? | Complessità: i metodi formali possono essere molto complessi da utilizzare. Questo perché richiedono una buona conoscenza della teoria dei linguaggi formali e della logica matematica.
Limitazione: i metodi formali possono essere limitati nell'applicazione. Questo perché possono essere utilizzati solo per verificare proprietà che possono essere formalizzate in modo rigoroso. |
alcuni esempi di tecniche statiche di verifica? | - metodi formali
- analisi data flow
- modelli statistici |
alcuni esempi di tecniche dinamiche di verifica? | - testing
- debugging |
da cosa dipende la scelta di un approccio alla verifica e convalida per un programma ? | dipende da:
- La complessità del programma: un programma complesso è più probabile che contenga anomalie. Pertanto, è necessario utilizzare un approccio che sia in grado di rilevare un'ampia gamma di anomalie.
- La disponibilità di risorse: i metodi formali possono essere molto complessi da utilizzare. Pertanto, è necessario avere a disposizione risorse adeguate per implementarli.
- Il tempo a disposizione: il testing può essere inefficiente nel rilevare anomalie. Pertanto, è necessario avere a disposizione un tempo adeguato per eseguire i test. |
come possono essere raggruppati i metodi di testing?
nel caso tdd cosa si usa? | - white box: si ha accesso al codice da testare e si possono cercare anomalie guardandolo da un punto di vista interno;
- black box: non si ha accesso al codice ma è possibile testare e cercare malfunzionamenti tramite le interfacce esterne;
- gray box: non si ha accesso al codice ma si ha solo un’idea dell’implementazione ad alto livello.
Per esempio, se sappiamo che il sistema segue il pattern MODEL VIEW CONTROLLER ci si può aspettare che certe stimolazioni portino a chiamate al database mentre altre no.
NEL TDD SI USA BLACK BOX |
quali sono due possibili approcci al debugging? | - Stati intermedi: partendo da una malfunzionamento noto e riproducibile si avvia una procedura di analisi basata sulla produzione degli stati intermedi dell’esecuzione del programma: passo passo (a livello a piacere, da istruzione macchina a chiamata di funzione) si controllano tutti gli stati di memoria alla ricerca di uno inconsistente;
- divide-et-impera: il codice viene smontato sezione per sezione e componente per componente in modo da poter trovare il punto in cui c’è l’anomalia. Si possono mettere breakpoint o “print tattiche”. |
quale è la definizione di correttezza di un programma ? | Un programma è corretto quando per ogni dato del dominio vale ok(P,d). |
quando un programma si dice corretto rispetto un test? | Quindi, un programma è corretto per un test quando per ogni caso di test esso è corretto. |
quando un criterio si può dire affidabile? | Un criterio di selezione C si dice affidabile se presi due test T1e T2 in base al criterio allora o entrambi hanno successo o nessuno dei due ha successo.
affidabile(C,P)⟺(∀T1∈C,∀T2∈C, successo(T1,P)⇔successo(T2,P)) |
quando un criterio si può definire valido?
esempio di un criterio valido ma non affidabile | Un criterio di selezione si dice valido se qualora P non sia corretto, allora esiste almeno un test T selezionato in base al criterio C che ha successo e quindi rileva uno o più malfunzionamenti per il programma P:
valido(C,P)⟺(¬ok(P,D)⇒∃T∈C|successo(T,,P))
esempio: per la funzione raddoppia = (x*x)
l'insieme (0,1) è valido e non affidabile poichè non tutti i test danno lo stesso risultato ma trova un caso di errore |
quali sono le caratteristiche che deve presentare un caso di test? | - eseguire il comando che contiene l’anomalia – non è altrimenti possibile che il malfunzionamento si manifesti;
- l’esecuzione del comando che contiene l’anomalia deve portare il sistema in uno stato scorretto, o per meglio dire inconsistente;
- lo stato inconsistente deve propagarsi fino all’uscita del codice in esame in modo da produrre un output diverso da quello atteso; |
fornisci un codice in cui viene rispettato il criterio di copertura dei comandi ma non quello delle decisioni | in questo codice con il test <3,5> viene coperto i comandi ma non vengono coperte le decisioni perchè il ramo falso non viene mai valutato dato che non ci sono comandi esclusivi ad esso |
il criterio della copertura delle condizioni implica il criterio di copertura delle decisioni?
fornire un esempio | no, perchè rendere ogni condizione sia vera che falsa non comporta di percorrere tutti i cammini.
nell'esempio non si percorre il cammino falso |