Da diese Frage einige Kontroversen hervorrief, möchte ich diese Antwort mit meinem Hintergrund beginnen: Abgesehen davon, dass ich in der täglichen Projektarbeit mit V & V in Berührung gekommen bin, habe ich mehrere Jahre in der Software-Engineering-Abteilung meiner Alma Mater gearbeitet und bin Dozent für Software-Engineering. Dies garantiert zwar nicht, dass alles, was ich sage, richtig ist, aber ich hoffe, es gibt mir zumindest den Vorteil des Zweifels, dass diese Antwort etwas Wahres enthalten könnte.
Lassen Sie mich Ihnen versichern, dass Sie nicht so verwirrt sind, wie Sie vielleicht glauben. Was Sie in Ihrer Frage angegeben haben, ist ebenso wahr wie irreführend. Lassen Sie mich zunächst darauf hinweisen, was Sie richtig angegeben haben:
- Verifikation = Produkt richtig bauen vs Validierung = das richtige Produkt bauen
- Statische Techniken sind Teil der Überprüfung - hauptsächlich, weil sie Ihr Programm und einige formale Eingaben aus den Anforderungen übernehmen und gegeneinander bewerten.
- Die Überprüfung stellt die korrekte Umsetzung der Anforderungen sicher (dh, Sie haben sie richtig erstellt).
Lassen Sie mich jetzt die Verwirrung über das Testen beseitigen . Erstens ist, wie in vielen Kommentaren bereits erwähnt, das dynamische Testen von Code über automatisierte Tests (Einheit, Integration, ...) tatsächlich Teil der Überprüfung. Was jedoch die meiste Verwirrung stiftet, ist, dass Personen in der Validierung auch über das Testen sprechen , aber etwas anderes bedeuten: Bei der Validierung bezieht das Testen normalerweise eine Person mit ein, die die Anwendung für den beabsichtigten Zweck verwendet. Im optimalen Fall ist dies der Kunde selbst.
Die "Fehler" [1], die beim Testen bei der Verifizierung und Validierung festgestellt wurden, unterscheiden sich jedoch grundlegend:
- Verifikationstestfehler: Dies sind Fehler, die auf die eine oder andere Weise gegen Ihre Anforderungen verstoßen.
- Validierungstestfehler: Dies sind Fehler mit dem Produkt, das Sie erstellt haben, und nicht mit dessen Funktionalität. Daher werden Fehler innerhalb der Anforderungen angezeigt.
Für die meisten Menschen ist es hilfreich, konkrete Beispiele für verschiedene V & V-Fälle zu betrachten. Das Folgende sind extreme Beispiele für Fehler:
Sie haben eine Anforderung auf niedriger Ebene, dass "f (x) x + 1" zurückgeben soll und Ihre Implementierung von "f" immer die Konstante 2 zurückgibt. Sie können diesen Fehler durch verschiedene Überprüfungsansätze finden, aber Ihr Kunde hat wahrscheinlich gewonnen. ' Ich finde es nicht während der Validierung, weil Sie eine E-Shopping-Site erstellen und er "f" weder kennt noch sich darum kümmert.
Sie haben die Anforderung "Das System sollte in der Lage sein, 1000 Anforderungen pro Sekunde bei einer CPU-Auslastung von maximal 80% zu verarbeiten". Auch hier wird die Validierung genauso schwierig sein wie die meisten statischen Techniken. Der einfachste Weg, dies zu überprüfen, besteht darin, Ihre Anwendung dynamisch zu testen, indem Sie sie mit Anforderungen versehen und Ihre CPU-Auslastung während dieser Zeit überwachen.
Betrachten Sie die obige Anforderung für "f" noch einmal, diesmal mit einer "korrekten" Implementierung. Alle Ihre Bewertungen, statischen Analysen und dynamischen Tests werden einen Erfolg melden, aber dann testet Ihr Kunde Ihre Software und teilt Ihnen mit, dass er das Warenkorbsymbol auf der Webseite vermisst. Kein Überprüfungsbetrag kann diesen Fehler finden, wie Sie ihn in der Anforderungsphase gemacht haben.
Wie Sie sehen können, ist "Testen" - sofern nicht genauer definiert - Teil der Verifizierung und Validierung, und tatsächlich sollte "Testen" für beide durchgeführt werden.
[1] "Fehler" wird hier umgangssprachlich verwendet, um die Unterscheidung zwischen Fehler, Fehler, Fehler, Fehler, ... zu vermeiden.