Grundsätzlich haben wir drei Hauptprojekte, von denen zwei Webdienste und das andere eine Webanwendung sind. Während ich damit zufrieden bin, so viel wie möglich von unseren Webservices durch Funktionstests abzudecken (alle drei Projekte haben ihre richtigen Komponententests), brauchen Funktionstests für die Webanwendung viel Zeit für die Implementierung durch Entwickler. Mit viel meine ich zwei Mal oder manchmal mehr die Zeit, die benötigt wird, um die getestete Funktionalität mit eingeschlossenem Komponententest zu implementieren.
Die Managerrichtlinie besteht darin, jede einzelne von uns hinzugefügte Funktionalität zu testen, auch wenn dies nicht geschäftskritisch ist (dh eine neue CRUD).
Ich bin damit einverstanden, alle Webservices-Funktionen zu testen, da es schwierig ist, sie manuell zu testen. Außerdem laufen diese Tests schnell und erfordern nicht viel Implementierung.
Was nützt es also, mehr Zeit mit dem Schreiben von Funktionstests zu verbringen als mit dem Schreiben von Systemcode, dem Komponententest und dem Reparieren von QA-Tikets? Ist das normal? Sollten wir nicht Funktionstests nur für kritische Funktionen schreiben und QA Regressionstests für keine kritischen Funktionen durchführen lassen?
Hinweis: Wir entwickeln keine medizinische Software oder NASA-Software oder nichts so Kritisches.
quelle
Antworten:
Funktionstests sind sehr wichtig. Ja, sie brauchen Zeit zum Schreiben, aber wenn Sie die richtigen Funktionstests schreiben, werden sie sich mehr als lohnen.
Es gibt einige gute Gründe, automatisierte Funktionstests für eine Anwendung durchzuführen.
Letztendlich braucht es ja Zeit, um diese Fälle zu schreiben, aber Sie sollten stolz darauf sein, sie zu schreiben. Dies ist Ihre Art zu beweisen, dass Ihr Code zweifelsohne funktioniert und dass er mit allen anderen Funktionen funktioniert. Wenn QA zu Ihnen kommt und einen Fehler meldet, beheben Sie diesen und fügen ihn Ihrer Testsuite hinzu, um zu zeigen, dass er behoben ist, und um sicherzustellen, dass er nie wieder auftritt.
Es ist dein Sicherheitsnetz. Wenn jemand hereinkommt und einen gespeicherten Prozess überfällt und eine kleine Änderung vornimmt, damit er mit seinem Code funktioniert, stellen Sie fest, dass er drei andere Funktionen in diesem Prozess nicht mehr unterstützt. Sie werden es in dieser Nacht und nicht in der Nacht vor dem Abgabetermin fangen!
Wie zum Schreiben von Funktionstests für nur systemkritische Funktionen. Das gibt dir nicht das ganze Bild und es wird ermöglichen, dass sich Bugs durchschleichen. Es ist nur eine kleine Funktion erforderlich, die nicht systemkritisch ist, sondern indirekt mit einer systemkritischen Funktion interagiert, und es besteht die Möglichkeit, dass ein Fehler auftritt.
quelle
Mehr als 2 Mal ... scheint mir ein bisschen viel zu sein. Vielleicht möchten Sie die Gründe dafür analysieren. Dazu gehören:
Schlechte Werkzeugunterstützung für die Erstellung und Pflege der Tests
Verträge der Webservices werden im Design nicht ausreichend beschrieben. Entwickler müssen die Verträge während des Testens ausarbeiten, was normalerweise ein zeitaufwändiger Ausrichtungsprozess ist.
Sprechen Sie mit Ihren Entwicklern.
Angenommen, Sie entwickeln sich in Sprints und haben diese Funktionstests nur als Teil des Sprints. Ohne diese Tests geht es nicht. Wenn Sie es nicht haben, kann sich Ihre Zeit für Integrationstests nach der Entwicklungsphase verdoppeln.
quelle
Ist es normal, mehr Zeit mit der Implementierung von Funktionstests zu verbringen als mit der Implementierung des Systems selbst?
Absolut. Das Schreiben wirklich guter Tests wird in vielen (guten) Läden die meiste Zeit in Anspruch nehmen.
Ein Verhältnis von 2: 1 ist also in Ordnung. Weniger erfahrene Entwickler berücksichtigen oft nicht die gesamte Testzeit.
quelle
Es gibt das Gesetz der sinkenden Rendite. Angenommen, Sie schreiben zuerst Tests für den riskantesten Code, dann nimmt der Wert, der durch weitere Tests generiert wird, mit der Zeit ab.
Unit-Tests sind Code und enthalten daher Fehler (genau wie alle anderen Codes). Das Beheben dieser Fehler nimmt Zeit in Anspruch.
Meiner Erfahrung nach enthalten Unit-Tests weit mehr Fehler als das System, das sie testen, und die Behebung dieser ist eine ständige Belastung.
quelle
Hier geht es um Qualität.
Wenn Sie den Markt erobern möchten, entwickeln Sie Ihre App so schnell wie möglich. Sie können sogar überhaupt keine automatischen Tests durchführen =), aber Sie geben Ihre App Ihrem Publikum vor Ihren Konkurrenten.
Aber wenn Sie wissen, dass Ihr Gehör nicht verschwindet, werden Sie alles tun, um sie nicht zu enttäuschen. Jedes Fehlerticket beeinträchtigt Ihren Ruf. Stellen Sie sich vor, ein Fehler beseitigt 50 Prozent Ihres Rufs, der andere 25 Prozent und so weiter. Kann es also zu viele Tests geben?
quelle
Wenn Sie mit "ist es normal" fragen, ob es üblich ist, nein, das ist es sicherlich nicht. Viele Entwicklerteams haben schlechte Testpraktiken (ich gehöre zu einem) und sogar Qualitätsbücher, die ich gelesen habe, raten dazu, ungefähr so viel Zeit mit der Programmierung der Funktionalität zu verbringen wie mit den Tests. Wenn Sie normalerweise fragen, ob es gesund ist, hängt es davon ab, aber zweimal mehr Tests als nötig sind besser als kein Test.
Es muss nicht kritisch sein . Wenn Sie eine Funktion testen, testen Sie etwas Nützliches für Endbenutzer, und es liegt in Ihrer Verantwortung, zu wissen (und nicht zu raten), dass es immer richtig funktioniert. Wenn Sie für dieses Ziel zweimal mehr benötigen, sollten Sie dies tun - wenn möglich.
Es ist auch möglich, dass Ihre Richtlinien in Bezug auf automatisierte Tests zu streng sind, aber es ist schwer zu sagen, ohne zu wissen, welche Qualität sie anstreben, welche Ressourcen sie verwenden und wofür sie sie sonst verwenden könnten.
quelle