Testgetriebene Entwicklung - Wer sollte die Tests schreiben?

12

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?

Itay Moav-Malimovka
quelle
2
Denken Sie daran, dass TDD NICHT bedeutet, alle Tests für den gesamten Code zu schreiben und dann den Code zu schreiben. Es ist ein Begriff; Der praktische Ansatz besteht jedoch darin, Tests zu schreiben und dann Code in kleinen Iterationen zu schreiben. paralleler Annäherung. Es ist Zeitverschwendung, ALLE Tests im Voraus zu schreiben, da das Refactoring unweigerlich auftaucht.
Aaron McIver

Antworten:

19

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.

Eric Wilson
quelle
1
Wenn Sie zwei gleichgesinnte Personen mit einer bestimmten Einstellung hätten, könnten Sie sich TDD möglicherweise paarweise nähern und zwischen Tests und Code ein- und ausschalten. Nennen Sie sie Tester / Programmierer / Code-Affen ... es geht um die eigenen Fähigkeiten, die Sie berührt haben.
Aaron McIver
Und vorausgesetzt, Sie schreiben_test-write_code-run_test, möglicherweise jede Minute, würden Sie Ihre Fortschrittsrate vernichten.
Frank Shearar
7

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.

Mchl
quelle
2

Diese Fälle decken nicht einmal 80% ab

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.

S.Lott
quelle
Wer hat etwas über 100% Deckung gesagt?
Eric Wilson
@ FarmBoy: Die Frage impliziert, dass eine Abdeckung von 80% nicht gut genug ist. Was ist gut genug Die übliche magische Zahl ist 100% Deckung.
S.Lott
1
Aber mein Trainer sagte mir immer, ich solle 110% geben. Warum kann ich nicht so viel Deckung verlangen ... ;-P
Berin Loritsch
@Berin Loritsch: Ich bin zu 200% hinter dir.
S.Lott
1
@Job: "Einige QA-Leute können Code schreiben". Richtig. Dann werden sie Entwickler, was gut ist.
S.Lott
2

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.

Heath Lilley
quelle
2

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.

Fernando
quelle
0

Wenn Sie eine Abdeckung von mindestens 80% benötigen, müssen Sie einige Dinge tun:

  • Stellen Sie Ihren Entwicklern die Tools zur Verfügung, die sie benötigen, um festzustellen, über welche Abdeckung sie verfügen - und stellen Sie sicher, dass es sich um Äpfel für Äpfel handelt. Es gibt mehr als eine Möglichkeit, die Abdeckung zu messen.
  • Geben Sie eine Belohnung / einen Anreiz, um dieses Kunststück zu vollbringen. Programmierer werden nur das tun, was sich auszahlt. Wenn eine Abdeckung von 50% gut genug ist, um die Qualität sicherzustellen und die gesamte Arbeit zu erledigen, werden sie dies 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 .

Berin Loritsch
quelle