Administrateur PHPfrance |
13231 Messages
07 juil. 2011, 10:57
Donc, les tests unitaires, c'est comme les commentaires : moins il y en a, mieux je me porte

Mais qu'est-ce qu'il ne faut pas entendre ...
Dans un développement object, ton code se repose sur une couche métier généralement importante, qui contient toutes les règles ... métiers (ça ne s'invente pas ^^) de ton site.
Au final, les interfaces ne font que mettre en oeuvre cette couche métiers, et transformer les données brutes en affichage. Une méthode d'une couche métier est donc potentiellement utilisée à X endroits.
De plus, une couche métier bien développée est organisée, en plusieurs couche (héritage), dont chaque méthode a une signature et un fonctionnement propre.
Au final, le changement d'une pauvre petite méthode peut avoir des impacts en chaîne.
Le but du test unitaire est à la fois de tester automatiquement que ce pour quoi tu as codé une méthode est toujours assuré, et elle permet de la documenter (bah oui, les tests permettent de comprendre ce pourquoi une méthode a été développée).
Ainsi, quand tu modifies quelque chose, il suffit de relancer les tests unitaires pour savoir si tu as cassé quelque chose, sans passer à chaque fois sur l'intégralité de tes interfaces.
Maintenant, plusieurs choses à comprendre sur les tests : un code testé à 100% n'est pas un code dont les tests passent sur 100% des lignes (couverture de code), mais un code dont tout les cas d'utilisations sont testé. Et ça, c'est tout simplement impossible.
Quand on rédige des tests, on écrit les cas pour lesquels on a prévu une méthode. Au début, c'est du temps perdu (avant d'écrire les tests, tu as essayé ton code, donc tu sais qu'il marche), mais quand ton application dépasse le 10 classes et/ou les 2 mois de développements, toute petite modification est plus simple puisque tu ne commences pas par perdre 1h à savoir où est utilisée une méthode, pour quels cas de figure, en passant obligatoirement à côté de quelque chose.
De plus, le test unitaire aide le refactoring, puisque tu peux réécrire une méthode, la découper, il n'y a que les tests unitaire de CETTE méthode à réécrire, ceux du dessous DOIVENT continuer à fonctionner. Sinon, cela signifie que tu as cassé quelque chose.
Au final, les tests unitaires sont là pour
documenter et
tester les
cas d'utilisation de tes méthodes pour garantir une
non-regression (tu n'as pas cassé quelque chose qui marchait) d'un code.
C'est un coût plus important au début pour un gain à très court terme.
Maintenant, epommate2, par curiosité, j'aimerais savoir dans quel cadre tu développes, pour quels types d'applications, parce que plus je te lis, plus je suis effrayé par tes réponses, et le ton absolu que tu leur donnes

Ne pas mettre de commentaires, ou comment ne pas se rappeler ce qu'on a fait il y a plus d'un mois (si on travaille seul) ou ne jamais comprendre ce qu'a fait un autre (si on travaille en équipe).
Je te concède qu'un code bien écrit se lit, mais il y a TOUJOURS un moment où le code est nécessaire (pourquoi tel test, pourquoi telle boucle) et les phpdocs devraient devenir une habitude.