Die Kosten einer längeren Verzögerung zwischen Entwicklung und Qualitätssicherung


18

In meiner jetzigen Position ist die Qualitätssicherung zu einem Engpass geworden. Wir hatten das unglückliche Auftreten von Features, die aus dem aktuellen Build herausgehalten wurden, damit die Qualitätssicherung die Tests beenden konnte. Dies bedeutet, dass Features, die in der Entwicklung sind, möglicherweise 2-3 Wochen lang nicht getestet werden, nachdem der Entwickler bereits weitergezogen ist. Wenn sich der Entwickler schneller als die Qualitätssicherung bewegt, wird diese Zeitlücke nur noch größer.

Ich blättere meine Kopie von Code Complete durch und suche nach einem "Hard Data" -Snippet, aus dem hervorgeht, dass die Kosten für die Behebung von Fehlern exponentiell steigen, je länger sie bestehen. Kann mich jemand auf einige Studien hinweisen, die dieses Konzept stützen? Ich versuche, die Mächte davon zu überzeugen, dass der QS-Engpass viel teurer ist, als sie denken.


Dies ist eine Form der "technischen Verschuldung".
Brian

3
@Brian - Bitte korrigieren Sie mich, wenn ich falsch liege, aber IMO, dies passt nicht zu TD, da es per se KEINE Schulden gibt. Es ist ein Engpass, der den Prozess verlangsamt und nicht "Für später"
PhD

7
@Nupul: Beachten Sie Neils Aussage: "Da sich Entwickler schneller als QA bewegen, wird diese Zeitlücke nur größer." Schließlich werden neue Funktionen erstellt, die versteckte Abhängigkeiten von fehlerhaftem Verhalten enthalten. Auf diese Weise wird das System nicht nur fehlerhafter, sondern auch die Kosten für die Behebung dieser Fehler werden steigen (die Behebung eines Fehlers wird etwas anderes beschädigen).
Brian

@ Brian - Ordnungsgemäß zur Kenntnis genommen und eingeräumt :)
PhD

1
Ich bin eher neugierig, warum hinter dem Flaschenhals? Gibt es nicht genug Tester? Hat das QA-Team Testfälle gemacht? Sie sollten nicht so weit zurückliegen, dass sie sich auf die Entwicklung auswirken, und es sollte etwas sein, das b / c behoben ist. Es wird nicht besser, wenn Sie sich weiter auf mehr Funktionen konzentrieren.
Tyanna

Antworten:


10

Sie brauchen keine Referenzen, IMHO. Folgendes können Sie tun (und sollten es lieber tun):

Quantifizieren Sie die Kosten der Verzögerung! Nehmen wir an, dass das Testen der Funktion (en) 1 Woche dauert. Eine Verzögerung von 2-3 Wochen bedeutet, dass die Funktion erst in der 4. Woche verfügbar ist. Und das bei 100% Erfolg. Fügen Sie eine Fixierungszeit von einer weiteren Woche hinzu, sodass sich die Verzögerung um etwa 5 Wochen beläuft.

Wenn möglich, greifen Sie jetzt auf den erwarteten Termin des Projekts / der Funktion zu. Bis wann erwartet der Kunde das? Wird es ausrutschen? Wenn nicht, werden andere als Konsequenz ausrutschen? Um wie viel wird sich die 'Veröffentlichung' infolgedessen verzögern?

Was kostet das Unternehmen für diese Version, dh wie viel erwartet der Kunde, von dieser Version zu profitieren? Wenn sie mit einem Gewinn von 5200 US-Dollar pro Jahr rechnen, kostet der wöchentliche Umsatzverlust 100 US-Dollar. Das ist die Sicht des Kunden. Möglicherweise haben Sie keinen Zugriff auf diese Daten, aber es lohnt sich, zu berücksichtigen und anzugeben, wie sich die Verzögerung auf die Beziehung auswirken kann.

Was ist nun der Verlust für die Entwickler? Sobald der Entwickler zu anderen Funktionen übergeht, bitten Sie ihn, den Zyklus zu unterbrechen und die vorherige Funktion zu "reparieren". Was ist der Zeit- / Aufwandverlust? Wandeln Sie es in Unternehmenskosten um, indem Sie das Gehalt für jede dadurch verschwendete Stunde als Vielfaches verwenden. Sie können das verwenden, um den Betrag von "Gewinn / Einnahmen" zu sagen, in den der Abfall "frisst".

