Was ist der Unterschied zwischen Testen und Verifizieren?

Jedes Lehrbuch, das ich gesehen habe, macht großen Eindruck auf die Tatsache, dass Testen und Verifizieren zwei unterschiedliche Konzepte sind. Doch keiner von ihnen bietet eine klare (oder zumindest für mich klar genug) Unterscheidung.

Um etwas Kontext bereitzustellen, interessiere ich mich für die Verifizierung digitaler Hardwaredesigns mithilfe von Hardwaredesignsprachen (HDLs).

Ich habe einige Erklärungen gesehen, die auf einen "physischen" oder "greifbaren" Unterschied zurückgreifen: Wenn es sich um ein hergestelltes Gerät handelt, dann um Tests. Ist das die ganze Geschichte? Wenn ja, warum taucht das Wort "Test" so oft in der Verifikation auf (insbesondere in der funktionalen Verifikation sprechen wir von Testfällen, Testbenches, DUT (device under test), gerichteten Tests, zufälligen Tests usw.)

Antworten (8)

War ASIC Design Verification Engineer bei Qualcomm. Am einfachsten kann ich es erklären:

Testen: Sicherstellen, dass ein Produkt funktioniert, nachdem Sie das Produkt erstellt haben (denken Sie an QA).

Verifizierung: Sicherstellen, dass ein Produkt funktioniert, BEVOR Sie es erstellt haben.

Sie testen beide, nur dass die Verifizierung komplizierter ist, weil Sie einen Weg finden müssen, das Produkt zu testen, bevor es existiert, und Sie müssen in der Lage sein, sicherzustellen, dass es wie entworfen funktioniert, und es zu spezifizieren, wann es tatsächlich herauskommt.

Zum Beispiel entwirft Intel seinen nächsten Prozessor, sie haben die Spezifikationen, sie haben die Schaltpläne und die Simulationen. Sie geben 1 Milliarde USD aus, um die Herstellung und Fertigung zu durchlaufen. Dann kommt der Chip zurück und sie testen ihn und finden heraus, dass er nicht funktioniert. Sie warfen einfach viel Geld aus dem Fenster.

Fügen Sie die Verifizierung hinzu. Verifizierungsingenieure erstellen Modelle, die das Verhalten des Chips simulieren, sie erstellen die Testbench, die diese speziellen Modelle testet. Sie erhalten die Ergebnisse dieser Modelle und vergleichen sie dann mit den RTL-Ergebnissen (Modell der Schaltung, die in einer Hardware-Designsprache geschrieben ist). Wenn sie übereinstimmen, ist (normalerweise) alles in Ordnung.

Es gibt eine Reihe verschiedener Methoden für den Verifizierungsprozess, eine beliebte ist die Universal Verification Methodology (UVM) .

Es gibt viel Tiefe in diesem Bereich und die Leute können ihre gesamte Karriere darin verbringen.

Noch eine zufällige Information: Normalerweise braucht man 3 Verifikationsingenieure für 1 Entwicklungsingenieur. Das sagen sowieso alle in der Branche.

BEARBEITEN: Viele Leute betrachten die Verifizierung als eine Testrolle, aber das ist es nicht; Es ist eine eigenständige Designaufgabe, da Sie alle Feinheiten Ihres ICs verstehen müssen, wie es ein Designer tut, und dann müssen Sie wissen, wie man Modelle, Testbenches und alle Testfälle entwirft, die alle Funktionen Ihres ICs abdecken , sowie der Versuch, jede einzelne Zeile des RTL-Codes für alle möglichen Bitkombinationen zu treffen. Denken Sie daran, dass ein Prozessor heutzutage Milliarden von Transistoren hat, da der Herstellungsprozess immer kleinere (jetzt 14 nm) zulässt.

Außerdem entwerfen in großen Unternehmen wie Intel, AMD, Qualcomm usw. die Designer den Chip nicht wirklich. Normalerweise definiert der Architekt alle Spezifikationen, entwirft die Arten von Teilen, die zusammenpassen müssen, um eine bestimmte Funktion mit einer bestimmten Anforderung (z. B. Geschwindigkeit, Auflösung usw.) zu erhalten, und dann codiert der Designer dies in RTL. Es ist keineswegs ein einfacher Job, es ist einfach nicht so sehr Design, wie viele Ingenieure, die von der Schule kommen, denken. Jeder möchte Architekt werden, aber es braucht viel Bildung und Erfahrung, um an diesen Punkt zu gelangen. Viele Architekten haben einen Doktortitel und etwa 15-20 Jahre Erfahrung in diesem Bereich als Designer. Das sind brillante Leute (und manchmal verrückt), die es verdienen, das zu tun, was sie tun, und sie sind gut darin. Der Architekt des allerersten Chips, an dem ich gearbeitet habe, war ein bisschen unbeholfen und folgte einigen sozialen Normen nicht wirklich, aber er konnte alles lösen, woran Sie in Bezug auf den Chip hängen blieben, und manchmal löste er es in seinem Kopf und erzählte es Ihnen um auf ein Signal zu schauen und Sie würden sagen: "Wie zum Teufel hat er das gemacht?". Dann bittest du ihn, es zu erklären, und er tut es, und es geht dir weit über den Kopf. Hat mich tatsächlich dazu inspiriert, Lehrbücher zu lesen, obwohl ich bereits meinen Abschluss gemacht habe.

