Wie ein Programm fehlerfrei machen (oder, mit den weniger möglichen Fehlern) - Stapelüberlauf
OK, ich weiß, es ist eine dumme Frage zu stellen, so lassen Sie mich klarstellen.
So, hier ist meine Frage. welche Werkzeuge und Methoden verwenden Sie die weniger mögliche Fehler in der Software haben?
Unterm Strich. ein Code ohne Fehler ist unmöglich. Aber hier ist das, was möglich ist, zu tun:
Praktiken, Verwaltung, Umwelt
Zunächst einmal: Bug-freie Software ist ein Mythos!
Zweitens hängen die Werkzeuge selbst auf viele Dinge, aber wenn Sie wollen die Dinge so allgemein wie möglich zu halten:
- Ein guter Editor
- Ein gutes Versionskontrollsystem
- Die richtige Entwicklungsstadien (funktionales Design, technisches Design, etc.)
- Ein richtiges Test-Team
- Eine falsche Test-Team (im Grunde der Milchmann, die Putzfrau und der Busfahrer Sie gebracht. Menschen, die keine Ahnung haben, was sie tun, wenn es um Computer und Schnittstellen kommt)
- Ein Weg, um anzuzeigen, dass Sie keine Ablenkung wollen überhaupt
- Die Zeit, in der Lage Probleme zu lösen, wenn man auf sie stecken
beantwortet 22. September '08 um 15:37 Uhr
cosmo0, tut mir leid, aber ich fühle Mitleid für Sie.
Für mich, Ihr Chef denken, dass Sie fehlerfreien Code schreiben muss, ist das gleiche, wie Sie denken, dass Sie eine unendliche Gehalt haben. Hinzufügen des Wortes „fast“ zu dieser „fehlerfrei“ überhaupt nicht die Bedeutung ändern.
Es gibt fehlerfreien Code. Der Code, der 0-Funktionalität hat, ist fehlerfrei. Aber es ist nutzlos.
Computerprogramme zu schreiben, ist sehr ähnlich, Schach zu spielen. Tigran Petrosian, ein Schachweltmeister für seine starke Verteidigung Fähigkeiten bekannt ist, wurde einmal von einem nicht sehr höflich Journalisten gefragt, warum er Fehler macht manchmal. Die Antwort war überraschend einfach: „Weil Schach zu spielen ist nicht einfach Versuchen Sie, sich zu spielen, und Sie werden sehen.“.
beantwortet 22. September '08 um 16:29 Uhr
Sie müssen es wirklich in Ihren Chef des Kopf zu bekommen, dass es praktisch unmöglich ist, Software jeglicher Komplexität, ohne Fehler zu schreiben.
Sobald Sie das Schreiben von fehlerfreien Code akzeptieren ist eine unmögliche Aufgabe, können Sie auf Fokussierung beginnen, was eigentlich wichtig: machen alle Fehler leicht nachweisbar
Unit-Tests sind eine gute Möglichkeit, das zu tun, und es gibt viele kleine Tricks, die Sie im Laufe der Zeit abholen würden, dass Sie sie vermeiden helfen, obwohl das wirklich nur mit der Erfahrung kommt, und zu wissen, welche Arten von Fehlern werden Sie wahrscheinlich machen.
Ein oft zitierte (und wahrscheinlich inzwischen irrelevant) Beispiel ist die Reihenfolge der Vergleiche rückgängig zu machen, zB:
so dass Sie nicht am Ende einen Auftrag bis zu tun (foo = „bar“), wenn Sie bedeuten einen Vergleich (foo == „bar“) durchzuführen. Wenn Sie die Reihenfolge, dann wird der Fehlerfall ( „bar“ = foo) ist eine leicht nachweisbare Syntaxfehler, sondern als ein viel schwieriger finden Logikfehler rückgängig machen. Aber das ist wirklich nur sinnvoll, wenn das ist die Art von Fehler, den Sie regelmäßig machen.
beantwortet 22. September '08 um 15:32 Uhr
Kann Ihr Chef Sie kostenlos und vollständige Spezifikationen Fehler, die er die Software vervollständigt sie beenden Sie auf die Minute nicht von Minute zu Minute ändern? Als ich vollständig sagen, ich meine nicht nur eine Liste von Funktionen. Wie wäre es alle Interaktionen zwischen allen Funktionen, alle Erwartungen des Verhaltens für jede mögliche Benutzereingaben, Dateien jeder mögliche Zustand der Umwelt (zB OS, vorhanden, andere Anwendungen ausgeführt werden, Zugriff auf gemeinsam genutzte Ressourcen, Schriftgröße, Farbschemata, Tastatur Layouts), die Vorrang vor anderen Zeitpunkt auf die Millisekunde verarbeitet nehmen usw.
Test Driven Development ist ein guter Anfang, aber es ist nicht genug. Gute Praktiken, Paar Code-Review und Programmierung, ein hohes Maß an Aufmerksamkeit und die Zusammenarbeit eines guten Tester kann den Fehler Kontrolle effektiv verbessern.
Aber ich denke, dass „eine fehlerfreie Software“ bezieht sich auf Science-Fiction.
beantwortet 22. September '08 um 15:32 Uhr
Vielleicht ist Ihr Chef ist mit menschlichen Fehlern nicht vertraut. Davon abgesehen, mit Praktiken wie Unit-Tests, die kontinuierliche Integration und statische Code-Analyse können Sie Ihre Code-Qualität und verringern bestimmte Arten von Fehlern verbessern.
beantwortet 22. September '08 um 15:33 Uhr
Dies ist nicht zu sagen, dass wir nicht schuldhaft für Fehler in unserer Software sind oder dass qualifizierte Entwickler nicht eine geringere Inzidenz von Bugs haben. Aber Ihr Chef braucht realistische Erwartungen Ihrer Fähigkeiten zu haben. Es gibt keine perfekten Fahrer, keine perfekten Manager und keine perfekten Programmierer.
beantwortet 22. September '08 um 16:22 Uhr
Ich glaube nicht, bugfree möglich ist, es sei denn, die Anwendung sehr klein ist.
Ich glaube, dass Sie können, und müssen versuchen, begrenzen die Menge von Fehlern in der Software durch strenge Tests.
beantwortet 22. September '08 um 15:33 Uhr
Ich denke, „jetzt, mit Ihrem Wissensstand, sollten Sie nie Fehler in der Software haben mehr“ ist nicht posible.
Sie können jedoch einen TDD (Test Driven developent) in Ihrem Projekt verwenden, für minimalisieren Fehler in Release-Versionen. Aber dies ist nicht eine Gesamtlösung. einige Bugs sind sehr kompliziert und kann durch Aktualisierung von 3rd-Party-Komponente oder was auch immer verursacht werden.
beantwortet 22. September '08 um 15:35 Uhr
JUnit (oder ein anderes Unit-Test-Programm) ist nützlich, wenn Sie klare Anforderungen zu testen und Regressionen zu verhindern. Wenn die Tests automatisiert und laufen häufig können Sie sicher sein, dass Ihre Änderungen nicht auf andere Teile des Systems brechen. Es ist auch hilfreich, wenn knifflige Klassen entwerfen, weil Sie alle planen können Sie (na ja, viele) edge Fällen wollen sie alle zusammen zu testen und zu testen.
Die wichtigsten Punkte sind
- automatisierte Tests
- Führen Sie Tests häufig
- Stellen Sie sicher, Testfälle decken die bekannten Anforderungen
- Erstellen von Testfällen, wenn Sie Fehler finden; diese Tests fehlschlagen, bis der Fehler behoben ist
beantwortet 22. September '08 um 15:36 Uhr
Ich werde ein einfaches Stück „Methode“ beitragen. Es ist die Idee eines Null-Fehler-Meilenstein. Es ist sehr üblich in Software-Projekten über Meilensteine zu sprechen, die wichtigen Punkte in der Projektzeitleiste darstellen. In den meisten Fällen habe ich gesehen, die Leute sagen, sie ist ein Meilenstein auf dem Punkt getroffen haben, wo sie die Eingabe in den Code für die Funktionen in diesem Meilenstein abgeschlossen haben. In Wirklichkeit natürlich das gibt Ihnen keine Vorstellung von Fortschritt zur Vollendung.
Diese Art von Meilenstein ist eine weit bessere Maß dafür, wie weit Sie zur Vollendung fortgeschritten haben, aber es ist erstaunlich, wie selten man Projekte auf diese Weise verwaltet sehen. Ich empfehle es.
beantwortet 22. September '08 um 15:40 Uhr
Welche Mängel haben Sie in Ihrer Software?
Außerhalb der Grenzen Fehler? Lesen nicht initialisierten Variablen? Dereferencing ungültige Zeiger? Diese kann durch ein statisches Analysewerkzeug erfaßt werden.
Unvollständiges Verständnis der Anforderungen? Hier Test Driven Development und eine Überprüfung Kultur hilft.
Design-Probleme? Auch hier sind die Bewertungen eine große Hilfe.
Mit out-of-date-Code? Das erfordert für die Versionskontrolle.
Und: halten einen Defekt Protokoll, so dass Sie wissen, welche Art von Fehlern Sie machen.
beantwortet 22. September '08 um 15:44 Uhr
Ich habe erfolgreich mit den „release early“ Mustern, in dem Sie weniger Funktionen auf einmal auswählen und Sie ausführlich jene Funktion testen, bevor Sie sie in einer Veröffentlichung enthalten. Funktionen, die nicht den Qualitätskriterien entsprechen, werden nicht in der Iteration enthalten.
Offensichtlich ist, dass dies nicht allein arbeiten, und Sie müssen gute Entwicklungspraktiken haben wie die Erwähnten von Phil, Manrico, Twan und andere.
beantwortet 22. September '08 um 16:05 Uhr
beantwortet 22. September '08 um 16:20 Uhr
Es ist dumm von Grund auf und nicht auf die Programmierung beschränkt. Nur ein paar Gegenbeispiele. Die meisten von uns haben ihre Fahrer für Alter lizenzieren und so sollten sie nie in nur auf Unfall nicht mehr beteiligt sein. Wie real ist das?
Unit-Tests! Es ist kein Silber bullit aber es spart viel Debugging-Zeit.
beantwortet 22. September '08 um 15:32 Uhr