Bei der Arbeit haben wir ein ziemlich kompliziertes System. Nennen wir dieses System System_A. Unser QA-Team hat ein anderes System erstellt. Rufen Sie dieses System System_B auf, um System_A zu testen.
System_B wird wie folgt verwendet. Wir generieren Eingaben (unter Verwendung von System_B selbst), IN, verarbeiten solche Eingaben über System_B zurück und generieren Ausgaben, O_B. Der Prozess ist also wie folgt:
System_B(IN) -> O_B
.
Wir machen dasselbe für System_A, um seine eigenen Ausgaben zu generieren, O_A:
System_A(IN) -> O_A
.
Es wird jederzeit angenommen, dass O_B die erwartete Ausgabe und O_A die beobachtete / tatsächliche Ausgabe ist. Impliziert ist, dass O_B die "Gold" -Quelle ist (die Wahrheit). Wir sind jedoch auf eine Kombination von Problemen gestoßen.
- O_A ist falsch, O_B ist richtig
- O_A ist richtig, O_B ist richtig
- O_A ist falsch, O_B ist falsch
- O_A ist richtig, O_B ist falsch
Wer bestimmt, was richtig ist, wenn angenommen wird, dass O_B immer richtig ist (oder was erwartet wird)? Nun, es stellt sich heraus, dass O_B manchmal (oder oft) falsch mit der menschlichen Inspektion und Analyse ist. Mit diesem Prozess werden die Dinge die Qualitätssicherung bestehen, und echte Benutzer werden sich beschweren, und wir stellen wieder fest, dass O_B doch falsch war.
Die Frage ist: Ist es eine schlechte Praxis, ein "Testsystem" zu erstellen, um das reale System zu testen?
- Was ist mit dem rutschigen Hang? Können wir dann nicht argumentieren, dass wir noch ein anderes System brauchen, um das "Testsystem" zu testen?
- Die Kosten sind definitiv unerschwinglich, da Entwickler jetzt mindestens zwei Codebasen lernen müssen, wobei die Komplexität von System_B möglicherweise größer ist als die von System_A. Wie würden wir quantifizieren, wie gut oder schlecht es für die Organisation ist, System_B zu haben?
- Einer der ursprünglichen "zwingenden" Gründe für die Erstellung von System_B war die "Automatisierung" der Tests. Jetzt sind wir sehr stolz darauf, dass wir vollständig automatisiert sind (da System_B die Eingabe generiert, um den Prozess der Verwendung von sich selbst zur Generierung der Ausgabe zu booten). Aber ich denke, wir haben auf nicht quantifizierbare Weise mehr Schaden angerichtet und mehr Komplexität eingeführt. Soll die Aufgabe der Qualitätssicherung vollständig automatisiert werden? Ist das Grund genug, um die Schaffung eines parallelen Systems zu rechtfertigen?
- Meine eigentliche Sorge ist dies, obwohl wir alle wissen, dass System_B (ziemlich oft) falsch ist. Wenn System_B die Eingabe so gut verarbeitet und die Ausgabe die Goldquelle ist, warum nicht System_A durch System_B ersetzen? Darauf kann niemand bei der Arbeit eine zufriedenstellende Antwort geben.
Jede Anleitung zu diesem Thema wird geschätzt.