Je travaille sur un comparateur de liste pour aider à trier une liste non ordonnée de résultats de recherche selon les exigences très spécifiques de notre client. Les exigences nécessitent un algorithme de pertinence classé avec les règles suivantes par ordre d'importance:
- Correspondance exacte sur le nom
- Tous les mots de la requête de recherche dans le nom ou un synonyme du résultat
- Quelques mots de la requête de recherche dans le nom ou le synonyme du résultat (% décroissant)
- Tous les mots de la requête de recherche dans la description
- Quelques mots de la requête de recherche dans la description (% décroissant)
- Dernière date de modification décroissante
Le choix de conception naturel pour ce comparateur semblait être un classement noté basé sur des puissances de 2. La somme des règles moins importantes ne peut jamais être plus qu'une correspondance positive sur une règle de plus grande importance. Ceci est réalisé par le score suivant:
- 32
- 16
- 8 (score bris d'égalité secondaire basé sur le% décroissant)
- 4
- 2 (score bris d'égalité secondaire basé sur le% décroissant)
- 1
Dans l'esprit TDD, j'ai décidé de commencer par mes tests unitaires en premier. Avoir un scénario de test pour chaque scénario unique serait au minimum de 63 scénarios de test uniques sans tenir compte des scénarios de test supplémentaires pour la logique de bris d'égalité secondaire sur les règles 3 et 5. Cela semble dominateur.
Les tests réels seront en fait moins importants. Sur la base des règles réelles elles-mêmes, certaines règles garantissent que les règles inférieures seront toujours vraies (par exemple, lorsque «Tous les mots de la requête de recherche apparaissent dans la description», la règle «Certains mots de la requête de recherche apparaissent dans la description» sera toujours vraie). Le niveau d'effort pour écrire chacun de ces cas de test en vaut-il la peine? S'agit-il du niveau de test généralement requis lorsque l'on parle de couverture de test à 100% en TDD? Sinon, quelle serait une stratégie de test alternative acceptable?