Quelles techniques avez-vous utilisées avec succès pour améliorer la couverture de code?

StackOverflow https://stackoverflow.com/questions/170751

  •  05-07-2019
  •  | 
  •  

Question

J'obtiens régulièrement une couverture de 100% des bibliothèques utilisant TDD, mais pas toujours, et il semble toujours y avoir des parties d'applications laissées qui n'ont pas été testées ni découvertes.
Ensuite, il existe des cas où vous commencez avec du code hérité qui comporte très peu de tests et une couverture très réduite.

Indiquez quelle est votre situation et ce qui a fonctionné et qui a au moins amélioré la couverture .
Je suppose que vous mesurez la couverture lors des tests unitaires, mais si vous utilisez d'autres techniques, dites-le.

Était-ce utile?

La solution

Supprimer le code.

Ce n’est pas sournois, mais réellement sérieux. Chaque fois que je voyais la plus petite quantité de duplication de code ou même de code que je ne pouvais pas obtenir à exécuter, je le supprimais. Cette couverture accrue et facilité de maintenance accrue.

Je dois noter que cela s’applique davantage à l’augmentation de la couverture des anciens codes base par rapport aux nouveaux codes.

Autres conseils

Je suppose que vous avez lu les code couvert par rapport au code testé " , non?

Comme indiqué dans cette question,

  

Même avec une couverture de bloc de 100% + une couverture d'arc de 100% + un code de ligne droite sans erreur pour au moins un chemin, il restera des données d'entrée qui exécuteront les chemins / boucles de manière à présenter plus de bugs.

Maintenant, j'utilise eclemma , basé sur EMMA et cet outil de couverture de code explique pourquoi 100% de code n’est pas toujours possible: en raison de lignes partiellement couvertes en raison de:

  • branches implicites sur la même ligne.
  • Code de constructeur partagé.
  • Branches implicites dues aux blocs finaux.
  • Branches implicites dues à un Class.forName () masqué.

Ces quatre cas pourraient donc constituer de bons candidats pour le refactoring conduisant à une meilleure couverture de code.

Maintenant, je suis d’accord avec la réponse de Frank Krueger. Certains codes non couverts peuvent également indiquer une refactorisation à effectuer, y compris un code à supprimer;)

Les deux choses qui ont eu le plus d'impact sur les projets sur lesquels j'ai travaillé sont:

  1. Périodiquement "en rappelant" L’équipe de développement doit réellement mettre en œuvre des tests unitaires et examiner comment rédiger des tests efficaces.
  2. Générer un rapport sur la couverture globale des tests et le faire circuler parmi les responsables du développement.

Nous utilisons Perl. Devel :: Cover a été très utile pour nous. Affiche la couverture par relevé, la couverture des succursales et la couverture conditionnelle lors des tests unitaires, ainsi que des informations telles que la couverture du POD. Nous utilisons une sortie HTML avec des greens faciles à reconnaître pour "100%", jaune et rouge pour des niveaux de couverture plus bas.

MODIFIER: pour développer un peu les choses:

  • Si la couverture conditionnelle n'est pas complète, examinez les conditions d'interdépendance. Si c'est là, refactor. Si ce n’est pas le cas, vous devriez pouvoir étendre vos tests à toutes les conditions.
  • Si la couverture conditionnelle et la branche semblent complètes, mais que la couverture d'un relevé ne l'est pas, vous avez soit mal écrit les conditions (par exemple, vous revenez toujours plus tôt d'un sous-marin quand vous ne le vouliez pas) ou vous avez du code supplémentaire qui peut être retiré en toute sécurité.
Le

le test FIT a amélioré la couverture de notre code. Cela a été formidable parce que c'est une tactique totalement différente.

Contexte: nous combinons l'ancien code et le nouveau code. Nous essayons autant que possible de tester les nouveaux éléments et les tests d'intégration, mais comme nous migrons vers Hibernate / Postgres et que nous nous éloignons d'une OODB, il n'y a pas vraiment d'intérêt à tester le code hérité.

Pour ceux qui ne le savent pas, FIT est un moyen de tester les logiciels du point de vue de l'utilisateur. Pour l'essentiel, vous pouvez spécifier le comportement souhaité dans les tableaux HTML: les tableaux spécifient les actions contre le logiciel et les résultats souhaités. Notre équipe a écrit le «code de la colle» (aka test FIT) qui mappe les actions aux appels par rapport au code. Notez que ces tests fonctionnent dans une vue "depuis l'espace" par rapport aux tests unitaires.

En utilisant cette approche, nous avons augmenté notre couverture en codes de plusieurs points de pourcentage. Un avantage supplémentaire est que ces tests relieront les versions: ils testeront le code hérité, mais ensuite, le nouveau code. c'est-à-dire qu'ils servent de tests de régression, dans un sens.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top