Organizzazione della lezione. Lezione 6 Tecniche di debugging. L origine del termine bug (e debugging!) Le prove. Bugs e debugging.

7 pages
33 views
of 7
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Share
Description
Organizzazione della lezione Lezione 6 Tecniche di debugging Vittorio Scarano Corso di Programmazione Distribuita ( ) Laurea di I livello in Informatica Università degli Studi di Salerno Bugs e
Transcript
Organizzazione della lezione Lezione 6 Tecniche di debugging Vittorio Scarano Corso di Programmazione Distribuita ( ) Laurea di I livello in Informatica Università degli Studi di Salerno Bugs e debugging trucchi e strategie tecnologie Java logger assert strumenti (debugger) Eclipse: esempi di uso 2 L origine del termine bug (e debugging!) Le prove Per controllare il malfunzionamento del calcolatore elettro-meccanico Mark II Aiken Relay Calculator ad Harvard una falena (tarma) fu trovata in un relay (9/9/1945) e gli operatori dell epoca scrissero sul giornale di bordo First actual case of a bug being found! Il termine era comunque già in uso: Edison a proposito di circuiti elettrici intorno al 1870 a proposito di qualsiasi difetto in macchinari 3 4 Il debugging è parte del lavoro quotidiano.. Trucchi e strategie di ogni programmatore che impiega risorse considerevoli nonostante gli apprezzabili sforzi per introdurre metodologie di sviluppo software bug-free Necessario apprendere alcuni trucchi e strategie utili tecnologie offerte da Java logger assert E possibile stampare il valore di qualsiasi variabile con: System.out.println ( x= +x); sfruttando il metodo di o quello ridefinito dalla classe di Mettere un in ogni classe, in modo da poter testare ogni singola classe Si può ottenere una stampa dello stack da qualsiasi posizione utilizzando il metodo: Thread.dumpStack() strumenti (debugger di Eclipse) 5 6 Trucchi e strategie - 2 Trucchi e strategie - 3 Riproducete l errore Controllate tutti i dettagli per poi poter passare alla analisi Semplificate l errore minimizzate il numero di condizioni che causa l errore Divide et impera identificate l errore prima ad alto livello (chiamate di metodi) prima di passare ad esaminare i dettagli di ogni metodo Siate consapevoli del comportamento corretto del vostro programma non trascurate (quando cercate di risolvere un errore) altre situazioni anomale che possono mostrarsi: potrebbero essere correlate al problema che cercate di risolvere Non affrettatevi a correggere un errore! spessissimo capita di correggere un errore e di inserirne uno nuovo! attenzione al punto di produttività negativa 7 8 Tecnologie: Caratteristiche di Un oggetto della classe Logger serve per generare messaggi di log verso la console (ma non solo) Per creare un logger di visibilità globale: Logger logger= Logger.getLogger( global ); Il vantaggio principale rispetto alla? che si può piazzare diversi messaggi del tipo: logger.info ( L intero i vale +i); che si possono disabilitare tutti insieme con: logger.setlevel(level.off); 9 Si può redirigere l output da console (default) a file, a stream (su rete), etc. Si può scegliere il a cui il logger riporta le informazioni: SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST (dal più restrittivo (solo errori gravi) al meno restrittivo), ALL, OFF Si possono creare Logger diversi con politiche di logging diverse per ogni componente ed organizzarli in gerarchie Metodi di utility: metodi HQWHULQJH[LWLQJWKURZLQJ etc. Possibile creare ed usare filtri usando il metodo LV/RJJDEOH 10 Tecnologie: assert Come si usa Introdotta dalla JDK 1.4, assert è una istruzione che contiene una affermazione (booleana) che si crede vera Se a run-time la affermazione è vera: Ok, non viene fatto niente Se a run-time la affermazione è falsa: se le asserzioni sono disabilitate nella JVM, niente altrimenti si lancia una eccezione Utile per la programmazione by-contract in cui si fissano precondizioni, postcondizioni, invarianti di classe 11 Si introduce un con una condizione assert i 10 ; A questo punto si compila il programma utilizzando la opzione -source 1.4 c:\ javac source 1.4 MyClass.java Le asserzioni sono disabilitate per default nella JVM per abilitarle si deve lanciare la JVM con -ea c:\ java ea MyClass 12 Un esempio di uso: compilazione Un esempio di uso: esecuzione Carica e stampa un array assert Compilazione non a buon fine serve l opzione -source 1.4 Esecuzione con assert disabilitate (default) Esecuzione con assert abilitate opzione ea Tutto ok! la asserzione è vera! Un esempio di uso: esecuzione con errore Un esempio di uso: esecuzione con errore Errore nel programma Compilazione Esecuzione con assert abilitate lancio di una eccezione Errore nel programma Esecuzione con assert disabilitate Capita un errore con il lancio della corrispondente eccezione 15 16 Modalità di uso: invarianti interni Modalità di uso: controlli di flusso if (i%3 == 0) { else if (i%3 == 1) { else { // (i%3 == 2) if (i%3 == 0) { else if (i%3 == 1) { else { assert i%3 == 2; La assert di destra può fallire! nel caso i sia negativo, il resto della divisione intera può essere negativo (diversamente dalla operazione mod) void foo() { for () { if () return; // Mai raggiunto! void foo() { for () { if () return; assert false; Nel caso in cui si raggiunge la assert veniamo avvertiti da una eccezione Modalità di uso: pre-condizioni Modalità di uso: invarianti di classe public void setrate(int rate) { if (rate = 0 rate MAX_RATE) throw new IllegalArgumentException(); public void setrate(int rate) { assert rate = 0 rate MAX_RATE; In questo caso la soluzione con assert non è sempre preferibile: la eccezione lanciata a sinistra ha maggiore significato in generale i controlli dovrebbero essere sempre attivi e non disabilitati 19 Un invariante di classe è una condizione che dovrebbe essere sempre vera prima e dopo ogni metodo chiamato Ad esempio, su una classe che gestisce alberi rossoneri, qualsiasi operazione (metodo) deve lasciare in maniera bilanciata (secondo la definizione) l albero // invariante di classe private boolean balanced() { Il controllo può avvenire semplicemente inserendo: assert balanced(); 20 Altre caratteristiche di assert Eclipse: : una piattaforma per sistemi di sviluppo Possibile abilitare/disabilitare su classi/package Possibile passare un oggetto alla eccezione tramite: assert i 0: Valore negativo di i ; Possibile abilitare/disabilitare da programma: public void setdefaultassertionstatus(boolean enabled); Un progetto open-source, in Java che permette di sviluppare sistemi di sviluppo per diversi linguaggi di programmazione Java, C, C++, PHP, etc. etc. Numerose componenti (plugin) per deployment su Application Server di vario tipo progettazione integrata (UML) Il consorzio Eclipse creato da IBM a cui partecipano: Borland, Rational, RedHat, SUSE, TogetherSoft Workbench di Eclipse Creazione di una nuova classe Pannelli detti view raggruppati per perspective View: navigator outline task (errori, etc.) Per cambiare perspective 23 24 Scrittura di Hello.java Ed ora una demo! 25
Related Search
Similar documents
View more...
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks