
[ Home | Liste | F.A.Q. |
Risorse | Cerca... ]
Archivio: Aprile 2002 ml@sikurezza.org Soggetto: Re: codice corretto, codice robusto, codice sicuro (ver. 3) Mittente: Kiai Data: 23 Apr 2002 21:19:59 -0000
Ciao a tutti,
qualche commento
>Suddividiamo l'input, l'output e lo stato di un
programma in "validi" ed
>"invalidi", dove per validità si intende la coerenza
con le specifiche.
>(definizione di stato?)
Quindi un input valido è un input previsto dalle
specifiche, giusto?
Stesso per l'output.
Un qualcosa che prende un input e restituisce un
output, in
linguaggio teorico si chiama funzione (in realtà la
definizione è un po' + complessa
ma non scendiamo in particolari), lo saprai anche
meglio di me, ma magari
rinfresco per chi ha arrugginiti i concetti.
L'input di una funzione è il dominio, l'output è il
codominio.
Già tu parli di programma, senza specificare cosa sia.
Riduciamo la parola programma ad una funzione
(supponiamo di avere un programma con
una funzione).
>>>Definizione (Programma corretto) Un programma è
corretto se si comporta come
previsto dalle proprie specifiche; in altre parole un
programma è corretto
se, sottoposto ad input validi, fornisce output
validi.
Definizione (Programma robusto) Un programma è robusto
se, sottoposto ad
input validi e/o invalidi, comunque fornisce output
validi. Questo significa
che un programma robusto dovrà fornire output coerenti
con le specifiche
anche se sottoposto ad input imprevisti. La nozione di
robustezza di un
programma non ha una definizione che indichi
precisamente cosa si debba fare
per ottenere software robusto. Da un programma robusto
ci si aspetta che sia
corretto ma che sia in grado di comportarsi
correttamente anche in presenza
di situazioni non previste in origine (o dalle
specifiche?).
>>>
La tua definizione è ambigua. Facciamo un esempio.
Prendiamo la funzione fattoriale (o se preferisci, un
programma che calcola
la funzione fattoriale).
Le specifiche del fattoriale sono:
<SPECIFICHE_FATTORIALE>
0! = 1
n! = n * (n-1)!
Dominio = N + {0}
Codominio = N - {3, 4, ...}
</SPECIFICHE_FATTORIALE>
Faccio un programma che dato un naturale tira fuori un
naturale, secondo la formula sopra.
E' corretto.
Il mio programma, inoltre, dato un razionale negativo,
tira fuori sempre 1, che è un valore
valido (appartenente al codominio).
Il mio programma è robusto??? Voglio dire, si sta
comportando correttamente rispetto alle
specifiche?? Beh, le specifiche in questo caso non
specificano niente.
Allora che faccio? Cambio le spefiche. Hey, ottima
idea (circa).
Le specifiche diventano
<SPECIFICHE_FATTORIALE_ESPANSO>
0! = 1
n! = n * (n-1)! per n > 0
n! = 1 per n < 0
Dominio = Z
Codominio = N - {3, 4, ...}
</SPECIFICHE_FATTORIALE_ESPANSO>
Adesso mi chiedo e se l'input è un Reale??
Insomma, come vedi la storia va avanti a lungo, ma il
punto di tutta la faccenda
è che non hai pensato a dare una definizione di
specifiche.
E non ci hai pensato perché è impossibile avere delle
specifiche complete e coerenti (dimostrato
formalmente dal teorema di Goedel).
Pensierini del giorno:
Una spec definisce solo gli stati previsti (se una
specifica definisce un caso imprevisto
quello diventa automaticamente previsto).
Se una spec fosse completa, non sarebbe coerente e
viceversa (teorema di Goedel).
Pensierino finale:
Nota il fattoriale espanso: Ho deciso che per un input
negativo rispondesse 1.
Ma potevo prendere infiniti risultati, dato che il mio
codominio è infinito.
Questo significa, detto tra di noi, che esistono per
ogni funzione,
infiniti programmi robusti. Un infinito denso o no??
Ahimè, un infinito denso.
Questo significa che esistono infinite (denso)
specifiche ecc. ecc. ecc.
Magari riuscissimo ad inscatolare il codice, avremmo
tutti programmi perfetti... anzi validi.
Kiai.
__________________________________________________
Do You Yahoo!?
Yahoo! Games - play chess, backgammon, pool and more
http://games.yahoo.com/
________________________________________________________
http://www.sikurezza.org - Italian Security Mailing List
[ Home | Liste | F.A.Q. |
Risorse | Cerca... ]
www.sikurezza.org - Italian Security Mailing List
(c) 1999-2005