Über was Sie gestolpert sind, lässt sich bequem mit "Cost of Delay" (Verzögerungskosten) quantifizieren. Dies wird von Don Reinerstein in Principles of Product Development Flow und von Dean Leffingwell in Agile Software Requirements empfohlen. Sie sollten in der Lage sein, jede solche Behauptung durch wirtschaftliche Faktoren zu untermauern, um die 'höheren Mächte' zu überzeugen, deren Hauptsprache $$ ist - Sie müssen ihre Sprache sprechen, um sie zu überzeugen :)

Glückstier! (Wortspiel beabsichtigt :)


6

Ich denke nicht wirklich, dass Code Complete die richtige Ressource für Sie ist. Dies ist kein Codeproblem, sondern ein Prozessproblem und möglicherweise ein Verwaltungsproblem.

Wenn ein Teil Ihres Prozesses besonders schwach ist, dann ist es Zeit, die Theorie der Zwänge zu durchbrechen :

  1. Identifizieren Sie die Einschränkung.

    Dies bedeutet, den langsamsten oder ineffizientesten Teil des Gesamtprozesses zu finden. In deinem Fall ist es ein Test. Aber welcher Teil der Prüfung? Ist es:

    • Testumgebung vorbereiten?
    • Bestimmen, was getestet werden soll?
    • Funktions- (Akzeptanz-) Tests?
    • Regressionstests?
    • Versuchsforschung?
    • Fehler / Mängel aus den Tests melden?
    • Bestimmen Sie die Schritte, um einen Fehler zu reproduzieren?
    • Holen Sie sich Klarstellungen von Entwicklern oder Projektmanagern?
    • Beheben Sie die in der QS-Phase gefundenen Probleme?

    Dies sind alles sehr unterschiedliche Probleme und erfordern unterschiedliche Lösungen. Sie müssen sich entscheiden, welches das teuerste / wichtigste ist. Es sollte nicht schwierig sein, dies gegenüber dem Management zu rechtfertigen, da alle oben genannten Aktivitäten Zeit kosten (AKA-Geld) und nur einige davon Wertschöpfungszeit bedeuten.

  2. Die Einschränkung ausnutzen.

    Mit anderen Worten, optimize um den Einschränkungs Prozess. Lassen Sie die Tester niemals untätig sein. Dies beläuft sich im Wesentlichen auf:

    • Setzen Sie Tester in Entwicklungsteams ein, sofern dies noch nicht geschehen ist. Daher gibt es eine kontinuierliche Feedback-Schleife mit Entwicklern.
    • Da es häufige Testbereitstellungen gibt, gibt es immer etwas Neues / Fixes zu testen.
    • Schnellere und häufigere Kommunikation. Bevorzugen Sie beispielsweise Instant Messaging gegenüber E-Mail-Threads.
    • Sicherstellen, dass Tester über die besten verfügbaren Tools verfügen (schnelle Maschinen, mehrere Monitore, optimierte Fehlerverfolgung usw.)

    In dieser Phase geht es (noch) nicht darum, den Testprozess selbst zu optimieren, sondern vielmehr darum, den Overhead zu reduzieren. Verschwenden Sie keine Zeit für Tester. Das Vermeiden von Zeit, die wirklich verschwendet wird, sollte auch ein einfacher Verkauf an das Management sein.

  3. Ordnen Sie andere Aktivitäten der Einschränkung unter.

    Zu diesem Zeitpunkt sind die Tester so produktiv wie nur möglich. Daher müssen wir die Produktivität aus anderen Bereichen leihen:

    • Weisen Sie Entwickler und Betriebspersonal an, den Testern die höchste Priorität einzuräumen, unabhängig davon, woran sie gerade arbeiten.
    • Wenn Sie keine funktionsübergreifenden Teams haben, reservieren Sie jeden Tag einen Besprechungsraum zu einer festgelegten Zeit, damit die Tester keine Zeit damit verschwenden müssen, einen zu buchen.
    • Leiten Sie einen größeren Prozentsatz der Entwickler- (und möglicherweise Betriebs-) Zeit von der Feature-Arbeit ab. Konzentrieren Sie sich beispielsweise auf Fehlerkorrekturen, technische Verschuldung / Refactoring, Codeüberprüfung und Komponententests.
    • Testen Sie kontinuierlich und inkrementell - entwickeln Sie sich 3 Wochen lang nicht und geben Sie es dann den Testern. Lassen Sie Entwickler daran arbeiten, ihren Code sofort testbar zu machen, z. B. mit Gerüsten oder Prototyp-Benutzeroberflächen.
  4. Erhöhen Sie die Einschränkung.

    Wenn die Tester mit voller Kapazität arbeiten - sowohl in Bezug auf Produktivität als auch auf minimalen Overhead - und es immer noch nicht schnell genug ist, müssen Sie anfangen, mehr in Tests zu investieren.

    • Wenn Sie sich auf manuelle Testbereitstellungen verlassen, automatisieren Sie diese mithilfe von fortlaufenden Integrations- und Konfigurationsverwaltungsskripten.
    • Wenn die Erstellung von Testplänen viel Zeit in Anspruch nimmt, arbeiten Sie daran, bessere Akzeptanzkriterien (z. B. INVEST ) zu erhalten. Die meisten Organisationen sind anfangs sehr schlecht darin.
    • Wenn die Abnahmetests zu lange dauern, beginnen Sie mit der Automatisierung. Verwenden Sie ein Tool wie Cucumber oder FitNesse oder schreiben Sie Tests vom Typ xUnit, wenn Sie müssen. Es gibt auch Selenium, Watij und andere Browser-Automatisierungstools, wenn das Testen der Benutzeroberfläche lange dauert.
    • Wenn Regressionstests zu lange dauern, automatisieren Sie dies ebenfalls. Wenn es nicht automatisiert werden kann, konzentrieren Sie sich darauf, die Qualität von Anfang an zu verbessern, dh noch mehr auf Codeüberprüfung, Komponententests, statische Analysewerkzeuge usw. Entwickler sollten ziemlich sicher sein, dass es nur sehr wenige tatsächliche Fehler gibt, bevor sie es bestehen zu QA (Produktfehler sind eine andere Geschichte).
    • Wenn explorative Tests der Engpass sind, können Sie einen Teil davon möglicherweise bis nach der Veröffentlichung zurückstellen oder einen Vertrag mit einer Testfirma abschließen, um hochgradig parallelisierbare Aufgaben wie das Testen desselben Workflows in mehreren Browsern auszuführen.
    • Wenn Tester nicht in der Lage sind, viele Fehler zu reproduzieren, sollten Sie eine Umgebung zum Testen der Kapazität aufbauen, um mit der Wiedergabe von zeitweiligen Fehlern zu beginnen. Oder versuchen Sie einfach, Ihre automatisierten Abnahmetests den ganzen Tag über parallel und kontinuierlich durchzuführen und detaillierte Protokolle zu führen.
    • Wenn die Behebung der Fehler zu lange dauert, sollten Sie mit der Partitionierung Ihrer Projekte beginnen und / oder ernsthaft in Erwägung ziehen, Ihre Lösungen neu zu strukturieren. Oder, alternativ, reparieren Sie einige von ihnen nicht; Nicht jeder Fehler ist kritisch, Sie sollten in der Lage sein, sie neben der Arbeit mit Funktionen zu priorisieren.
    • Wenn alles andere fehlschlägt, stellen Sie weitere Tester ein.
  5. Gehen Sie zurück zu Schritt 1.