+1 Danke für die letzte Bemerkung, hilft uns zu sehen, dass das Feld tatsächlich wichtig ist (obwohl RTL und Design Engineering für die meisten Ingenieure attraktiver klingen, denke ich)
Würden Sie der Vollständigkeit halber hinzufügen, was ein Testfall ist?
Ich habe einen Leckerbissen darüber hinzugefügt, was Verifizierung eigentlich ist, weil Ihr erster Kommentar darüber war, dass die Designrolle attraktiver ist; Das sind beides gute Rollen, es kommt nur darauf an, was man mag. Was einen Testfall betrifft, könnte ein SoC wie der Snapdragon Zehn- bis Hunderttausende von Testfällen haben, und mit zufälligen Tests in Millionenhöhe. Um es einfach auszudrücken: Sie wenden eine Reihe von Eingabebits an, die durch viele Module geändert werden, und erhalten dann als Ergebnis einige Ausgabebits, die Sie mit den Ergebnissen Ihres Modells vergleichen. Etwas so Einfaches wie das Testen eines Bildes, das auf Ihrem Telefon angezeigt wird, hätte ...
eine große Anzahl von Testfällen. Angenommen, Sie möchten ein einzelnes Pixel auf Ihrem mobilen Bildschirm anzeigen. Jemand außerhalb des Feldes wird denken, dass 1 Bit für Weiß und 0 für Schwarz angewendet wird. In der tatsächlichen mobilen Welt kann sich dieses Pixel durch Größe, Intensität, Drehung, Farbformat (YUV ###, RGB ### usw.) unterscheiden. Und Sie testen wahrscheinlich 1 Bit innerhalb einer Reihe von Bits, die zusammen auf den Eingang angewendet werden. Die anderen Bits können 0 sein, weil es schwarz ist, oder können 1 sein, weil es andere Informationen verarbeitet, wie z.

In meinem Buch stellt die Verifizierung sicher, dass das, was Sie entworfen haben, "den Job macht" - dh Sie haben eine Reihe von Dingen, die das "Gerät" ausführen muss, und die Verifizierung hakt diese auf der Liste ab.

Testen stellt jedoch sicher, dass die Dinge, die das "Gerät" tut, richtig gemacht werden. Sie haben eine Reihe von Funktionen und testen jede Funktion, um sicherzustellen, dass sie ordnungsgemäß funktioniert.

Kurz gesagt, Überprüfung überprüft das Design und Testen überprüft das Produkt.

Ich glaube, ich fange an zu verstehen ... Könnten Sie bitte einige Beispiele für jedes geben?
Wie passt das zu einem Verifikationsplan , der festlegt, was implementiert werden soll und woher man weiß, dass die Funktionalität korrekt ist? Es bringt wenig, eine Funktion zu implementieren oder abzuhaken, wenn sie nicht funktioniert.
@ Majenko - Sie haben also ein Buch über Verifikation geschrieben? Würdest du ein paar mehr Details darüber teilen?

Aus dem Hintergrund des ASIC (Hardware)-Designs kommend, gibt es drei wichtige Begriffe: Validierung , Verifizierung und Test . Die früheren Antworten beziehen sich im Allgemeinen auf einen oder zwei dieser Begriffe, stellen jedoch nicht alle drei so klar gegenüber, wie ich es tun würde. So verstehe ich sie:

  • Validierung: Erfüllt die Spezifikation (häufig ein C-Modell) die Markt- oder Kundenanforderungen
  • Überprüfung: Stimmt die Implementierung (RTL, Netzliste oder GDS2) mit der Spezifikation überein?
  • Test: Stimmt das hergestellte Gerät mit der Umsetzung überein?
Können die Netzlisten- und GDS2-Simulationen unterschiedliche Ergebnisse liefern?
@CiroSantilli巴拿馬文件六四事件法轮功, ich nehme an, Sie fragen nach dem Verhalten von Gates gegenüber Transistoren. Für normale digitale Spannungen und Wellenformen würde ich sagen, dass sie die gleichen Ergebnisse liefern. Aber es könnte "analoge" Effekte geben, die von idealisierten Gattern nicht berücksichtigt werden, wie z. B. Leistungs-/Erdungsschwankungen oder Signalladungsteilung. Wenn diese Effekte vorhanden sind, gilt das ideale digitale Verhalten möglicherweise nicht.
@CiroSantilli新疆改造中心法轮功六四事件 Ja, sie können deutlich unterschiedliche Ergebnisse liefern. Dort gewesen, diesen Fehler gemacht.

ISO9000 spricht von Verifizierung und Validierung. Im Zusammenhang mit ISO9000 bedeutet Verifizierung das Testen eines Prototypdesigns, um zu beweisen, dass es die Funktions- und Leistungserwartungen erfüllt. Validierung bedeutet, dass das Testen des ersten Produktionslaufs auch die Designerwartungen erfüllt. Erst verifizieren, später validieren ist meine kleine Art, die Reihenfolge der Dinge zu merken.

Mehrere Softwarestandards kehren die Reihenfolge von Verifizieren und Validieren um, und dies könnte wirklich Verwirrung stiften, seien Sie sich dessen also bewusst.

Fazit ist ... Warum testen Sie etwas - ist es ein Prototyp-Design - wenn ja, dann nennen die Qualitätsstandards dies eher Verifizierung. Wenn Sie zum ersten Mal einen Produktionslauf testen, nennen die Hardware-Jungs dies Validierung.

Nur meine persönlichen Erfahrungen.

Ein Test dient dazu festzustellen, ob eine Spezifikation erfüllt wird. Bei der Verifizierung soll festgestellt werden, ob das Gerät die Designeingaben erfüllt – dh alle Spezifikationen. Ich nehme an, es gibt noch viele weitere Interpretationen, aber das habe ich in den FIA-Leitliniendokumenten gesehen.

Ich sehe, ich habe den Wortlaut ein wenig geändert (von test zu testing ), um klarer zu machen, dass beides Prozesse sind. Ich stimme Ihnen zu, dass für individuelle Tests der Worttest angemessen ist (manchmal habe ich das Gefühl, dass ich mit diesen Terminologiefragen das Offensichtliche wiederhole ...) :)

