Lernen und Verbessern Ihrer Debugging-Fähigkeiten

Programmierer verbringen einen hohen Prozentsatz der Zeit mit dem Debuggen, anstatt Code zu schreiben. Sie hatten wahrscheinlich eine Ausbildung zum Erlernen einer Sprache oder eines Frameworks - aber wie haben Sie gelernt, die Fehler in Ihrer Software zu beheben?

Als Sie sich in das Programmieren verliebt haben (oder zumindest entschieden haben, dass es eine lohnende Karriere ist), haben Sie es wahrscheinlich als kreatives Unterfangen angesehen. Sie würden großartige Software entwerfen, den Code schreiben und kotzen! - Es würde beim ersten Mal perfekt funktionieren.

Ja. Recht.

In der realen Welt haben Sie einen Großteil Ihrer Zeit damit verbracht, Code zu debuggen, anstatt neue Inhalte zu schreiben. Ich bin sicher, ich könnte einen obskuren Prozentsatz der Entwicklerzeit ausgraben, der für die Behebung von Fehlern aufgewendet wird, anstatt neue Funktionen zu erstellen, aber ich bezweifle, dass Sie eine Nummer hören müssen. Sie können sich zu leicht vorstellen, an welchen Tagen Sie nach dem Bug From Hell gesucht haben und wie er sich auf Ihren Projektplan auswirkt.

Jetzt gibt es viele Möglichkeiten, wie Programmierer neue Software-Kenntnisse erlernen können und können, sei es beim Lesen eines Buches, bei der Teilnahme an einer technischen Konferenz oder beim Besuch von Websites wie JavaWorld.com. (Ich bin ziemlich froh, dass Sie Letzteres tun.) Diese konzentrieren sich jedoch normalerweise auf Tools wie Sprachen oder Frameworks und nicht auf Metatechniken wie "Wie man diesen Fehler in zwei Stunden statt in zwei Tagen findet". Sprachen können kommen und gehen, ebenso wie IDE-Debugger, aber die Fähigkeit zu erkennen, unter welchem ​​Stein sich Ihr Fehler versteckt, wird für immer bei Ihnen bleiben.

Ein großer Teil der Fähigkeit, Debuggen zu lernen, ist natürlich Erfahrung. Das könnte Ihre eigene Erfahrung sein oder die Gelegenheit, ein Grasshopper zu Füßen eines Master-Programmierers zu sein. Ich vermute auch, dass einige Leute ein angeborenes Talent für die Fehlerbehebung haben (gleichermaßen relevant für die Reparatur eines kaputten Autos als schlecht benehmende Anwendung), und diejenigen von uns ohne es können nur vor Neid schmollen.

Doch einige dieser kann gelernt werden. Zum Beispiel hatte ein Master-Programmierer meiner Bekanntschaft ein Axiom: Wenn Sie (relativ) lange nach einem Fehler gesucht haben und ihn nicht finden können, sagte er: "Sie suchen am falschen Ort." Offensichtlich klingend, aber sicherlich wahr ... und wie oft haben Sie Zeit damit verschwendet, in das XYZ-Modul zu schauen, als das Problem ganz woanders lag?

