Die Software wird im vorgesehenen Umfeld wie vorgesehen verwendet. Die Validierung zeigt, ob die Software die vom Benutzer gestellten Erwartungen an die Funktion erfüllt.
Die Validierung sollte "strukturiert", d.h. geplant nach vorher definierten Kriterien, erfolgen, z.B.:
Die Verifikation prüft, ob die Software die definierten Anforderungen korrekt und vollständig erfüllt.
Die Verifikation sollte "strukturiert", d.h. geplant mit vorher definierten Kriterien, erfolgen, z.B.:
Tests allein reichen nicht aus, um eine gute Software-Qualität sicherzustellen. Software ist generell zu komplex, als dass alle Fehler über Tests gefunden werden können. Deshalb muss zusätzlich auch die strukturierte, korrekte Erstellung der Software sichergestellt werden. Dies geschieht unter anderem durch Reviews oder Analysen während Design und Implementation der Software.
Beachten Sie: wichtig sind auch Vorgaben (Guidelines) zum Design und der Implementation. Diese sind aber nicht Teil der Verifikation oder Validation und liegen somit ausserhalb des Rahmens dieses Artikels.
Es gibt unterschiedlich strukturierte und formalisierte Vorgehensweisen für Reviews:
Nicht weniger wichtig als die Vorgehensweise ist die strukturierte Steuerung der zu prüfenden Aspekte. Dies geschieht z.B. durch:
Dass Software-Tests zur Sicherstellung der Qualität notwendig sind, ist wohl jedermann klar. Aber auf welchen Ebenen der Software-Entwicklung Tests sinnvoll oder gar notwendig sind, führt oft zu längeren Diskussionen.
Unit Tests prüfen kleinste Teile der Software einzeln. Dadurch ist es meistens möglich, dass beim Test alle Code-Teile durchlaufen werden (siehe auch unten: Code-Coverage). Typischerweise wird unter Unit-Test das Testen von einzelnen Funktionen verstanden.
Abhängig von der Anzahl der Hierarchiestufen, auf welchen Tests durchgeführt werden, kann aber ein anderer Ansatz sinnvoll sein: anstatt einer einzelnen Funktion deckt ein Test-Case gleich mehrere Funktionen inklusive deren Zusammenspiel ab. So können bereits auf unterster Test-Ebene erste Integrations-Probleme entdeckt werden.
Unit Tests sollten in der Regel mit speziell dazu entwickelten Tools durchgeführt werden. Gründe dafür sind:
Für Embedded Software ist es grundsätzlich sinnvoll, wenn Software Tests auf der Ziel-Hardware durchgeführt werden. Besonders wichtig ist dies aber vor allem bei den Integrations- und Software-Tests (siehe folgende Kapitel). Abhängig von der benötigten Qualität kann Unit-Testing auf dem Entwicklungs-System (PC) auch ausreichend sein.
Ein Teil der Software, mehrere integrierte Units, werden geprüft. Dabei wird die korrekte Zusammenarbeit der Units an deren Schnittstellen verifiziert.
Die Software wird als Ganzes getestet. D.h. wir prüfen, ob die Software bei definierten Eingaben das korrekte Verhalten zeigt, z.B. die korrekten Ausgaben macht.
Die Definition der Test-Cases von Software-, Integrations- oder Unit-Tests ist nicht trivial. Die Qualität eines Tests ist am Ende stark vom "Engineering-Judgement" des Autors abhängig.
Es gibt aber Methoden, welche eine strukturierte, wiederholbare Erstellung und Beurteilung der Qualität von Tests erlauben:
Strukturierte Definition von Test-Cases aufgrund Guidelines/ Check-Listen
Die Tests werden aufgrund von Vorgaben definiert. Diese geben zum Beispiel die zu prüfenden Aspekte vor. Beispiele wären:
Analyse der Anforderungs-Abdeckung
Etabliere Traceability von Test-Cases zu Anforderungen, um die Abdeckung der Anforderungen durch Tests strukturiert zu analysieren.
Analyse der Code-Abdeckung (Code Coverage)
Moderne Test-Tools erlauben die Erfassung der Code-Abdeckung während der Test-Durchführung. Mit dieser Analyse kann somit geprüft werden, ob die definierten Test-Cases die gesamte umgesetzte Funktionalität prüfen oder nicht.
Abhängig von der Art der Tests und der gewünschten Qualität können unterschiedliche Metriken verwendet werden, z.B.:
Grundsätzlich muss davon ausgegangen werden, dass beim Erstellen von Software Fehler geschehen und dass auch beim Umsetzen einer Verifikations-Methode Fehler übersehen werden.
Deshalb ist es sinnvoll, durch den Einsatz von mehreren Verifikations-Methoden auf unterschiedlichen Ebenen (z.B. Tests auf Unit-Level und Tests der Gesamt-Software) ein "Sicherheitsnetz" zu haben, das potenzielle Fehler aufdecken kann. Abhängig von der benötigten Qualität kann dieses "Sicherheitsnetz" grob- oder feinmaschig sein.
Qualitätsstandards (z.B. CMMI) oder Safety- und Security-Standards liefern Informationen, welche Methoden für welche Qualitäts-Anforderungen sinnvoll sind.
Abhängig von der benötigten Software-Qualität wird ein geeignetes Set von Verifikations-Methoden aufgrund deren Kosten-Nutzen Verhältnis gewählt.
Die folgende Auflistung zeigt etablierte Prinzipien sortiert nach typischem Kosten-Nutzen Verhältnis:
Viel Spass beim Testen, Verifizieren und Validieren!
Matthias Eggenberger
Haben Sie zusätzliche Fragen? Haben Sie eine andere Meinung? Wenn ja, mailen Sie mir oder kommentieren Sie Ihre Gedanken unten!
Projekte? Ideen? Fragen? Machen wir einen kostenlosen Erst-Workshop!
Keine Kommentare