Wer sichere Software entwickelt, muss beim Testen der Software die Testabdeckung messen. Entwicklern werden dafür viele Tools angeboten. Doch wie lässt sich das optimale Code-Coverage-Tool ermitteln?
Um sichere und zuverlässige Software zu entwickeln, ist das Testen ein unverzichtbarer Bestandteil der Qualitätssicherung. Denn ohne ausreichende und dokumentierte Tests kann nicht festgestellt werden, ob eine Software sicher und funktional korrekt ist. Einen besonderen Stellenwert hat dabei die Messung der Testabdeckung (Code Coverage). Denn dadurch kann festgestellt werden, wie umfassend eine Software bereits getestet wurde. Die Testabdeckung gibt das Verhältnis von getestetem Code zum Gesamtcode an. Vereinfacht lässt sich beispielsweise sagen, dass die Testabdeckung 75 % beträgt, wenn beim Test drei von vier möglichen Optionen durchlaufen werden.
Speziell in der Entwicklung sicherheitskritischer Software schreiben Branchennormen genaue Anforderungen für die Testabdeckung vor, so dass Produkte hier ohne den Nachweis einer ausreichenden Testabdeckung nicht zertifiziert werden können. Aber auch bei anderen Entwicklungsprojekten legen Unternehmen zunehmend großen Wert auf Software-Qualität und messen die Testabdeckung.
Zur Messung der Testabdeckung sind am Markt unterschiedliche Code-Coverage-Analyser verfügbar. Sie unterscheiden sich in der Handhabung und in der Qualität teils deutlich. Die Experten von Verifysoft Technology, Anbieter von Tools, Dienstleistungen und Schulungen zur Steigerung der Softwarequalität, haben zehn Kriterien für die Auswahl eines Code-Coverage-Tools zusammengestellt.
Code Coverage ist aus gutem Grund für die sicherheitskritische Softwareentwicklung vorgeschrieben. Aber auch für alle, die ihre Softwarequalität generell verbessern wollen, handelt es sich um eine gute Methode, um die Abdeckung und Aussagekraft der dynamischen Tests zu messen und zu erhöhen. Bei der Auswahl eines Code Coverage Analysers muss darauf geachtet werden, dass das Werkzeug den gestellten Anforderungen entspricht. Zudem spielen Faktoren wie einfache Benutzung und professionelle Unterstützung bei Rückfragen und im Supportfall eine wichtige Rolle. Richtig eingesetzt, hilft ein gutes Testabdeckungstool dabei, die Qualität deutlich zu verbessern, die Motivation von Entwicklern und Testern zu erhöhen und Tests kostensparend durchzuführen.
Die Function Coverage (Aufrufüberdeckung) misst, ob alle Funktionen des Programms aufgerufen wurden. Die Function Coverage ist die »schwächste« der üblichen Testabdeckungsstufen.
Bei der Statement Coverage (Anweisungsüberdeckung) wird gemessen, wie hoch der Anteil der getesteten Anweisungen im Vergleich zu allen Anweisungen ist.
Bei dieser Coverage-Stufe muss jede Entscheidung mindestens einmal als »wahr« und als »falsch« getestet werden. Bei normalen »if-Statements« entspricht dies der Branch Coverage, bei der jeder Zweig ausgeführt worden sein muss (Zweigabdeckung).
Bei der Condition Coverage (Bedingungsüberdeckung) werden zusammengesetzte Entscheidungen im Detail betrachtet. Bei Entscheidungen, die aus mehreren, über Boolesche Operatoren zusammengesetzten atomaren Bedingungen bestehen, muss jede dieser Bedingungen einzeln als »wahr« und als »falsch« getestet werden.
Bei der Multicondition Coverage (Mehrfachbedingungsüberdeckung) müssen bei zusammengesetzten Entscheidungen alle möglichen Wahr-Falsch-Kombinationen überprüft werden. Bei mehreren Bedingungen innerhalb einer Entscheidung erfordert dies eine zumeist unpraktikabel hohe Anzahl von Testfällen. In der Praxis und in den Normen ist daher die Modified Condition/Decision Coverage (MC/DC) relevant, bei der die Anzahl der Testfälle reduziert wird und die Aussagekraft der Testabdeckung ausreichend hoch bleibt.