2016-07-07 9 views
1

Wir haben ungefähr sieben verschiedene Websites, die wir selbst entwickelt haben. Sie sind Websites, die verschiedene HR-Anwendungen verfolgen und einigen unserer Mitarbeiter dabei helfen, ihre Aufgaben per Terminplanung zu erledigen. Heute sagte mir der Chef-Software-Designer, dass ich mit phpUnit Testfälle für unseren bestehenden Code schreiben sollte. Unsere Haupt-Website hat mindestens eine Million Zeilen Code und die anderen Websites sind alle Ableger davon, wahrscheinlich in den Zehntausenden bis Hunderttausenden von Zeilen.rückwirkende phpUnit testen: ist es das wert?

Keiner dieser Code wurde durch eine offensichtliche Design-Methode geschrieben. Lohnt es sich für uns, tatsächlich den ganzen Code zurück zu gehen und phpUnit-Tests darauf anzuwenden? Ich denke, wenn wir das machen wollten, hätten wir es wahrscheinlich von Anfang an tun sollen. Auch, wenn wir tun entscheiden, diese Unit-Test zu starten, sollten wir nicht TDD von hier an übernehmen? Ich weiß genau, dass das keine Priorität sein wird.

tl; dr: Mir wurde gesagt, Post-Rollout-Testfälle für bestehenden Code zu schreiben, aber ich weiß, dass der vorhandene Code und zukünftiger Code nicht mit den Prinzipien von TDD erstellt wurde/wird. Ist es das wert? Ist es machbar?

Antwort

3

Ändern Sie immer noch den Code? Dann profitieren Sie von schriftlichen Tests.

Die schwierigere Frage ist: Was zuerst testen? Eine mögliche Antwort wäre: Testen Sie den Code, den Sie ändern möchten, bevor Sie ihn ändern.

Sie können nicht alle Ihre Codejahre nach dem Schreiben testen. Dies wird wahrscheinlich zu viel Zeit und Geld für den generierten Nutzen Ihres Unternehmens kosten.

Es ist auch sehr schwer "nur mit PHPUnit zu beginnen", die Vorteile für einen solchen Ansatz sind wahrscheinlich nicht so toll in den ersten paar Monaten oder Jahren, weil Sie immer noch sehr kleine Code-Einheiten testen würden kann auch prüfen, ob das ganze System funktioniert. Sie sollten auch mit End-to-End-Tests beginnen, die einen virtuellen Browser verwenden, der auf Ihre Seiten "klickt" und erwartet, dass Text angezeigt wird. Suchbegriffe wären "Selenium" oder "Behat".

Ich weiß, dass der vorhandene Code und zukünftiger Code ist nicht/nicht mit den Grundsätzen der TDD im Auge

Es ist eine Frage der Einstellung aller Entwickler

erstellt werden, was in der geschehen wird Zukunft. Für vorhandenen Code ohne Tests werden sie wahrscheinlich nie passieren. Neuer Code, geschrieben von unwilligen Entwicklern, wird ebenfalls nicht getestet. Aber willige Entwickler können einen Unterschied machen.

Beachten Sie, dass dies mehr als nur der führende Softwaredesigner benötigt, der dem Team sagt, dass es mit dem Testen beginnen soll. Sie müssen gecoacht werden und benötigen eine professionelle Hilfe, wenn Sie dies noch nicht getan haben und wenn es keine Infrastruktur gibt, die diese Tests ständig ausführt, um sicherzustellen, dass sie immer noch funktionieren. All das zu setzen bedeutet eine Menge Aufwand, und wenn der leitende Softwareentwickler oder irgendein höherer Chef bereit ist, Zeit und Geld dafür zu investieren, sollten Sie sich selbst sehr glücklich schätzen, weil Sie etwas lernen und zuverlässigere Software bauen können.

Wenn nicht, wird dieser Ansatz wahrscheinlich aufgrund einer passiven aggressiven Verweigerung scheitern.

1

Automatische Tests sind eine sehr gute Idee, wenn Sie Code umstrukturieren oder neu schreiben wollen. Wenn Sie einen PHPUnit-Test für eine Funktion oder Klasse haben, können Sie den Code neu schreiben und dann mit dem Test bestätigen, dass der Code immer noch genauso funktioniert wie zuvor. Andernfalls können Sie andere Teile Ihres Codes beim Refactoring oder beim Neuschreiben von Code zerstören.

1

Sie werden wahrscheinlich nicht in der Lage sein, den Code in seine aktuelle Form zu testen. Es geht nicht nur darum, Tests auf etwas schlecht gepriesenen Code zu werfen, da dieser Code wahrscheinlich nicht testbar ist.

Um die Tests schreiben zu können, müssen Sie den Code wahrscheinlich umgestalten. Abhängig von der Qualität des Codes könnte es bedeuten, es komplett neu zu schreiben.

Ich würde empfehlen, nur die neuen Ergänzungen des Codes zu testen. Also, wenn Sie eine neue Methode in einer Klasse oder einer neuen Funktion oder was auch immer brauchen, muss es getestet werden. Persönlich bevorzuge ich TDD, aber für neue Leute beim Testen kann es zu viel sein, um sie über einen Test nachzudenken, noch bevor der Code umstrukturiert wurde. Sie können also später testen.

Um die neuen Erweiterungen zu testen, müssen Sie einen Refactoring für vorhandenen Code durchführen. Wenn Sie beispielsweise eine Methode hinzufügen, die Informationen protokolliert, sollte der Logger injiziert werden, damit er stubben kann. Also solltest du eine Art Container schreiben. Jetzt heißt es nicht, dass überall wo der Logger benutzt wird, man ihn injizieren muss. Nur an den Stellen, an denen Sie etwas hinzufügen oder ändern, und das muss getestet werden. Dies kann sehr schwierig werden und erfordert, dass jemand, der versiert im Testen ist, assistiert.

Kurz gesagt, ist meine Empfehlung:

  • Test nur die neuen Ergänzungen und der neue Code
  • Umgestalten der Code sicher sein, dass die im Test befindlichen Code wirklich überprüfbar ist
  • sehen, ob die Tests geben Sie Vertrauen und sind die Mühe wert und gehen Sie weiter