45 votes

Je n'écris pas de tests. Suis-je stupide ?

J'ai lu un peu sur les tests unitaires et le TDD, et je n'ai jamais sérieusement envisagé d'écrire des tests de façon aussi précise. Il est vrai que je ne travaille pas sur des projets qui sont ridiculement énormes. Si je ne construis que de petites applications, suis-je stupide de ne pas écrire de tests ?

Modifier : Pour clarifier, quand je dis "petites applications", je veux dire des applications qui ne vont pas contrôler la vie d'une personne et/ou ses biens. Je construis généralement des choses qui sont censées faciliter la vie des gens et les rendre plus efficaces.

70voto

Carl Manaster Points 23696

Essayez-le et découvrez-le. Combien de temps passez-vous aujourd'hui, avec vos petites applications, à déboguer ? Combien de bogues sont transmis aux utilisateurs ? Quelle est la qualité de votre conception ? En êtes-vous satisfait ? Les autres développeurs peuvent-ils travailler dessus, le comprendre ?

Essayez TDD, et voyez comment cela fonctionne pour vous. Si elle vous aide à trouver des réponses plus heureuses aux questions ci-dessus, alors continuez.

Vous n'êtes pas stupide si vous ne faites pas de TDD - mais vous êtes peut-être un peu têtu si vous ne l'essayez même pas.

30voto

Richard Clayton Points 2245

Je sais que la méthodologie TDD a fait l'objet d'un grand battage médiatique ces dernières années, et je comprends le scepticisme que vous pouvez avoir à l'égard des projets logiciels qui font l'objet d'une grande attention. Cependant, je peux vous dire par expérience que le TDD n'est pas qu'une mode. Avant les tests unitaires, j'ai développé de nombreux logiciels que je considérais comme "solides comme le roc" (pas de bogues, excellentes performances, etc.). J'ai entendu parler des tests unitaires et j'ai décidé de les essayer sur un "petit projet", d'autant plus que leur mise en œuvre ne prendrait pas beaucoup de temps.

À ma grande surprise, j'ai rapidement compris l'intérêt des tests. Des fonctions que je croyais parfaites à 100 % produisaient des résultats étranges. La modification d'un composant pouvait faire échouer le test unitaire d'un autre. C'était intéressant parce que je me suis rendu compte que mon code ne fonctionnait que lorsque j'entrais ce que j'attendais (en tant que développeur) d'un utilisateur, et non ce qu'il pourrait réellement faire dans la version de production de l'application.

Cette surprise m'a conduit à un certain nombre de conclusions sur la TDD (en dehors des avantages habituels) :

  • Le TDD vous permet de tester chaque composant à n'importe quel stade de l'application (vous pouvez configurer l'environnement pour chaque test). Cela vous permet de vous assurer que la fonctionnalité d'un composant reste uniforme dans toute l'application.
  • Le TDD encourage généralement une bonne conception. Il est généralement impossible de tester les unités individuelles d'une application sans "décomposer" le système. La décomposition de l'application en parties testables (en particulier lorsque vous utilisez le modèle d'inversion de contrôle) oblige le développeur à écrire un meilleur code.
  • Le TDD renforce la confiance du développeur et de l'utilisateur final dans un système. Feriez-vous confiance à un système qui n'est pas testable ? Ou à un système qui a été testé en profondeur ?

Le TDD présente de nombreux autres avantages. Il y a aussi des inconvénients (temps de mise en œuvre, mise en œuvre incorrecte des tests). Ce que je peux dire, c'est que la pratique du TDD vous aidera généralement à améliorer vos compétences en matière de développement.

Enfin, je sais que vous avez mentionné que vos projets ont tendance à être petits, alors ma question est la suivante : pourquoi ne pas tester ? La mise en œuvre ne sera pas si longue. Si vous développez en .NET et en Java, les principaux IDE disposent de fonctions permettant de rationaliser le processus de test. Je suis également prêt à parier que d'autres langages disposent de fonctionnalités similaires dans leurs IDE.

20voto

Du point de vue du programmeur, le grand avantage des tests n'est pas tant de prouver que votre application fonctionne (en fait, les tests unitaires ne le font pas vraiment), mais de vous permettre d'apporter des changements radicaux à l'application. Avec les tests, vous pouvez changer tout et n'importe quoi et déterminer que le code fait la même chose avant et après le changement.

17voto

hughdbrown Points 15770

D'après mon expérience, les tests sont la documentation. Si vous devez expliquer comment quelque chose fonctionne, vous indiquez aux développeurs les tests. Les commentaires n'ont généralement pas la même valeur que les tests.

9voto

tvanfosson Points 268301

Mon opinion personnelle est que vous sacrifiez la qualité et à long terme l'efficacité en n'écrivant pas de tests. Je ne suis pas sûr que cela puisse être qualifié de stupidité. En n'écrivant pas de tests pour votre code, vous devez compter sur d'autres moyens pour assurer un fonctionnement correct et ne pas casser votre code fonctionnel lorsque vous apportez des modifications. Les seuls moyens auxquels je peux penser pour compenser le fait de ne pas écrire de tests sont d'être incroyablement intelligent (et observateur) pour ne jamais faire d'erreurs (ou les attraper avant qu'elles ne deviennent des problèmes) ou de tout tester manuellement dans le débogueur. Je ne suis pas assez intelligent/observateur pour la première solution et je n'ai pas assez de temps pour la seconde, alors j'écris des tests.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X