Waren Sie schon einmal an einem Softwareprojekt beteiligt, bei dem das Budget und alle Fristen überschritten wurden? Natürlich waren Sie das – wir alle waren das. Wenn nicht, sind Sie ein „Einhorn“, und ich würde gerne von Ihnen hören.
In den frühen Phasen meiner Karriere als Softwareentwickler habe ich gelernt, wie wichtig es ist, von einer Deadline aus rückwärts zu arbeiten. Wenn ein Projekt bis zu einem bestimmten Datum abgeschlossen sein muss und Tests eine gewisse Zeit in Anspruch nehmen, können wir diese Informationen nutzen, um rückwärts zu planen und ein Fälligkeitsdatum für unser Projekt festzulegen. Perfekt, oder?
Nun, nicht wirklich. Obwohl die rechtzeitige Fertigstellung für manuelle Tests den Stress in den letzten Tagen der Projekte etwas reduzierte, gab es immer noch zu viele Überraschungen.
Das Einplanen von Zeit für Qualitätssicherungstests ist in der Theorie großartig, aber in der Praxis scheitert es schnell, sobald der erste Fehler oder Defekt identifiziert wird.
Wie lange dauert die Behebung dieses Fehlers? Wie stark wird es sich auf den Zeitplan auswirken? Werden neue Fehler eingeführt? Wie stellen wir sicher, dass jeder Fix überprüft wird, um alles zu beheben, was wir kaputt gemacht haben, während wir das erste Problem behoben haben?
Letztendlich war ich nie in der Lage, die richtige Zeit für die Qualitätssicherung aufzuwenden. Unvermeidlich wurden in letzter Minute überstürzte Fixes zusammengeführt; ich lernte, meinen Kalender für ein paar Wochen nach großen Markteinführungen freizuhalten, damit ich alle Probleme, die wir in unserem wahnsinnigen Endspurt übersehen (oder eingeführt) hatten, sondieren konnte.
Das Problem war letztendlich nicht die für die Tests verfügbare Zeit, sondern das Timing der Tests. Ich musste früher und häufiger testen. Ich benötigte einen Shift-Left-Ansatz.
Wenn wir uns unseren Softwareentwicklungsprozess als eine Zeitachse vorstellen, die von links nach rechts verläuft, dann wird „Shift-Left-Testing“ (Testen durch Verschieben nach links) gewissermaßen selbsterklärend. Einfach ausgedrückt handelt es sich um die Praxis, frühere Phasen zu testen, Teammitglieder, einschließlich Tester, Entwickler und Stakeholder, in die Teststrategie einzubeziehen und Tests für bestehende und neue Funktionen häufiger in den Entwicklungslebenszyklus zu integrieren.