Die Theorie der Stückprüfung, Teil 3

In den letzten beiden Artikeln haben wir uns eingehend mit der Theorie der Unit-Tests befasst und wie sie uns bei der Entwicklung von WordPress helfen kann. Wir haben Unit-Tests definiert und verschiedene Möglichkeiten untersucht, wie wir uns bei unseren Projekten unterstützen können.

Aber wir haben noch mehr zu berichten.

In diesem abschließenden Artikel werden wir prüfen, warum wir uns überhaupt mit dem Komponententest beschäftigen sollten, und fassen die Vor- und Nachteile zusammen. Als nächstes werden wir uns ansehen, wie wir unsere bestehenden Projekte nachrüsten können. Zum Abschluss fassen wir eine Liste von Ressourcen zusammen, die speziell für uns WordPress-Entwickler zur Verfügung stehen und Ihnen helfen werden, unsere Themen zu testen.


Warum wir Unit-Test: Alles über Qualität

Das übergreifende Thema dieser gesamten Serie befasste sich mit der Frage, warum wir uns mit Unit-Tests beschäftigen sollten. Wenn dies jedoch nicht kurz gesagt wurde, gilt Folgendes:

Unit Testing hilft uns dabei, Probleme frühzeitig zu erkennen, Entwicklern eine Menge selbstdokumentierenden Codes zur Verfügung zu stellen und eine höhere Qualität der Software zu erreichen.

Zugegeben, dies setzt voraus, dass wir das Üben von guten Einheitentesttechniken durchführen. Natürlich wurde dies im vorherigen Artikel ausführlich behandelt, aber es lohnt sich, dies noch einmal zu wiederholen.

Zu beachten ist - insbesondere, wenn Sie versuchen, dies in einer eher geschäftlichen Umgebung oder in einem größeren Unternehmen anzuwenden -, dass Komponententests nicht nur etwas sind, was Entwickler für sich selbst tun. Qualität ist zweiseitig - sie profitiert vom Kunden und dem Unternehmen.

Durch die Bereitstellung eines höheren Qualitätsniveaus für den Kunden - das heißt gründlich getesteter Software - sollten weniger Fehler auftreten. Da Fehler zu einer Zeit führen, die Entwickler mit der Lösung verbringen müssen, anstatt an neuen Projekten oder neuen Funktionen bestehender Produkte zu arbeiten, kann dies letztendlich Geld sparen.

Durch die Bereitstellung eines höheren Qualitätsniveaus für das Unternehmen sind die Entwickler sicherer in ihren Bemühungen, da sie bei jeder Änderung eine Reihe von Tests durchführen können, wenn sie wissen, wie sich ihre Arbeit auf die gesamte Anwendung auswirkt. Wenn ein Test fehlschlägt, können sie ihn vor der Bereitstellung in der Produktion beheben.

Bei Unit Testing geht es um Qualität. Es betrifft nicht nur die Benutzer, die den Code schreiben, sondern auch das Unternehmen, das ihn versendet, und die Kunden, die ihn verwenden.


Vorteile und Nachteile

Die Wahrheit ist, wir haben bereits die Vorteile des Komponententests behandelt. Der Vollständigkeit halber wollen wir sie hier zusammenfassen (obwohl Sie sie immer im Detail überprüfen können!). Stückprüfung…

  • Hilft Entwicklern dabei, Probleme frühzeitig zu finden und kann Zeit sparen, wenn die Anwendung wächst und neue Funktionen eingeführt werden
  • Bietet eine Dokumentationsebene im Code, sodass aktuelle und zukünftige Entwickler verstehen können, wie der Code funktionieren soll
  • Fährt die Architektur so, dass die Anwendung während ihres gesamten Lebenszyklus getestet werden kann
  • Verbessert die Sprache des Codes durch Bereitstellung besser lesbarer Funktionen und eines Steuerflusses

Alles hört sich gut an, richtig? Und ja, es wird vorausgesetzt, dass sich die Entwickler für hohe Standards und Vorgehensweisen zur Rechenschaft ziehen, wenn es darum geht, dies in der täglichen Arbeit umzusetzen, aber Unit-Tests sind nicht ohne Nachteile.

