Buen ejemplo de código complejo usando TDD [cerrado]

37

¿Cuál sería un buen ejemplo del uso de TDD en proyectos grandes, reales y complejos? Todos los ejemplos que he visto hasta ahora son proyectos de juguetes con el propósito de un libro o un papel ...

¿Puedes nombrar un proyecto de código abierto que usa mucho TDD? Preferiblemente en C ++ pero puedo leer Java y C # u otros lenguajes similares.

Xavier Nodet
fuente
Es difícil responder a su pregunta. Hay muchos proyectos que utilizan pruebas automatizadas, pero es difícil decir hasta qué punto siguen la filosofía TDD porque probablemente no la promueven. también c ++, c # y java tienen sus raíces en las aplicaciones gui, que son difíciles de probar. por lo general, encontrará más pruebas dentro de marcos o bibliotecas.
iMacUwhAK
Parte de la razón por la que estoy muy interesado en encontrar una buena respuesta es que actualmente estoy trabajando en una aplicación de escritorio con un motor C ++ y una GUI de Java ...
Xavier Nodet

Respuestas:

19
  • JUnit fue desarrollado 100% basado en pruebas. De hecho, se desarrolló al 100% en JUnit , lo que, como Kent Beck ha dicho un par de veces, fue un ejercicio realmente alucinante.
  • Creo que el sistema de archivos ZFS de Sun se desarrolló a prueba.
  • El intérprete ikj para el lenguaje de programación Ioke (JVM), el intérprete ikc para el lenguaje de programación Ioke (CLI), todo el núcleo de Ioke y la biblioteca estándar, y de hecho el lenguaje en sí se desarrolló al 100% basado en pruebas (en realidad basado en el comportamiento )
Jörg W Mittag
fuente
DUnit: el marco de prueba para Delphi, viene con un conjunto completo de pruebas para DUnit. Y estoy de acuerdo con Kent, eso es un poco alucinante. ;-)
Nick Hodges
14

SQLite. Todo su código está muy, muy probado :

A partir de la versión 3.7.14, la biblioteca SQLite consta de aproximadamente 81.3 KSLOC de código C. (KSLOC significa miles de "Líneas de código fuente" o, en otras palabras, líneas de código que excluyen líneas en blanco y comentarios.) En comparación, el proyecto tiene 1124 veces más código de prueba y scripts de prueba: 91421.1 KSLOC.

liori
fuente
1
wow, tienen muchas pruebas: |
Luca Matteis
8
fuertemente probado no necesariamente significa que fue desarrollado de una manera basada en pruebas (TDD). ¿Era que? (No leí toda esa página, pero no vi ni "TDD" ni "impulsado" en las búsquedas in-page, así que no sé la respuesta a esto.)
lindes
1
@lindes: parecen no seguir estrictamente TDD, pero por ejemplo, para cada informe de error, primero hacen una prueba. También ejecutan pruebas para cada confirmación. Entonces, al menos parcialmente, esto es TDD.
liori
9

Si recuerdo que FitNesse está escrito con TDD, y el principal contribuyente al proyecto es el tío Bob Martin, entonces, probablemente sea un código realmente limpio

CaffGeek
fuente
Acabo de echarle un vistazo, y es un código realmente limpio.
Robert Harvey
3

De mis conversaciones con el equipo de P&P en Microsoft, Enterprise Library fue escrita con TDD.

Walter
fuente
Desplegué Enterprise Library 5.0 y eché un vistazo al código fuente. Tiene una amplia colección de pruebas, pero hay muchos accesorios de prueba, manejador de llamadas y otros objetos complejos en el proyecto de prueba; parece casi una aplicación por derecho propio. Si bien admiro el trabajo, no veo cómo encaja en la visión del mundo TDD de refactor rojo-verde.
Robert Harvey
@Robert - Solo puedo decirte lo que me dijeron ... Usaron TDD cuando lo escribieron.
Walter
66
@Robert: no es inusual que el conjunto de pruebas tenga vida propia. DRY se aplica tanto a su aplicación como a las pruebas. En TDD solo haces 1 de 4 cosas: escribir pruebas, escribir código, refactorizar pruebas, refactorizar código. Si está haciendo todas estas cosas en un patrón refactor rojo-verde, entonces está haciendo TDD.
Jeff Knecht
1
@ Jeff: Gracias por aclarar eso. Creo que hay algunas diferencias entre la forma en que se explica TDD (en términos reduccionistas y mecanicistas), y la forma en que realmente se usa en escenarios del mundo real.
Robert Harvey
3

No puedo nombrar ningún proyecto de código abierto que use TDD, pero puedo decirles que he trabajado en proyectos del mundo real donde se usó TDD ... ¡y fue un salvavidas!

Steven A. Lowe
fuente
1
¿Ha compartido usted u otras personas estas experiencias? Suena como una buena historia de guerra.
Tuiteé un poco sobre esto y usé anécdotas para ilustrar puntos en otras publicaciones. Basta decir que el diseño de prueba primero y las suites de prueba automatizadas hacen que mi vida sea mucho más fácil, no volvería y desarrollaría de otra manera. Ejemplo: error sutil en un caso de prueba que las pruebas manuales no habrían encontrado (porque los probadores manuales no verifican la integridad de la base de datos después de cada operación); ejecutó un caso de prueba muchas veces ese día para resolverlo, equivalente a más de 40 horas de tiempo de prueba manual ahorrado. Recientemente realicé más de 1000 cambios de código y ejecuté las pruebas mientras dormía. TDD rocas.
Steven A. Lowe
Te creo. Solo me gusta escuchar las historias. Puede que le resulte interesante QuickCheck - en.wikipedia.org/wiki/QuickCheck - Vi una presentación que encontró errores de subprocesos múltiples en el código de producción de 15 años.
"porque los probadores manuales no verifican la integridad de la base de datos después de cada operación": las restricciones y un esquema de base de datos bien diseñado oscilan aún más, y le habrían ahorrado la molestia de tener que pasar un día probando, ya que habría visto el error de inmediato .
gbjbaanb
@gbjbaanb: en este caso, la 'verificación' fue mucho más compleja que la simple integridad del esquema, es por eso que hay una prueba automatizada para ello
Steven A. Lowe
0

Mi primer proyecto realizado completamente en TDD fue de código abierto en 2002. Todavía puede encontrarlo aquí:

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

Ahora en el trabajo estoy trabajando principalmente en TDD, pero no todos en nuestro equipo lo hacen, está bien, siempre y cuando escribieran las pruebas al final del día.

También escribimos una aplicación completa de gwt-gae usando TDD para la parte central. http://netnumero.appengine.com/company/mycompany

No puedo liberar ese código, pero estoy trabajando en un proyecto de ejemplo completo realizado en TDD para GWT, que también usa TDD en la interfaz de usuario.

Tan pronto como termine (vacaciones de Navidad) lo publicaré aquí https://github.com/ubertob/gwt-tdd-example

Uberto
fuente