Verwenden Sie Unit-Tests bei der Arbeit? Welchen Nutzen ziehen Sie daraus? [geschlossen]

18

Ich hatte geplant, Unit-Tests zu studieren und auf meinen Code anzuwenden, aber nach einem Gespräch mit meinen Kollegen haben mir einige vorgeschlagen, dass dies nicht notwendig ist und nur einen geringen Nutzen hat. Sie behaupten auch, dass nur wenige Unternehmen Unit-Tests mit Produktionssoftware durchführen.

Ich bin neugierig, wie die Leute Unit-Tests bei der Arbeit angewendet haben und welche Vorteile sie daraus ziehen, z. B. bessere Codequalität, kürzere Entwicklungszeiten auf lange Sicht usw.

Anonym
quelle
13
"Sie behaupten auch, dass nur wenige Unternehmen Unit-Tests mit Produktionssoftware durchführen." Das bedeutet, dass nur wenige Unternehmen qualitativ hochwertige Software produzieren. Mit welcher Gruppe möchten Sie sich zusammenschließen? Wie können "nur wenige Unternehmen" eine negative Aussage sein? Nur wenige Unternehmen sind äußerst profitabel. macht das es schlecht Nur wenige Unternehmen sind wirklich reizvolle Arbeitsplätze. macht das es schlecht Nur wenige Unternehmen minimieren die Abfallerzeugung. macht das es schlecht Der Kommentar "Nur wenige Unternehmen" ist sinnlos.
S.Lott
2
Es ist wahrscheinlich auch falsch, anekdotisch, ich habe noch nicht für oder mit einer Firma gearbeitet, die nicht mindestens ein gewisses Maß an Unit-Tests durchgeführt hat
jk.
1
Ich würde davon ausgehen, dass ein Programmierer, der Unit-Tests für wenig nützlich hält, unerfahren ist oder einfach nicht weiß, wie man effektive Unit-Tests schreibt.
Toby
Wie viel Unit-Test verwenden die Entwickler dieser Site?
JeffO
1
@ S.lott: sinnlos ja, aber es wird immer noch argumentiert, Unit-Test nicht von denen zu machen, die sie nicht machen wollen. Ich verteidige hier nicht ihren Standpunkt, ganz im Gegenteil. Diese Aussage wird jedoch immer noch getroffen, und diejenigen, die sie treffen, sind von ihrem Wert überzeugt, und da sie es sind, müssen wir von den tatsächlichen Vorteilen des Testens überzeugen, da es sinnlos ist, was der Sache nicht viel nützt.
Newtopian

Antworten:

20

Einige von ihnen schlagen mir vor, dass es nicht notwendig ist

Nun, im eigentlichen Sinne haben sie Recht: Tests, Code-Reviews, Quellcodeverwaltung usw. sind ebenfalls nicht unbedingt erforderlich . Nur die wenigsten vernünftigen Entwickler arbeiten langfristig ohne diese. Die meisten von uns haben (oft auf die harte Tour, aus eigenen Fehlern) gelernt, warum dies Best Practices sind.

und es hat einen sehr geringen Nutzen.

Dies ist nicht in den meisten Fällen richtig. Das heißt, wenn wir über Produktionssoftware sprechen, die in den kommenden Jahren im Einsatz - also in der Wartung - sein soll.

Sie behaupten auch, dass nur wenige Unternehmen Unit-Tests mit Produktionssoftware durchführen.

Dies mag zutreffen (wenn auch meiner Erfahrung nach immer weniger), aber es hat nichts über den Wert von Unit-Tests zu sagen . Im Gegensatz dazu der alte Witz "Scheiße ist gut - 50 Milliarden Fliegen können nicht falsch sein!" ;-)

Haben Sie bei Ihrer Arbeit einen Unit-Test durchgeführt und was haben Sie davon? (zB bessere Codequalität, Zeitersparnis etc.)