Zeit ist Geld und Sie verbringen Zeit

Dies wurde in dieser Serie gesagt: Die Prüfung von Einheiten erfordert eine erhebliche Zeitintensität. Zugegeben, wenn Sie ein neues Projekt beginnen, ist die Zeitinvestition viel geringer als wenn Sie dies in eine vorhandene Anwendung einpassen, aber Sie sind es immer noch Sie müssen mehr Code schreiben als ohne zu testen.

Da Sie mehr Code schreiben, nehmen Sie sich mehr Zeit - am vorderen Ende des Projekts. Die Vorteile von Komponententests ergeben sich häufig erst später, aber wenn ein Projekt ein bestimmtes Zieldatum für die Veröffentlichung hat und diese Version eine bestimmte Anzahl von Funktionen enthält, werden Sie wahrscheinlich nicht alle Komponententests und Funktionen in diese Version integrieren die Freisetzung.

Wenn Sie kleinere Feature-Sets zum Release oder verzögerte Zieldaten vermeiden möchten, müssen Sie dies tun haben rechtzeitig für Unit-Tests bauen.

Komplexitätstötungen und andere Klischees

Sie haben alle gehört: Komplexität tötet, halte es einfach dumm, weniger ist mehr und so weiter.

Ehrlich gesagt, alle diese Punkte sind wahr und sie haben ihren richtigen Platz in der Entwicklung, aber die Tatsache ist, dass diese Einheit getestet wird ist zusätzlicher Code und zusätzlicher Code immer führt zu mehr Komplexität. Daher müssen wir sicherstellen, dass wir alle unsere Unit-Tests ordnungsgemäß verwalten und organisieren können.

Möglicherweise ist dies die Dateiorganisation oder der Namensabstand oder Namenskonventionen oder versionierte Tests oder alle oben genannten. Was auch immer Sie am Ende tun, Unit-Tests sollten in der Welt der Software nicht als Bürger zweiter Klasse behandelt werden - sie sollten den gleichen Konstruktionsprinzipien wie andere Klassen oder Funktionen so weit wie möglich unterliegen.

Der Nachteil des Designs

Ja, im letzten Artikel haben wir gesagt, dass Komponententests dazu beitragen können, das Design einer Anwendung voranzutreiben und ein Design zu fördern, das die gesamte Anwendung testfähiger macht. Dies ist immer noch wahr, aber es ist mit einem Aufwand verbunden: Manchmal ist das am besten überprüfbare Design nicht das klarste.

Damit meine ich, dass, weil eine Reihe von Funktionen - oder sogar eine Klasse - vollständig Unit-getestet ist, die Kohäsion das Potenzial hat, gefährdet zu werden, weil wir den Zugriff auf bestimmte Funktionen opfern, um ihre Datenverarbeitung zu überprüfen. Natürlich ist dies keine strenge und schnelle Regel, und für manche ist dies vielleicht nicht einmal ein Problem, aber Sie müssen entscheiden, worüber Sie dogmatisch werden sollen: Ist es ein perfekt konstruierter Satz von Klassen und oder Funktionen oder? ein zusammenhängendes System von Tests und Funktionen, die zusammenarbeiten?

Letztendlich glaube ich, dass es darauf ankommt, wie Sie Tests als einen größeren Teil des Ganzen betrachten. Wenn sie Teil des Designs Ihrer Anwendung sind, leidet das Design möglicherweise nicht. Wenn Sie Tests jedoch im Nachhinein betrachten, kann das Design der Kernanwendung nur geringfügig beeinträchtigt werden.

Kontinuierliches Tweaking

Wie gesagt, Software wird nie gemacht und da das Testen von Einheiten Teil einer Software ist, wird es niemals gemacht.

Da eine Anwendung immer weiterentwickelt wird - sei es, dass Fehler behoben werden, neue Funktionen eingeführt (oder sogar entfernt) werden, müssen die zugehörigen Tests ebenfalls hinzugefügt oder aktualisiert werden. Und es kommt immer wieder auf die Zeit zurück.

