2008-09-07 18 views
0

Existe-t-il un outil qui me permette d'effectuer une recherche de texte libre sur le code d'un système, mais uniquement sur le code réellement exécuté lors d'une invocation particulière? Pour donner un peu de contexte, lorsque je découvre un nouveau système, je cherche souvent à savoir d'où vient une valeur particulière, mais la recherche dans toute la base de code génère beaucoup plus de correspondances que je peux raisonnablement estimer. individuellement.Recherche de texte libre intégrée à la couverture de code

Pour ce que ça vaut, je l'ai voulu en Perl et Java à un moment ou un autre, mais j'aimerais savoir si toutes les langues ont un système supportant cette fonctionnalité.

Répondre

1

Vous pouvez généralement déformer le bras d'un outil de couverture de code et obtenir un rapport indiquant les chemins qui ont été exécutés pendant un cycle donné. Ce rapport devrait montrer le code lui-même, avec les premières colonnes balisées en fonction de la notation particulière de l'outil de couverture pour savoir si un chemin donné a été exécuté. Vous pourriez être capable de l'utiliser directement, ou vous pourriez avoir à le pré-traiter et soit enlever le code qui n'a pas été exécuté, ou ajouter une nouvelle notation sur chaque ligne qui indique si elle a été exécutée (la plupart des outils seront seulement informations sur le chemin d'exposition aux points de contrôle):

donc d'un outil de couverture que vous pourriez obtenir un rapport comme celui-ci:

T- if(sometest) 
    { 
x  somecode; 
    } 
    else 
    { 
-  someother_code; 
    } 

la T- notation indique que l'instruction if ne jamais évalué à vrai, et ainsi seulement la première partie du code exécutée. La notation plus récente 'x' indique que cette ligne a été exécutée.

Vous devriez être capable de former une regex qui ne correspond que lorsque la première colonne contient un T, F ou x afin que vous puissiez capturer toutes les instructions de contrôle exécutées et les lignes exécutées. Parfois, vous n'obtiendrez des informations de couverture qu'à chaque point de contrôle, ce qui nécessite ensuite d'analyser le fichier C et de marquer les lignes d'exécution vous-même. Pas aussi facile, mais pas impossible non plus.

Pourtant, cela ressemble à une question intéressante où la solution est probablement plus de travail que ça vaut le coup ...

-Adam