Ich habe mehrere Entwickler gefragt, wie sie ihre Debugging-Fähigkeiten erlernt oder verbessert haben. Eine überraschende Anzahl von ihnen sprach über ihre Beherrschung des IDE-Debuggers oder eines anderen Tool-Fachwissens, aber das meiste, was ich wissen wollte, war ihr Rat zur Verbesserung der Fähigkeit, Fehler zu beheben. Hier ist eine kurze Zusammenfassung ihrer Antworten.

  1. Sei diszipliniert. Das Debuggen ist ein Prozess, sagte ein Entwickler, keine Reihe von zufälligen Ereignissen. Drehen Sie die Knöpfe nicht nach dem Zufallsprinzip. Folgen Sie dem Ausführungsprozess des Codes. Genau wie beim Reparieren eines Rasenmähers, sagte er. Bekommt Teil A die Eingabe, die er benötigt? Wie wäre es mit der Ausgabe? Wenn das in Ordnung ist, fahren Sie fort.
  2. Um Ihre Fähigkeiten zu verbessern, debuggen Sie den Code anderer Personen und nicht Ihren eigenen. Es ist einfacher, die Fehler in den Annahmen der anderen Person zu erkennen, als Ihre eigenen. Sie können dies im Rahmen einer Cross-Peer-Code-Überprüfung und eines Cross-Peer-Debuggens tun. Sie entwickeln die Fähigkeit, die häufigsten Fehlerursachen schneller zu erkennen, versprach ein Entwickler, und bringen Ihnen bei, Ihre eigenen schlechten Entwicklungspraktiken zu erkennen (und aufzugeben).
  3. Stellen Sie sich vor, Sie sind der Compiler. Suchen und korrigieren Sie so viele Fehler wie möglich, bevor Sie auf die Schaltfläche Kompilieren klicken. Während die meisten modernen IDEs integrierte Debugger enthalten (wie Intellisense von Visual Studio), lernen Sie weniger aus ihrer Automatisierung als aus einer bewussten Untersuchung des Prozesses. (Auf die gleiche Weise werden Sie nie lernen, richtig zu buchstabieren, wenn Sie sich auf eine Rechtschreibprüfung verlassen, um die ganze Arbeit zu erledigen.)
  4. Erfahren Sie, wie Sie Fehler so früh wie möglich im Entwicklungsprozess beheben können. Das könnte etwas Formalisiertes bedeuten, wie zum Beispiel eine testgetriebene Entwicklung. Das bedeutet auch, dass Sie Zeit für das Debuggen Ihres Designs aufwenden müssen, anstatt sich mit dem Codieren zu befassen.
  5. Das Debuggen ist am einfachsten, wenn Sie das gesamte System im Kopf behalten können. Machen Sie nicht den Fehler, sich nur auf einen Teil einer Anwendung zu konzentrieren. Achten Sie auf die Wechselbeziehungen zwischen Modulen. Lesen Sie den Code auf mehreren Abstraktionsebenen, riet ein Programmierer. "Das Auffinden des Fehlers ist der schwierigste Teil, und es erfordert ein klares Verständnis dafür, was mehrere Teile des Codes tun", sagte sie.
  6. Ich denke, ein Teil des gleichen Ratschlags ist der Vorschlag eines anderen: Machen Sie sich ein gutes Bild von dem System, das eine Ebene unter dem liegt, an dem Sie gerade arbeiten. "Wenn Sie ein Programm auf Systemebene C debuggen, ist es hilfreich, einige Assemblys und Informationen zum Betriebssystem zu kennen", erklärte ein leitender Ingenieur für Systemsoftware. "Wenn Sie eine J2EE-App debuggen, ist es hilfreich, etwas über Java-Threads, RMI und GC zu wissen." In vielen Fällen, so wies er darauf hin, kommen Fehlermeldungen von dieser Ebene. "Wenn Sie verstehen, was das bedeutet, können Sie herausfinden, was auf Ihrer Abstraktionsebene falsch läuft", erklärte er.

Einige Entwickler empfahlen auch zusätzliche Ressourcen. Darunter befindet sich David Agans Buch Debugging, das neun unverzichtbare Regeln verspricht, und Why Programs Fail: A Guide to Systematic Debugging, das in einer zweiten Ausgabe veröffentlicht wird. Der Entwickler, der letzteres empfohlen hat, gibt an, dass er einen systematischen Ansatz für das Debuggen anhand zahlreicher praktischer Beispiele vermittelt. Ein anderer schlug einen Online-Aufsatz vor: Zehn Fähigkeiten hochwirksamer Software-Tester.

Ich mag all diese Antworten, aber ich vermute, dass es mehr Weisheit gibt, die geteilt werden kann. Wie haben Sie Ihre Debugging-Fähigkeiten erworben? Wie haben Sie anderen geholfen, ihre zu verbessern?

Diese Geschichte "Lernen und Verbessern Ihrer Debugging-Fähigkeiten" wurde ursprünglich von JavaWorld veröffentlicht.