2011-01-17 14 views
39

Mutation testing ist schon seit einer Weile draußen, und es scheint, dass es mindestens ein oder zwei kommerzielle Mutationstest-Frameworks für C/C++ gibt. Hast du sie benutzt? Was sind deine Erfahrungen? Gibt es Open-Source-Alternativen?Welche Mutationstest-Frameworks existieren für C/C++?

+2

Gute Frage, da ich nicht über Mutationstests wusste. Tolle Idee ^^ – neuro

+0

Siehe http://stackoverflow.com/questions/246495/what-mutation-testing-frameworks-exist – Raedwald

Antwort

8

Eine kurze Suche ergab:

Mit diesem gesagt, müssen Sie erkennen, dass Mutationstests nicht besonders nützlich sind (zumindest von einigen Sachen, die ich vorher gelesen habe). Es ist ein interessantes Werkzeug, wenn es um harte (metaphorisch gesprochen) Behauptungen geht und um sicherzustellen, dass die Datenanforderungen beachtet werden (wenn if and only if Situationen behandelt werden).

Meiner Meinung nach gibt es viel mehr etablierte Möglichkeiten, die Robustheit von Code zu analysieren.

+1

Was Parasoft (Versichern ++) nennt "Mutationstests" ist nicht viel wie das, was alle anderen Mutationstests nennt. Sie "revolutionierten" es bis zur Unkenntlichkeit. http://www.parasoft.com/jsp/products/article.jsp?articleId=291 –

+0

@Jason: es scheint wie eine interessante Einstellung, aber die Idee ist immer noch die gleiche .. nimm den Code, ändern Sie einige Operatoren (entweder machen sie "fehlerhaft" oder "gleichwertig"), und sehen, ob etwas funktioniert. Manchmal ist es nützlich, Unklarheiten im Code zu finden, aber um ganz ehrlich zu sein, könnten Sie Ihr eigenes Mutationstest-Tool schreiben (es ist nicht schwer) und etwas Geld sparen. –

+0

Dies ist das erste Ergebnis, das bei Google auftaucht, daher dachte ich, dass es immer noch relevant sein könnte, darauf hinzuweisen, dass der MILU-Link zu einem 404 führt. – Clearer

4

Beachten Sie, dass das Parasoft-Tool nur äquivalente Mutationen generiert. Dies spiegelt das Problem wider, das im Wikipedia-Artikel über Mutationstests beschrieben wird - es ist schwierig, zwischen äquivalenten und nicht-äquivalenten Mutationen zu unterscheiden, also entschieden sie sich, bei Äquivalenten zu bleiben.

Ich habe ein anderes interessantes Werkzeug ausprobiert, das automatisch Invarianten im instrumentierten C- und C++ - Code entdecken kann - es heißt "Daikon". Im Wesentlichen macht es dasselbe wie ein Werkzeug, das äquivalente Mutationen erzeugt, aber anstatt problematischen Code zu identifizieren, gibt es eine Reihe von Invarianten wie "A == B + 1". Ich denke, Invarianten sind nützlicher, denn wenn man sich die entdeckte Invariante ansieht, gibt man Gewissheit, dass der Code korrekt ist, wenn Invarianten sinnvoll sind, und dann Invarianten in Behauptungen umwandeln können, und das gibt mehr Sicherheit beim Ändern des Codes.

3

Ein straight forward Python-Skript für c-Programme mutiert unter:

https://github.com/parunbabu/mutate.py

der Autor sagt, dass es besser funktioniert, wenn die im Test befindlichen Code ist de-kommentiert und eingerückt.

und es ist auch frei und opensource ... ich denke, das ist, was Sie suchen.