1. MyAir. Analizzare anche i criteri funzionali

Documenti analoghi
Sequenza alternativa degli eventi: Variazione di prezzo superiore al 20% per almeno un articolo.

Caso d Uso: AcquistoAbbonamentoStudentiSettimanaleGiornaliero Breve descrizione. Procedura per la registrazione al servizio CicloPi.

Esercizi di Ingegneria del Software

Esercizi di Ingegneria del Software

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Problemi, istanze, soluzioni

11.4 Chiusura transitiva

Definizione di metodi in Java

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Fondamenti di Informatica T-1

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3

Definizione di classi

nome (lista_parametri) Funzioni funzioni predefinite: sqrt(x) log(x) usare queste funzioni significa: specificare il valore degli argomenti

Gestione degli impegni Requisiti generali Si fissi come ipotesi che la sequenza di impegni sia ordinata rispetto al tempo,, e che ogni lavoratore abbi

Collaudo del software

Esercizi proposti 10

Laboratorio di programmazione

Elementi di C++ di base

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 17 giugno 2013

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Algoritmi e Principi dell Informatica

Fondazione ITS A. Volta linguaggi Flavia Lollis 1

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

Università di Roma Tor Vergata L12-1

Programmazione II Compitino (Vers. A)

Le Funzioni e la Ricorsione

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 13/09/2013/ Foglio delle domande/versione 1

Un esempio di if annidati

Uso di metodi statici. Walter Didimo

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Confronti, equals. Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals. Laboratorio di Programmazione - Luca Tesei

Errata Corrige di Manuale di Java 8

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

Compito Sistemi Informativi LA. Tempo concesso : 90 minuti 28 Giugno 05 Nome: Cognome: Matricola: Esercizio 1

Strutture dati e loro organizzazione. Gabriella Trucco

Esercizi della lezione 5 di Java

Funzioni. function [<risultati>] = nome_funzione ([ par.formali ])

Informatica B. Facoltà di Ingegneria Industriale Laurea in Ingegneria Energetica, Meccanica e dei Trasporti. Prof. Marco Masseroli

Fondamenti di Informatica T-1. Costruttori Ereditarietà

Si considerino le seguenti specifiche relative alla realizzazione di un sistema informativo per la gestione di un sito di blog.

24 - Possibili approfondimenti

Esercizio 1 Liste: calcolo perimetro di un poligono

Esercizi di Algoritmi e Strutture Dati

Fondamenti di Internet e Reti

Fondamenti di Informatica T-1 Modulo 2

Costrutti condizionali e iterativi

Enos Recanati RELAZIONE DEL PROGETTO DI CALCOLO DELLE PROBABILITÀ E STATISTICA MATEMATICA

Algoritmo basato su cancellazione di cicli

Parcheggio.rtf 1/8 6 gennaio Prova di programmazione: parcheggio a pagamento

Algoritmi e strutture dati

Algoritmi e Strutture Dati - Prof. Roberto De Prisco A.A Seconda prova di verifica (4 Febbraio 2005)

I/O FILE. Sommario I/O FILE. I/O FILE LETTURA DA FILE DI TESTO oggetto di tipo ifstream. I/O FILE: lettura e scrittura su file di testo

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

Ereditarietà e Polimorfismo

Matematica in laboratorio

Corso di Fondamenti di Informatica Classi di istruzioni 2

Access. P a r t e t e r z a

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Luglio Soluzione degli Esercizi

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

Esiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali

5 - Istruzioni condizionali

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

2.3 Cammini ottimi. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Zeri di una funzione. Funzioni continue - Proprietà. certo intervallo dell'asse x. da: a ξ. cui f(x)=0. precisione desiderata (iterazione( iterazione)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Refactoring 5 Sposta Metodo. 5 Sposta Metodo. 5 Sposta Metodo - Codice iniziale

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

CRITTOGRAFIA 2014/15 Appello del 13 gennaio Nome: Cognome: Matricola:

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Esercizi di Algoritmi e Strutture Dati

Riferimenti ad oggetti: Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro. Riferimenti ad oggetti: (Esempio)

Esercizi per il recupero del debito formativo:

Linguaggio C: le funzioni. Introduzione e sintassi

Obiettivi di questa esercitazione

Fondamenti di Informatica T1 Mappe

Esercizio 1 (12 punti) Minimizzare il numero di stati dell automa qui rappresentato. Disegnare l automa minimo.

Sviluppo di programmi

Indice generale Prefazione...xiii Capitolo 1 Introduzione...1 Capitolo 2 Sviluppo del software, tipi di dati ed espressioni...31

La simulazione con DERIVE Marcello Pedone LE SIMULAZIONI DEL LANCIO DI DADI CON DERIVE

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Studente (Cognome Nome):

Lezione 3: File di input, File di output

Grafi e gruppo fondamentale di un grafo

Esonero del corso di Programmazione a Oggetti

Programmazione Funzionale

Il generatore di numeri casuali

Prova di Laboratorio di Programmazione

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

LE TABELLE. Le liste permettono di avere una sequenza di righe In alcune applicazioni è però necessario visualizzare le informazioni anche in colonne

