Programmazione Procedurale in Linguaggio C++
|
|
|
- Mattia Rosa
- 9 anni fa
- Просмотров:
Транскрипт
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++ 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 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++ 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++ 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 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 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++ 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 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++ 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 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 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 (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 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 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 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 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 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 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 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 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.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 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 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 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
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
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 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)
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 http://www.moreno.marzolla.name/ Copyright 2011, Moreno Marzolla (http://www.moreno.marzolla.name/teaching/labinf2011/) This work is licensed under the Creative
