Obtenons les priorités en premier ...
Dans votre rôle de client, votre principale préoccupation n'est pas les tests unitaires
Si vous utilisez des fournisseurs qui produisent des logiciels pour vous, vous ne devriez vraiment pas vous inquiéter s'ils utilisent une méthodologie ou une autre. Votre enjeu est d'acquérir une sorte de solution qui vous aidera à atteindre vos objectifs. La seule chose à laquelle vous devriez vous soucier est de savoir si cette solution est acceptable ou non. C'est pourquoi nous avons des tests d'acceptation car il est de votre responsabilité de vous assurer d'obtenir ce que vous voulez. C'est au moment crucial de l'acceptation du client que l'argent sera transféré des poches de votre entreprise dans la poche du fournisseur.
Vous pouvez exiger des tests unitaires comme exigence de livraison, mais il y a plusieurs problèmes hérités avec eux, le plus grave est qu'il n'y a aucun moyen sûr de déterminer les métriques à l'avance:
- Quelle est la quantité acceptable de tests unitaires?
Doit-il y avoir 10 tests? Que diriez-vous de 100 tests? Que diriez-vous de 1000 tests? En fait, il est assez difficile de déterminer au début le nombre de tests dont vous aurez besoin. Le nombre réel est indéterminable vraiment ... comme le problème d'arrêt ... mais nous ne résolvons pas ce problème.
Vous voulez juste un logiciel qui a des tests unitaires afin que vous puissiez continuer le développement. Les tests unitaires ne disent pas encore ce que vous avez cassé, mais ils sont parfaitement adaptés pour vous dire quand le code a un bogue de régression.
- Qu'est-ce qu'un niveau de couverture de code acceptable?
"100%, bien sûr!" vous pensez. Malheureusement, cette métrique est trompeuse; même si vous disposiez d'une couverture de code à 100%, êtes-vous vraiment sûr que les choses fonctionnent comme prévu? Il est possible d'avoir une couverture à 100% mais ne pas être fait.
Ce que vous devez vraiment faire, c'est des tests exploratoires, c'est-à-dire trouver quelqu'un qui est vraiment bon pour casser des trucs et les laisser faire les tests. Pour trouver les bugs auxquels aucun développeur n'a même pensé.
De plus, 100% est parfois inaccessible avec des tests unitaires purs si vous avez des hacks de performances nécessaires et utilisez des modèles de conception difficiles à tester (recherchez "singleton" et "tdd" dans votre moteur de recherche préféré et vous trouverez quelques exemples).
Vous voulez que le logiciel livré fonctionne et le document de spécification est votre seule garantie.
Vous aurez besoin d' un niveau de test plus élevé
Votre document de spécification doit être vérifié d'une manière ou d'une autre. Chaque point doit être passé avec vos fournisseurs ayant des objectifs clairs et des critères d'acceptation. Une organisation QA qui fonctionne bien (ou un testeur génial si vous avez un budget et une portée limitée) fournirait les cas de test pour vérifier ces critères d'acceptation. Vous avez également besoin de quelqu'un pour vérifier ces critères d'acceptation.
Il existe plusieurs façons de vérifier vos objectifs, et si quelqu'un me dit que vous ne pouvez pas définir d'objectifs raisonnables de qualité, de performance et d'efficacité, je les frapperai dans la tête avec des livres volumineux et lourds sur les tests d'exploration, de performance et d'utilisabilité respectivement. Il peut être facile de surpasser les objectifs, mais les connaissances et la communication vous aideront à définir des objectifs réalistes.
Je ne suis pas avocat mais la plupart des contrats de projet (qui sont essentiellement la mère de toutes les spécifications du projet) que j'ai lus ont généralement un critère de rapport de défauts qui stipule le nombre de bogues jugés acceptables. Les bogues sont généralement déterminés en fonction de la gravité, les bogues qui se révèlent par QA ont une faible tolérance tandis que les imperfections mineures ont une tolérance élevée. Dans les projets réels, il est difficile d'exiger que le logiciel ait 0 défaut. Les délais mettent généralement un terme à cette pratique. C'est dans ces situations que vous devez commencer à négocier la portée.
La plupart des logiciels fournis que j'ai vus ne sont généralement pas livrés avec des tests unitaires. Vous pourriez faire valoir que les fournisseurs devraient être suffisamment professionnels pour le faire, mais la principale raison pour laquelle vous voulez que les tests unitaires vous soient livrés est de vous assurer que vous n'obtenez pas de bogues de régression et également d'activer le refactoring. Dans la vie réelle avec des projets dans des délais serrés, le fournisseur et le client réduiront la portée et les tests unitaires sortiront généralement de la fenêtre et seront supprimés de la liste des livrables requis.
C'est un peu triste que les logiciels open source de haut niveau soient livrés avec des tests unitaires, mais un développeur de logiciels professionnel ne peut pas, non?
Alors, quand, en tant que client, puis-je me soucier des tests unitaires?
Je dirais que la seule fois où vous vous soucieriez vraiment des tests unitaires est si le logiciel livrable est un composant autosuffisant qui n'est pas exécuté en tant que programme autonome, pour lequel le test le plus grossier que vous pouvez faire est un test unitaire . Les bibliothèques de classes seraient un type de produit pouvant être fourni avec des tests unitaires.