So überzeugen Sie einen Projektsponsor davon, dass für alle Funktionen in Ihrem Code Unit-Tests erforderlich sind [geschlossen]

StackOverflow https://stackoverflow.com/questions/50650

Frage

In den meisten Fällen sehen Laien keinen Sinn darin, Unit-Tests zu schreiben.Sie möchten lediglich den grundlegenden Code fertigstellen und kein Geld und keine Zeit für Dinge wie Unit-Tests aufwenden.Später werden sie jeden Tag nur darum gebeten, einen weiteren Fehler zu beheben.Den Projekten fehlen Fristen und sie sehen immer noch keinen Wert in guten automatisierten Tests.

War es hilfreich?

Lösung

Der beste Weg besteht darin, mit „technisch nicht versierten“ Leuten nicht so technisch zu werden.Bauen Sie einfach die Lieferzeit ein, ohne auf Details einzugehen.

Auf der anderen Seite hört es sich so an, als wären die Projektfristen für den tatsächlichen Bau nicht realistisch gewesen.

Andere Tipps

Ich habe gerade schrieb ausführlich zu genau diesem Thema.

Um meine Argumente gegen die gängigen Beschwerden zusammenzufassen:

Die Bereinigung ist für Benutzer unsichtbar;Wir müssen neue Funktionen hinzufügen.Die Fehler, die ständig durch unordentlichen Code entstehen, sind auch für Benutzer sichtbar.Die Zeit, die für die Behebung dieser Fehler aufgewendet wurde, hätte für das Hinzufügen von Funktionen aufgewendet werden können.Je länger wir in der Qualitätsschuld bleiben, desto länger dauert es, jede neue Funktion hinzuzufügen.

Wir haben keine Zeit zum Aufräumen.Sie möchten lieber Ihre Zeit damit verbringen, durch das Problem verursachte Fehler zu beheben, als das Problem zu beheben?Das ist, als würde man jedes Wochenende Unkraut ausrotten, anstatt es an den Wurzeln auszureißen.Vorbeugung ist sechzehnmal wertvoller als Heilung.

Die Entwickler haben sich selbst in dieses Schlamassel gebracht;Sie sollten sich in ihrem eigenen Tempo daraus befreien.Hätten die Entwickler nicht so schnell Veröffentlichungen herausgebracht, hätten sie nicht so schnell auf das Feedback der Erstanwender reagiert, selbst als sich das Produkt in ein Biest verwandelte, das ganz anders war als seine ursprüngliche Vorstellung, hätten wir unsere aktuellen Kunden und Einnahmen nicht .Wir würden für ein anderes Unternehmen arbeiten und uns nicht über die von uns entwickelte Software beschweren.

CEOs aufgepasst:Schuldzuweisungen erschweren die Lösung.Fordern Sie stattdessen Ihre Entwickler auf, Fehlerberichte zu reduzieren.Dies lässt sich leicht messen, sodass Sie die Zeit im Vergleich zu den Ergebnissen verfolgen können.Denken Sie daran, dass Entwickler lieber neue Funktionen implementieren als Fehler zu beheben. Wenn sie also um Zeit betteln, um Fehler zu beheben, ist das ernst.

Versuchen Sie es mit einem Analoggerät.Fragen Sie sie, ob sie möchten, dass ihre Kinder Volvos oder Kit-Cars fahren, die von irgendeinem Typen auf der Straße gebaut wurden.Die Antwort sollte immer der Volvo sein.Dann fragen Sie warum?Die Antwort lautet: Es ist zuverlässiger und sicherer.Woher wissen sie das?Die Antwort ist Testen.Alle Autos werden aufs Äußerste getestet und die Kosten spiegeln dies wider.Wenn sie wollen, dass ihre Software so zuverlässig wie möglich ist, brauchen sie Tests.(Oder sie werden zu Crashtest-Dummies)

Nun, ich denke, das Problem ist, dass Sie „alle Funktionen“ sagen.Nicht alle Funktionen benötigen Unit-Tests, und einige würden argumentieren, dass Unit-Tests einzelner Funktionen überhaupt in vielen Szenarien völlig falsch sind.

