Wie lange sollten wir im Allgemeinen Unit-Tests für eine neue Funktion oder Fehlerbehebung schreiben?

9

Wenn ich eine neue Funktion implementieren oder einen Fehler beheben muss, versuche ich normalerweise, die Situation mit einem Test neu zu erstellen. Ich verbringe manchmal ungefähr 3 Stunden damit, mir Geräte auszudenken und den Test zu schreiben. Die eigentliche Implementierung oder Fehlerbehebung dauert weniger als 1 Stunde.

Gibt jemand anderes da draußen mindestens dreimal länger Zeit aus, um einen Test zu schreiben, als eine Funktion tatsächlich zu implementieren oder einen Fehler zu beheben? Wie hoch ist das akzeptable Verhältnis zwischen dem Schreiben von Tests und dem Schreiben von Code?

Thierry Lam
quelle
2
Stellen Sie sich das so vor: Würde die Behebung des Fehlers weniger als eine Stunde dauern, wenn Sie keinen Test hätten, um zu bestätigen, dass er existiert, und noch viel weniger?
Michael K
2
Antwort auf den Fragentitel: Solange es dauert.
Marcelo
3
Ich denke, sklavischer Gehorsam gegenüber TDD-Prinzipien, unabhängig von Kosten oder Geschäftswert, ist immer die richtige Antwort.
Jeremy
Wie gehen Sie mit dem Fall um, in dem Ihr Manager möchte, dass Sie das Update so schnell wie möglich live schalten und nicht auf einen zusätzlichen Tag warten können, um die Implementierung vollständig zu testen?
Thierry Lam
2
Normalerweise erkläre ich die Kosten, wenn der Test nicht durchgeführt wird. Das heißt, ich kann das Update jetzt versenden, aber wenn wir den Test nicht schreiben, müssen wir das Ganze später noch einmal machen. Manchmal sind sie mit diesen zukünftigen Kosten einverstanden, aber normalerweise schreiben wir die Tests.
Christopher Bibbs

Antworten:

12

Dies hängt von der Komplexität des Fehlers oder der Funktion ab. Ich erinnere mich an ein Projekt, das einmal eine 1,5-wöchige Entwicklungsschätzung hatte ... und eine 3-monatige Testschätzung. Die Codeänderung war klein, eine Handvoll Zeilen hier und da, aber sie wirkte sich auf verschiedene Weise auf eine Reihe von Komponenten eines Versicherungssystems aus und musste daher sehr gründlich getestet werden. Ein anderes Mal gab es einen Fehler, der eine Klammer an der falschen Stelle betraf. Es dauerte 2 Stunden, um es zu finden, 2 Sekunden, um es zu reparieren, aber ungefähr eine Woche, um Dutzende von Szenarien zu testen, die möglicherweise von der Änderung der Logik betroffen waren.

Im Allgemeinen mache ich mir keine Sorgen über das Verhältnis von Codierungszeit zu Testzeit, da es einfach keine Möglichkeit gibt, genau zu sein. Ich finde, dass in einigen Projekten ein projektbezogenes Verhältnis auftritt, das normalerweise Standard (zum Projekt) ist, aber selbst dann kann sich das später ändern.

Verbringen Sie so viel Zeit wie nötig, um sicher zu sein, dass der Code ordnungsgemäß funktioniert.

FrustratedWithFormsDesigner
quelle
6

Wie wäre es, wenn Sie genug Zeit damit verbringen, die Tests zu schreiben, bis Sie gezeigt haben, dass die Funktion wie beabsichtigt funktioniert oder der Fehler korrekt behoben wurde.

Jede Situation wird anders sein; Es kann kein Verhältnis geben. Einige Tests dauern ein Zehntel der Zeit wie die Implementierung, andere hunderte Male.

edA-qa mort-ora-y
quelle
Das ist die wahre Antwort.
DJClayworth
4

Ich habe einmal eine Umfrage durchgeführt, nachdem ich Unit-Tests in einem Projekt eingeführt hatte. Das Ergebnis: Der Zeitaufwand für das Schreiben von Tests betrug erneut etwa 40% des Zeitaufwands für die Implementierung. Wir strebten dort jedoch keine vollständige Berichterstattung an, und es war ein etabliertes Projekt mit einer starken Struktur und Konventionen.

Michael Borgwardt
quelle
0

Zählst du richtig? Um genau abzurechnen, wie viel Zeit Sie für Tests aufwenden, müssen Sie den Code ohne den Test schreiben.

Wenn Sie wirklich drei Stunden gebraucht haben, um den Test zu schreiben, und einen, um Code zu schreiben, damit er erfolgreich ist, werden Sie möglicherweise mehr als 5 Stunden brauchen, um denselben Fehler zu beheben, ohne Tests zu schreiben.

Ja, ich verbringe sehr viel mehr Zeit mit dem Test als mit dem eigentlichen Fixcode.

Edward Strange
quelle