655 votes

Ce qui est raisonnable de couverture de code % pour les tests unitaires (et pourquoi)?

Si vous deviez mandat d'un pourcentage minimum de couverture de code par les tests unitaires, peut-être même comme une exigence pour s'être engagé à un référentiel, quel serait-il?

Veuillez expliquer comment vous êtes arrivé à votre réponse (car si tout ce que vous avez a choisir un nombre, puis j'ai pu le faire, par moi-même ;)

1506voto

Jon Limjap Points 46429

Cette prose par Alberto Savoia répond précisément à cette question (dans une bien divertissant façon!):

http://www.artima.com/forums/flat.jsp?forum=106&thread=204677

Testivus Sur La Couverture De Test

Tôt un matin, un programmeur demandé le grand maître:

"Je suis prêt à écrire des tests unitaires. Ce que la couverture de code dois-je viser pour?"

Le grand maître a répondu:

"Ne vous inquiétez pas au sujet de la couverture, il suffit d'écrire quelques bons tests."

Le programmeur sourit, inclina la tête, et de gauche.

...

Plus tard dans la journée, un second programmeur posé la même question.

Le grand maître a souligné un pot de d'ébullition de l'eau et dit:

"Combien de grains de riz que j'ai mis dans ce pot?"

Le programmeur, l'air perplexe, a répondu:

"Comment puis-je vous dire? Cela dépend de combien de personnes vous avez besoin de d'alimentation, la faim, ils sont, ce que les autres la nourriture que vous servez, combien de riz vous avez à disposition, et ainsi de suite."

"Exactement," dit le grand maître.

Le second programmeur sourit, inclina la tête, et à gauche.

...

Vers la fin de la journée, un troisième programmeur est venu et a demandé la même chose question à propos de la couverture de code.

"Quatre-vingts pour cent et pas moins!" A répondu à la maîtrise d'une voix sévère, martelant du poing sur la table.

La troisième programmeur sourit, inclina la tête, et à gauche.

...

Après cette dernière réponse, un jeune apprenti approché de la grande maître:

"Grand maître, aujourd'hui je vous ai surpris répondre à la même question à propos de la couverture de code avec trois différents réponses. Pourquoi?"

Le grand maître s'est levé de son président:

"Venez prendre un bol de thé avec moi et parlons-en."

Après, ils ont rempli leurs tasses avec le fumage à chaud de thé vert, de la grande maître a commencé à répondre:

"Le premier programmeur de l'histoire est nouvelle et juste de commencer avec les essais. En ce moment il a beaucoup de code et pas de les tests. Il a un long chemin à parcourir; en se concentrant sur la couverture de code en ce moment serait déprimant et tout à fait inutile. Il est mieux de juste à s'habituer à l'écriture et l'exécution des tests. Il peut vous soucier de la couverture plus tard."

"Le second programmeur, d'autre part, est tout à fait une expérience à la fois lors de la programmation et les tests. Quand J' répondu en lui demandant combien de grains de riz que je doit mettre dans un pot, j' a aidée à réaliser que le montant de tests nécessaires dépend d'un certain nombre de facteurs, et elle sait que les facteurs mieux que moi – c'est sa code, après tout. Il n'est pas seul, simple, répondre, et elle est assez intelligente pour faire face à la vérité et à travailler avec ".

"Je vois," dit le jeune apprenti, "mais si il n'est pas simple réponse, alors, pourquoi avez-vous répondre à la troisième programmeur " quatre-vingts pour cent et pas moins"?"

Le grand maître de rire si dur et fort de son ventre, la preuve qu'il bu plus que juste de thé vert, flop en haut et en bas.

"La troisième programmeur ne veut que des réponses simples – même quand il y a pas de réponses simples ... et puis ne pas suivre de toute façon."

Le jeune apprenti et le grisonnant grand maître fini de boire leur thé dans le silence contemplatif.

Mise à jour

Le point de l'ensemble de cette anecdote, c'est que vous devriez essayer et ne pas se concentrer sur le taux de couverture en soi, ou essayer de trouver un nombre arbitraire, mais plutôt se concentrer sur d'avoir autant de la logique et de la fonctionnalité testée qu'il est humainement possible.

Il est tout à fait raisonnable d'avoir un, disons, 50% de taux de couverture, si seulement parce que seulement 50% de ce code contient des logiques qui peuvent être testés, et les autres 50% se trouve être simple Otd ou des choses qui sont traitées par un cadre (vous n'avez pas besoin de tester les fonctionnalités de votre cadre).

89voto

Gishu Points 59012

La Couverture de Code est un trompeur métrique si une couverture de 100% est votre objectif (au lieu de 100% le test de toutes les fonctionnalités).

  • Vous pourriez obtenir un 100% en frappant de toutes les lignes en une fois. Cependant, vous pourrait encore manquer de tester une séquence particulière (chemin logique), dans laquelle ces lignes sont touchées.
  • Vous ne pourriez pas obtenir un 100%, mais encore testé toutes vos 80%/freq code utilisé-chemins. Les tests qui testent tous les deux ExceptionTypeX "ou similaire défensive de la programmation de la garde vous avez mis en est un "gentil", pas un "must have"

Alors faites confiance à vous-même ou vos développeurs pour être complet et couvrir chaque chemin par le biais de leur code. Être pragmatique et de ne pas chasser la magie de couverture de 100%. Si vous TDD votre code, vous devriez obtenir un 90%+ couverture comme un bonus. L'utilisation de couverture de code pour mettre en évidence les morceaux de code que vous avez manqué (il ne devrait pas se produire si vous TDD mais.. depuis que vous écrivez le code pour faire un test à passer. Le code ne peut exister sans son partenaire de test. )

65voto

taoufik Points 2784

La couverture de Code est grande, mais la fonctionnalité la couverture est encore mieux. Je ne crois pas que la couverture de chaque ligne que j'écris. Mais je crois que dans l'écriture de l'essai de 100% de la couverture de toutes les fonctionnalités que je veux offrir (même pour plus de fonctionnalités sympas je suis venu avec moi-même et qui n'ont pas été discutées au cours des réunions).

Je ne m'inquiète pas si j'aurais le code qui n'est pas couvert dans les tests, mais je ne soins si je refactoriser mon code pour avoir un comportement différent. Par conséquent, 100% des fonctionnalités de la couverture est mon seul objectif.

20voto

Jon Limjap Points 46429

J'aurais une autre anectode sur la couverture de test que j'aimerais partager.

Nous avons un grand projet dans lequel, sur twitter, j'ai constaté que, avec 700 tests unitaires, nous n'avons que 20% de couverture de code.

Scott, Hanselman répondit par des paroles de sagesse:

Est-ce le DROIT de 20%? Est-ce la 20% que représente le code de vos utilisateurs a frappé le plus? Vous pouvez ajouter des 50 plus tests et d'en ajouter 2%.

De nouveau, il remonte à mon Testivus sur la Couverture de Code de Réponse. Combien de riz devrait vous mettre dans le pot? Il dépend.

4voto

stephbu Points 4440

85% serait un bon point de départ pour l'enregistrement critères.

J'aurais probablement choisi une variété de barres supérieures pour l'expédition des critères en fonction de la criticité de la sous-systèmes/composants testés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X