In sostanza, no, ma dovresti comunque fare del tuo meglio. Spiegherò perché (o semplicemente saltare alla conclusione se non hai abbastanza pazienza)
Considera un problema banale come l'implementazione della ricerca binaria. Un'implementazione molto popolare ha avuto un bug che non è stato rilevato per circa due decenni. Se venti linee impiegano venti anni per ottenere un uso senza errori e persino apparentemente dimostrato corretto, possiamo davvero aspettarci che un enorme programma sia privo di errori?
Quanti bug possiamo aspettarci comunque da un programma enorme? Un numero che ho trovato è stato "10 difetti per 1000 righe" (Codice completo 2a edizione, pagina 517 - semplicemente usato un esempio, non citando alcun dato) che ci dà circa 200.000 a 300.000 bug nel tuo software. Fortunatamente, abbiamo modi per migliorare la qualità del programma. Test di unità, revisioni del codice e test manuali ordinari sono noti per ridurre il numero di bug. Tuttavia, il numero sarà ancora elevato.
Se potessimo risolvere il 95% di tutti i bug sarebbe incredibile. Eppure avremmo ancora da 10.000 a 15.000 bug nel software.
Fortunatamente, dal momento che il software è ampiamente utilizzato (e, quindi, ampiamente testato) verranno trovati bug. Quindi avremo gradualmente meno bug. Tuttavia, un minor numero di bug significa anche che quelli rimanenti sono più difficili da trovare, quindi non aspettatevi una curva lineare nella correzione dei bug. Gli ultimi bug saranno davvero difficili da trovare e potrebbero sfuggire al rilevamento per diversi anni (supponendo che siano mai stati trovati).
Sembra anche che tu stia assumendo erroneamente che se il software non cambia, non verranno visualizzati nuovi bug. Se il software dipende da librerie di terze parti, le nuove versioni potrebbero interrompere alcune funzionalità, introducendo nuovi bug anche se il codice dell'applicazione è sempre lo stesso. I nuovi sistemi operativi possono anche interrompere un'applicazione che in precedenza funzionava perfettamente (vedi Windows Vista per un esempio popolare). Considera anche i bug del compilatore, ecc.
Non è chiaro se gli strumenti a prova di codice possano veramente risolvere il problema del software difettoso. Non è certamente possibile risolvere il problema di arresto per qualsiasi programma, ma potrebbe essere possibile dimostrare che un programma si comporta come specificato ... Ma allora? Forse il programma di prova ha un bug. Forse la specifica stessa ha un bug.
Quindi, chiaramente, possiamo ridurre notevolmente il numero di bug, ma è davvero improbabile che arriveremo mai a zero.
Perché c'è qualche idea che ogni correzione che fai crei più bug, ma non credo sia vero.
(enfasi aggiunta)
Hai ragione. Questa affermazione è sbagliata. Ecco un esempio:
int main() {
int x[10];
x[10] = 8; //Buffer overflow here
return 0;
}
Ora, risolviamo questo errore:
int main() {
int x[11];
x[10] = 8; //No buffer overflow here
return 0;
}
Vedere? Abbiamo corretto un bug e non ne abbiamo introdotti di nuovi.
Tuttavia, è certamente corretto che ogni volta che si risolve un bug si rischia di crearne uno nuovo, sebbene questo rischio possa essere mitigato (ad es. Con test unitari).
Diciamo che per ogni 100 bug che correggo, ne introduco accidentalmente uno nuovo. Quindi, se correggo 10.000 bug, presento 100 nuovi bug. E se correggo quei nuovi bug, introduco un bug. Ma allora? Il programma ora ha 9 999 bug in meno, quindi probabilmente è meglio di prima (supponendo che il nuovo bug non sia 10.000 volte peggiore rispetto ai precedenti).
Inoltre, la correzione di un bug può esporne di nuovi. Ma anche questi bug possono essere corretti. Se fai le cose nel modo giusto, alla fine il software sarà in uno stato migliore di quello in cui è stato avviato.
Sono stato vecchio da alcuni dei migliori programmatori che è meglio non correggere molti bug a causa dell'idea che ho citato nell'OP.
Questo comportamento è negligente. Se c'è un bug e puoi risolverlo. Fallo. Ovviamente dovresti fare del tuo meglio per evitare di aggiungerne di nuovi, ma se introduco un piccolo bug per ogni 10 bug gravi che correggo, questo non è un motivo valido per interrompere la correzione dei bug. In effetti, è un buon motivo per continuare a correggere i bug .
Quindi meno bug corretti, meno bug torneranno in futuro
Meno bug correggi, più bug rimarranno nel tuo software, infastidendo i tuoi utenti. Anzi, non "torneranno da te in futuro". Non torneranno perché non sono mai partiti in primo luogo. La nozione di "ritorno" è legata alle regressioni. Ancora una volta, è possibile ridurre il rischio di regressioni.
Alcuni bug non possono essere corretti perché sono diventati così ampiamente utilizzati che le persone hanno iniziato a dipendere da loro e correggere il bug avrebbe spezzato il programma per quegli utenti. Succede. Tuttavia, possono davvero essere considerati bug in quel caso?
La mentalità "correggi un bug, crea un bug" potrebbe essere correlata a Quel mostro orribile - codice che è così illeggibile e non realizzabile che semplicemente toccandolo crea bug. Se hai un mostro nella tua base di codice, potresti aver bisogno di annullare la sua mostro prima di fare qualsiasi cosa.
Infine, se sei un programmatore terribile, c'è il rischio che qualsiasi cosa tocchi crei nuovi bug. Ciò ovviamente renderebbe nervosi i programmatori senior. Tuttavia, dicendo "Non fare nulla. Non toccare nulla. Non respirare nemmeno." probabilmente non è il modo giusto per creare un ambiente di lavoro sano. L'istruzione è migliore.
Conclusione:
- Il software che continua a ricevere tonnellate di nuove funzionalità ma nessuna correzione di bug inevitabilmente farà schifo.
- Il software che ottiene un numero moderato di nuove funzionalità ma che risolve i suoi bug ha maggiori possibilità di essere utilizzabile.
- Coloro che cercano di avere pochi bug hanno (in media) meno bug di quelli a cui non importa.
- Non è ragionevole aspettarsi che un programma alla fine diventi privo di bug.
- I programmatori senior non sono necessariamente competenti.
- Risolvi i tuoi bug.
- Adottare metodologie che migliorino la qualità del tuo software.