Programmazione Procedurale in Linguaggio C++

Размер: px
Начинать показ со страницы:

Download "Programmazione Procedurale in Linguaggio C++"

Транскрипт

1 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 [email protected] Sottoprogrammi: Concetti Avanzati >> Sommario Sommario Tecniche di Test e Correzione Utilizzo del Debugger Il Turbo Debugger 2

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

3 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

4 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

5 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

6 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

7 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

8 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

9 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

10 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

11 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

12 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

13 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 Un esempio per il FORTRAN il compilatore SALFORD ha un debugger apposito a corredo (Programmi >> Salford) 26

14 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

15 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

16 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

17 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 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 oppure inviare una lettera all indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. 33

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Elementi di Base Parte 6 Il FORTRAN versione 2.0 Questolavoroè concessoin uso secondoi termini di unalicenzacreative Commons (vedi ultima pagina) G. Mecca Università

Подробнее

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Подробнее

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Elementi di Base Parte 1 Introduzione G. Mecca M. Samela Università della Basilicata Elementi di Base >> Sommario Sommario Linguaggi di Programmazione Sintassi

Подробнее

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Strutture di Dati La Matrice versione. Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca Università

Подробнее

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Ruoli e Responsabilità: C# versione 1.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G.

Подробнее

Fondamenti di Informatica AA 2016/2017

Fondamenti di Informatica AA 2016/2017 Fondamenti di Informatica AA 2016/2017 Eng. Ph.D. Michela Paolucci DISIT Lab http://www.disit.dinfo.unifi.it Department of Information Engineering, DINFO University of Florence Via S. Marta 3, 50139, Firenze,

Подробнее

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Tipi Strutturati Parte 3 Record G. Mecca M. Samela Università della Basilicata Tipi Strutturati: Record >> Sommario Sommario Introduzione Dichiarazione di Record

Подробнее

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Ruoli e Responsabilità: Introduzione versione 2.3 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima

Подробнее

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Tipi Strutturati Parte 1 Introduzione G. Mecca M. Samela Università della Basilicata Tipi Strutturati: Introduzione >> Sommario Sommario Panoramica Alcuni Esempi

Подробнее

Reti di calcolatori Introduzione al corso

Reti di calcolatori Introduzione al corso Reti di calcolatori Introduzione al corso Gruppo Reti TLC [email protected] http://www.telematica.polito.it/ RETI DI CALCOLATORI Introduzione al corso - 1 Copyright Quest opera è protetta dalla licenza

Подробнее

Debug di un programma

Debug di un programma Debug di un programma Col termine Debug si intende una fase di sviluppo del software, nella quale si cerca di eliminare gli errori dal programma Due tipi di errori: Errori sintattici, rilevati sempre dal

Подробнее

Il problema dello zaino

Il problema dello zaino Il problema dello zaino (knapsack problem) Damiano Macedonio [email protected] Copyright 2010 2012 Moreno Marzolla, Università di Bologna (http://www.moreno.marzolla.name/teaching/asd2011b/) This work is licensed

Подробнее

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Conclusioni Parte b versione 2.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima

Подробнее

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla http://www.moreno.marzolla.name/ Ultima Modifica: 7 ottobre 202 Copyright Portions of this work are Copyright 202, Moreno Marzolla. This work is licensed

Подробнее

Introduzione alla rete Internet

Introduzione alla rete Internet Introduzione alla rete Internet Gruppo Reti TLC [email protected] http://www.telematica.polito.it/ INTRODUZIONE ALLE RETI TELEMATICHE - 1 Copyright Quest opera è protetta dalla licenza Creative Commons

Подробнее

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Grafica: Thread versione 1.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Подробнее

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

Fondamenti di informatica T-1 (A K) Esercitazione 6: Eclipse Fondamenti di informatica T-1 (A K) Esercitazione 6: Eclipse AA 2018/2019 Tutor [email protected] 2 Esercitazione 6 Introduzione al calcolatore e Java Linguaggio Java, basi e controllo del flusso Eclipse

Подробнее

Introduzione alla rete Internet

Introduzione alla rete Internet Introduzione alla rete Internet Gruppo Reti TLC [email protected] http://www.telematica.polito.it/ INTRODUZIONE ALLE RETI TELEMATICHE - 1 Copyright Quest opera è protetta dalla licenza Creative Commons

Подробнее

COSTRUZIONE DI UN APPLICAZIONE

COSTRUZIONE DI UN APPLICAZIONE COSTRUZIONE DI UN APPLICAZIONE Per costruire un applicazione occorre: compilare il file (o i file se più d uno) che contengono il testo del programma (file sorgente) Il risultato sono uno o più file oggetto.

Подробнее

Primo programma in C

Primo programma in C Primo programma in C Struttura minima di un file C Applicazioni C in modo console Struttura del programma Commenti Direttive #include Definizione di variabili Corpo del main 2 Struttura minima di un file

Подробнее

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

ISTRUZIONI DEVC++ Autore: Luca Florio (luca.florio<at>polimi.it) ISTRUZIONI DEVC++ Autore: Luca Florio (luca.floriopolimi.it) DevC++ è un ambiente di programmazione scaricabile gratuitamente che fornisce funzionalità per la creazione di applicativi in linguaggio

Подробнее

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

Sommario. Introduzione Architettura Client-Server. Server Web Browser Web. Architettura a Due Livelli Architettura a Tre Livelli Sommario Introduzione Architettura Client-Server Architettura a Due Livelli Architettura a Tre Livelli Server Web Browser Web Introduzione La storia inizia nel 1989 Tim Berners-Lee al CERN, progetto WWW

Подробнее

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Design Pattern: Storia Parte b versione 2.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Подробнее

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

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso

Подробнее

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

Cos'è il Debug? Il debug di un programma è la fase di ricerca e correzione di errori che si manifestano a runtime GDB Debugger Cos'è il Debug? Il debug di un programma è la fase di ricerca e correzione di errori che si manifestano a runtime In genere questo accade quando sono presenti frammenti di codice errati detti

Подробнее

2 Lavorare con Eclipse

2 Lavorare con Eclipse Corso Eclipse 2 Lavorare con Eclipse 1 Prerequisiti Conoscenza elementare ambiente Eclipse Compilare ed eseguire semplici applicazioni Java Conoscere i tipici errori di programmazione Individuare errori

Подробнее

Laboratorio di informatica Ingegneria meccanica

Laboratorio di informatica Ingegneria meccanica Laboratorio di informatica Ingegneria meccanica Esercitazione 6 7 novembre 2007 Correzione di un programma Un programma può contenere errori sintattici e/o errori logici. Gli errori sintattici vengono

Подробнее

ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE)

ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE) 1 LEZIONE 9 ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE) Laboratorio di Informatica per l Educazione A. A. 2014/2015 IN SINTESI (ELABORAZIONE) Con i COMPUTER, le macchine diventano

Подробнее

Programmazione in Python. Moreno Marzolla

Programmazione in Python. Moreno Marzolla Programmazione in Python Moreno Marzolla http://www.moreno.marzolla.name/ Copyright 2011, Moreno Marzolla (http://www.moreno.marzolla.name/teaching/labinf2011/) This work is licensed under the Creative

Подробнее