Ich wende in meiner Arbeit seit über 10 Jahren Unit-Tests an, wann immer dies möglich war. Dieses Gefühl des Vertrauens in meinen Code, zu wissen, dass er funktioniert - und ich kann es jederzeit und überall in wenigen Sekunden immer wieder beweisen , anstatt nur daran zu glauben - ist von unschätzbarem Wert. Es gibt mir den Mut, meinen Code umzugestalten, sein Design zu verbessern oder Fehler zu beheben, ohne befürchten zu müssen, vorhandene Funktionen zu beschädigen. Ich würde nie wieder in diese alten Zeiten des "Code and Pray" zurückkehren.

Péter Török
quelle
14

Ich mache Unittests, aber nicht (oder nur wenige) bei der Arbeit

Die Hauptvorteile von Tests, die ich bekomme, sind, dass das Refactoring viel einfacher ist und dass eine Regression (dh die Wiedereingliederung von Fehlern, die bereits behoben wurden) bemerkt wird.

Testen lebt mit dem Build: Sie checken Software aus, während Tests ausgeführt werden, und Sie checken erst ein, wenn alle Tests mit Ihrer Änderung ausgeführt werden.

Meiner Erfahrung nach ist das Schreiben von Tests praktisch nutzlos, wenn es als Einzelgänger durchgeführt wird. Wenn Sie Ihre Tests immer korrigieren müssen, um den vorgenommenen Änderungen Rechnung zu tragen, wenn die Tests möglicherweise von Ihren Mitarbeitern gelöscht werden (was bei meinen vorherigen Jobs der Fall war), weil sie mich nicht bereitstellen lassen usw., sind sie nur zusätzliche Aufgaben Die Vorteile, die der Rest des Teams sofort in Kauf nimmt.

Wenn das gesamte Team zustimmt (und in einem Team von 1, das einfach ist), sind Tests meiner Erfahrung nach ein großer Vorteil für die Qualität, den Stil und die Robustheit des Projekts.

Aber in einem Team, das ehrlich glaubt, dass "nur wenige Unternehmen ihren Code automatisch testen" und davon überzeugt sind, dass sie sowieso Zeitverschwendung sind, scheint es wenig Hoffnung zu geben, die Vorteile zu verdienen, aber eine große Chance, dass Sie gemacht werden verantwortlich für den "Zeitverlust", wenn auf Fehler hingewiesen wird.

Die beste Möglichkeit, Tests einzuführen, ist ein kleines Projekt, das in Ihrer alleinigen Verantwortung liegt. Dort hätten Sie die Möglichkeit zu glänzen und den Wert von Tests zu demonstrieren.