Unità 2 I file binari

C.L. Informatica, M-Z Bari, 12 Gennaio 2016 Traccia: 1

Cosa si intende con stato

28/05/2015 Laura Ricci

Verificare se una grammatica e LL(1) e costruirne la tabella di parsing. Verificare se una grammatica e LR(0) e costruirne la tabele ACTION e GOTO

Informatica 3 secondo recupero 13 Settembre 2002

Fondamenti di Informatica T-1 Modulo 2

Transcript:

Esercizi di verifica: progettazione di casi di test usando criteri strutturali. 1. MyAir Si consideri il metodo stimalivelli, con la seguente specifica: dato un vettore di associati del club MyAir, restituisce una tripla formata, rispettivamente, dal numero degli associati che, in base alla loro situazione: migliorano il proprio livello, non lo modificano, lo peggiorano. Si noti che i livelli standard, argento e oro sono codificati rispettivamente con 1, 2, e 3. public Tripla stimalivelli(vector <AssociatoMyAir> associatimyair) { int inaumento = 0; int stabili = 0; int incalo = 0; for (AssociatoMyAir m : associatimyair) { // itera su associatimyair int livello = m.getlivello(); int miglia = m.getmiglia(); int differenza; if (miglia > 100000) differenza = 3 - livello; else if (miglia > 15000) differenza = 2 - livello; else differenza = 1 - livello; if (differenza > 0) inaumento++; else if (differenza==0) stabili++; else incalo++; return new Tripla(inAumento, stabili, incalo); Definire un insieme di coppie di attributi (livello, miglia) da attribuire agli elementi del vettore associatimyair che permetta di raggiungere una copertura del 100% del codice del metodo stimalivelli, secondo il criterio dei comandi. Risposta. Una soluzione minimale è la seguente: Livello Miglia 2 120000 3 75000 1 10000 Analizzare anche i criteri funzionali 1

2. Stub e Criteri strutturali Il pedaggio si calcola considerando: la tariffa unitaria a chilometro, il tipo di veicolo utilizzato (5 classi), le caratteristiche dei tratti autostradali percorsi (di pianura o di montagna). Si supponga il calcolo sia fatto usando i metodi così specificati: /*dati i caselli di ingresso e di uscita, restituisce il numero di km di pianura e il numero di quelli di montagna*/ int[ ] calcolachilometri(a String, b String) /*dati i caselli di ingresso e di uscita e la classe del veicolo, ottiene il numero di Km percorsi e calcola il pedaggio */ double calcolapedaggio(a String, b String, c Classe) Per quale dei due metodi dati sopra potrebbe essere utile creare uno stub, nella verifica del calcolo del pedaggio? Definire un semplice stub, che permetta la ripetibilità dei test, e non sia banale (vari i risultati in funzione degli argomenti). Risposta. Notando che calcolapedaggio deve invocare calcolachilometri, e che la realizzazione di questo metodo richiede l'accesso al DBrete, conviene testare calcolapedaggio con uno stub per calcolachilometri. Per permettere la ripetibilità dei test non si può usare un generatore di numeri pseudo-casuali. La soluzione che segue conserva la proprietà commutativa di calcolachilometri (andando da A a B si fanno gli stessi chilometri che andando da B a A) e può produrre anche risultati estremi (tratto di montagna o di pianura lungo zero): int[ ] calcolachilometri(a String, b String){ int[] coppia = {0,0; int mx = max(a.length(),b.length()); int mn = min(a.length(),b.length()); coppia[0]= mx mn ; coppia[1]= (2*mn >= mx? 2*mn-mx : mn) ; return coppia; 2

3. continua ex precedente Si supponga ora che il calcolo del pedaggio sia fatto usando il metodo così specificato: /*dati i il numero di km di pianura p, il numero di km di montagna m e la classe del veicolo c, calcola il pedaggio */ double calcolapedaggio(p int, m int, c int) { double pedaggio = 0.0; if (m <= SOGLIA_MONTAGNA) { pedaggio = (p + m) * c * COSTO_UNITARIO; else { pedaggio = (p + 2*m) * c * COSTO_UNITARIO; if (c<5) { pedaggio = pedaggio * (1 + ALIQUOTA_IVA); return pedaggio; a) Definire i valori di input di un insieme di casi di prova per la convalida del metodo calcolapedaggio, applicando un criterio di progettazione delle prove a scatola aperta. L ambiente di prova prevede i seguenti valori per le costanti usate dal metodo: private final double ALIQUOTA_IVA = 0.20; private final double COSTO_UNITARIO = 0.20; private final double SOGLIA_MONTAGNA = 50; b) perchè, in base alle informazioni fornite nel testo, non è possibile completare i casi di prova? Risposta. a) Una possibile selezione di casi di prova, relativamente ai valori di input, che permette una copertura del 100% secondo il criterio delle decisioni è data dalla seguente tabella: b) c) P d) M e) c f) 10 g) 40 h) 1 i) 10 j) 60 k) 5 b) Il completamento richiederebbe la specifica dei risultati attesi in output, ma le informazioni nel testo non permettono di costruire un oracolo. 3