Ich möchte sagen, dass dies alles gesunder Menschenverstand ist, aber leider nicht, zumindest nicht in den meisten Organisationen. Wenn das Management Ihnen viel Widerstand entgegensetzt, ist Value Stream Mapping (eine Technik aus Lean Manufacturing) von unschätzbarem Wert , mit der Sie zeigen können, wie viel Zeit und damit Geld tatsächlich jeden Tag verschwendet wird, wenn ein Release-Kandidat nicht in der Lage ist auf die nächste Stufe zu bewegen. Opportunity-Kosten sind schwer zu verstehen, aber dies ist eine der besten Möglichkeiten, die ich gefunden habe, um sie zu visualisieren und zu demonstrieren.

Und wenn nichts davon funktioniert ... dann bist du vielleicht in einer dysfunktionalen Firma, verschwinde, bevor es zu spät ist!

Sie können dieses Problem jedoch nicht einfach lösen, indem Sie ein paar Papiere auf den Schreibtisch des Managers werfen und ihn bitten, das Problem mit Geld zu bewerfen, da er (korrekt) annimmt, dass das Werfen von Geld das Problem möglicherweise nicht wirklich löst und es möglicherweise sogar verdient es ist schlimmer. Sie müssen Lösungen bereitstellen , und darum geht es in dieser Antwort. Wenn Sie das Problem wie folgt einführen: "Hier finden Sie eine Liste der Möglichkeiten, wie wir dieses Problem in absteigender Reihenfolge von Kosten und Nutzen lösen können", anstatt "wir brauchen mehr Tester", werden Sie viel mehr Erfolg haben.


