Ursprünglich ist es die Pflicht des Entwicklers, den Test zu schreiben, aber ich habe festgestellt, dass diese Fälle in vielen Fällen / E-Mature-Entwicklern nicht einmal 80% Deckung bieten.
Wie wäre es mit einer QS-Person, die ALLE Tests für ein bestimmtes Projekt anstelle des Entwicklers schreibt?
Gibt es irgendwelche Nachteile?
development-process
tdd
Itay Moav-Malimovka
quelle
quelle
Antworten:
In der testgesteuerten Entwicklung müssen die Tests vom Entwickler geschrieben werden. Andernfalls treibt eine andere Person als der Entwickler die Entwicklung voran.
Sobald Sie einem Nichtentwickler die Aufgabe übertragen, Tests zu schreiben, wird diese Person zum Entwickler.
Meine Erfahrung mit TDD ist, dass das Schreiben des Testcodes oft genauso schwierig oder schwieriger ist als das Schreiben des Produktionscodes. Wenn Sie also über Ressourcen verfügen, die in der Lage sind, guten Code für Komponententests / Integrationstests zu schreiben, sollten diese den Produktionscode schreiben, mit dem diese Tests bestanden werden.
quelle
Die Aufgabe von QA besteht darin, eine völlig andere Art von Test durchzuführen (dh Usability- / Integrationstests). Sie müssen die im Code verwendeten Technologien nicht wirklich kennen.
Wenn Sie sich Sorgen über eine geringe Codeabdeckung machen, müssen Sie Ihre Entwickler disziplinieren. Unterbrechen Sie beispielsweise die Arbeit an neuen Funktionen, bis die Codeabdeckung zunimmt. Einige Organisationen haben sogar einen Pre-Commit-Hook in ihrem Repository, der das Einchecken von nicht abgedecktem Code nicht ermöglicht.
Last but not least sollte es in 'reinem' TTD überhaupt keinen ungedeckten Code geben (da Sie zuerst Tests schreiben). Es gibt jedoch Fälle (obwohl die Leute darüber streiten), in denen eine geringere Codeabdeckung akzeptabel ist. Einige argumentieren zum Beispiel, dass das Schreiben von Tests für Getter / Setter von POJOs Zeitverschwendung ist.
quelle
Das könnte ein Managementproblem sein.
Oder es könnte irrelevant sein.
Erstens ist der Unterschied zwischen 80% und 100% Deckung wahrscheinlich eine Menge Kosten bei sehr geringem Nutzen.
"Berichterstattung" kann alles bedeuten. Codezeilen, Logikpfade usw. Ich vermute, Sie meinen Codezeilen (keine Logikpfade).
Einige Logikpfade sind "durch Inspektion" ziemlich gut getestet. Der Code ist offensichtlich, hat keine if-Anweisungen, hat eine sehr, sehr geringe Komplexität und benötigt wahrscheinlich keinen zusätzlichen Test.
20% mehr Tests sind nicht immer 20% mehr Qualität.
Zweite. Es ist ein Managementproblem. Wenn das Management eine 100% ige Deckung wünscht, muss es ein Belohnungssystem einrichten, das eine 100% ige Deckung belohnt, anstatt "gut genug, um eine 80% ige Deckung freizugeben".
Das Hinzufügen von QS-Leuten, um mehr Tests zu schreiben, hilft nicht viel.
Das Hinzufügen von Entwicklern zum Schreiben weiterer Tests ist erforderlich, um eine 100% ige Testabdeckung zu erreichen.
quelle
IMHO Unit Testing ist kein QS-Prozess. Es geht mehr darum, die Entwicklung zu beschleunigen (indem die Rückkopplungsschleife für Entwickler verkleinert wird). Dies sollte von der Person durchgeführt werden, die die Komponente (auch bekannt als Einheit) schreibt, wobei der Schwerpunkt auf der Verwendung der Komponenten liegt (von einem anderen Entwickler).
Funktionstests sind ein QS-Prozess, der von einem QS-Team durchgeführt werden kann und sollte. Dies kann vom Entwickler durchgeführt werden, aber ein Nicht-Entwickler wäre besser, da der Entwickler möglicherweise nicht alle Möglichkeiten kennt, wie ein Benutzer die Anwendung verwenden könnte.
Beides kann auf TDD-Weise erfolgen.
quelle
Bei TDD geht es nicht nur um Tests, sondern auch um Design. Das Schreiben von Code, um die Tests zu bestehen, führt normalerweise zu kleinerem und wartbarem Code. Wenn Sie eine andere Person zum Schreiben der Tests delegieren, delegieren Sie auch die Verantwortung für die Erstellung von gutem Code.
Sie sollten auch beachten, dass die Abdeckung Sie nicht über die Codequalität und nicht darüber informiert, ob die Domain-Regeln abgedeckt sind.
quelle
Wenn Sie eine Abdeckung von mindestens 80% benötigen, müssen Sie einige Dinge tun:
Schließlich sollten Sie verstehen, dass es einen Unterschied zwischen beabsichtigten Ausführungspfaden und unbeabsichtigten Ausführungspfaden gibt. Beim Schreiben von testgesteuertem Code haben Sie möglicherweise bewiesen, dass Sie zwei unabhängige if-Anweisungen benötigen. Infolgedessen stehen Tests für zwei der vier möglichen Ausführungspfade zur Verfügung. Fügen Sie eine weitere unabhängige if-Anweisung hinzu, und Sie haben das Potenzial für acht Ausführungspfade (dh sie steigen exponentiell an).
Verstehen Sie, dass TDD nicht notwendigerweise jede mögliche Ausführungspfad vorhersagen, so gibt es eine Reihe von Tests , die geschrieben werden müssen eventuell sein komplett , aber nicht geschrieben werden , weil es keine war notwendig , dass Pfad zu testen. Kurz gesagt, TDD garantiert keine Abdeckung, aber es garantiert, dass es mindestens einen Test gibt, um den Grund für den vorhandenen Code nachzuweisen .
quelle