Bon exemple de code complexe utilisant TDD [fermé]

37

Quel serait un bon exemple d'utilisation du TDD dans de grands projets complexes et réels? Tous les exemples que j'ai vus jusqu'à présent sont des projets de jouets destinés à un livre ou à un papier ...

Pouvez-vous nommer un projet open-source qui utilise fortement TDD? De préférence en C ++ mais je peux lire Java et C # ou d’autres langages similaires.

Xavier Nodet
la source
difficile de répondre à votre question. de nombreux projets utilisent des tests automatisés, mais il est difficile de dire dans quelle mesure ils suivent la philosophie TDD car ils ne font probablement pas la promotion. c ++, c # et java ont également leurs racines dans les applications gui, difficiles à tester. vous trouverez généralement plus de tests dans des frameworks ou des bibliothèques.
iMacUwhAK
Une partie de la raison pour laquelle je suis très intéressé à trouver une bonne réponse est que je travaille actuellement sur une application de bureau avec un moteur C ++ et une interface graphique Java ...
Xavier Nodet

Réponses:

19
  • JUnit a été développé à 100% sur des tests. En fait, il a été développé à 100% dans JUnit , ce qui, comme Kent Beck l’a dit à plusieurs reprises, était un exercice vraiment hallucinant.
  • Je pense que le système de fichiers ZFS de Sun a été développé par test.
  • L'interprète ikj pour le langage de programmation Ioke (JVM), l'interprète ikc pour le langage de programmation Ioke (CLI), l'intégralité de la bibliothèque standard et du noyau Ioke, et en fait le langage lui-même a été développé à 100% à l'aide de tests ).
Jörg W Mittag
la source
DUnit - le framework de test pour Delphi, est livré avec une suite complète de tests pour DUnit lui-même. Et je suis d'accord avec Kent, c'est un peu hallucinant. ;-)
Nick Hodges
14

SQLite. Tout leur code est très très testé :

Depuis la version 3.7.14, la bibliothèque SQLite comprend environ 81,3 KSLOC de code C. (KSLOC signifie des milliers de "lignes de code source" ou, en d'autres termes, des lignes de code excluant les lignes vierges et les commentaires.) Par comparaison, le projet comporte 1124 fois plus de code et de scripts de test - 91421.1 KSLOC.

liori
la source
1
wow, ils ont beaucoup de tests: |
Luca Matteis
8
lourdement testé ne signifie pas nécessairement qu’il a été développé de manière testée (TDD). Était-ce? (Je n'ai pas lu toute la page, mais je n'ai vu ni "TDD" ni "piloté" lors des recherches dans la page, je ne connais donc pas la réponse.)
lindes
1
@lindes: ils ne semblent pas suivre strictement TDD, mais par exemple, ils font d'abord un test pour chaque rapport de bogue. En outre, ils exécutent des tests pour chaque commit. Donc, au moins partiellement, c'est TDD.
Liori
9

Si je me souviens bien, FitNesse est écrit avec TDD et que le principal contributeur au projet est Oncle Bob Martin. Il s'agit donc probablement d'un code vraiment épuré.

CaffGeek
la source
Je viens d' avoir un coup d' oeil, et il est vraiment code propre.
Robert Harvey
3

D'après mes discussions avec l'équipe P & P de Microsoft, Enterprise Library a été écrit avec TDD.

Walter
la source
J'ai descendu Enterprise Library 5.0 et jeté un coup d'œil au code source. Il contient une vaste collection de tests, mais le projet de test contient de nombreux objets de test, un gestionnaire d'appels et d'autres objets complexes. cela ressemble presque à une application à part entière. Bien que j'admire ce travail, je ne vois pas en quoi il s'intègre dans la vision du monde du TDD du refactor rouge-vert.
Robert Harvey
@ Robert - Je ne peux que vous dire ce qu'ils m'ont dit ... Ils ont utilisé TDD pour l'écrire.
Walter
6
@Robert - Il n'est pas rare que la suite de tests prenne sa propre vie. DRY s'applique à la fois à votre application et aux tests. Dans TDD, vous ne faites jamais qu’une des quatre choses suivantes: écriture de tests, écriture de code, tests de refactoring, code de refactoring. Si vous faites toutes ces choses dans un motif de refactor rouge-vert, alors vous faites du TDD.
Jeff Knecht
1
@ Jeff: Merci d'avoir clarifié cela. Je pense qu'il y a quelques différences entre la façon dont le TDD est expliqué (en termes réductionnistes, mécanistes) et la façon dont il est réellement utilisé dans des scénarios réels.
Robert Harvey
3

Je ne peux nommer aucun projet open source utilisant TDD, mais je peux vous dire que j'ai travaillé sur des projets concrets dans lesquels TDD était utilisé ... et qui m'a sauvé la vie!

Steven A. Lowe
la source
1
Avez-vous - ou d'autres - partagé ces expériences? Cela ressemble à une bonne histoire de guerre.
J'ai tweeté un peu à ce sujet, et utilisé des anecdotes pour illustrer des points dans d'autres messages. il suffit de dire que la conception d'abord testée et les suites de tests automatisées me facilitent tellement la vie que je ne reviendrais pas en arrière et que je ne ferais pas le développement autrement. Exemple: bug subtil dans un cas de test que le test manuel n'aurait pas trouvé (parce que les testeurs manuels ne vérifient pas l'intégrité de la base de données après chaque opération); a exécuté plusieurs fois le même cas de test ce jour-là, ce qui représente une économie de plus de 40 heures de test manuel. a récemment effectué plus de 1000 modifications de code et exécuté les tests pendant mon sommeil. TDD roches.
Steven A. Lowe
Je te crois. J'aime juste entendre les histoires. Vous pourriez trouver intéressant QuickCheck - en.wikipedia.org/wiki/QuickCheck - J'ai vu une présentation qui a trouvé des bogues multithreading dans un code de production vieux de 15 ans.
"parce que les testeurs manuels ne vérifient pas l'intégrité de la base de données après chaque opération" - des contraintes et un schéma de base de données bien conçu, ce qui vous évite d'avoir à passer une journée à tester car vous auriez vu le bogue immédiatement .
gbjbaanb
@gbjbaanb: dans ce cas, la "vérification" était bien plus complexe qu'une simple intégrité de schéma, c'est pourquoi il existe un test automatisé
Steven A. Lowe
0

Mon premier projet entièrement réalisé en TDD était un logiciel libre en 2002. Vous pouvez toujours le trouver ici:

http://sourceforge.net/projects/camelos/

Maintenant, au travail, je travaille principalement en TDD, mais tout le monde dans notre équipe ne le fait pas, c'est bien pourvu que les tests soient écrits à la fin de la journée.

Nous avons également écrit une application complète gwt-gae utilisant TDD pour la partie principale. http://netnumero.appengine.com/company/mycompany

Je ne peux pas publier ce code, mais je travaille sur un exemple complet de projet réalisé dans TDD for GWT, qui utilise également TDD dans l'interface utilisateur.

Dès que j'aurai terminé (vacances de Noël), je le posterai ici https://github.com/ubertob/gwt-tdd-example

Uberto
la source