So verbessern Sie das Testen Ihres eigenen Codes [closed]

12

Heute habe ich eine Änderung an einem Code eingecheckt, der sich aufgrund eines ziemlich dummen, aber sehr entscheidenden Problems als überhaupt nicht funktionierend herausstellte. Ich fühle mich sehr schlecht und hoffe, dass ich endlich etwas daraus lernen kann. Das Dumme ist, ich habe diese Dinge schon einmal gemacht und ich sage mir immer, das nächste Mal werde ich nicht so dumm sein ... Dann passiert es wieder und ich fühle mich noch schlimmer dabei.

Ich weiß, du solltest dein Kinn hochhalten und aus deinen Fehlern lernen, aber hier ist die Sache: Ich versuche mich zu verbessern, ich sehe nur nicht, wie ich diese Dinge verhindern kann.

Jetzt frage ich euch also: Hast du bestimmte Grundregeln beim Testen deines Codes?

Peter
quelle
1
Dies kann helfen: programmers.stackexchange.com/questions/45479/…
Amir Rezaei

Antworten:

17

Schreiben Sie Tests, bevor Sie Codeänderungen vornehmen.

Wenn Ihre vorgeschlagene Änderung die Behebung eines Fehlers ist, lassen Sie den Test zunächst fehlschlagen, indem Sie den Fehler demonstrieren. Stellen Sie dann sicher, dass der Fehler behoben ist. Wenn Sie den Test nachträglich schreiben und erst gesehen haben, dass er bestanden wurde, können Sie nicht sicher sein, ob er den Fehler überhaupt richtig getestet hat.

Wenn Ihre vorgeschlagene Änderung darin besteht, vorhandene Funktionen zu ändern oder eine Funktion hinzuzufügen, schreiben Sie einige Tests, um eine gute Abdeckung des zu ändernden Codebereichs sicherzustellen. Stellen Sie sicher, dass diese Tests erfolgreich sind, bevor Sie mit der Codeänderung beginnen.

Alb
quelle
Dies ist ein wirklich guter Rat, es kann ein bisschen länger dauern, bis ein Bugfix rauskommt, aber ich werde verdammt sicher nicht wieder solche Fehler machen und es wird mir erlauben, insgesamt stabileren Code zu schreiben.
Peter
@ Peter es sollte auf lange Sicht Wartungszeit sparen. Sie müssen weniger Zeit für manuelle Rauchentest-Korrekturen aufwenden, und die Tests werden auch für das nächste Mal durchgeführt, wenn der Code bearbeitet wird. Manchmal kann es sogar vorkommen, dass das schnelle Schreiben eines Komponententests, der den Fehler reproduziert, das Debuggen und Beheben des Fehlers beschleunigt.
Alb
@ Peter Ich stelle oft fest, dass ich den Fehler mehrmals reproduziere, während ich ihn behebe. Das Schreiben eines kleinen Tests spart in der Regel Zeit und Sie können absolut sicher sein, dass er funktioniert (und in Zukunft auch funktionieren wird).
DasIch
Das ist so ein fantastischer Rat, Kumpel, vielen Dank!
Shaheer
@Alb oder auch kurzfristig.
3

Vergessen Sie nicht, Edge Cases zu testen! Viele Fehler sind, weil die häufigste Aktion getestet wurde, aber nicht die weniger häufigste.

HLGEM
quelle
Imho das wahre Juwel ist, diese Randfälle zu finden. Ich bin oft überrascht von den Fehlern, die aus einem System hervorgehen, nur weil wir nicht an ein bestimmtes Szenario gedacht haben.
Peter
2

Befolgen Sie die technischen Hinweise in den technisch orientierten Antworten. Es ist gutes Zeug. Meine Antwort ist mehr über Haltung.

Es ist einfach absurd, sich schlecht zu fühlen, wenn man den Fehler macht, den jeder Entwickler gelegentlich macht. Während du da sitzt und dich schlecht fühlst, ist der Build immer noch gebrochen, weißt du? Und dann geht es bei Ihrer Arbeit darum, Fehler zu vermeiden, von denen ich weiß, dass es jeden Tag ein aufregendes Abenteuer ist, morgens aus dem Bett zu steigen, oder?

