Si vous pensez que TDD signifie que les tests viennent avant tout code ou tout design, c'est en grande partie impossible. Pour les algorithmes complexes, vous avez besoin de résultats. Et dans le cas de la compression, les résultats sont difficiles à produire à la main. Pas impossible, mais difficile.
En outre, la compression nécessite un algorithme très performant. Le simple fait de passer un test n'est pas assez bon. Beaucoup d'algorithmes de basse performance peuvent passer le test de "correction" de base.
Pour aller au-delà de la correction, vous avez besoin de preuves que votre algorithme est optimal. Cela ne peut être développé qu'en dehors de la vue du monde de test. Vous avez besoin d'une analyse de complexité en utilisant O (quelque chose), ce qui n'est pas le résultat d'un test; il ne peut pas non plus être défini comme les résultats d'un test.
Si, d'un autre côté, vous pensez que "testabilité" vient avant la plupart du code, alors c'est facile.
Concevez votre algorithme. Ecrivez une preuve que c'est optimal.
Ecrivez du code qui expose des parties critiques de votre algorithme en tant que modules testables.
Dans certains cas, écrivez du code pour produire des résultats de test pour l'algorithme global. Cela peut être sous-optimal, le code de force brute qui produit la bonne réponse à travers des algorithmes vraiment évidents, mais lents.
Assembler un unittest pour montrer que votre implémentation produit les résultats de test attendus.
Assembler un papier technique pour montrer qu'il est également optimal.
Ce n'est pas le test d'abord. Mais c'est piloté par les tests.
Et s'il vous plaît, pouvons-nous dès maintenant * toujours * voir comme « The Notorious Stackoverflow # 38 » ou TNS # 38 ;-) –