Des exemples concrets d'applications écrites avec TDD et une bonne couverture de test? [fermé]

17

Existe-t-il des applications open source développées à l'aide d'un développement piloté par les tests qui servent de modèles de fonctionnement des tests unitaires?

Je préfère voir des exemples en C # et .NET. (Notez que j'ai mentionné des applications, pas seulement des bibliothèques.)

Je suis un programmeur de niveau intermédiaire qui veut vraiment croire et pratiquer le TDD. L'application sur laquelle je travaille dans mon travail de jour est assez compliquée - environ 1 million de lignes de code - et j'aimerais introduire plus de tests unitaires. Nous avons quelques tests unitaires en place, mais mes efforts à TDD et à travailler sur du code qui est déjà en cours de test n'ont pas été encourageants.

Dans mon expérience certes limitée, TDD semble encourager une grande complexité au nom du découplage. Les bits de l'application qui sont difficiles à tester - et qui ont tendance à être critiques par coïncidence - sont poussés vers la périphérie, dans le domaine des tests d'intégration qui peuvent ou non être écrits. (Je pense aux suspects habituels ici, à l'accès au système de fichiers, à l'hydratation des objets d'une base de données, aux appels Web asynchrones, etc.)

Le code en cours de test a tendance à impliquer beaucoup de collaboration entre les objets, et peut-être une logique de flux simple, qui se produit tous en mémoire et qui pourrait sans doute être écrite d'une manière plus simple et plus compréhensible si tout n'avait pas à être totalement découplé pour tester.

Je comprends les techniques de moquerie des dépendances et autres, mais d'après mon expérience, une utilisation intensive de la moquerie conduit à des tests très fragiles. Si mon premier instinct en voyant un tas de tests devenir rouge est: "Génial, maintenant je dois réparer toutes les moqueries", alors mes tests sont devenus une traînée plutôt qu'un filet de sécurité.

J'essaie de dépasser cette barrière mentale, et dans le cadre de cela, je lis le livre de Michael Feathers, Working Effectively with Legacy Code . J'espère qu'il me montrera une partie de ce qui me manque.

J'aimerais également étudier certaines applications .NET non triviales avec une bonne couverture de code, peut-être un système de gestion de contenu ou une application CRUD. Je vais probablement examiner le cadre de test FitNesse dont Oncle Bob parle, mais ce serait bien de voir quelque chose écrit dans la langue que je connais le mieux.

Toutes suggestions ou paroles de sagesse seraient appréciées.

Josh Earl
la source
2
Pas tout à fait ... Je suis intéressé à voir des exemples d'applications du monde réel. La réponse acceptée dans ce post recommande un cadre de test. J'ai déjà vu quelques exemples de frameworks et de bibliothèques, mais cela ne répond pas à ma question.
Josh Earl du
@JoshEarl - Je suis d'accord .. Je ne pense pas que ma réponse ci-dessous aurait été pertinente pour l'autre post
hanzolo

Réponses:

14

Je ne sais pas si TDD a été utilisé, mais un excellent exemple de test est sqlite qui a une couverture de branche 100% remarquable et a plus de 1000 fois plus de code de test et de scripts que le code produit.

Bryan Oakley
la source
4
cela ressemble à un gaspillage d'effort remarquable si leur rapport code / code test est aussi élevé
Ryathal
6
@ Ryathal: le coût de l'échec dicte l'effort de test, pas la longueur du code testé. Étant donné une utilisation suffisamment large dans des approches suffisamment critiques pour la mission, les tests auraient peut-être valu la peine. Je ne suis pas vraiment sûr, cependant, si SQLite n'en a pas trop fait.
thiton
3
sqlite est incontournable pour beaucoup de gens. Vous pourriez être surpris de la fréquence à laquelle il est utilisé (OSX, iOS, Android OS par exemple). Et vous devez comprendre que beaucoup de ces lignes de code de test et de données ont probablement été générées par la machine. Une base de données industrielle a beaucoup de cas marginaux.
Bryan Oakley
10
SQLite est la base de données SQL la plus utilisée sur la planète, sa base d'installation est d'un ordre de grandeur plus grande que MySQL, PostgreSQL, SQL Server, Oracle, DB2 combinés . C'est probablement l'un des logiciels les plus utilisés, point final. S'il y avait un bug dans SQLite, chaque smartphone de la planète cesserait de fonctionner. Je pense que cela justifie un peu de paranoïa.
Jörg W Mittag
@ JörgWMittag wow, je n'ai jamais su ça sur SQLite. Amusant. Merci. Mais 1000 fois plus de code de test. C'est incroyable.
mike rodent
0

De nombreuses bibliothèques open source tierces sont TDDed. Les bibliothèques de Rhinos en veille prolongée, telles que RhinoMocks et NHibernate, sont TDD par leurs développeurs utilisant XUnit comme cadre de test unitaire.

Maintenant, avec OSS, vous ne pouvez généralement pas garantir que TOUT dans le produit a été TDD. La communauté peut avoir des normes, y compris cette pratique, et elle peut même utiliser un build-bot qui effectue des mesures de couverture de code, mais TDD est une mentalité qui doit être acquise par le développeur, et avec le grand public capable de s'engager à ouvrir- les troncs VCS source comme ceux sur GitHub, n'importe qui peut commettre n'importe quel changement avec n'importe quelle quantité de couverture de test (ou si la couverture est requise, les tests auraient pu être écrits après coup, ce qui est une violation de l'esprit de TDD mais il n'y en a vraiment pas un bon moyen de l'attraper lors de la validation).

KeithS
la source