keppla
quelle
1
Es tut uns klingt negativ, aber ich bin immer noch verbrannt durch ‚ wie die Dinge als Grunzen zu erledigen‘;)
keppla
Sehr guter Rat. Das Problem ist, dass Sie, wenn Sie es richtig machen, den Nutzen von Unit-Tests nicht wirklich sehen. Sie sehen den Schaden möglicherweise nur, wenn Sie keine Komponententests durchführen. Wenn Sie also andere eher mit Statistiken als mit Theorie überzeugen müssen, sind Sie ziemlich durcheinander.
Peter Kruithof
12
@keppla, ich habe Unit-Tests in Projekten geschrieben, in denen meine Teamkollegen noch nicht einmal von Unit-Tests gehört haben. Nachdem meine Tests einige Fehler entdeckt hatten, die sonst unbemerkt durchgegangen wären, bemerkten die anderen, dass sie das Testen von Einheiten selbst lernen wollten. Konkrete Beweise sind König.
Péter Török
1
@keppla, fair genug, wenn Teamkollegen so voreingenommen sind, dass sie ihren gesunden Menschenverstand verlieren, gibt es keine Möglichkeit, sie durch logische Beweise zu überzeugen :-( In einem solchen Fall gelingt es Ihnen möglicherweise mit starker Unterstützung des Managements, die Idee durchzusetzen aber ohne das gibt es keine Hoffnung
Péter Török
3
Sie brechen Tests häufig ab, indem Sie die Schnittstelle ändern, Klassen entfernen usw. Wenn Sie zuerst testen, wird dies nicht als "Brechen", sondern als erster Schritt "Rot" empfunden. Wenn Sie sich jedoch in der Einstellung "Nur ein paar Zeilen hinzufügen, bis es funktioniert" befinden, sind die Tests nur mehr Zeilen. Und wenn sie von jemandem wie diesem „repariert“ werden, verlieren die Tests in der Regel an Nützlichkeit, bis sie wirklich keinen Zweck mehr erfüllen. Selbsterfüllende Prophezeiung 4tw!
Keppla
7

Ich stehe eher auf der Seite Ihrer Kollegen, aber nur bis zu einem gewissen Punkt.

Das Problem bei Unit-Tests ist, dass sie häufig und sinnlos in trivialen Fällen geschrieben sind, in denen eine flüchtige Untersuchung des Codes ergibt, dass es auf jeden Fall funktionieren wird. Zum Beispiel:

def add(x, y)
  x + y
end

Zusammen mit einem Dutzend Tests, um sicherzustellen, dass die Addition tatsächlich für willkürlich ausgewählte Anwendungsfälle funktioniert. Duh ...

Die allgemeine Prämisse hinter Unit-Tests lautet: Wenn Ihr Code keine Fehler enthält, liegt das daran, dass Sie nicht genug getestet haben. Nun, wann schreibt man die richtigen Komponententests? Antworten:

  1. Wenn Sie testen
  2. Beim Debuggen
  3. Während du wirklich knifflige Dinge entwickelst

Lassen Sie uns jeden einzelnen Schritt durchgehen und davon ausgehen, dass Sie eine Art Web-App entwickeln.

Sie schreiben Code für neue Funktionen und dieser sollte inzwischen einigermaßen gut funktionieren. Sie greifen dann zu Ihrem Browser und überprüfen, ob er funktioniert, indem Sie ihn intensiver testen, oder? Bzzzt! ... Falsche Antwort. Sie schreiben einen Komponententest. Wenn Sie dies jetzt nicht tun, werden Sie es wahrscheinlich nie tun. Und dies ist einer der Orte, an denen Unit-Tests sehr gut funktionieren: um Funktionalität auf hohem Niveau zu testen.

Sie entdecken dann einen Bug (der nie einen übersieht?). Dies bringt uns zu Punkt zwei. Sie tauchen wieder in den Code ein und folgen den Schritten. Schreiben Sie dabei die Komponententests an wichtigen Unterbrechungspunkten, an denen es auf konsistente und korrekte Daten ankommt.

Letzter Punkt ist umgekehrt. Sie entwerfen einige haarige Funktionen, die eine Menge Metaprogrammierung beinhalten. Es führt schnell zu einem Entscheidungsbaum mit Tausenden von möglichen Szenarien, und Sie müssen sicherstellen, dass jedes einzelne von ihnen funktioniert. Wenn man solche Dinge schreibt, kann eine einfach aussehende Veränderung hier oder dort unvorstellbare Konsequenzen in der Nahrungskette haben. Angenommen, Sie entwerfen eine MPTT-Implementierung mit SQL-Triggern, sodass sie mit Anweisungen mit mehreren Zeilen funktionieren kann.

In dieser heiklen Umgebung sollten Sie Ihre Tests in der Regel stark automatisieren. Sie schreiben also Skripte, um die Generierung von Testdaten zu automatisieren, und führen eine Bootsladung von Komponententests mit diesen Testdaten durch. Eine wichtige Sache, die Sie dabei nicht aus den Augen verlieren sollten, ist, dass Sie auch Komponententests für Ihren Komponententestgenerator schreiben müssen.

Fazit: Unit-Tests, definitiv ja. Ersparen Sie sich jedoch die Grundfunktionen, bis Sie sie tatsächlich für das Debuggen benötigen oder sicherstellen, dass einige Funktionen ordnungsgemäß funktionieren (einschließlich der Tests selbst in letzterem Fall).

Denis de Bernardy
quelle
Wie Kent Beck es ausdrückte: "Teste alles, was brechen könnte."
Péter Török
1
Ich stimme ihm von ganzem Herzen zu. Ich hoffe, dass das OP Folgendes zur Kenntnis nimmt: Vergessen Sie nicht, die Tests gegebenenfalls zu testen. :-)
Denis de Bernardy
7

Der gesamte Code muss getestet werden. Da gibt es keine Wahl.