Stattdessen empfehle ich Unit-Tests tatsächlicher „Einheiten der Funktionalität“.Anstatt für jede Funktion einen einzelnen Test zu schreiben, schreiben Sie einen Test für jedes Szenario oder jede Funktion.Abgesehen davon, dass Sie viel Zeit sparen und die Tests unbemerkt durchführen können, ist es oft auch viel genauer, weil es die Funktionen buchstäblich auf die Art und Weise testet, wie sie verwendet werden.Allzu oft testen Funktions-für-Funktions-Komponententests nicht das Richtige oder, noch schlimmer, Testmodelle.

Ich empfehle Ihnen, die Verwendung von Mocks beim Testen unbedingt zu vermeiden.Die Verwendung einer Simulation macht den Test im Wesentlichen ungültig, da Sie testen, wie er unter idealisierten Umständen funktioniert, und nicht, wie er in der realen Welt funktioniert.

Ein Nebeneffekt besteht darin, dass Sie auch eine bessere Erkennung von totem Code erhalten.Jeder Code, der nicht durch einen High-Level-Test abgedeckt wird, wird wahrscheinlich nicht verwendet und kann entfernt werden.Unterschätzen Sie niemals den Wert der Beseitigung toten Codes.

Der Verkauf vollständiger Unit-Tests, nachdem die Entwicklung bereits begonnen hat, ist möglich sehr hart.Ich würde sogar sagen, dass es oft unmöglich ist.Wenn Sie nicht die Zustimmung aller Projektbeteiligten für vollständige Unit-Tests im Vorfeld erhalten, sollten Sie sich über alle Unit-Tests freuen, die Sie durchführen können.

Das tust du nicht.Tests sollten nicht separat geschrieben werden, sodass es nicht mehr nötig ist, sie im Zeitplan zu berücksichtigen, als wenn Sie speziell das „Kompilieren“ oder „Eingeben des Codes“ einplanen würden.Der Zeitaufwand für das Schreiben der Tests sollte ohnehin durch die Zeitersparnis ausgeglichen werden.

Tun Sie es einfach.Am Anfang werden Sie langsamer sein, da Sie mehr Code schreiben und zuerst über das Problem nachdenken.Aber Sie werden andere bei dem Projekt schnell überholen, da Sie weniger Fehler haben und Ihr Design besser ist.

Wenn Sie das System unter Berücksichtigung des Testens entwerfen, ist es von Natur aus flexibler als ein nicht testbares Design.Das Hinzufügen von Funktionen wird dann in Zukunft schneller möglich sein.

@Craig, ich habe auch über das Auto-Analogon nachgedacht, aber ich denke, die Analogie scheitert, da es sich so anhört, als ob im Projekt bereits Tests vorhanden wären, und es einfach eine Frage des Grades ist.In diesem Fall lautet die Auto-Analogie: „Interessiert es Sie, wenn die Deckenleuchte im Auto getestet wird, solange die kritischen Systeme (Bremsen, Scheinwerfer, Getriebe usw.) getestet werden?“Als gestresster Projektsponsor, der mit ansehen muss, wie das Projekt sein Enddatum überschreitet, ist es mir eigentlich egal, ob die Deckenleuchte getestet wird oder nicht.

Eine gute Möglichkeit, den Wert von Unit-Tests zu verkaufen, besteht aus Support-Sicht: Wenn Sie ein Unit-Testing-Framework verwenden, das über eine Laufzeit verfügt, die bereitgestellt werden kann (nUnit ist eine), können Sie einen Menüpunkt „Unit-Tests ausführen“ haben in Ihrem Hilfemenü.Dadurch können alle Unit-Tests ausgeführt und die Ergebnisse an den technischen Support gesendet werden, um bei der Fehlerbehebung bei Client-Problemen zu helfen.

Natürlich gibt es viele Möglichkeiten, die erhöhte Stabilität zu verkaufen, aber technischer Support ist ein „echter Geldaufwand“, den die meisten Manager gerne senken würden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top