2009-08-18 7 views
4

Actuellement, un de nos systèmes de production est géré par plus de 3000 programmes écrits entre 1986 et maintenant. La base de code est écrite dans un langage non standard, qui manque malheureusement d'outils de test modernes. Dans le but d'améliorer la qualité de notre code à l'avenir, j'ai travaillé à l'intégration de processus et à la création d'outils qui amélioreront le développement et les tests. J'ai juste complètement un outil de couverture de ligne afin que nous puissions aider à identifier le code mort + le code non testé pendant le développement.Ecriture d'un outil de couverture de chemin

Maintenant, je voudrais commencer à travailler sur l'ajout de couverture de chemin à l'outil.

Comment dois-je procéder?

étant donné que:

1) L'outil de couverture de ligne agit comme un pré-processeur qui injecte du code
2) Je possède déjà la capacité de recueillir les statistiques I ensemble dans ledit code. Quelles données devrais-je enregistrer pendant l'exécution du programme et comment l'interpréter?

Comment puis-je représenter les résultats via HTML? J'ai déjà lu la question How to get started “writing” a code coverage tool?, qui était sur Java, mais cela n'a pas aidé (y compris le document "Couverture de branche pour les langues arbitraires Made Easy").

Merci d'avance pour toute indication donnée!

+1

Avez-vous déjà vu le livre "Travailler efficacement avec le code existant"? –

+1

Je suis curieux de savoir pourquoi vous voulez une couverture de chemin. J'ai travaillé sur l'avionique certifiée à la satisfaction de la FAA (DO-178b niveau B et C seulement, jamais niveau A), et nous avons seulement fait la couverture des déclarations. La couverture de la déclaration de l'OMI a un faible avantage, si vous êtes déjà engagé dans des tests unitaires de haute qualité (ex: un bon ingénieur écrira de bons tests (même sans outil de couverture), pas un mauvais ingénieur (même si la couverture l'outil leur indique que leur test est déficient)). Il y a bien sûr des moments où l'outil de couverture vous invite à écrire un test dont vous ne saviez pas que vous aviez besoin d'écrire, mais cela semblait rare. – KeyserSoze

+0

@Robert. Pas jusqu'à maintenant. @keysersoze. La couverture des déclarations ne suffit pas à la réduire. Nous avons eu de nombreux exemples d'échec de code dans la production en raison d'une combinaison spécifique et non testée de conditions. De plus, la nature de la base de code actuelle empêche le test unitaire automatisé. Le test de la trajectoire servirait non seulement d'outil pour découvrir des choses que nous n'avions pas envisagées de tester, mais aussi de vérification que les tests manuels ont bien été effectués. Ai-je mentionné que c'est un code legecy avec presque aucune documentation, y compris ce que nous devrions tester? –

Répondre

3

Pour faire une couverture de chemin, vous devez obtenir le flux de contrôle de programme en quelque sorte. Une méthode évidente consiste à construire un graphique de flux de contrôle réel, puis à parcourir des segments pour sélectionner des "fragments de chemin" (par exemple, des chemins de base) à utiliser dans votre analyse de couverture de chemin. (Vous pouvez essayer de le faire par chaîne en piratant le code source, mais vous échouerez probablement: l'analyse et l'analyse de flux est trop complexe).

Voir What's the point of basis path coverage? pour une bonne discussion de stackoverflow sur les chemins de base.

Pour implémenter l'outil de couverture de chemin requis, vous devez probablement analyser complètement le langage hérité complet. Pour 3000 programmes et une forte exigence pour les tests, l'utilisation d'un analyseur de force industrielle et d'une infrastructure pour le faire aurait du sens.

Notre DMS Software Reengineering Toolkit peut être utilisé pour construire non seulement l'analyseur, mais l'analyse de flux de contrôle et l'instrumentation nécessaire pour collecter des données de couverture de chemin. (La «couverture de branche pour les langages arbitraires» a fait ce point si tout ce que vous vouliez faire était de collecter des données de couverture de branche, mais DMS ne se limite pas à l'analyse). DMS prend également en charge la création de graphiques de contrôle (et de flux de données) si vous en avez besoin, comme vous le faites apparemment dans ce cas; voir DMS constructed control flow graphs. DMS a été utilisé pour construire des analyseurs de contrôle et de flux de données pour C, Java et COBOL, et a été utilisé pour construire des analyseurs pour plus de 30 langauges. Il peut gérer votre langue héritée si vous êtes sérieux à ce sujet.

EDIT 31/10/2011: DMS peut maintenant calculer le flux de contrôle pour C++, ce serait donc une excellente base pour un outil de couverture de chemin C++.

3

La mesure de la couverture de chemin est un sujet difficile. Vous devez d'abord définir ce que vous voulez dire par un chemin en premier lieu. Une boucle est-elle exécutée trois fois sur un chemin différent d'une boucle exécutée quatre fois? Si oui, vous avez un nombre infini de chemins. Sinon, il y a des cas de test manqués même si tous les chemins sont couverts.

Il se peut que la meilleure étape suivante soit la couverture de branche: mesurer si chaque conditionnelle est exécutée à la fois vrai et faux. Ceci peut être accompli en enregistrant des séquences de numéros de ligne.

Questions connexes