Gute Antwort. Um auf eine weitere Option unter (4) einzugehen, sollten Entwickler in der Lage sein, die Qualitätssicherung zu unterstützen, indem sie bei der Testautomatisierung, Prozessautomatisierung usw. helfen. Nutzen Sie einen Teil der überschüssigen Entwicklungskapazität, um die Qualitätssicherung aufzuholen.
Chris Pitman

4

Die Seiten 29 und 30 enthalten möglicherweise die von Ihnen gesuchten Daten, obwohl möglicherweise eine Nachverfolgung erforderlich ist.

Ich würde die in diesem Satz auf Seite 30 erwähnte Forschung untersuchen:

Dutzende von Unternehmen haben festgestellt, dass die Konzentration auf die frühere Korrektur von Fehlern und nicht auf die spätere Korrektur von Fehlern in einem Projekt die Entwicklungskosten und -pläne um das Zwei- oder Mehrfache senken kann (McConnell 2004).

Übrigens war es deine Frage, die mich veranlasste, das Buch noch einmal in die Hand zu nehmen, um es aufzufrischen :-)


3
Nein, diese Daten zeigen nur, dass die Behebung von Fehlern kostspieliger ist, wenn sie in einer späteren Phase der Entwicklung (Architektur, Konstruktion, Test usw.) entdeckt werden. Es sagt nichts darüber aus, ob die Behebung eines Fehlers kostspieliger ist, wenn er in der Testphase zehn Jahre nach Einführung des Features entdeckt wird, im Vergleich zu unmittelbar danach. (obwohl man sich das so vorstellen würde)
weronika 16.06.12

1
Der Abschnitt konzentriert sich auf die Kosten für die Behebung von Fehlern in Bezug auf die Phase, in der sie eingeführt und behoben wurden, aber einige der genannten Daten scheinen allgemeinere Voraussetzungen zu haben. Ich habe meine Antwort aktualisiert, um dies widerzuspiegeln.
Krzysztof Kozielczyk

Sie haben Recht, die Daten, die Sie in der Bearbeitung hinzugefügt haben, können relevant sein.
Weronika

3

Was Sie beschreiben, ist ein Engpass in einem Prozess. Die Lean-Theorie besagt, dass es in einem Prozess immer einen Engpass geben wird, dessen Schweregrad jedoch stark variieren kann. Wenn die Qualitätssicherung einen zusätzlichen Mitarbeiter einstellt, kann die Entwicklung zum Engpass werden.

Stellen Sie sich die folgende Situation vor, um die Kosten zu verstehen. Sie haben einen der Entwickler ausgewählt. Seine Arbeit würde niemals qualitätsgesichert sein, sondern immer auf unbestimmte Zeit in der Warteschlange stehen. Stellen Sie sich vor, dies würde bedeuten, dass die Qualitätssicherung die Arbeit der übrigen Entwickler rechtzeitig sicherstellen könnte und es keine Verzögerungskosten geben würde.

In diesem Szenario sind die Kosten der Verzögerung die Kosten des Gehalts des Entwicklers, da seine Arbeit verschwendet würde.

Der Grund, warum ich in Bezug auf die Kosten und nicht den durch den Prozess geschaffenen Wert argumentiere, liegt einfach darin, dass es schwieriger ist, den Wert eines Prozesses zu dokumentieren, obwohl er weitaus besser ist.


3