Ungetesteter Code ist nutzlos: Man kann ihm nicht trauen, etwas zu tun.

Sie können Komponententests schreiben oder Sie können hoffen, Integrations- oder Abnahmetests auf höherer Ebene zu schreiben.

Unit-Tests sind einfacher zu schreiben, einfacher zu debuggen und einfacher zu verwalten.

Integrationstests basieren auf der Annahme, dass die Einheiten tatsächlich funktionieren. Woher wissen Sie, dass die Einheiten ohne Unit-Tests funktionieren? Wie können Sie einen Integrationstest debuggen, wenn Sie nicht wissen, dass die einzelnen zu integrierenden Einheiten tatsächlich funktionieren?

In ähnlicher Weise hängen Abnahmetests von allen Teilen und Teilen ab, die funktionieren. Woher wissen Sie, dass Teile und Komponenten funktionieren, ohne eine Reihe von Komponententests durchzuführen?

Tests sind obligatorisch. Alle übergeordneten Tests hängen von den tatsächlich funktionierenden Einheiten ab.

Das macht Unit-Tests zu einer logischen Notwendigkeit. Es gibt keine andere Wahl.

S.Lott
quelle
1
Es gibt keine andere Wahl ... wenn Sie Wert auf Qualität legen. Die meisten Softwareunternehmen legen keinen Wert auf Qualität (insofern, als sie sich weigern, Software zu versenden, die als fehlerhaft bekannt ist).
Joeri Sebrechts
@ Jöri Sebrechts: Es ist kein Qualitätsproblem. Es ist ein "Ist es getan" -Problem. Sogar schlechte Software muss getestet werden, um zu beweisen, dass sie etwas tut - alles. Einfache Logik schreibt vor, dass es einen Test geben muss, um zu beweisen, dass er funktioniert. Auch ein schlechter Test ist ein Test. Einfache Logik schreibt vor, dass eine Prüfung des Ganzen Prüfungen der Teile umfassen muss. Unit-Tests werden nur von der Logik verlangt, sonst nichts. Keine Qualitätsüberlegungen, sondern per Definition von "erledigt".
S.Lott
1
Die Verwendung der Software ist ein Selbsttest. Viele Organisationen lassen den Benutzer gerne testen. Ich sage nicht, dass das eine gute Sache ist, aber es ist so wie es ist. Sie können in der Tat festlegen, dass die Tests nicht vor der Auslieferung durchgeführt werden sollen, und die Tests an den Endbenutzer auslagern. Sie können, aber Sie sollten nicht.
Joeri Sebrechts
1
@ Jöri Sebrechts: Eigentlich kannst du nicht. Sie können Software nicht zufällig einem Benutzer zum Abnahmetesten übergeben. Sie müssen die Software mindestens einmal ausgeführt haben, um sicherzustellen, dass sie anscheinend funktioniert. Das ist ein Test - ein schlechter Test - aber ein Test. Logischerweise beinhaltete dieser schlechte Test schlechte Komponententests. Sie existierten, obwohl sie sehr schlecht waren.
S.Lott
Ihre Definition eines Komponententests ist für diese Diskussion unbrauchbar. Ein Komponententest ist ein kodifizierter Test, der für den Versand von Software überhaupt nicht erforderlich ist. (aber ok in vielen Fällen gut zu tun)
Martin Ba
6

Ich verwende Unit-Tests für alles, was ich schreibe, und lasse keinen ungetesteten Code ohne einen Testfall durchgehen. (Aber mir fehlt ein Berichterstattungstool, deshalb muss ich über Testberichterstattung nachdenken. Eine Sache zu einer Zeit ...)

Ganz einfach: Wenn Sie nicht nachweisen können, dass Ihr Code funktioniert (und was ist besser als eine ausführbare Spezifikation in Form eines Tests?), Funktioniert er nicht .

Das gibt mir:

  • Seelenfrieden: Mein CI-Server teilt mir mit, dass meine gesamte Codebasis funktioniert.
  • Die Fähigkeit, meinen Code zu verbessern: Ich kann meinen Code umstrukturieren - umgestalten - in dem Wissen, dass ich nach der Umstrukturierung nichts kaputt gemacht habe.
