Programmazione Procedurale in Linguaggio C++

Похожие документы
Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Fondamenti di Informatica AA 2016/2017

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Reti di calcolatori Introduzione al corso

Debug di un programma

Il problema dello zaino

Programmazione Orientata agli Oggetti in Linguaggio Java

Esercizi di Algoritmi e Strutture Dati

Introduzione alla rete Internet

Programmazione Orientata agli Oggetti in Linguaggio Java

Fondamenti di informatica T-1 (A K) Esercitazione 6: Eclipse

Introduzione alla rete Internet

COSTRUZIONE DI UN APPLICAZIONE

Primo programma in C

ISTRUZIONI DEVC++ Autore: Luca Florio (luca.florio<at>polimi.it)

Sommario. Introduzione Architettura Client-Server. Server Web Browser Web. Architettura a Due Livelli Architettura a Tre Livelli

Programmazione Orientata agli Oggetti in Linguaggio Java

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Cos'è il Debug? Il debug di un programma è la fase di ricerca e correzione di errori che si manifestano a runtime

2 Lavorare con Eclipse

Laboratorio di informatica Ingegneria meccanica

ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE)

Programmazione in Python. Moreno Marzolla

Транскрипт:

Programmazione Procedurale in Linguaggio C++ Sottoprogrammi Concetti Avanzati Tecniche di Test e Correzione versione 2.4 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca Università della Basilicata mecca@unibas.it Sottoprogrammi: Concetti Avanzati >> Sommario Sommario Tecniche di Test e Correzione Utilizzo del Debugger Il Turbo Debugger 2

Sottoprogrammi: Concetti Avanzati >> Tecniche di Test e Correzione Tecniche di Test e Correzione Dopo la scrittura del codice è necessario condurre le verifiche (test) ed eliminare gli eventuali errori logici Il metodo tipico di test test manuale e interattivo Il metodo tipico di correzione metodo delle stampe 3 Sottoprogrammi: Concetti Avanzati >> Tecniche di Test e Correzione Tecniche di Correzione Queste tecniche funzionano per programmi dalla logica applicativa semplice con un piano dei test semplici Principale svantaggio i test sono eseguiti interattivamente il programmatore è costretto a ripeterli tutte le volte che effettua modifiche processo noioso e aperto agli errori 4

Sottoprogrammi: Concetti Avanzati >> Tecniche di Test e Correzione Tecniche di Correzione In casi più complessi programmi con logica applicativa complessa in cui il codice viene sottoposto a frequenti modifiche è opportuno adottare tecniche alternative e strumenti alternativi Debugger 5 Sottoprogrammi: Concetti Avanzati >> Idea programmare i test scrivendo il codice relativo in modo che siano totalmente automatizzati e siano eseguibili rapidamente, ripetutamente, senza intervento interattivo eseguire i test deve costare quanto schiacciare un tasto 6

Sottoprogrammi: Concetti Avanzati >> Vantaggio di questo approccio è possibile effettuare più facilmente modifiche al codice scoprendo presto eventuali regressioni (passi indietro), ovvero errori introdotti dalle modifiche in modo da poterli eliminare concentrandosi solo sulle porzioni di codice scorrette i test diventano un paracadute 7 Sottoprogrammi: Concetti Avanzati >> Cos é un test un pezzo di codice aggiuntivo rispetto a quello dell applicazione che utilizza uno o più sottoprogrammi dell applicazione fornendo dei dati stabiliti dal programmatore e facendo asserzioni sul risultato atteso il test è superato se l asserzione è vera 8

Sottoprogrammi: Concetti Avanzati >> Un esempio sovrapposizione di rettangoli Caratteristiche del problema logica applicativa complessa vari raffinamenti nella scelta della soluzione (concepimento della formula) piano di test elaborati 9 Sottoprogrammi: Concetti Avanzati >> TEST n. 1 TEST n. 2 rettangolo 1: (1, 2) (7, 6) rettangolo 1: (-2, 3.5) (3, 5.5) rettangolo 2: (3, 1) (8, 5) rettangolo 2: (2, 1) (6.2, 3) sovrapposizione: 12 cm 2 sovrapposizione: 0 10