Wir unterscheiden zwischen Verifizierungstests und Validierungstests. Angenommen, Sie entwerfen einen Lüfter, der einige Geräte kühlt. Es werden Verifizierungstests durchgeführt, um sicherzustellen, dass der Lüfter alle Konstruktionsanforderungen erfüllt. Sie können also Luftstrom, Temperaturwechsel, Vibration usw. testen.

Validierungstests stellen sicher, dass die Designanforderungen die richtigen waren. Haben die Designeingaben, die wir für den Lüfter hatten, uns tatsächlich den Lüfter gegeben, den wir wollten? Zum Beispiel würden Sie sicherstellen, dass der Lüfter die Geräte tatsächlich wie beabsichtigt kühlt.

So werden die Begriffe in den Büchern über Software Engineering verstanden, die ich gelesen habe. Validierung = Sicherstellen, dass die Anforderungen stimmen (Abgleich mit dem Kunden, Vorschriften usw.); Verifizierung = sicherstellen, dass das Produkt das Richtige ist (es anhand der Spezifikation testen)

Beim Lesen dieser Antworten wird mir jetzt klar, dass es in der Branche keine festgelegte Definition dafür gibt, wie sich "Testen" von "Verifizierung" unterscheidet.

Bei der Arbeit mit HW-Design („echtes“ HW-Design, wie Sachen auf PCB, nicht VHDL-Programmierung) durchlaufen wir eine Verifizierungs- und Validierungsphase und eine Produktionstestphase (eigentlich entwerfen wir nur die Produktionstests selbst und liefern sie an den Produktionsstandort). - Verifizierung - (1) verifizieren, dass Prototyp/Massenprodukt die HW-Anforderungen erfüllt (2) HW-Anforderungen gegen SYS-Anforderungen validieren. - Produktionstests - Rauchtest und vereinfachte und schnelle Verifizierungstestfälle, die angepasst sind, um Massenproduktionsfehler auszusortieren, ohne den gesamten Verifizierungsprozess für jede der 500.000 pro Jahr produzierten Einheiten durchlaufen zu müssen.

In diesem speziellen multinationalen Unternehmen bezieht sich "Testen" also auf Produktionstests und nicht mehr.

Nach der Buchdefinition ist "Verifizierung der Prozess der Sicherstellung der funktionalen Korrektheit des Designs gemäß dem Spezifikationsdokument", während "Testen der Prozess der Überprüfung ist, ob der physische Chip nach der Herstellung wie beabsichtigt funktioniert". Bei der Verifizierung geht es darum, zu prüfen, ob das Design logisch korrekt ist, während es beim Testen darum geht, ob die Hardware funktioniert.