Im Grunde genommen nein, aber du solltest trotzdem dein Bestes geben. Ich werde erklären, warum (oder einfach zum Schluss kommen, wenn Sie nicht genug Geduld haben)
Betrachten Sie ein so einfaches Problem wie die Implementierung der binären Suche. Eine sehr beliebte Implementierung hatte einen Fehler , der rund zwei Jahrzehnte lang unentdeckt blieb. Wenn zwanzig Zeilen zwanzig Jahre brauchen, um fehlerfrei zu werden, können wir wirklich erwarten, dass ein riesiges Programm fehlerfrei ist?
Wie viele Bugs können wir überhaupt von einem riesigen Programm erwarten? Eine Zahl, die ich gefunden habe, war "10 Fehler pro 1000 Zeilen" (Code Complete, 2. Ausgabe, Seite 517 - nur ein Beispiel ohne Angabe von Daten). Dies führt zu etwa 200.000 bis 300.000 Fehlern in Ihrer Software. Glücklicherweise haben wir Möglichkeiten, die Qualität des Programms zu verbessern. Unit-Tests, Code-Reviews und gewöhnliche manuelle Tests reduzieren bekanntermaßen die Anzahl der Fehler. Trotzdem wird die Anzahl immer noch hoch sein.
Wenn wir 95% aller Fehler lösen könnten, wäre das unglaublich. Und doch hätten wir immer noch 10 000 bis 15 000 Fehler in der Software.
Glücklicherweise werden, da die Software weit verbreitet ist (und daher häufig getestet wird), Fehler gefunden. So werden wir nach und nach weniger Bugs bekommen. Weniger Fehler bedeuten jedoch auch, dass die verbleibenden schwerer zu finden sind. Erwarten Sie also keine lineare Kurve bei der Fehlerbehebung. Die letzten paar Bugs werden sehr schwierig zu finden sein und könnten sich für einige Jahre der Erkennung entziehen (vorausgesetzt, sie werden jemals gefunden).
Sie gehen fälschlicherweise davon aus, dass keine neuen Fehler auftreten werden, wenn sich die Software nicht ändert. Wenn die Software von Bibliotheken von Drittanbietern abhängt, können neue Versionen einige Funktionen beeinträchtigen und neue Fehler verursachen, obwohl der Code der Anwendung immer noch derselbe ist. Neue Betriebssysteme können auch eine Anwendung beschädigen, die zuvor einwandfrei funktioniert hat (siehe Windows Vista für ein beliebtes Beispiel). Berücksichtigen Sie auch Compiler-Fehler usw.
Es ist unklar, ob Code-Proof-Tools das Problem fehlerhafter Software wirklich lösen können. Es ist sicherlich nicht möglich, das Problem des Anhaltens für ein Programm zu lösen , aber es kann möglicherweise nachgewiesen werden, dass sich ein Programm wie angegeben verhält ... Aber was dann? Vielleicht hat das Proof-Programm einen Fehler. Vielleicht hat die Spezifikation selbst einen Fehler.
Wir können also die Anzahl der Fehler deutlich reduzieren, aber es ist sehr unwahrscheinlich, dass wir jemals auf Null kommen.
Weil es eine Vorstellung gibt, dass jede Korrektur, die Sie vornehmen, mehr Fehler verursacht, aber ich denke nicht, dass das wahr ist.
(Betonung hinzugefügt)
Du hast Recht. Diese Aussage ist falsch. Hier ist ein Beispiel:
int main() {
int x[10];
x[10] = 8; //Buffer overflow here
return 0;
}
Beheben wir nun diesen Fehler:
int main() {
int x[11];
x[10] = 8; //No buffer overflow here
return 0;
}
Sehen? Wir haben einen Fehler behoben und keine neuen eingeführt.
Es ist jedoch sicher richtig, dass Sie jedes Mal, wenn Sie einen Fehler beheben, das Risiko eingehen, einen neuen zu erstellen, obwohl dieses Risiko gemindert werden kann (z. B. durch Unit-Tests).
Nehmen wir an, dass ich versehentlich für jeweils 100 Fehler, die ich behebe, einen neuen einführe. Wenn ich also 10 000 Fehler behebe, füge ich 100 neue Fehler hinzu. Und wenn ich diese neuen Fehler behebe, füge ich einen Fehler hinzu. Na und? Das Programm hat jetzt 9.999 Fehler weniger, daher ist es wahrscheinlich besser als es war (vorausgesetzt, der neue Fehler ist nicht 10.000-mal schlimmer als der vorherige).
Außerdem kann ein Fehler behebt aussetzen neue. Aber diese Fehler können auch behoben werden. Wenn Sie die Dinge richtig machen, wird die Software irgendwann in einem besseren Zustand sein, als sie begonnen hat.
Ich war von ein paar Top-Programmierern alt, dass es besser ist, nicht viele Fehler zu beheben, weil ich dies im OP erwähnt habe.
Dieses Verhalten ist fahrlässig. Wenn es einen Fehler gibt und Sie ihn beheben können. Tu es. Natürlich sollten Sie Ihr Bestes tun, um das Hinzufügen neuer Fehler zu verhindern, aber wenn ich für 10 schwerwiegende Fehler, die ich behebe, einen kleinen Fehler einführe, ist dies kein gültiger Grund, um das Beheben von Fehlern zu beenden. Tatsächlich ist es ein guter Grund, weiterhin Fehler zu beheben .
Sie beheben also weniger Fehler, und in Zukunft werden weniger Fehler auf Sie zurückkommen
Je weniger Fehler Sie beheben, desto mehr Fehler verbleiben in Ihrer Software und nerven Ihre Benutzer. In der Tat werden sie "in Zukunft nicht mehr auf dich zurückkommen". Sie werden nicht wiederkommen, weil sie überhaupt nicht gegangen sind. Der Begriff "zurückkommen" ist mit Regressionen verbunden. Auch hier ist es möglich, das Risiko von Regressionen zu verringern.
Einige Fehler können nicht behoben werden, da sie so weit verbreitet sind, dass die Menschen sich auf sie verlassen und das Beheben des Fehlers das Programm für diese Benutzer zum Erliegen bringen würde. Es passiert. Können sie in diesem Fall jedoch wirklich als Bugs betrachtet werden?
Die Mentalität "Fehler beheben, Fehler machen" hängt möglicherweise mit diesem schrecklichen Monster zusammen - Code, der so unlesbar und nicht mehr zu pflegen ist, dass nur durch Berühren Fehler entstehen. Wenn Sie ein Monster in Ihrer Codebasis haben, müssen Sie es möglicherweise zuerst entmonsterisieren, bevor Sie etwas erledigen können.
Wenn Sie ein schrecklicher Programmierer sind, besteht die Gefahr, dass alles, was Sie anfassen, neue Fehler verursacht. Dies würde ältere Programmierer offensichtlich nervös machen. Sagen Sie jedoch: "Tun Sie nichts. Berühren Sie nichts. Atmen Sie nicht einmal." ist wahrscheinlich nicht der richtige Weg, um ein gesundes Arbeitsumfeld zu schaffen. Bildung ist besser.
Fazit:
- Software, die immer wieder neue Funktionen, aber keine Fehlerkorrekturen bietet, wird unweigerlich nerven.
- Software, die eine mäßige Anzahl neuer Funktionen erhält, deren Fehler jedoch behoben wurden, hat eine bessere Chance, verwendbar zu sein.
- Diejenigen, die versuchen, wenige Fehler zu haben, haben (im Durchschnitt) weniger Fehler als diejenigen, die sich nicht darum kümmern.
- Es ist nicht zu erwarten, dass ein Programm irgendwann fehlerfrei wird.
- Erfahrene Programmierer sind nicht unbedingt kompetent.
- Beheben Sie Ihre Fehler.
- Wenden Sie Methoden an, die die Qualität Ihrer Software verbessern.