Frank Shearar
quelle
2
Ich würde dem einen sehr wichtigen Vorbehalt hinzufügen - Unit-Tests allein garantieren nicht, dass "Ihre gesamte Codebasis funktioniert". Dadurch wird sichergestellt, dass alle Codeeinheiten isoliert arbeiten, es besteht jedoch weiterhin eine große Wahrscheinlichkeit für Integrationsfehler, Fehler bei der visuellen Darstellung von Daten usw.
Ryan Brunner,
Wenn Ihre Umgebung nicht "funktioniert, wenn Sie nicht nachweisen können, dass Ihr Code nicht funktioniert, funktioniert er auch". : p
Davy8
@ Ryan: Natürlich sollten Ihre Integrationstests das gesamte Projekt steuern. Die Frage betraf Komponententests, also sprach ich über Komponententests, aber Sie sollten natürlich die Notwendigkeit eines Codeteils nachweisen, indem Sie einen fehlgeschlagenen Integrationstest durchführen. Und natürlich sollten Sie einen CI-Server haben, der Ihre Codebasis automatisch bereitstellt und alle Tests ausführt
Frank Shearar,
@ Davy8: In welchem ​​Fall hast du ernstere Probleme, die "funktionieren Unit-Tests?".
Frank Shearar
4

Unit Testing ist eine Disziplin. Da Code nicht unbedingt funktionieren muss, wird er häufig verworfen.

Es ist jedoch eine bewährte Methode, die zu robustem und weniger fehlerbehaftetem Code führt. Ich glaube nicht, dass ich Ihnen die Vorteile erklären muss, wie Sie bereits erwähnt haben. Wenn Sie sich einige der führenden Open-Source-Projekte ansehen, unabhängig davon, ob es sich um Javascript-Bibliotheken, Full-Stack-Frameworks oder Einzweckanwendungen handelt, verwenden sie alle Unit-Tests.

Ich vermute, dass Ihre Kollegen, die davon abraten, es zu verwenden, keine Programmierer sind. Wenn ja, sagen wir einfach, dass es nicht viele Menschen gibt, die ich höher schätze als Menschen wie Martin Fowler oder Kent Beck ;).

Wie bei den meisten Best Practices handelt es sich um langfristige Vorteile, in die Sie einige Zeit investieren müssen. Sie könnten ein langes Skript mit prozeduralem Code schreiben, aber wir alle wissen, dass Sie sich gewünscht haben, dass Sie ihn objektorientiert geschrieben hätten, wenn Sie ihn nach zwei Jahren überarbeiten müssen.

Gleiches gilt für Unit-Tests. Wenn Sie in Ihrer Anwendung Komponententests für kritische Teile schreiben, können Sie sicherstellen, dass diese auch nach dem Refactoring des Codes immer wie vorgesehen funktionieren. Vielleicht codieren Sie so gut, dass Sie nie einen Regressionsfehler haben. Wenn Sie dies jedoch nicht tun oder ein neuer Programmierer in Ihr Team aufgenommen wird, möchten Sie sicherstellen, dass die Fehler der Vergangenheit nicht erneut auftreten. Ich denke, Ihr Chef würde sich auch darüber freuen, anstatt einen Fehlerbericht einreichen zu müssen, den er vor einem halben Jahr für behoben hielt.

Peter Kruithof
quelle
3

Unit-Tests erfordern eine Unit-Test-freundliche Sprache, ein Unit-Test-freundliches Design und ein Unit-Test-freundliches Problem.

C ++, Multithread-Design und GUI werden ein Albtraum sein, und die Problemabdeckung wird entsetzlich sein.

.NET, wiederverwendbare Single-Threaded-DLL-Assembly, reine Rechenlogik wird ein Kinderspiel.

Lohnt es sich, kann ich nicht wirklich sagen.

Refactorst du viel? Sehen Sie in Ihrem Code häufig "dumme Bugs" wie "off by one"?

