Wie kann ich mit dem Testen in einer Testantikultur beginnen? [geschlossen]

20

Ich muss ein Geständnis machen: Formalisiertes automatisiertes Testen war nie Teil meines Programmierhintergrunds. Ich arbeite jetzt in einer sehr großen Firma mit vielen Entwicklern (die meisten von ihnen sind Webentwickler der einen oder anderen Art), und es ist offensichtlich, dass die meisten von ihnen auch keine Tests * durchführen. (* Ich werde es nicht weiter formell sagen ; bitte leiten Sie es ab.)

Wenn ich auf die Unterstützung meiner Organisation warte, um mit dem Testen zu beginnen, wird dies niemals geschehen. Wenn ich versuche, "Dinge von innen zu verändern", indem ich Tests beim Management dränge, geht mir der Dampf aus, bevor es zu Veränderungen kommt. Ich muss jetzt mit dem Testen beginnen.

Aber mit TDD und seiner Art werde ich eine Menge Testcode zusammen mit dem Produktionscode haben. Unsere Versionskontrollsysteme (alle zentralisiert) sind nicht für die Speicherung von Testcode ausgelegt. Ich muss einen Platz für all das auf meiner Workstation finden.

Ist es möglich, in einer Kultur, die die Werkzeuge dafür nicht wertschätzt oder nicht bereitstellt, eine persönliche Praxis des Softwaretests zu beginnen? Mit welchen Techniken und Tools können Sie testen, wenn die offiziellen Tools und Organisationen keinen Platz für Tests, Frameworks und Automatisierungen haben?

Kojiro
quelle
14
Warum können Sie Testcode nicht im VCS Ihres Unternehmens speichern? Ich stelle mir vor, dass in einem Projekt mit einem srcVerzeichnis für Produktionscode auch ein testVerzeichnis hinzugefügt werden kann - oder ist dies aus irgendeinem Grund ausdrücklich verboten?
Péter Török
@ PéterTörök Du überschätzt uns. Wir haben kein srcVerzeichnis, wir haben Web-Wurzeln. Um meinen Code in das zentrale VCS einzuchecken, würde ich ihn in das Web-Stammverzeichnis einchecken.
Kojiro
Wenn Sie in Ihrer Anti-Test-Kultur keine Quellcodeverwaltung haben, würde ich versuchen, dies zuerst (oder auch) zu tun, da dies viele andere Probleme lösen wird, von denen ich sicher bin, dass Ihr Team sie hat. Dann wird der Grundstein dafür gelegt, was Sie zum Testen tun möchten.
Scott Wylie
@ScottWylie Das habe ich nicht ganz gesagt. Wir haben VCS, wir haben es nur nicht zum Testen organisiert (oder vieles, was über die direkten Bearbeitungen von Webroot-Inhalten hinausgeht). Ich glaube, jemandes Neffe hat das CVS 1998 eingerichtet und seitdem hat es niemand mehr geändert.
Kojiro

Antworten:

22

Ich persönlich habe das mit beachtlichem Erfolg gemacht. Die Schlüsselfaktoren für den Erfolg:

  • Erhalten Sie (vorläufige) Managementunterstützung. Die Vorteile automatisierter Tests sind gut dokumentiert und sollten jeden Manager überzeugen, es zumindest zu versuchen. Das schließt das Finden eines Platzes im VCS und eines Build-Servers ein, weil
  • Automatisierte Tests haben nur dann ihren vollen Wert, wenn sie häufig und automatisch ausgeführt werden, damit Sie Probleme schnell erkennen und sich nicht auf Mitarbeiter verlassen müssen, die nicht vergessen, sie auszuführen. Sie benötigen einen Build-Server, der sie mindestens täglich ausführt. Dies kann eine alte Workstation sein. Jenkins braucht nur sehr wenig Arbeit, um zum Laufen zu kommen.
  • Mit gutem Beispiel vorangehen. Schreiben Sie Tests, sprechen Sie über den Nutzen, den sie Ihnen bieten, und sprechen Sie darüber, wie sie vor potenziell viel größerer Verlegenheit geschützt wurden, wenn sie Fehler aufdecken, die von anderen Entwicklern eingeführt wurden.
  • Nehmen Sie die tief hängenden Früchte. Einige Teile der Anwendung sind schwer zu testen, andere einfach. Einige sind robust, andere spröde. Das Schreiben von Tests für spröde, aber leicht zu prüfende Teile liefert den höchsten Wert in kürzester Zeit.
  • Prüfen Sie, ob Sie wiederverwendbare Tests schreiben können, z. B. die Testkonventionen oder -funktionen, die alle Module (Webseiten, REST-Services usw.) aufweisen müssen, die jedoch häufig vergessen werden.
Michael Borgwardt
quelle
7

Ohne Unterstützung des Managements sind Sie tot im Wasser. Das Management wird behaupten, dass Sie keine lohnende Arbeit leisten, dass Sie in Ihren Bewertungen bestraft werden und dass Sie schließlich entlassen werden. Es gibt Möglichkeiten, das Management zu überzeugen, dass frühe Tests sie weniger kosten. Es ist möglich, die Kultur zu ändern, aber Sie legen Ihren Hals auf den Hackklotz.

