SEARCH
You are in browse mode. You must login to use MEMORY

   Log in to start

level: analisi statica

Questions and Answers List

level questions: analisi statica

QuestionAnswer
quali tipi di controlli eseguono i compilatori sul codice?- analisi lessicale: identifica i token del linguaggio e identifica la presenza di simboli non appartenenti al linguaggio - analisi sintattica: identifica le relazioni fra i token e controlla la grammatica del linguaggio - controllo dei tipi: violazione nell'utilizzo dei tipi - analisi del flusso dei dati: rileva problemi relativi a evoluzioni dei valori associati alle variabili
in che cosa consite l'analisi del Data Flow?DFU) è un tipo di analisi statica del codice che esamina il modo in cui i dati vengono utilizzati e scambiati all'interno del codice.
quali sono le regole dell'analisi del Data Flow?1) L’uso di una variabile deve essere sempre preceduto in ogni sequenza da una definizione senza annullamenti intermedi. a -> u errore 2) La definizione di una variabile deve essere sempre seguita da un uso, prima di un suo annullamento o nuova definizione. d -> d errore d -> a errore 3) L’annullamento di una variabile deve essere sempre seguito da una definizione, prima di un uso o altro annullamento. a -> a errore
quali sono i vari criteri derivanti dall'analisi statistica?Criterio di copertura delle definizioni Criterio di copertura degli usi Criterio di copertura dei cammini DU
cosa prevede il criterio di copertura delle definizioni?Un test T soddisfa il criterio di copertura delle definizioni se e solo se per ogni nodo i e ogni variabile x∈def(i)[insieme delle variabili definite nel comando i], T include un caso di test che esegue un cammino libero da definizioni da i ad almeno uno degli elementi di du(i,x)[il nodo del primo utilizzo di x]
cosa prevede il criterio di copertura degli usi?criterio di copertura di analisi statica. Un test T soddisfa il criterio di copertura degli usi se e solo se per ogni nodo i e ogni variabile x appartenente a def(i), T include un caso di test che esegue un cammino libero da definizioni da i ad ogni elemento di du(i,x).
che obiettivo ha il criterio di copertura dei cammini?ha l'obiettivo di testare tutte le possibili strade che passano da una istruzione A all'istruzione B questo criterio e' considerato impraticabile la maggior parte delle volte a causa della esponenzialita' della sua complessita' al crescere delle righe di codice
in cosa consiste il bebugging?una tecnica secondo la quale gli sviluppatori inseriscono deliberatamente n errori nel codice prima di mandarlo in analisi al team di testing, a cui viene comunicato il numero n di errori da trovare.
difetto del bebguggingè possibile che gli errori immessi artificialmente siano troppo facili o troppo difficili da trovare, per cui conviene sempre prendere tutto con le pinze.
in che cosa consiste l'analisi mutazionale?Dato un programma P e un test T, viene generato un insieme di programmi Π simili al programma P in esame: tali programmi prendono il nome di mutanti. caso i test sui mutanti hanno successo: il test non copre tutte le casistiche caso i test falliscono: test fatto bene o i mutanti non sono abbastanza fatti bene
che cosa stabilisce il criterio di copertura dei mutanti?Un test T soddisfa il criterio di copertura dei mutanti se e solo se per ogni mutante π∈Π esiste almeno un caso di test t∈T la cui esecuzione produca per π un risultato diverso da quello prodotto da P.
in quale situazione è utile utilizzare la high order mutation?esistono alcuni casi in cui trovare errori dopo aver applicato più modifiche è più difficile rispetto ad applicarne solo una. Può essere che un errore mascheri parzialmente lo stato inconsistente dell’altro rendendo più difficile il rilevamento di malfunzionamenti, cosa che porta a generare test ancora più approfonditi.
il testing nel caso di ereditarietà nei linguaggi Object Oriented come funziona?Il consenso degli esperti è di testare nuovamente tutti i metodi ereditati: nelle sottoclassi e nelle classi che implementano delle interfacce con metodi di default tali metodi opereranno infatti in nuovi contesti, per cui non vi è alcuna certezza che funzionino ancora a dovere. Inoltre, a causa del collegamento dinamico non è nemmeno sicuro che eseguire lo stesso metodo nella classe base significa eseguire le stesse istruzioni nella classe ereditata
quali criteri di testing sono praticabili e quali no?praticabili: - delle condizioni - delle decisioni - degli n cicli - dei comandi impraticabili: - copertura dei cammini - copertura dei condizioni composte
in cosa consiste il testing funzionale?il test funzionale è un tipo di test del software che si concentra sulla verifica del comportamento del programma dal punto di vista dell'utente finale. In altre parole, il test funzionale verifica se il software fornisce le funzionalità previste e se queste funzionano come previsto
quali sono le possibile tecniche per applicare il testing funzionale?- Metodi basati su grafi: oltre alle tecniche già viste in precedenza, si può per esempio lavorare anche sui diagrammi di sequenza; - Suddivisioni del dominio in classi di equivalenza: si possono raggruppare i valori del dominio che causano lo stesso comportamento in classi d’equivalenza, così da testare tutti i comportamenti distinti piuttosto che tutti i possibili valori del dominio. Occorre fare attenzione a non fare l’inverso, ovvero a concentrarsi sui soli valori appartenenti ad una classe di equivalenza ignorando il resto; - Analisi dei valori limite (test di frontiera): si testano, tra tutti i possibili valori del dominio, quelli “a cavallo” tra una categoria e l’altra, in quanto essi possono più facilmente causare malfunzionamenti; - Collaudo per confronto: si confronta la nuova versione del programma con la vecchia, assicurandosi che non siano presenti regressioni. Non solo si possono confrontare gli eseguibili, ma anche specifiche formali eseguibili che rappresentino le caratteristiche importanti del software;
cosa è il testing delle interfacce?è una tecnica che mira a testare come i vari sotto-sistemi del programma dialoghino e collaborino tra loro. per “interfacce” si intendono l’insieme di funzionalità che permettono l’interoperabilità dei componenti.
quali sono gli obiettivi della tecnica delle classi di equivalenza?- Dividere il dominio del programma in classi di dati, ovvero gruppi di valori di input che dovrebbero stimolare il programma nella stessa maniera. - Individuare casi di test che rivelino eventuali classi di equivalenza di errori, ovvero insiemi di valori che generano malfunzionamenti per lo stesso motivo.
quali sono i tipi di classi di equivalenza?- Classi di equivalenza valide: insiemi di valori di input che il programma dovrebbe accettare e processare correttamente. - Classi di equivalenza non valide: insiemi di valori di input che il programma dovrebbe rifiutare o processare in modo errato.
nel caso delle classi di equivalenza quale è l'importanza di comprendere anche i possibili stati non validi?È importante comprendere anche i possibili stati non validi in quanto bisogna testare che il programma reagisca bene all'input mal formattato. Se il programma non è in grado di gestire correttamente l'input mal formattato, potrebbe causare errori o malfunzionamenti.
che cosa è una classe di equivalenza?Le classi di equivalenza vengono utilizzate nei test funzionali per poter raggruppare input in classi di equivalenza per poter poi eseguire dei test con input rappresentativi di una classe.
come si sceglie la granularità delle classi di equivalenza?La scelta della granularità delle classi di equivalenza dipende da diversi fattori, tra cui la conoscenza del dominio del programma, i requisiti di test e le risorse disponibili. esempi possono essere: - PIN corretto per un programma che richiede un codice PIN di 4 cifre. - Valori compresi in un intervallo per un programma che accetta valori numerici. - Valori di un tipo di dato specifico per un programma che accetta valori di diversi tipi di dati.
in che cosa consistono i test i frontiera?La tecnica dei test di frontiera è complementare a quella delle classi di equivalenza. Partendo dal presupposto che gli errori tendono ad accumularsi sui casi limite, ovvero quelli la cui gestione è più particolare, questa tecnica suggerisce di selezionare come casi di test non valori a caso all’interno delle classi di equivalenza, ma i valori presenti al confine tra di loro.
in cosa consiste la tecnica di category partition?è una tecnica permette di caratterizzare e identificare le classi di equivalenza del dominio di un problema a partire dalle sue specifiche. Può essere utilizzata a vari livelli a seconda che si debbano realizzare test di unità, test di integrazione e o test funzionali.
quali sono le sequenze della tecnica Category partition?1) Analisi delle specifiche: in questa fase vengono identificate le unità funzionali individuali che possono essere verificate singolarmente; non necessariamente sono un’unica classe, è sufficiente che siano componenti facilmente separabili dal resto, sia a livello di testing che concettuale. Per ogni unità vengono quindi identificate delle caratteristiche (categorie) dei parametri e dell’ambiente in cui opera; 2) scegliere dei valori: per ogni categoria, occorre scegliere quali sono i valori sensati su cui fare riferimento; 3) determinare eventuali vincoli tra le scelte, che non sono sempre indipendenti; 4) scrivere test e documentazione.
che cosa prevede il criterio di copertura del budget?Molto spesso nei contesti reali l’unico criterio applicato è quello di copertura del budget: si continuano a creare casi di test finché non sono finite le risorse (tempo e soldi). Questa tecnica ovviamente non fornisce alcuna garanzia sull’efficacia dei test, ed è sicuramente sconsigliata
quali sono le differenze tra il testing funzionale in un linguaggio procedurale e in un linguaggio a oggetti?In un linguaggio procedurale, i test di integrazione possono essere scritti secondo logiche bottom-up o top-down. In un linguaggio a oggetti, invece, la situazione è più caotica, in quanto le relazioni tra le classi sono spesso cicliche e non gerarchiche. Questo rende difficoltoso individuare un punto da cui partire a integrare.
Quali sono le relazioni interessanti da considerare nella fase di test di integrazione in un linguaggio a oggetti?Le relazioni interessanti da considerare nella fase di test di integrazione in un linguaggio a oggetti sono associazioni, aggregazioni e dipendenze. Queste relazioni possono essere utilizzate per identificare il sottoinsieme di classi da testare.
Per identificare il sottoinsieme di classi da testare nella fase di test di integrazione in un linguaggio a oggetti, si possono utilizzare i seguenti diagrammiDiagrammi degli use cases e scenari Sequence diagram State diagram
in cosa consistono le tecniche di Software inspectionsono tecniche di verifica e convalida, sostanzialmente tecniche manuali per individuare e correggere gli errori basati su una attività di gruppo in cui si analizza il codice insieme passo passo. per esempio la tecnica di pair programming già ampiamente citata parlando di XP. sono: - Fagan code inspection - Automazione - Pro e contro - Confronto tra tecniche di verifica e convalida - Gruppi di test autonomi
Quali sono i ruoli coinvolti nella Fagan code inspection?- Moderatore: è colui che coordina i meeting, sceglie i partecipanti e ha la responsabilità di far rispettare le regole. - Readers e Testers: sono i partecipanti che leggono il codice al gruppo e cercano difetti al suo interno. - Autore: è colui che ha scritto il codice sotto ispezione.
Quali sono le fasi del processo di Fagan code inspection?- Planning: in questa fase il moderatore sceglie i partecipanti, si definiscono i loro ruoli e il tempo da dedicare alla ispezione, pianificando anche i vari incontri. - Overview: viene fornito a tutti i partecipanti materiale sul progetto per permettere loro di farsi un’idea del contesto in cui l’oggetto dell’ispezione si inserisce in ottica della riunione vera e propria. - Preparation: i partecipanti comprendono il codice e la sua struttura autonomamente sulla base anche del materiale distribuito nella fase precedente. - Inspection: la vera e propria fase di ispezione. In questa fase si verifica che il codice soddisfi le regole definite in precedenza e si segnalano eventuali problemi o anomalie. - Rework: una volta individuati i problemi, l’autore del codice si occupa di correggere i difetti individuati. - possibile re-ispezione del nuovo codice ottenuto dopo la fase precedente.
Quali sono le tecniche utilizzate durante la fase di ispezione nel processo di Fagan?- Lettura del codice: il codice è letto al gruppo da uno o più partecipanti. - Test a mano: si analizza il flusso di controllo del programma su una serie di casi di test così da verificarne il funzionamento. - Checklist: si utilizzano checklist per verificare che il codice soddisfi determinate regole o requisiti.
che cosa prevede la variante della Fagan code inspection?La variante della Fagan code inspection chiamata Active Design Reviews prevede che sia l’autore del codice a leggere le checklist e sollevare questioni all’attenzione dei revisori, chiedendo diverse domande. Essendo presi direttamente in causa, i revisori saranno quindi costretti a partecipare.
che cosa stabilisce il criterio di copertura dei cammini DU di differente dal criterio di copertura degli usi?mentre il criterio di copertura degli usi copre un singolo cammino che va dal una definizione di x a un utilizzo di x, il criterio di copertura dei cammini DU mira a coprire tutti i cammini che vanno da una definizione ad un utilizzo
pro della software inspection?- Esiste un processo rigoroso e dettagliato; - Si basa sull’accumulo dell’esperienza, auto-migliorandosi con il tempo (vd. checklist); - Il processo integra una serie di incentivi sociali che spingono l’autore del codice ad analizzarlo in modo critico; - A differenza del testing è possibile per la mente umana astrarre il dominio completo dei dati, considerando quindi in un certo senso tutti i casi di test; - È applicabile anche a programmi incompleti.
difetti della software inspection?- Il test può essere fatto solo a livello di unità in quanto la mente umana ha difficoltà a lavorare in situazioni in cui sono presenti molte informazioni contemporaneamente in assenza di astrazioni e indirettezze. - Non è incrementale: spesso infatti la fase di follow-up non è così efficace, in quanto il codice è cambiato talmente tanto che è necessario ricominciare l’ispezione da capo.
che cosa afferma la Legge di Weinberg ?"Uno sviluppatore non è adatto a testare il suo codice."