Quels sont les frameworks de test de mutation pour C / C ++?

Les tests de mutation existent depuis un certain temps et il semble qu’il existe au moins un ou deux frameworks de tests de mutation commerciaux pour le C / C ++. Vous les avez utilisés? Quelles sont vos expériences? Existe-t-il des alternatives open source?

Une brève recherche a abouti à:

Cela étant dit, vous devez réaliser que les tests de mutation ne sont pas particulièrement utiles (du moins pour certaines choses que j’ai déjà lues). C’est un outil intéressant lorsqu’il est confronté à des affirmations difficiles (métaphoriquement parlant) et pour s’assurer que les exigences en matière de données sont respectées (lorsqu’il s’agit de situations if and only if ).

À mon avis, il existe des moyens beaucoup plus établis d’parsingr la robustesse du code.

Notez que l’outil de Parasoft ne génère que des mutations équivalentes. Cela fait écho au problème décrit dans l’article de Wikipedia sur les tests de mutation – il est difficile de faire la distinction entre les mutations équivalentes et non équivalentes. Ils ont donc décidé de restr avec l’équivalent.

J’ai essayé un autre outil intéressant qui peut automatiquement découvrir des invariants dans le code instrumenté en C et C ++ – il s’appelle “Daikon”. Essentiellement, il fait la même chose qu’un outil qui génère des mutations équivalentes, mais au lieu d’identifier un code problématique, il vous donne un ensemble d’invariants tels que “A == B + 1”. Je pense que les invariants sont plus utiles car lorsque vous regardez l’invariant découvert, cela vous donne l’assurance que votre code est correct s’il est invariant et que vous pouvez convertir les invariants en assertions, ce qui vous donne plus de confiance lorsque vous changez de code.

Un script python simple permettant de muter des programmes c est disponible sur:

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

L’auteur dit que cela fonctionne mieux si le code sous test est dé-commenté et mis en retrait.

et c’est aussi gratuit et opensource … Je pense que c’est ce que vous cherchez.