Sei sulla pagina 1di 4

Correttezza del codice Java

Introduzione
Lobiettivo della dispensa chiarire lultimo punto della metodologia illustrata nel modulo precedente per risolvere un problema con lausilio del calcolatore: la verifica di correttezza del programma. 1. Analisi del problema mediante individuazione a. dei dai iniziali b. dei risultati attesi c. del procedimento risolutivo (algoritmo) 2. Formalizzazione dellanalisi (scrittura dellalgoritmo) 3. Codifica nel linguaggio di programmazione scelto (scrittura del programma) 4. Verifica della correttezza del programma

Verifica di correttezza
Quando si parla di correttezza di un programma occorre distinguere tra correttezza sintattica e correttezza logica. La correttezza sintattica facilmente verificabile in fase di compilazione del codice. Eventuali errori sono segnalati dal compilatore e possono essere corretti, una volta individuati. Tra gli errori pi comuni ci sono: La mancanza del punto e virgola alla fine di unistruzione, che viene segnalata con un messaggio del tipo
D:\Documents and Settings\Documenti\Mod1.3\Codice\Addizione.java:14: ';' expected System.out.println("La somma e': "+ somma) ^ 1 error Procedura completata con codice di uscita 1

Il compilatore riporta le seguenti informazioni: il nome completo del file (pathname)


D:\Documents and Settings\Documenti\Mod1.3\Codice\Addizione.java

la riga di codice dove stato rilevato lerrore


14

il tipo di errore riscontrato


';' expected

la posizione dellerrore nella riga di codice


System.out.println("La somma e': "+ somma) ^

il numero di errori
1 error

Autore: Cinzia Bocchi Ultimo aggiornamento: 08/08/11

La scrittura di una classe con iniziale minuscola (per es. system invece di System), che viene segnalata con un messaggio del tipo
D:\Documents and Settings\Documenti\Mod1.3\Codice\Addizione.java:3: cannot find symbol symbol : class string location: class Addizione public static void main(string args[]) ^ 1 error Procedura completata con codice di uscita 1

La mancanza di una parentesi graffa chiusa, che viene segnalata con un messaggio del tipo
D:\Documents and Settings\Documenti\Mod1.3\Codice\Addizione.java:16: reached end of file while parsing } ^ 1 error Procedura completata con codice di uscita 1

La correttezza logica ha invece a che fare con il comportamento del programma. Un programma logicamente corretto se fa ci che noi ci aspettiamo, cio se restituisce i risultati attesi a partire dai dati iniziali. Quando ci accorgiamo che i risultati sono diversi da quelli desiderati occorre andare alla ricerca dellerrore. Questa ricerca non banale e pu essere svolta manualmente, quando i programmi sono costituiti da poche righe di codice, oppure con lausilio di strumenti software chiamati debugger. Nel seguito riprenderemo la metodologia vista in precedenza per verificare la correttezza di un algoritmo e la applicheremo ai programmi. Osservazione Mentre la correttezza sintattica di un programma pu essere verificata solo quando il codice gi stato scritto, la correttezza logica pu essere verificata prima di scrivere il codice, andando a simulare lalgoritmo. Questultima possibilit molto vantaggiosa poich consente di mettere a punto la logica dellalgoritmo e di rilevare eventuali errori, prima ancora di scrivere il codice, risparmiando cos tempo e fatica. Tuttavia, nonostante lalgoritmo sia corretto, altri errori possono essere introdotti in fase di codifica. In tal caso occorre effettuare unulteriore simulazione del codice.

Simulazione dellesecuzione di un programma


Utilizzeremo a tal scopo una tabella con tante colonne quante sono le variabili del programma pi una per loutput. Prima di iniziare la simulazione occorre determinare un insieme di valori di input, che siano significativi ai fini della verifica di correttezza, e stabilire quali debbano essere i risultati dopo lesecuzione. Considerando sempre il precedente esempio delladdizione possiamo fissare come valori di input i due numeri 10 e 5 e attenderci come risultato il valore 15.
Autore: Cinzia Bocchi Ultimo aggiornamento: 08/08/11

Se il risultato al termine della simulazione diverso da 15, significa che presente un errore logico nel programma. STEP 1 1. Numeriamo ogni riga di codice significativa (escludiamo dalla numerazione le parentesi, i commenti, lintestazione, le direttive import, le dichiarazioni utilizzate per la classe Scanner) import java.util.*; class Addizione { public static void main(String args[]) { //Dichiarazioni di variabili int num1,num2,somma; Scanner console= new Scanner(System.in); //Istruzioni System.out.println(Inserisci il primo addendo); num1= console.nextInt(); System.out.println(Inserisci il secondo addendo); num2= console.nextInt(); somma= num1+num2; System.out.println(La somma e: + somma); } }

1 2 3 4

STEP 2 Creiamo una tabella contenente tante colonne quante sono le variabili pi una per loutput. num1 num2 somma output

STEP 3 Per ogni istruzione che andiamo a eseguire, creiamo una riga nella precedente tabella e inseriamo i valori delle variabili nella cella opportuna. num1 10 num2 somma output

istruzione 1

Listruzione 1 acquisisce in input il primo numero (10) e lo assegna alla variabile num1. num1 10 num2 5 somma output

istruzione 1 istruzione 2

Listruzione 2 acquisisce in input il secondo numero (5) e lo assegna alla variabile num2.

Autore: Cinzia Bocchi Ultimo aggiornamento: 08/08/11

istruzione 1 istruzione 2 istruzione 3

num1 10

num2 5

somma

output

15

Listruzione 3 prende il valore di num1 (10), lo aggiunge al valore di num2 (5) e pone il risultato (15) in somma. num1 10 num2 5 15 15 somma output

istruzione 1 istruzione 2 istruzione 3 output

Listruzione 4 produce in output il valore di somma, cio 15. Il risultato ottenuto uguale a quello che ci aspettavamo, quindi il programma logicamente corretto.

_______________________________________________________________________
Quest'opera stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. Autore: Cinzia Bocchi Ultimo aggiornamento: 08/08/11