Gibt es eindeutige Belege für den ROI von Komponententests?
Unit-Test-klingt toll für mich, aber ich bin mir nicht sicher, sollte ich keine Zeit verbringen wirklich lernen, es sei denn, ich kann andere davon überzeugen, dass ist, hat einen erheblichen Wert. Ich habe zu überzeugen, die anderen Programmierern und, noch wichtiger, die bean-counters in der Geschäftsführung, dass all die extra-Zeit Lern-die-Test-Frameworks, die das schreiben von tests, halten Sie aktualisiert, etc.. für sich selbst bezahlen, und dann einige.
Welchen Beweis gibt es? Hat jemand eigentlich die gleiche software mit zwei getrennten teams, eine mit unit-Tests und die andere nicht, und die Ergebnisse verglichen? Ich bezweifle es. Bin ich einfach nur rechtfertigen sollen es mit, "Schauen Sie auf den Internet, jeder spricht über ihn, so muss es sein, das richtige zu tun"?
Wo ist die harten Beweise, die Sie überzeugen werden die Laien, die unit-Tests ist die Mühe Wert?
InformationsquelleAutor der Frage raven | 2008-10-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja. Dies ist ein link einer Studie von Boby George und Laurie Williams an NCST und ein ein weiteres von Nagappan et al. Ich bin sicher, es gibt mehr. Dr. Williams Publikationen auf die Prüfung können Sie einen guten Ausgangspunkt für Sie zu finden.
[BEARBEITEN] Die beiden Papiere, die oben speziell zu verweisen, TDD und zeigen 15-35% - Zunahme in der Anfangsphase der Entwicklung die Zeit nach der Einführung von TDD, aber eine 40-90% Rückgang der pre-release-Mängel. Wenn Sie nicht bekommen kann auf den Volltext, schlage ich vor,Google Scholarum zu sehen, wenn Sie eine öffentlich verfügbare version.
InformationsquelleAutor der Antwort tvanfosson
" Ich habe zu convice der anderen Programmierern und, noch wichtiger, die bean-counters in der Geschäftsführung, dass all die extra-Zeit Lern-die-Test-Frameworks, die das schreiben von tests, halten Sie aktualisiert, etc.. für sich selbst bezahlen, und dann einige.
Warum?
Warum nicht tun Sie es einfach, leise und diskret. Sie müssen nicht alles auf einmal. Sie können dies tun, in winzig kleine Stücke.
Rahmen lernen dauert sehr wenig Zeit.
Schreiben einen test, nur eine, dauert sehr wenig Zeit.
Ohne unit-Tests, alles, was Sie haben, ist, einige Vertrauen in Ihre software. Mit einem unit-test, haben Sie immer noch Ihr Vertrauen, plus Nachweis, dass mindestens ein test erfolgreich verläuft.
Braucht es nicht. Niemand braucht zu wissen, dass Sie es tun. Tun Sie es einfach.
InformationsquelleAutor der Antwort S.Lott
Nehme ich einen anderen Lösungsansatz:
Welche Gewissheit haben Sie, dass Ihr code korrekt ist? Oder, dass es nicht zu brechen Annahme X, wenn jemand in Ihrem team Veränderungen func1()? Ohne unit-tests halten Sie 'ehrlich', ich bin mir nicht sicher, Sie haben viel Sicherheit.
Den Begriff des Haltens tests aktualisiert, ist interessant. Die tests, die sich nicht oft ändern müssen. Ich habe 3x den test-code im Vergleich zu den Produktions-code und test-code wurde geändert sehr wenig. Es ist, jedoch, was lässt mich gut schlafen in der Nacht und die Sache, die mir erlaubt, zu sagen, die Kunden, die ich habe Vertrauen, dass ich umsetzen kann, die Y-Funktionalität, ohne das system kaputt.
Vielleicht in der Wissenschaft gibt es Beweise dafür, aber ich habe noch nie gearbeitet und überall in der kommerziellen Welt, wo jeder zahlen würde für einen solchen test. Ich kann Ihnen sagen,, jedoch, dass es funktionierte gut für mich, nahm wenig Zeit zu gewöhnen, um das Test-framework und test schreiben hat mich wirklich denke über meine Anforderungen und das design, weit mehr, als ich jemals bei der Arbeit in teams, schrieb keine tests.
Hier, wo es sich rechnet: 1) haben Sie das Vertrauen in Ihren code und 2) die Probleme fangen früher als Sie sonst würden. Sie haben nicht die QA Kerl und sagen "hey, Sie wollte nicht stören bounds-checking die xyz () - Funktion haben Sie? Er nicht zu finden, denn bug Sie fand es vor einem Monat. Das ist gut für ihn, gut für Sie, gut für die Unternehmen und gut für den Kunden.
Klar ist das anekdotische, aber es hat funktioniert Wunder für mich. Nicht sicher, ich kann Ihnen mit Tabellen, aber mein Kunde ist glücklich und das ist das Ende Ziel.
InformationsquelleAutor der Antwort itsmatt
Haben wir unter Beweis gestellt, harte Beweise, dass es möglich ist, zu schreiben crappy software ohne Unit-Tests. Ich glaube, es gibt sogar Beweise für die crappy software mit Unit-Tests. Aber das ist nicht der Punkt.
Unit-Tests oder Test-Driven Development (TDD) ist eine Design-Technik, nicht um einen test der Technik. Code, der schriftliche test driven sieht komplett anders aus, der code ist nicht.
Obwohl dies nicht Ihre Frage, ich Frage mich, ob es wirklich der einfachste Weg, zu gehen die Straße hinunter und Fragen beantworten (und Beweise bringen könnten, werden herausgefordert durch andere Berichte) , könnte gefragt werden falsch. Auch wenn Sie harte Beweise für Ihren Fall - jemand anderen finden könnte, harten Beweise gegen.
Ist es das Geschäft der Erbsenzähler, um festzustellen, wie die technischen arbeiten sollten? Sind Sie billigste Werkzeuge in allen Fällen, weil Sie glauben, Sie brauchen nicht mehr teure?
Dieses argument ist entweder gewonnen, die auf Vertrauen basieren (einer der Grundwerte des agilen teams) oder verloren haben, basierend auf der Rolle macht der Gewinner-Partei. Auch wenn die TDD-Befürworter gewinnen, basierend auf der Rolle macht, die ich zählen würde, verloren.
InformationsquelleAutor der Antwort Olaf Kock
Mehr über TDD als streng unit-Test, hier ist ein link zu der Realisierung die Verbesserung der Qualität durch test-driven development: Ergebnisse und Erfahrungen der vier Industrie-teams Papier, von Nagappan, E. Michael Maximilien, Thirumalesh Bhat, und Laurie Williams. Papier, veröffentlicht von Microsoft Empirical Software Engineering and Measurement (ESM) - Gruppe und die bereits genannten hier.
Das team fand, war, dass der TDD-teams produziert code, der zwischen 60% und 90% Prozent besser (in Bezug auf die Defektdichte) als nicht-TDD-teams. Jedoch TDD-teams nahmen zwischen 15% und 35% länger, um Ihre Projekte durchführen.
InformationsquelleAutor der Antwort philant
Hier ist eine große und unterhaltsame Lektüre von einem Mann sich seine Firma von innen. Es ist nicht beschränkt auf TDD. http://jamesshore.com/Change-Diary/ Hinweis, dass er sich nicht überreden, die "Erbsenzähler" für geraumer Zeit und haben sich die "guerilla-Taktik" statt.
InformationsquelleAutor der Antwort Epaga
Gut, es gibt einige große Unternehmen, die erfordern, dass Sie unit-Tests, aber wenn Sie ein kleines Unternehmen sind, warum imitieren die großen?
Ist für mich, wenn ich begann mit unit-Tests , vor vielen Jahren,(heute verwenden wir überwiegend Verhalten Modell) war es, da konnte ich nicht kontrollieren, alle der Weg in eine Anwendung.
War ich es gewohnt, zuerst unten die Programmierung und ein REPL so, wenn ich eine Gerät Test (Ein Test für Jede Funktion) es war wie bringt wieder eine REPL in Sprachen, wo sehr viel kompilieren.
Es brachte den Spaß zurück, um jede Zeile code, die ich schrieb.
Ich fühlte mich Gott.
Ich mochte es.
Ich brauchte nicht einen Bericht, um mir zu sagen, dass ich begonnen zu schreiben besseren code schneller.
Mein Chef brauchte nicht einen Bericht, um zu bemerken, dass da, wo wir macht verrückte Sachen, die wir plötzlich noch nie eine Frist versäumt.
Mein Chef brauchte nicht einen Bericht, um zu bemerken, dass die Anzahl der "einfachen" bugs drop von (zu vielen) auf nahezu null, da dieser sehr seltsame Sache schreiben nicht-produktiven code.
Wie ein anderer poster schon schrieb, die Sie nicht verwenden TDD zu Testen (überprüfen). Schreiben Sie es auf-capture-Spezifikation, die das Verhalten von dem, was Ihre Einheit(Objekt, Modul, Funktion, Klasse, server, cluster) funktioniert.
Gibt es viele Misserfolge und Erfolge, die die Umstellung auf ein anderes Modell der software-Entwicklung in vielen Unternehmen.
Ich habe gerade angefangen, es zu benutzen, Wann immer ich hatte, etwas neues zu schreiben.
Es gibt ein altes Sprichwort, das geht etwas schwer für mich zu übersetzen ins englische, aber:
InformationsquelleAutor der Antwort Jonke
Nur das hinzufügen von mehr Informationen, um diese Antworten, gibt es zwei meta-Analyse-Ressourcen, die kann helfen, herauszufinden, Produktivität & Qualität Wirkungen auf die Akademische und industrielle hintergrund:
Guest Editors' Introduction: TDD—Die Kunst des Furchtlosen Programmierung [link]
Der Wirkungen von Test-Driven Development auf Externe Qualität und Produktivität: Eine Meta-Analyse [link]
Abstract:
InformationsquelleAutor der Antwort Dariusz Woźniak
Es gibt Statistiken, die beweisen, dass die Behebung des Fehlers finden Sie in der unit/- integration-test-Kosten um ein Vielfaches weniger als das beheben, sobald es auf dem live-system (Sie basiert auf der überwachung von tausenden von real-life-Projekte).
Bearbeiten: zum Beispiel, als darauf hingewiesen wird, das Buch "Der Code Vollständig Ist" Berichte über solche Studien (Abschnitt 20.3, "Relative Wirksamkeit von qualitätstechniken"). Aber es gibt auch private Forschung in den consulting-Bereich, der beweist, wie gut.
InformationsquelleAutor der Antwort Gabriele D'Antona
Wenn Sie auch daran interessiert, Beweise gegen unit-Test hier ist eine gut recherchierte und durchdachte Artikel:
Warum die Meisten Unit-Tests ist Verschwendung Von James O Coplien (lean-und agile-guru)
InformationsquelleAutor der Antwort mmm
Ich habe einen Satz von Datenpunkten für dieses - aus einer Erfahrung, die mir verkauft auf unit-tests.
Vor vielen Monden, ich war ein frischer Absolvent arbeitet an einem großen VB6-Projekt und Gelegenheit gehabt, zu schreiben, einen großen Körper gespeicherte Prozedur code. Der subsystem-ich schrieb es etwa 1/4 der gesamten code-Basis - rund 13.000 LOC von 50K oder so.
Schrieb ich eine Reihe von unit-tests für gespeicherte Prozeduren-aber unit Tests VB6-code der Benutzeroberfläche ist nicht wirklich machbar, ohne tools wie Rational Robot; zumindest damals war es das nicht.
Die Statistiken von QA auf das Stück waren, die über 40 oder 50 Mängel angesprochen wurden, auf das gesamte subsystem, von denen zwei stammt aus der gespeicherten Prozeduren. Das ist ein defekt pro mit 6.500 Zeilen code vs. 1 pro 1.000-1 200 oder so über das gesamte Stück. Beachten Sie auch, dass etwa 2/3 der VB6-code wurde boilerplate-code für die Fehlerbehandlung und-Protokollierung, identisch für alle Verfahren.
Ohne zu viel handwaving Sie zuschreiben kann mindestens eine Größenordnung Verbesserung von Fehlerraten für die unit-Tests.
InformationsquelleAutor der Antwort ConcernedOfTunbridgeWells