Ich blättere meine Kopie von Code Complete durch und suche nach einem "Hard Data" -Snippet, aus dem hervorgeht, dass die Kosten für die Behebung von Fehlern exponentiell steigen, je länger sie bestehen. Kann mich jemand auf einige Studien hinweisen, die dieses Konzept stützen?

Die exponentiellen Kosten für das Auffinden eines Fehlers scheinen auf einer NIST-Studie zu beruhen . Die Studie war eine Umfrage unter der Annahme unterschiedlicher Wasserfallstadien:

Software Development Stage         | Cost
-----------------------------------+------
Requirements and Design            | 1X
Code and Unit Testing              | 5X
Integration and System Testing     | 10X
Beta Testing                       | 15X
Post Release                       | 30X

( Tisch hier ab hier )

Eines der Ziele der agilen Softwareentwicklungsmethoden besteht darin, diese unterschiedlichen Phasen zu beseitigen und diese Kosten zu senken. Die Zahlen gelten nicht, wenn andere Methoden für den Wasserfall angewendet werden.


2

Ihr Problem liegt nicht in der Qualitätssicherung. Wenn Ihre Qualitätssicherung Tests durchführt, sind die Verzögerungen so gut wie die geringsten Ihrer Sorgen. Bitte lassen Sie mich dies erläutern (erneut, da dies in der Programmierbranche ein weit verbreitetes Missverständnis ist) ... Qualitätssicherung Gewährleistet die Qualität des Produkts, indem die gesamte SDLC von den Anforderungen (möglicherweise früher) über die Entwicklung, Überprüfung, Veröffentlichung und Unterstützung überwacht wird. Das Testen stellt sicher, dass keine offensichtlichen Mängel im Code vorhanden sind. Es gibt einen sehr großen und wichtigen Unterschied. Wenn Sie eine echte Qualitätssicherung hatten, waren sie in der gesamten Test- / V & V-Abteilung und fragten, warum sie das Geschäft Zeit (und damit Geld) gekostet haben, Releases zu verzögern, oder während des gesamten Projektmanagements Sicher, es gab genug Tester für den Code, der erstellt wurde usw.

Wenn Sie also von einer Qualitätssicherung ausgehen, meinen Sie wirklich Test, zurück zur ursprünglichen Frage. Code Complete hat es richtig gemacht - die Kosten für einen Defekt sind die Zeit, die von der Einfügung bis zur Korrektur vergangen ist. Früherkennung ist nur nützlich, wenn Sie sie auch früh korrigieren, aber die Interpretation der meisten Menschen ist falsch.

(Hinweis: Ich spiele Devils Advocate hier, nimm nichts davon wörtlich, da ich nichts von deiner Situation weiß.) Die Verzögerungsursache durch deine Testabteilung ist kostenpflichtig, aber ich muss dich unbedingt fragen, ob du es bist Warten Sie darauf, dass sie Ihre Fehler finden. Was tun Sie? Sollten Sie keine eigenen Fehler finden? Wenn sie weniger Arbeit hätten (durch qualitativ hochwertigere Eingaben mit weniger Fehlern von Ihnen), wäre die Verzögerung möglicherweise nicht so bedeutend und die Kosten geringer - als Manager würde ich Sie fragen, wie Sie die Fehler in dem Code, an den Sie liefern, reduzieren möchten testen, da (basierend auf Ihrem Argument) diese Mängel mehr kosten, wenn sie durch einen Test festgestellt werden, als Sie selbst.

Auch als Manager kann ich sagen, dass es sich bei der Aufgabe nicht um einen Test handelt. Finden Sie Ihre Mängel. Sie müssen feststellen, dass keine Mängel vorliegen. Wenn Sie damit rechnen, dass sie Mängel aufweisen, haben Sie Ihre Arbeit möglicherweise nicht gut genug ausgeführt.

Seien Sie vorsichtig, wie Sie dies angehen. Wenn Sie keine Lösung für das Problem haben, werden Sie wahrscheinlich als Zweitbester abschneiden.


'' 'Die Aufgabe der Testabteilung besteht nicht darin, Fehler zu finden. Sie müssen feststellen, dass keine Fehler vorliegen.' '' Das ist ein cooler Ausschnitt. Darf ich Sie damit zitieren?
sleske
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.