Ich würde vorschlagen, Machiavelli, den Prinzen, im Kapitel darüber zu lesen, wie man Veränderungen einführt, bevor man etwas unternimmt.

Sardathrion - Setzen Sie Monica wieder ein
quelle
Ihre ist die zweite Antwort, die nahelegt, dass das Testen Zeit kostet, die sonst nicht ausgegeben würde. Aber das Testen von Evangelisten (scheint mir) wird Ihnen sagen, dass das Testen Zeit spart. Nicht nur auf lange Sicht, sondern sogar im Vorfeld eines mittelgroßen Projekts, da Sie nicht so viel Zeit für das Debuggen Ihres Produktionscodes aufwenden und die Tests Sie dazu zwingen, den Code so anzupassen, dass er sie weitergibt Verständnis der Theorie) alles dient dazu, die Gesamtzeit für die Codierung zu reduzieren. Haben Sie festgestellt, dass dies nicht der Fall ist?
Kojiro
1
@kojiro: Ja, allgemeine Tests reduzieren Zeit und Kosten. Dies wird jedoch kurzfristig nicht der Fall sein. Einige Manager halten die kurzfristige Situation für wichtiger. Was ist eine gute Software, wenn nicht eine, für die das Unternehmen bezahlt wird, und die dem Kunden Fehlerbehebungen in Rechnung stellen kann?
Sardathrion - Wiedereinsetzung von Monica
2
Testen spart Zeit, aber wenn Sie die Hälfte des Codes wiederholen müssen, um testfähig zu sein, verschwenden Sie zunächst Zeit damit, all diese Arbeiten nur wenige Monate später zu erledigen, Tests durchführen zu können, und dann wird es schneller . Manager denken nicht in "Monaten auf der Straße", sondern in "diesem Monat". Alles, was sie jemals sehen, ist Zeitverschwendung, weil der Entwickler keinen neuen Code erstellt, den sie mit Tests spielen, die wir können. ' t verkaufen oder, wahrscheinlicher, Refactoring-Code, der "bereits funktioniert"
Wayne Molina
In der Regel wird auch kurzfristig Zeit gespart. Wenn Sie an etwas arbeiten, ist es viel schneller, einen Teil des Codes durch einen Test testen zu können, als die gesamte App auszuführen und ihn zur Ausführung dieses bestimmten Teils des Codes zu überreden.
Stefan Billiet
3

Meiner Erfahrung nach kann man eine Anti-Test-Kultur nicht sinnvoll einführen. Entweder werden die Tests als Zeitverschwendung angesehen und Sie werden wegen "Zeitverschwendung" oder "zu langer Zeit" gerügt, oder der Code ist festgefahren, weil er jahrelang nicht auf testbare Weise geschrieben wurde (z. B. keine Schnittstellen, alles) eng gekoppelt) und Sie müssen viel Zeit damit verbringen, Code umzugestalten und / oder neu zu schreiben (wodurch die Gefahr besteht, dass "zu lange" und "Zeit verschwendet" wird), um ihn testbar zu machen, so dass Sie Tests überhaupt erst schreiben können .

Möglicherweise haben Sie eine Chance, wenn Sie auf der grünen Wiese Dinge erledigen, die nur mit vorhandenen Dingen interagieren müssen (erstellen Sie eine schöne Hülle um die schlechten Bereiche), oder wenn Sie dies in kleinen Mengen tun können, ohne dass Probleme auftreten oder dies erforderlich ist "Arbeiten Sie an Aufgaben, die Ihnen nicht zugewiesen wurden", die Sie in die Hundehütte bringen können.

Wayne Molina
quelle
1

Ich denke nicht, dass Sie sehr weit kommen werden, bis Sie ein hinreichend gutes Beispiel dafür finden, dass es ein Problem gibt (das derzeit möglicherweise nicht erkannt wird), das durch automatisierte Tests behoben werden kann.

Wenn es eine Kultur des manuellen Testens mit definierten Skripten gibt, sind die Kosten für die Ausführung dieser Skripten mit dem Risiko von unvollständigen oder ungenauen Ergebnissen verbunden. Es kann eine Geschichte (dokumentiert oder in Form einer "Kriegsgeschichte") davon geben. Schlagen Sie ein Pilotprojekt zur Automatisierung einiger dieser manuellen Tests vor, um eine langfristige Kosteneinsparung zu erzielen.

Wenn es nicht einmal eine manuelle Testfunktion gibt, würde ich vorschlagen, dass das Unternehmen nicht erkennt, dass formale Tests, automatisiert oder auf andere Weise, einen Wert haben. In diesem Fall würde ich die bevorstehende Straße als lang und steil bergauf betrachten, aber auch hier ist wahrscheinlich eine klare Demonstration erforderlich, dass das Unternehmen von einem weniger zwanglosen Ansatz in Bezug auf die Softwarequalität profitieren kann. Wenn Sie das nicht können, ist es schwer zu erkennen, wie die Idee aus kommerziellen Gründen unterstützt werden könnte.

Mike Woodhouse
quelle
0

Eine Idee ist, dass Sie versuchen, einen Test zu schreiben, der beweist, dass der Code, den eine andere Person geschrieben hat, fehlerhaft ist. Sollte das Konzept verkaufen.

Anders Lindén
quelle