.
Annunci online

alessioricco
producer, consumer, crèpes
12 ottobre 2007
[codice] [BUG] Quando devi cambiare il codice al volo....
Prendiamo una funzione stupida come questa:
In pratica verifica che due stringhe siano uguali, assumendo che la prima stringa (x) inizi sempre per "00" e la seconda non debba mai iniziare per "00". Questo è quanto risultava infatti dalle specifiche.
Questo codice nasconde anche una insidia, infatti questo test funziona a meraviglia se x è stringa vuota, infatti ritornerà sempre false.

Public
Shared Function sameString(ByVal x As String, ByVal y As String) As Boolean
    Return x= "##" & y
End Function

Adesso, a circa 30 minuti prima della messa online dell'applicazione una telefonata ti fa capire che le specifiche sono diverse.. e che forse sarebbe meglio che il confronto tra le due stringhe fosse fatto da destra verso sinistra. La funzione, al volo viene riscritta ed ecco il patatrac!

Public Shared Function sameString(ByVal x As String, ByVal y As String) As Boolean
    Const CHARS As Integer =  <un numero, supponiamo 5>
    Dim yy As String = Right(y, CHARS)
    Dim xx As String = Right(x, yy.Length)
    Return xx = yy
End Function

Questa funzione è sbagliata! O meglio, questa funzione non fa quello che ci si aspetta debba fare perchè nel caso in cui x fosse stringa nulla, ritornerebbe true !

Prima di tutto alcune considerazioni:
1) ATTENTO ALLE PRECONDIZIONI IMPLICITE
La prima funzione ha un errore invisibile, ovvero le precondizioni della funzione sono implicite. anche se la stringa x è vuota la funzione è corretta. Questo assunto è corretto ma pericoloso, perchè basta che cambino le specifiche, modificando il codice della funzione la precondizione invisibile va a farsi benedire, perchè essendo sottointesa, è facile che te la dimentichi.

2) SCRIVI CODICE CHIARO E LEGGIBILE (e pure due commenti già che ci sei...)
Modificare il codice in corsa è il peggio che ti possa capitare, puoi anche lavorare dei mesi ad un progetto che c'e' sempre qualcosa che non è stato detto fino in fondo, qualcosa che tutti hanno dato per scontato e che nessuno ha esplicitato. C'e' sempre un problema che deve essere fissato poco prima o durante il rilascio. E' del tutto normale, purtroppo :(

3) QUATTRO OCCHI SONO MEGLIO DI DUE
Quando devi cambiare il codice al volo, non cambiarlo mai da solo. soprattutto se lo fai alle 2:30 del mattino. Trovati un collaboratore che possa rendersi conto delle modifiche che fai. Quattro occhi sono meglio di due e poi il tuo collaboratore potrebbe essere particolarmente motivato a pizzicarti in fallo. Sfrutta a tuo vantaggio questa cosa :)

4) DUE RIGHE IN MENO POSSONO SIGNIFICARE MOLTE ORE IN PIU'
Public
Shared Function sameString(ByVal x As String, ByVal y As String) As Boolean

    Const CHARS As Integer =  <un numero, supponiamo 5>

    ' Testa i parametri di ingresso
    if x.Length < CHARS then Return False
    if y.Length < CHARS then Return False

    Dim
 yy As String = Right(y, CHARS)
    Dim xx As String = Right(x, yy.Length)
    Return xx = yy
End
Function
 

Tag inseriti dall'utente. Cliccando su uno dei tag, ti verranno proposti tutti i post del blog contenenti il tag. bug asp.net vb.net debug

permalink | inviato da alessioricco il 12/10/2007 alle 16:41 | Leggi i commenti e commenta questo postcommenti (1) | Versione per la stampa
sfoglia
settembre        novembre