Wenn Sie in einem Team von Entwicklern arbeiten, kann sich das Fehlen von Aktualisierungstests auch negativ auf das Team auswirken, da die Ergebnisse, die die Tests melden, falsch-positiv oder falsch negativ sind. Sobald Tests geschrieben sind, müssen sie unbedingt aktualisiert werden. Andernfalls können sie zu einem sehr schlechten Produkt führen.


Integrieren von Unit-Tests in Ihren Workflow

Unit Testing ist viel einfacher zu verkaufen, wenn Sie mit einem Projekt beginnen. Wenn Sie jedoch eine bestehende Anwendung (oder in unserem Fall ein Design oder Plugin) nachrüsten möchten, wird dies etwas Zeit in Anspruch nehmen Anstrengung.

Und obwohl es für die perfekte Umsetzung keine Silberne Kugel gibt, gibt es einige gute Möglichkeiten, um die Praxis in Ihrer täglichen Arbeit umzusetzen:

  • Stellen Sie sicher, dass sich Ihr Projekt unter Quellcodeverwaltung befindet - Dies sollte gegeben sein, aber wenn nicht, beginnen Sie so schnell wie möglich. Das "wie und warum"sind außerhalb des Umfangs dieses Artikels, aber es ist wichtig, dass Ihre Arbeit unter Quellcodeverwaltung steht, insbesondere wenn Sie Tests einführen.
  • Stellen Sie die WordPress-Unit-Tests vor - Richten Sie sich mit den WordPress-Einheitentests ein (Anweisungen hier). Ich empfehle, sie in einem Unterverzeichnis Ihres Projekts zu belassen, um die Tests einfacher organisieren zu können. Stellen Sie sicher, dass sie sich für die Quellcodeverwaltung einsetzen.
  • Beginnen Sie mit dem Hinzufügen von Tests - Fügen Sie jedes Mal, wenn Sie an einer Funktion arbeiten oder eine neue Funktion einführen, einen entsprechenden Komponententest hinzu. Wenn eine bereits vorhandene Funktion nicht testbar ist, sollten Sie sich die Zeit nehmen, um sicherzustellen, dass sie vorhanden ist. Dies ist eine harte Schlacht, aber es ist werden auszahlen.
  • Erinnern Sie sich an Erfolg und Misserfolg - Denken Sie daran, dass Sie beim Schreiben von Tests auch Tests für die Erfolgsfälle und Tests für Fehlerfälle einführen müssen.

Wenn Sie die obigen Schritte befolgen, erhalten Sie schließlich eine erhebliche Menge Code-Abdeckung. Ja, es braucht Zeit und ja, Sie werden wahrscheinlich eine Menge Code überarbeiten müssen, aber die Investition wird in der gleichen Zeit Dividenden für die Zukunft Ihres Produkts bringen.


Verfügbare Ressourcen

Hier eine Zusammenfassung der Ressourcen, die zum erfolgreichen Testen Ihrer auf WordPress basierenden Projekte beitragen können:

  • Der Anfängerleitfaden für Unit-Tests - Eine Reihe von Artikeln, die ich geschrieben habe, um Unit-Tests vorzustellen und Plugins und Designs zu testen.
  • PHPUnit - Das Framework, auf dem die WordPress-Tests basieren.
  • PHPUnit-Dokumentation - Das Handbuch zu PHPUnit. Dies ist nützlich, wenn Sie nach verfügbaren Methoden suchen, um Assertions in Ihren Code zu schreiben.
  • Hallo Leser - Ein einfaches Plugin, das ich geschrieben habe, um zu demonstrieren, wie man Test-Plugins zusammenstellt.
  • WordPress-Tests - Das offizielle WordPress-Test- und Test-Framework, das über Subversion zur Kasse zur Verfügung steht.
  • Grundlegendes Thema - Ein einfaches WordPress-Theme, um zu demonstrieren, wie Testthemen zusammengefasst werden.

Zwischen der ersten Artikelserie und dieser Artikelserie wurde ein starkes Fundament gelegt, auf dem Sie fortfahren können, um Ihre Unit-Testverfahren zu entwickeln.