Ich habe von Firmen gehört, in denen das Einchecken von fehlerhaftem Code Anlass zur öffentlichen Schande ist. Ich kann mich nicht einmal mit der Art von verzerrtem, frat-boy, junior-high-level Denken beschäftigen, das zu einem solchen Verhalten führen würde. Es gibt kaum etwas, was für einen Teamleiter oder Manager kontraproduktiver sein könnte.

Also verprügel dich nicht. Wir haben es alle geschafft. Ich habe mich wahrscheinlich einen halben Tag pro Woche durch alberne Fehler gekostet, und das mache ich schon lange. So sieht es aus, wenn Sie Code schreiben - Sie stoßen ständig auf Ihre eigenen Unzulänglichkeiten. Was einen Profi zum Profi macht, ist keine mythische Eigenschaft, niemals Fehler zu machen (manchmal auch große), sondern wie sie auf die Fehler reagieren, die sie machen.

Wenn ich jedem Entwickler, mit dem ich arbeite, ein Mantra beibringen könnte, dann ist es das Folgende: Sie sind nicht Ihr Code . Sie schreiben Code. Sie schreiben es so gut und effizient wie Sie können. Dann gehst du nach Hause. Wenn Sie Ihren Wert oder Ihr Selbstwertgefühl mit der Qualität Ihres Codes gleichsetzen, vermissen Sie nur das Boot, wer Sie wirklich sind.

Dan Ray
quelle
Ich verstehe, was Sie über öffentliche Schande sagen, aber gleichzeitig ist es frustrierend, blockiert zu werden, weil der Build unterbrochen ist, weil Joe Bloggs nicht alle Plattformen vor dem Einchecken erstellt hat.
16.02.11
@tenpn - Totally. Aber die Kehrseite von dem, was ich sage, trifft auch auf Joe Bloggs zu. Er ist auch nicht sein Code. Als Kollegen müssen wir dem Impuls widerstehen, Joe in unseren Augen zu einem Idioten zu machen, weil er einen Fehler gemacht hat, den jeder von uns hätte machen können.
Dan Ray
@tenpn Tatsächlich könnten Sie dem System auch die Schuld geben, dass es den Build nicht automatisch getestet hat, bevor die Änderungen an den Trunk / Master übergeben wurden.
David
2
@tenpn - Weder schlägt auf Ihre Mitarbeiter.
Dan Ray
1
Was ist, wenn die Änderung den Build nicht bricht? Es ist vernünftig, den Code vor dem Einchecken zu erstellen. Es ist nicht so offensichtlich, den Code auf jede erdenkliche Weise zu testen. Es gibt immer ein Szenario, an das man nicht denken kann. Gerade heute bin ich auf einen Gleitkomma-Rundungsfehler gestoßen, der nur auftritt, wenn Sie die richtigen (falschen) Zahlen haben
Peter,
2

Eine weitere wichtige Testmethode besteht darin, den Test zu schreiben und sicherzustellen, dass er mindestens einmal fehlschlägt, BEVOR Sie den Code schreiben. Es ist alles zu einfach, Fehler zu machen und einen Tautologietest zu schreiben, der versehentlich nicht den Zustand testet, auf den Sie prüfen. Falsche Zusicherungen sind fast (und manchmal noch schlimmer) als keine Zusicherungen.

Uri
quelle
0

Eine Idee, die ich von Zeit zu Zeit verwendet habe, ist diese,

Erstellen Sie eine Verzweigung und brechen Sie Ihren Code, führen Sie den Test aus und stellen Sie sicher, dass der Test den Fehler abfängt.

Zachary K
quelle
0

Haben Sie beim Testen Ihres Codes bestimmte Grundregeln?

  • Testen Sie Ihren Code immer als Einheit und versuchen Sie, eine möglichst hohe Abdeckung zu erreichen.

Einige zusätzliche allgemeine Punkte:

  • Investieren Sie etwas Zeit in Design und Planung, bevor Sie mit dem Programmieren beginnen
  • Refactor deinen Code!
BЈовић
quelle