Sottoprogrammi: Concetti Avanzati >> TEST n. 3 TEST n. 4 rettangolo 1: (-1, 1) (7, 6) rettangolo 1: (-2, 1) (3, 5.5) rettangolo 2: (3, 2) (6, 5) rettangolo 2: (3, 1) (7.2, 3) sovrapposizione: 9 cm 2 sovrapposizione: 0 11 Sottoprogrammi: Concetti Avanzati >> >> rettangoli2.cpp >> rettangoli2test.cpp TEST n. 5 TEST n. 6 rettangolo 1: (-1, 1) (7, 6) rettangolo 1: (-2, 3) (3, 5.5) rettangolo 2: (4, 2) (7, 5) rettangolo 2: (3, 1) (7.2, 3) sovrapposizione: 9 cm 2 sovrapposizione: 0 12

Sottoprogrammi: Concetti Avanzati >> La Procedura assert void assert (string s, bool asserzione) { if (!asserzione) { cout << "\n ****Errore: " << s << endl; //exit(0); } else { cout << "."; } return; } 13 Sottoprogrammi: Concetti Avanzati >> Un Esempio di Test void testareasovrapposizione1() { cout << "\n**testareasovrapposizione1\n"; rettangolo r1 = {{1, 2}, {7, 6}}; rettangolo r2 = {{3, 1}, {8, 5}}; float area; area = areasovrapposizione(r1, r2); assert("test area n.1", area == 12); return; } 14

Sottoprogrammi: Concetti Avanzati >> Un Esempio di Test void main() { testquadrante1(); testminimo1(); testmassimo1(); testlunghezzasegmentocomune1(); testlunghezzasegmentocomune2(); testareasovrapposizione1(); testareasovrapposizione2(); testareasovrapposizione3(); testareasovrapposizione4(); testareasovrapposizione5(); testareasovrapposizione6(); } 15 Sottoprogrammi: Concetti Avanzati >> L approccio scrivere molti piccoli test verificando tutti i sottoprogrammi in condizioni diverse di utilizzo Test di Unità ( Unit Tests ) le unità (i moduli) che compongono il codice vengono verificate una per una per accertare il funzionamento corretto di ciascuno 16

Sottoprogrammi: Concetti Avanzati >> Alcune annotazioni il sistema richiede di scrivere molto codice aggiuntivo (il codice dei test) i test diventano essi stessi parte della base di codice e devono essere manutenuti il sistema di per sé non garantisce l eliminazione degli errori (dipende da come sono scritti i test) 17 Sottoprogrammi: Concetti Avanzati >> Attenzione non è possibile effettuare test sugli schermi è possibile effettuare test solo sui sottoprogrammi di calcolo e quelli per la persistenza infatti: questi ultimi sono riutilizzabili (anche a scopo di test) i primi no ulteriore conferma dell importanza della separazione 18

Sottoprogrammi: Concetti Avanzati >> Test sugli schermi test funzionali test che verificano che l interazione con l utente si svolga correttamente e i risultati forniti siano quelli corretti un altra categoria di test In generale sono necessari sia test di unità che test funzionali 19 Sottoprogrammi: Concetti Avanzati >> Di conseguenza attenzione a come scrivete il codice Esempio: stampa del quadrante int calcolaquadrante(punto p); void schermostampaquadrante(punto p){ int q = calcolaquadrante(p); cout << Quadrante: << q << endl; return; } Chiara separazione tra il modulo di calcolo e il modulo di schermo 20

Sottoprogrammi: Concetti Avanzati >> Alternativa scorretta void quadrante(punto p){ int q = 4; if (p.x >= 0 && p.y >= 0) q = 1; else if (p.x < 0 && p.y >= 0) q = 2; else if (p.x < 0 && p.y < 0) q = 3; cout << Quadrante : << q << endl; return; } Questo modulo effettua contemporaneamente calcolo ed interazione; sul codice che calcola il quadrante non è possibile effettuare test 21 Sottoprogrammi: Concetti Avanzati >> Cosa fare in caso di scoperta di un baco errore logico nel codice non catturato da un test prima operazione: scrivere un test che cattura il baco (in modo che fallisca) seconda operazione: correggere il codice, in modo che il test abbia successo 22

Sottoprogrammi: Concetti Avanzati >> Come correggere gli errori? il sistema aiuta moltissimo ad identificarli il sottoprogramma scorretto viene immediatamente identificato Primo approccio ispezione del codice Secondo approccio utilizzo del debugger 23 Sottoprogrammi: Concetti Avanzati >> Utilizzo del Debugger Utilizzo del Debugger Debugger ( Correttore ) strumento che consente di ispezionare la pila di attivazione durante il funzionamento di un programma verificando i valori delle variabili verificando i valori dei parametri in modo da seguire passo passo l esecuzione del codice per trovare dove si verificano gli errori 24

Sottoprogrammi: Concetti Avanzati >> Utilizzo del Debugger Utilizzo del Debugger Funzionalità principali consente di eseguire il programma decidendo punti di interruzione ( breakpoint ) ad ogni breakpoint l esecuzione si interrompe è possibile ispezionare la pila di attivazione in corrispondenza dei punti di interruzione è possibile analizzare il contenuto dei record di attivazione per verificare i valori in memoria 25 Sottoprogrammi: Concetti Avanzati >> Utilizzo del Debugger Utilizzo del Debugger Un esempio per il C++ il Turbo Debugger 5.5 della Borland pensato per funzionare con il compilatore Borland BCC 5.5 distribuito gratuitamente come il compilatore sul sito www.borland.com Un esempio per il FORTRAN il compilatore SALFORD ha un debugger apposito a corredo (Programmi >> Salford) 26

Sottoprogrammi: Concetti Avanzati >> Utilizzo del Debugger Utilizzo del Turbo Debugger Per usare il Turbo Debugger è necessario compilare il codice utilizzando l opzione di debugging v esempio: bcc32 v prova.cpp Per lanciare il Turbo Debugger td32 prova.exe Turbo Debugger >> 27 Sottoprogrammi: Concetti Avanzati >> Utilizzo del Debugger Utilizzo del Turbo Debugger 28

Sottoprogrammi: Concetti Avanzati >> Utilizzo del Debugger Utilizzo del Turbo Debugger Punti di Interruzione ( Breakpoint ) si attivano/disattivano selezionando la linea di codice sorgente corrispondente e premendo F2 attenzione: solo se la linea è preceduta da un punto (.) il codice dell applicazione è diviso in pezzi per il debugging per vedere l elenco dei pezzi CTRL-F 29 Sottoprogrammi: Concetti Avanzati >> Utilizzo del Debugger Utilizzo del Turbo Debugger In corrispondenza dei breakpoint vari comandi disponibili In particolare è possibile esplorare la pila è possibile valutare condizioni (es: condizioni di controllo degli if o dei while) è possibile effettuare il log su file o in una finestra particolare degli eventi è possibile continuare 30

Sottoprogrammi: Concetti Avanzati >> Utilizzo del Debugger Utilizzo del Turbo Debugger Continuare fino al breakpoint successivo continue Procedere passo passo esegue solo l istruzione successiva trace into (o step into ): se l istruzione contiene la chiamata di un sottoprog., dettagliare l esecuzione step over : se l istruzione contiene la chiamata di un sottoprog., ignorare i dettagli dell esecuzione 31 Sottoprogrammi: Concetti Avanzati >> Sommario Riassumendo Tecniche di Test e Correzione Il Metodo delle Stampe Utilizzo del Debugger Il Turbo Debugger 32

Termini della Licenza Termini della Licenza This work is licensed under the Creative Commons Attribution- ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Questo lavoro viene concesso in uso secondo i termini della licenza Attribution-ShareAlike di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. 33