Was auch immer Sie tun, seien Sie nicht der Typ, der andere kritisiert, indem er sagt "Sie haben keine Unit-Tests, deshalb saugen Sie". Wenn Ihnen Tests helfen, versuchen Sie es, wenn nicht, ist es nicht so, als wären sie eine Silberkugel.

Coder
quelle
1
Warum sollte Multithread-Design ein Albtraum sein? Entwerfen Sie für Synchronisierungspunkte, und testen Sie dort.
Frank Shearar
1
Weil das Timing von Mondphasen, CPU-Takt, Müll und so ziemlich allem abhängt. Bei einem Check-in schlägt der Test möglicherweise fehl, bei 1000 anderen nicht.
Coder
1
Ich habe testgetriebenes Multithreading geschrieben. Es ist auf jeden Fall machbar.
Frank Shearar
4
Quatsch, du kannst Unit-Tests in jeder Sprache machen.
jk.
1
Es ist schwierig, Komponententests für GUI-Interaktionen zu schreiben, aber aus diesem Grund haben wir alles (unseren Engine-Code) isoliert, was nichts mit der GUI zu tun hat. Es hat uns geholfen, eine gute Entscheidung zu treffen, um die Engine von der GUI zu trennen. Außerdem fungieren die Unit-Tests als unsere Schnittstelle anstelle der GUI und stellen die Informationen bereit, die wir normalerweise benötigen.
Chance
3

Ich möchte , aber ich hatte das Pech, fast ausschließlich in Unternehmen zu arbeiten, die sich einfach nicht um Qualität kümmern und sich mehr darauf konzentrieren, Müll zusammenzuwerfen, der ein bisschen irgendwie funktioniert, wenn man blinzelt. Ich habe Unit-Tests erwähnt und bekomme ein "Huh?" Art von Look (der gleiche Look, den ich erhalte, wenn ich die SOLID- Prinzipien oder ORMs oder Entwurfsmuster erwähne, die jenseits der "Klasse mit allen statischen Methoden" liegen oder die .NET-Namenskonventionen befolgen). Ich war bisher nur in einem Unternehmen, das diese Dinge verstand, und leider war es ein kurzfristiger Vertrag, und die Abteilung wurde auf Kostensenkungen reduziert, sodass nicht genügend Zeit zum Lernen vorhanden war.

Ich habe Unit-Tests in weggeworfenen Dummy-Projekten absolviert, aber ich habe mich noch nicht wirklich mit ausgewachsenem TDD / BDD beschäftigt, und kein Mentor, der mir dabei helfen kann, erschwert die ordnungsgemäße Durchführung erheblich.

Wayne Molina
quelle
2

Wir benutzen sie. Ein großer Vorteil ist die Überprüfung des Unit-Test-Frameworks auf Speicherlecks und Zuordnungsfehler . Manchmal liegt das Problem im Komponententestcode selbst, oft aber auch im Produktionscode.

Es ist eine großartige Möglichkeit, die Dinge zu finden, die bei einer Codeüberprüfung übersehen werden.

Unit-Tests (sollten) laufen auch sehr schnell und können im Rahmen Ihrer kontinuierlichen Integration nach jedem Commit und auch von Entwicklern vor dem Commit ausgeführt werden. Wir haben über 1.000, deren Ausführung weniger als 20 Sekunden dauert.

Vergleichen Sie mit über 40 Minuten für Automatisierungstests auf Systemebene und Stunden / Tage für manuelle Tests. Natürlich sind Unit - Tests nicht nur die Prüfung sollten Sie sie können diese Fehler zu finden und testen Sie tun, aber zu einem feinkörnig Code-Ebene werden helfen Grenzfälle , dass das System / Integrationstests nicht berühren können. Unser Code muss mit einer Entscheidungsabdeckung von über 75% und einer Funktionsabdeckung von 100% getestet werden, was ohne Unit-Tests sehr schwer zu erreichen wäre.

Hugo
quelle
2

Ich würde sagen, dass Unit-Tests einen Mehrwert bieten, aber ich bin kein großer TDD-Schüler. Ich finde den größten Nutzen mit Unit-Tests, wenn ich Motoren oder irgendeine Art von Motor wirklich und dann Utility-Klassen berechne, Unit-Tests sind dann sehr hilfreich.