4. Albergo dei Fiori Il seguente metodo determina la durata del più lungo periodo di occupazione di una stanza in un periodo dato. public int massimoperiodo (boolean [] p) { int k = 0; int massimo = 0; for (int i = 0; i < p.length; i++) { if (p[i]) { k++; if (k > massimo) { massimo = k; else { k = 0; return massimo; Domanda. (Verifica). a) Disegnare il grafo di flusso (o grafo di controllo) del metodo. b) Dare un insieme di cardinalità minima di casi di prova per la copertura delle decisioni. Risposta. Una possibile soluzione è la seguente: Un insieme minimale di casi di prova che soddisfa la copertura richiesta è il seguente: input output T F T 1 4

5. Grande distribuzione Modifica dei prezzi. Il seguente metodo è di fantasia e non realizza esattamente alcun caso d uso (perché?). E stato scritto per controllare la lista dei nuovi prezzi rispetto al vincolo di mantenere le variazioni entro il 20%. Le variabili cl e db denotano gli oggetti che gestiscono rispettivamente le interazioni con il cliente e con il data base. public void controllaprezzi(int [][] listacodici) { for(int i=0; i < listacodici.length; i++) { int codice = listacodici[i][0]; //1 int oldprezzo = db.getprezzo(codice); //2 int nuovoprezzo = listacodici[i][1]; //3 if (nuovoprezzo < oldprezzo * 0.8){ nuovoprezzo = (int) (oldprezzo * 0.8); //4 if (nuovoprezzo > oldprezzo * 1.2) { nuovoprezzo = (int) (oldprezzo * 1.2); //5 cl.aggiornato(codice,nuovoprezzo); //6 db.setprezzo(codice, nuovoprezzo); //7 return; Dare un diagramma di attività con il grafo di flusso del metodo. Si usi la numerazione indicata per non ricopiare i comandi. Inoltre, per effettuare i test, si assuma che lo stub per getprezzo sia definito in modo da restituire un valore pari a 10 volte il suo argomento. Gli argomenti dei metodi aggiornato e setprezzo costituiscono l output del metodo. Si utilizzi una tabella come la seguente per la risposta, con il numero di righe necessarie. i listacodici[i] a. Dare un (solo!) caso di test che soddisfi il criterio (a scatola aperta) delle decisioni. b. Dare un insieme minimale di casi di test soddisfi il criterio (a scatola aperta) di copertura dei comandi. c. Dare un insieme minimale di casi di test soddisfi il criterio (a scatola aperta) di copertura dei cammini, nel caso di 1-test dei cicli. Risposta: Il grafo di flusso: 5

a) Un possibile caso di test è il seguente 0 1 11 1 11 1 2 15 2 16 2 3 40 3 36 b) Basta una lista con due prezzi, fuori dall intervallo permesso, dalle due parti: 1 2 15 2 16 2 3 40 3 36 c) Servono tre liste di un solo elemento, per fare tre cicli di un solo passo, in ciascuno dei quali si percorre uno dei tre cammini possibili nel corpo del ciclo: 0 1 11 1 11 0 2 15 2 16 I listacodici[i] 0 3 40 3 36 6. CicloPi Per calcolare quanto deve essere pagato al momento dell acquisto di un abbonamento, è stata definita la classe enumerazione TipoAbbonamento e scritto il codice seguente (per semplicità sono stati considerati solo due tipi di abbonamento). private final double COSTO_SETTIMANALE = 8.00; private final double RICARICA_SETTIMANALE = 2.00; private final double COSTO_GIORNALIERO = 4.00; private final double RICARICA_SETTIMANALE = 1.00; private double credito; public double DRIVERcalcolaCosto(TipoAbbonamento abb, double credito){ double costoabbonamento = 0; this.credito = credito; // 1 switch(abb){ case SETTIMANALE: costoabbonamento = calcolacostosettimanale(); break; case GIORNALIERO: costoabbonamento = calcolacostogiornaliero(); return costoabbonamento; // 2 6

private double calcolacostosettimanale( ) { double costo = COSTO_SETTIMANALE; // 3 if (credito < RICARICA_SETTIMANALE) costo = costo + (RICARICA_SETTIMANALE - credito); // 4 return costo; // 5 private double calcolacostogiornaliero( ) { double costo = COSTO_GIORNALIERO; // 6 if (credito < RICARICA_GIORNALIERA) costo = costo + (RICARICA_GIORNALIERA - credito); // 7 return costo; // 8 Domanda. Si disegni il grafo di flusso per il codice dato, etichettando i nodi, per semplicità, con i numeri associati alle linee di codice. Si definisca un numero minimo di casi di test (senza considerare l ambiente) per testare il metodo DRIVERcalcolaCosto (e i metodi che invoca) e avere 100% di copertura per il criterio dei cammini. Si giustifichi la risposta indicando i cammini usando le etichette dei nodi del grafo attraversati. Risposta. Giustificazione Abb credito SETTIMANALE 1.0 9.0 1,3,4,5,2 SETTIMANALE 3.0 8.0 1,3,5,2 GIORNALIERO 0.5 4.5 1,6,7,8,2 GIORNALIERO 2.0 4.0 1,6,8,2 7