← Terug
Nieuwe methode Veritas legt blinde vlekken in softwaretestrapportages bloot

Nieuwe methode Veritas legt blinde vlekken in softwaretestrapportages bloot

Onderzoekers hebben een nieuwe benadering genaamd Veritas ontwikkeld om vast te stellen of softwaretests daadwerkelijk fouten detecteren, in plaats van enkel aan te tonen dat bepaalde stukken code worden uitgevoerd.

In de wereld van softwareontwikkeling wordt codecoverage vaak gebruikt als maatstaf voor de kwaliteit van tests. Deze rapportages geven aan welke delen van de code worden uitgevoerd tijdens het testen, maar zeggen niets over het vermogen van de tests om daadwerkelijke fouten op te sporen. Volgens een recent wetenschappelijk artikel op arxiv.org is er een aanzienlijk gat tussen het simpelweg 'dekken' van code en het effectief 'controleren' ervan.

De beperking van traditionele coverage

Traditionele codecoverage rapporteert welke tests code uitvoeren, maar niet of deze tests fouten detecteren. Om dit gat te dichten, werd voorheen vaak gebruikgemaakt van 'checked coverage'. Deze methode maakt gebruik van dynamische slicing om te traceren welke code invloed heeft op de test-oracles (de mechanismen die bepalen of een test slaagt of faalt).

Echter, zoals beschreven in de publicatie , is dynamische slicing kostbaar en kampen Java-slicers vaak met problemen bij moderne taalfuncties en complexe programma's.

De werking van Veritas

Om deze problemen op te lossen, presenteren onderzoekers Md Nafiu Rahman, Cemil Canbaz en Soneya Binta Hossain een nieuwe methode genaamd Veritas. Deze benadering werkt zonder slicing en test direct of het gedrag van de code ook echt wordt gecontroleerd.

Veritas richt zich specifiek op 'object branch coverage' (OBC). Dit is een structureel criterium voor gecompileerde code waarvan de effectiviteit bij het detecteren van fouten vergelijkbaar is met de broncode-gebaseerde 'Modified Condition/Decision Coverage' (MC/DC). MC/DC wordt overigens vereist op het hoogste zekerheidsniveau van de DO-178C-standaard.

De werking van Veritas is als volgt: voor elke gedekte uitkomst van een object-branch dwingt de tool de tegenovergestelde uitkomst af. Er is pas sprake van een effectieve controle wanneer:
1. De wijziging wordt uitgevoerd;
2. Een test die voorheen slaagde, nu faalt;
3. De fout direct toeschrijfbaar is aan die specifieke uitkomst.

Resultaten en bevindingen

De onderzoekers hebben Veritas geëvalueerd op elf open-source Java-projecten, waarbij in totaal 51.382 object-branch uitkomsten werden geanalyseerd. De resultaten, gepubliceerd via , tonen aan dat 18% van de gedekte uitkomsten gewijzigd kan worden zonder dat enige test faalt. Dit onthult zwakheden die door standaard coverage-rapporten verborgen blijven.

Van de overlevende 'mutanten' (wijzigingen die niet werden gedetecteerd) bleek ongeveer de helft nooit geactiveerd te worden door de testinputs. De rest werd wel geactiveerd, maar bleef ongedetecteerd door de tests.

Vergelijking met slicing-methoden

Veritas presteert aanzienlijk anders dan de traditionele slicing-gebaseerde methoden. De tool identificeerde 4.763 gevallen waarin tests een wijziging wel detecteerden, terwijl slicing dit niet als een succesvolle controle zou markeren. Omgekeerd bleek dat 19% van de gevallen die door slicing als 'gecontroleerd' werden beschouwd, in werkelijkheid geen enkele fout produceerden wanneer ze werden gewijzigd.

Bovendien stelden de onderzoekers vast dat locaties in de code die worden beheerst door zwak gecontroleerde uitkomsten, 12,4 tot 54,7 procentpunten vaker een ongedetecteerde onafhankelijke fout bevatten dan locaties die wel effectief worden gecontroleerd.

De conclusie van de auteurs in het artikel op is dat het direct testen van uitkomsten bruikbaar bewijs levert over de effectiviteit van test-oracles, wat verder gaat dan wat enkel structurele coverage kan bieden.

Geraadpleegde bronnen
Waardering
0
Stem mee op dit artikel
Discussie
Nog geen reacties. Wees de eerste!