Ich bevorzuge automatisierte Integrationstests für die mehr datenabhängigen Blöcke, aber es kommt darauf an, dass ich im Datengeschäft tätig bin. Viele Fehler betreffen mehr Daten in unserer Umgebung als alles andere, und daher funktionieren die automatisierten Integrationstests gut. Überprüfen der Daten vor und nach diesen Tests und Generieren von Ausnahmereports aus diesen Tests.

Unit-Tests bieten also einen echten Mehrwert, insbesondere wenn das zu testende Gerät mit allen erforderlichen Eingängen ausgestattet werden kann und mit den angegebenen Eingängen allein arbeitet. Auch in meinem Fall sind die Calc-Engines und Utility-Klassen perfekte Beispiele dafür.

Marthinus
quelle
2

Kosten: Code langsamer, Lernkurve, Entwicklerträgheit

Vorteile: Im Allgemeinen habe ich festgestellt, dass ich beim ersten Testen besseren Code geschrieben habe - SOLID weise ...

Aber meiner Meinung nach liegt der größte Vorteil der IMHO in der Zuverlässigkeit größerer Systeme, die sich häufig ändern. Ein guter Unit-Test erspart Ihnen (meiner) Ärger, wenn Sie mehrere Versionen veröffentlichen, und kann einen großen Teil der mit manuellen QS-Prozessen verbundenen Kosten einsparen. Natürlich wird kein fehlerfreier Code garantiert, aber es werden einige schwer vorhersehbare gefunden. In großen komplexen Systemen kann dies in der Tat ein sehr großer Vorteil sein.

Bob_Mac
quelle
0

Ich mache einen Unit-Test bei der Arbeit, wenn ich die Gelegenheit dazu bekomme, und ich versuche, meine Kollegen davon zu überzeugen, dasselbe zu tun.

Ich bin nicht religiös, aber die Erfahrung zeigt, dass Nutzungs- und Geschäftsmethoden, bei denen es sich um Unit-Tests handelte, sehr robust sind und in der Testphase in der Regel nur wenige oder gar keine Fehler auftreten, was letztendlich die Projektkosten senkt.

Philippe
quelle
0

Wo ich den wahren Vorteil des Codierens von Unit Tests und der Ausführung von Unit Tests als Teil des täglichen Build-Prozesses sah, arbeitete ich an einem Projekt mit über 30 Entwicklern auf drei verschiedenen Kontinenten. Bei den Unit-Tests hat sich herausgestellt, dass jemand eine Klasse, die er beibehalten hat, auf subtile Weise geändert hat, ohne zu verstehen, wie die Leute diese Klasse verwendeten. Anstatt darauf zu warten, dass der Code die Testgruppe erreicht, gab es sofort eine Rückmeldung, als die Unit-Tests anderer Leute infolge der Änderung fehlschlugen. [Deshalb müssen alle Komponententests routinemäßig ausgeführt werden, nicht nur die, die Sie für Ihren Code geschrieben haben.]

Meine Richtlinien für Unit-Tests sind:

  1. Testen Sie alle Bedingungen, die Ihnen für Ihren Code einfallen, einschließlich fehlerhafter Eingaben, Grenzen usw.
  2. Alle Unit Tests für alle Module sollten regelmäßig durchgeführt werden (dh als Teil der nächtlichen Builds)
  3. Überprüfen Sie die Unit-Testergebnisse!
  4. Wenn jemand einen Fehler in Ihrem Code findet, der Ihre Tests überstanden hat, schreiben Sie einen neuen Test dafür!
jwernerny
quelle
0

Ich habe kürzlich TDD gelernt und finde, dass es sehr nützlich ist. Es gibt mehr Sicherheit, dass sich mein Code so verhält, wie ich es erwartet habe. Zusammen mit dem Vornehmen von Re-Factoring, das ich einfacher machen möchte. Immer wenn ein Fehler gefunden wird, können Sie durch das Testen sicherstellen, dass er nicht wieder angezeigt wird.

Am schwierigsten ist es, gute Komponententests zu schreiben .

Es ist ein guter Maßstab für Ihren Code.

Schleis
quelle