Ich mache seit 15 Jahren Website-Programmierung und seit ungefähr 5 Jahren PHP. Ich habe immer soliden Code geschrieben. Ich habe jedoch einen Kunden, der darauf besteht, dass 80% des Codes Unit-getestet werden. Da der Client IMMER RECHT ist, plane ich, PHP_CodeSniffer zu verwenden, um sicherzustellen, dass mein Code richtig aussieht, und PHPUnit, um meine Unit-Tests durchzuführen. Ich hoffe, durch diese Erfahrung etwas zu lernen.
Sind dies die richtigen Werkzeuge? Wie viel Zeit ist für das Einrichten von PHPUnit und das Schreiben des zusätzlichen Codes erforderlich? Ich sollte ungefähr 8 Wochen brauchen, um die Webseiten zu schreiben und mich selbst zu testen, wie ich es in der Vergangenheit getan habe. Wenn ich 4 Tage zusätzlich (10%) für Unit-Tests (PHPUnit) hinzufüge, ist das genug? Gedanken? Vorschläge? Vielen Dank.
Antworten:
In einer Zeile: Es kommt darauf an, wie Sie arbeiten. Ich denke ehrlich, dass 10% viel zu wenig sind. Sie sollte mindestens 25% betragen, wenn nicht 40%, wenn nicht 60%, wenn nicht mehr.
Erstens stimme ich Ihrem Kunden dort sehr zu. Unit-Tests sind ein wesentlicher Bestandteil eines robusten, leicht zu wartenden und leicht zu debuggenden Produkts.
Ich werde von dem sprechen, was ich weiß. Ich verwende TDD (Test-Driven Development) für die meisten Projekte. Mit TDD schreiben Sie die Tests grundsätzlich vor dem eigentlichen Code. Sie legen eine Reihe von Akzeptanzkriterien fest, die das Endprodukt erfüllen muss. Normalerweise verbringen Sie 50% bis 70% Ihrer Zeit damit, Tests zu schreiben, und den Rest, um Code zu implementieren, damit sie bestehen.
Es mag absurd und / oder enorm klingen, aber ich kann Ihnen versichern, dass dies nicht der Fall ist. Hier ist der Grund:
PHPUnit ist so ziemlich das De-facto-Tool zum Testen von PHP-Einheiten, und das ist sehr gut. Ich habe PHP_CodeSniffer nicht viel benutzt. Ich denke jedoch, dass Sie es wahrscheinlich nicht brauchen, wenn Sie alleine arbeiten. In einem Team ist es nützlicher, sicherzustellen, dass der Code gleich aussieht, unabhängig davon, wer ihn codiert hat.
quelle
Wir danken Ihnen für die Einstellung, dass Sie aus dieser Erfahrung etwas lernen werden. Ich bin sicher du wirst.
Das allererste, was Sie lernen sollten, ist, dass die Notwendigkeit von Unit-Tests nichts damit zu tun hat, wie erfahren Sie sind . Der beste Entwickler wird auch einer der besten Unit-Tester sein:
Von http://www.artima.com/intv/refactorP.html
Ich habe PHP ohne Unit-Test geschrieben. Nachdem ich jahrelang Unit-Tests in Java geübt hatte, stellte ich fest, dass ich ohne Unit-Tests an nichts viel Komplizierterem arbeiten konnte als an einzelnen Seiten in PHP. Der Grund? Produktivität . Ohne Unit-Tests könnte ich nicht mit Zuversicht umgestalten - dies bedeutete, dass entweder A) ich viel mehr abreißen und alles von Anfang an neu bearbeiten müsste oder B) ich mich mit hässlichem, altem Code befassen müsste.
Wenn Sie ein Gebot abgeben, müssen Sie die Zeit zum Testen berücksichtigen? Ja . Scheint es intuitiv, dass dies mehr Zeit in Anspruch nehmen wird? Ja nochmal . Sie werden wahrscheinlich, wie einige andere Antworten grob geschätzt haben, 50-100% mehr schätzen müssen als ohne Unit-Tests.
Jedoch!...
Infolgedessen sind Ihre Schätzungen genauer . Wenn Sie stündlich berechnen, werden Sie Ihre Kunden mehr beeindrucken und Ihre Preise erhöhen können. Wenn Sie eine Pauschale berechnen, verdienen Sie mehr Geld pro Stunde.
Ohne Tests sind Ihre Schätzungen höchstwahrscheinlich ein Crapshoot. Fehler, Änderungsaufträge und Neudefinitionen sind für eine genaue Schätzung schrecklich. Testen ist der Schlüssel zur Minimierung der Auswirkungen aller drei!
quelle
Es gibt keine einfache Antwort darauf, wie lange Sie noch brauchen werden.
Aber in der Regel, wenn es sich um ein kurzes Projekt handelt: Ich würde sagen, dass die Entwicklung zusammen mit guten Unit-Tests 1,75-2-mal so lange dauern wird wie die Entwicklung ohne Unit-Tests. Für längere Projekte vielleicht 25-30%?
Ich schlage vor, Unit-Tests durchzuführen, bevor Sie Ihren Code schreiben. Auf diese Weise wird das Erstellen des Unit-Test-Gerüsts tatsächlich Teil Ihres Entwurfsprozesses. Sie sollten also nicht berücksichtigen, dass Sie Zeit für Unit-Tests verlieren, sondern dass das Erstellen des Unit-Tests Ihnen beim Entwerfen eines Gerüsts hilft Ein großartiges Produkt und die Existenz dieses Tests nach dem Erstellen erleichtert es Ihnen, sicherzustellen, dass dies auch so bleibt. Das Schreiben von Unit-Tests als Erstes ist wunderbar, um uns auf die tatsächlichen Anforderungen zu konzentrieren, gibt uns eine klare Möglichkeit zu testen, ob wir fertig sind (Bestehen von Unit-Tests), und hilft uns, "früh zu testen und häufig zu testen".
Was PHPUnit betrifft ... Es ist eine Weile her, seit ich es verwendet habe. Mein Eindruck ist, dass es leistungsstark ist, aber vielleicht noch etwas Arbeit benötigt, bevor es wirklich poliert wird.
Wenn es jedoch eine Sache gibt, die ich hier mitteilen möchte: Bitte sehen Sie Unit Testing nicht als bloße Formalität am Ende Ihres Projekts. Wenn das alles ist, ist es meiner Meinung nach wertlos.
quelle
Die Antworten sind bisher ziemlich gründlich, daher möchte ich nur einen Punkt hinzufügen, der nicht behandelt wird: Die zusätzliche Zeit aufgrund der Verwendung von PHPUnit wird sein
Unit-Testing-Modellklassen, die sich nicht mit Präsentation befassen, sind ziemlich einfach. Sie schreiben einen Test für jede Klasse und können in diesen Testfällen ein Objekt zum Testen einer bestimmten Methode / Funktion direkt instanziieren und konfigurieren. Sobald Sie PHPUnit eingerichtet und ausgeführt haben, können Sie diese Tests schnell zum Laufen bringen.
Unit-Testing-Webseiten können schwieriger sein. Wenn Sie Zend Framework, Symfony, Smarty oder eine andere MVC-Engine verwenden, kann es länger dauern, bis PHPUnit gut mit ihnen funktioniert. Wir verwenden Zend Framework und ich habe viel Zeit damit verbracht, Basisklassen zum Testen von Controllern zu erstellen und Skripte isoliert anzuzeigen. Angesichts der Größe dieses Projekts ist es wahrscheinlich besser, mit zu beginnen
ControllerTestCase
.quelle