Il y en a plusieurs, mais les avantages dépassent de loin les inconvénients.
Il y a une courbe d'apprentissage abrupte.
De nombreux développeurs semblent s’attendre à ce qu’ils puissent être efficaces avec une programmation d’essai d’abord dès le premier jour. Malheureusement, il faut beaucoup de temps pour acquérir de l'expérience et programmer à la même vitesse qu'auparavant. Vous ne pouvez pas vous en sortir.
Pour être plus précis, il est très facile de se tromper. Vous pouvez très facilement (avec de très bonnes intentions) finir par écrire toute une série de tests difficiles à maintenir ou à tester. Il est difficile de donner des exemples ici - ce genre de problèmes demande simplement de l'expérience à résoudre. Vous devez avoir une bonne idée de la séparation des préoccupations et de la conception pour la testabilité. Mon meilleur conseil ici serait de faire de la programmation en binôme avec quelqu'un qui connaît très bien le TDD.
Vous faites plus de codage à l'avant.
Test-first signifie que vous ne pouvez pas ignorer les tests (ce qui est bien) et que vous finirez par écrire plus de code tout de suite. Cela signifie plus de temps. Encore une fois, vous ne pouvez pas vous en sortir. Vous êtes récompensé par un code plus facile à maintenir, à étendre et généralement moins de bugs, mais cela prend du temps.
Peut être difficile à vendre aux gestionnaires.
Les gestionnaires de logiciels ne s’occupent généralement que des délais Si vous passez à la programmation test-first et que vous mettez soudainement deux semaines à compléter une fonctionnalité au lieu d'une, cela ne leur plaira pas. C'est certainement une bataille qui vaut la peine d'être menée et de nombreux gestionnaires sont suffisamment éclairés pour l'obtenir, mais cela peut être difficile.
Peut être difficile à vendre aux autres développeurs.
Étant donné que la courbe d'apprentissage est abrupte, tous les développeurs n'aiment pas la programmation test-first. En fait, je suppose que la plupart des développeurs ne l'aiment pas au début. Vous pouvez faire des choses comme la programmation en paire pour les aider à devenir rapides, mais cela peut être difficile à vendre.
En fin de compte, les avantages l'emportent sur les inconvénients, mais cela n'aide pas si vous ignorez simplement les inconvénients. En sachant dès le départ avec quoi vous traitez, vous aurez la possibilité de surmonter certains, voire la totalité des inconvénients.