Il n'y a vraiment aucun moyen de s'assurer que vos cas de test sont corrects, sauf en se concentrant vraiment bien lors de leur création - comprendre les exigences, comprendre le code et s'assurer qu'ils sont d'accord. Le point d'avoir une suite de tests est que vous ne devez le faire qu'une seule fois, et à partir de là, vous pouvez simplement réexécuter les tests et vérifier qu'ils passent, alors que sans une suite de tests, vous devrez vous concentrer très dur tout le temps , c'est-à-dire chaque fois que vous faites quoi que ce soit à votre base de code. Mais le problème fondamental de devoir vous assurer que vous avez fait la bonne chose en premier lieu demeure - les ordinateurs ne sont tout simplement pas assez intelligents pour nous soulager de cette tâche.
Par conséquent, (1) si votre suite de tests est incomplète, il n'y a pas de moyen simple de voir cela. L'analyse de la couverture de code peut prouver que certaines lignes de code ne sont jamais exécutées, c'est-à-dire que la suite est déficiente d'une manière ou d'une autre, mais pas la gravité de cette déficience, et elle ne peut jamais prouver qu'elle est suffisante. Même avec une couverture de code à 100%, vous n'avez aucune garantie que tous les États concernésdu système sont exercés, et une couverture d'état complète est impossible pour tout système réaliste en raison du nombre combinatoire d'états qui pourraient exister. Une bonne technique pour vous assurer que votre cas de test est au moins correct pour vérifier la chose que vous voulez vérifier consiste à écrire le test, à vérifier qu'il échoue effectivement, à écrire / modifier le code, puis à vérifier qu'il passe maintenant. D'où l'engouement pour le développement piloté par les tests: il vous permet d'être certain qu'un test individuel fait la bonne chose, et si vous créez l'intégralité de votre base de code de cette manière, vous pouvez obtenir un niveau de confiance similaire même dans un grand système.
(2) Une suite de tests devient normalement insuffisante chaque fois que les exigences changent - vous n'avez pas à deviner. Si le client souhaite modifier un comportement particulier et que vos tests réussissent avant et après le changement, il est clair qu'il n'exerçait pas cette relation d'entrée / sortie particulière.
En ce qui concerne les systèmes hérités qui n'ont pas de couverture de test, ou lorsque vous ne savez pas quelle est la couverture, il n'y a aucune preuve formelle, mais (avis parental: une opinion personnelle suit!) Parlant d'expérience, il est extrêmement probable que les tests ne sont pas adéquates. Lorsque les tests sont considérés comme une activité après-coup, facultative, d'amélioration de la qualité mais pas vraiment nécessaire, ils ont tendance à être incomplets et non systématiques, car l'incitation à s'assurer que les tests suivent la base de code n'est tout simplement pas pas là.