Wie kommt es, dass die Überprüfung keine tatsächlichen Tests umfasst?

8

Nachdem ich viel über dieses Thema gelesen habe - wie auf dieser Website mit den Grundlagen des Softwaretests zu Verifizierung und Validierung sowie zum Testen und zur Qualitätssicherung von Software: Theorie und Praxis von Naik und Tripathy - verstehe ich es immer noch nicht. Die Überprüfung sollte beweisen, dass Sie das richtige Produkt erstellen, während die Überprüfung nachweist, dass Sie das richtige Produkt erstellt haben. Als Verifizierungsmethoden werden jedoch nur statische Techniken (Codeüberprüfungen, Anforderungsprüfungen ...) genannt. Wie können Sie sagen, ob es korrekt implementiert ist, wenn Sie es nicht testen? Es wird gesagt, dass die Überprüfung sicherstellt, dass das Produkt die festgelegten Anforderungen erfüllt. Auch hier kann ich nur durch Testen sagen, dass die Funktion irgendwie funktioniert.

Könnte mir das bitte jemand erklären?

John V.
quelle
1
Wo liest du das? In der Regel wird die Überprüfung und Validierung als eine einzelne Aktivität behandelt, die alles umfasst, was zur Produktqualität gehört. Sowohl statische als auch dynamische Techniken sind Teil von V & V.
Thomas Owens
Bitte teilen Sie uns mit, wo Sie dies lesen. Es ist einfach falsch. Siehe zum Beispiel diesen Link.
Peter K.
Zum Beispiel hier: softwaretestingfundamentals.com/verification-vs-validation Auch ein Buch, das ich habe, sagt dasselbe, dass die Verifizierung nur durch statische Analyse erfolgt, während die Validierung durch dynamische (tatsächliche Tests) erfolgt
John V
1
@ user970696 das Buch, das Sie haben - würde es Ihnen etwas ausmachen, den Titel und den Autor zu nennen? Sie erwähnen auch "Wiki" - was ist das?
Mücke
1
@ user970696 Ich habe das Buch nicht, aber ich habe ihre Folien von hier . Sie scheinen nicht den Unterschied zu machen, von dem Sie sprechen. In Kapitel 3 der Folien geht es beispielsweise um "Dynamic Unit Testing", bei dem es sich sicherlich um eine Überprüfung und nicht um eine Validierung handelt (da nicht das gesamte System verfügbar ist).
Peter K.

Antworten:

14

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.

Frank
quelle
Das war wirklich toll! Wenn ich ins Kino gehe, möchte ich wirklich klarstellen: Neben den UAT-Tests durch Benutzer sind auch Black-Box- oder Testfall-basierte Tests Teil des Verifizierungsprozesses. Bin ich hier richtig
John V
Aber ich muss hinzufügen, dass ISO 12207: 2008 nur statische Techniken zur Überprüfung enthält: /
John V
Leider arbeiten viele (die meisten) Entwickler nicht an den Anforderungen, so dass sie über den Unterschied zwischen Verifizierung und Validierung verwirrt sind. Daher ist das allgegenwärtige V & V gleich und noch schlimmer, Testing == QA.
Mattnz
@Frank: Nun, in der ISO, die ich erwähnt habe, wird ausdrücklich erwähnt, dass Tests als Teil der Validierung durchgeführt werden (7.2.5.3.2.1 und ..2). Wie kommt es, dass es so viel Streit gibt :(
John V
1
@ user970696: Sicher, in diesen Abschnitten wird das Testen anhand der Benutzeranforderungen ausdrücklich erwähnt . In den beiden Abschnitten, die ich erwähnt habe (implizit: 7.2.4.3.2.3 und 7.2.4.3.2.4), heißt es The code implements proper event sequence, consistent interfaces, correct data and control flow, completeness, appropriate allocation timing and sizing budgets, and error definition, isolation, and recovery.und The software components and units of each software item have been completely and correctly integrated into the software item--- wie würden Sie eines dieser Dinge tun, ohne es zu testen?
Peter K.
0

In der Tat: Die Überprüfung beweist, dass Sie das richtige Produkt erstellen, während die Validierung das richtige Produkt erstellt.

Deshalb

  • Die Überprüfung beweist den Prozess ... dass Sie die erforderlichen Standards und Verfahren befolgt haben, die normalerweise durch statische Analyse und Codeüberprüfung überprüft werden.
  • Die Validierung beweist das resultierende Produkt ... dass der Code das tut, was erforderlich ist, normalerweise durch dynamische Analyse und Tests überprüft, um zu zeigen, dass bestimmte Eingaben zu bestimmten Ausgaben führen

Normalerweise zitiere ich Wikipedia nicht , aber in diesem Fall ist es hilfreich ...

Eine detailliertere Erläuterung der beiden Prozesse finden Sie in ISO 12207 Software Life Cycle Processes (eine der anderen Antworten enthält einen Link zu einer unkontrollierten Kopie):

7.2.4.3.2 Überprüfungsaufgaben

  • Anforderungsüberprüfung
  • Designüberprüfung
  • Codeüberprüfung
  • Integrationsüberprüfung
  • Überprüfung der Dokumentation

7.2.5.3.2 Validierungsaufgaben

  • Bereiten Sie Testanforderungen, Fälle und Spezifikationen vor
  • Führen Sie die Tests durch

In der ersten Frage wurde nun gefragt, warum die Überprüfung keine Tests umfasst. Und trotz einiger anderer Antworten von P.SE-Mitgliedern mit hohem Ansehen habe ich Ihnen gesagt, dass dies nicht der Punkt der Verifizierungsaktivität ist, sondern der Validierungsaktivität .

Einige Antworten deuten darauf hin , dass Sie haben Code oder Integration zu testen , um zu überprüfen. Nein - diese Aktivität dient dazu, die Modularität und die Schnittstellen usw. zu beweisen, nicht die Ausführung.

Diese Diskussion zeigt im Wesentlichen, dass es große Verwirrung darüber gibt, was Verifikation und was Validierung ist , und dies wird nicht dadurch unterstützt, dass die Grenze eine Grauzone ist und in verschiedenen Standards leicht unterschiedlich definiert ist.

Wichtig ist, dass beide Teile von V & V abgedeckt werden, und solange dies semantisch der Fall ist, spielt es keine Rolle, ob es sich um V oder V handelt ... nur um V und V.

Andrew
quelle
Danke, aber jetzt bin ich wirklich verwirrt. Die Kommentare zu der Frage zeigen, dass die Überprüfung die Testphase ist, Sie sagen das Gegenteil.
John V
Ich sehe, ich habe jetzt zwei Abstimmungen ... Ich wäre gespannt, warum die Leute denken, meine Antwort sei falsch?
Andrew
Nun, IMHO, wie in den Kommentaren angegeben, ist die Überprüfung die eigentliche Prüfung, während es bei der Validierung mehr um die Akzeptanz des Endprodukts durch den Benutzer geht.
John V
Ich bin mit dieser Zusammenfassung absolut nicht einverstanden. In der Tat ist das einfach falsch. Überprüfung hat nichts mit dem Testen zu tun
Andrew
Schauen Sie sich die Links in den Kommentaren an. Es sieht so aus, als ob es die Art und Weise, wie ich es gesagt habe, allgemein akzeptiert hat, aber auch ich habe unterschiedliche Meinungen gelesen. Aber beim Lesen von Universitäts-Texten gibt es zB: Verifizierungsansätze versuchen, Produktfehler oder -fehler zu identifizieren. "
John V