Bom exemplo de código complexo usando TDD [fechado]

37

Qual seria um bom exemplo do uso de TDD em projetos grandes, da vida real e complexos? Todos os exemplos que vi até agora são projetos de brinquedos com a finalidade de um livro ou papel ...

Você pode nomear um projeto de código aberto que usa muito o TDD? De preferência em C ++, mas posso ler Java e C # ou outras linguagens semelhantes.

Xavier Nodet
fonte
difícil responder sua pergunta. Existem muitos projetos que utilizam testes automatizados, mas é difícil dizer até que ponto eles seguem a filosofia do TDD, porque provavelmente não a promovem. também c ++, c # e java têm raízes nas aplicações de GUI, que são difíceis de testar. geralmente você encontrará mais testes em estruturas ou bibliotecas.
iMacUwhAK
Parte da razão pela qual eu estou muito interessado em encontrar uma resposta boa é que eu estou trabalhando atualmente em um aplicativo de desktop com um motor de C ++ e uma GUI Java ...
Xavier Nodet

Respostas:

19
  • O JUnit foi desenvolvido 100% orientado a testes. De fato, ele foi desenvolvido 100% em JUnit , o que, como Kent Beck disse algumas vezes, foi um exercício verdadeiramente alucinante.
  • Eu acredito sistema de arquivos ZFS da Sun foi desenvolvido orientado a testes.
  • O intérprete ikj para a linguagem de programação Ioke (JVM), o intérprete ikc para a linguagem de programação Ioke (CLI), todo o núcleo e biblioteca padrão do Ioke e, de fato, a própria linguagem foi desenvolvida 100% orientada a testes (na verdade, orientada pelo comportamento )
Jörg W Mittag
fonte
DUnit - a estrutura de teste do Delphi, vem com um conjunto completo de testes para o próprio DUnit. E eu concordo com Kent, isso é um pouco perturbador. ;-)
Nick Hodges
14

SQLite. Todo o código deles é muito, muito testado :

A partir da versão 3.7.14, a biblioteca SQLite consiste em aproximadamente 81,3 KSLOC de código C. (KSLOC significa milhares de "Linhas de código fonte" ou, em outras palavras, linhas de código, excluindo linhas em branco e comentários.) Em comparação, o projeto possui 1124 vezes mais código de teste e scripts de teste - 91421.1 KSLOC.

liori
fonte
11
uau, eles têm muitos testes: |
Luca Matteis
8
fortemente testado não significa necessariamente que ele foi desenvolvido de maneira orientada a testes (TDD). Foi isso? (Eu não li a página inteira, mas não vi "TDD" nem "direcionado" nas pesquisas na página, por isso não sei a resposta para isso.) #
Lindes
11
@ Lindes: eles parecem não seguir estritamente o TDD, mas, por exemplo, para cada relatório de bug, eles primeiro fazem um teste. Eles também executam testes para cada confirmação. Então, pelo menos parcialmente, isso é TDD.
Liori
9

Se bem me lembro, o FitNesse foi escrito com TDD, e o principal colaborador do projeto é o tio Bob Martin, então provavelmente é um código realmente limpo

CaffGeek
fonte
Eu apenas dei uma olhada e é um código realmente limpo.
Robert Harvey
3

Nas minhas discussões com a equipe de P&P da Microsoft, a Enterprise Library foi escrita com TDD.

Walter
fonte
Eu abri o Enterprise Library 5.0 e dei uma olhada no código fonte. Ele possui uma extensa coleção de testes, mas há muitos equipamentos de teste, manipulador de chamadas e outros objetos complexos no projeto de teste; parece quase uma aplicação por si só. Enquanto admiro o trabalho, não vejo como ele se encaixa na visão de TDD do refator vermelho-verde.
Robert Harvey
@ Robert - Eu só posso te dizer o que eles me disseram ... Eles usaram TDD ao escrevê-lo.
27510 Walter Walter
6
@ Robert - Não é incomum que a suíte de testes tenha vida própria. DRY se aplica tanto ao seu aplicativo quanto aos testes. No TDD, você só está executando 1 de 4 coisas: Escrever testes, escrever código, refatorar testes, refatorar código. Se você estiver fazendo todas essas coisas em um padrão de refatoração de vermelho-verde, estará fazendo TDD.
Jeff Knecht
11
@ Jeff: Obrigado por esclarecer isso. Eu acho que existem algumas diferenças entre a maneira como o TDD é explicado (em termos reducionistas e mecanicistas) e o modo como ele é realmente usado em cenários do mundo real.
Robert Harvey
3

Não posso citar nenhum projeto de código aberto que usou TDD, mas posso dizer que trabalhei em projetos do mundo real onde o TDD foi usado ... e foi um salva-vidas!

Steven A. Lowe
fonte
11
Você - ou outras pessoas - compartilhou essas experiências? Parece uma boa história de guerra.
Eu twitei um pouco sobre isso e usei anedotas para ilustrar pontos em outras postagens. basta dizer que o design do primeiro teste e os conjuntos de testes automatizados tornam minha vida muito mais fácil. Eu não voltaria e desenvolveria de outra maneira. Exemplo: bug sutil em um caso de teste que o teste manual não teria encontrado (porque os testadores manuais não verificam a integridade do banco de dados após cada operação); executou o caso de teste várias vezes naquele dia para descobrir, equivalente a mais de 40 horas de tempo de teste manual economizado. Recentemente, fiz mais de 1000 alterações de código e executei os testes enquanto eu dormia. Rochas TDD.
Steven A. Lowe
Eu acredito em você. Eu só gosto de ouvir as histórias. Você pode achar o QuickCheck interessante - pt.wikipedia.org/wiki/QuickCheck - vi uma apresentação que encontrou bugs de multithreading no código de produção de 15 anos.
"porque os testadores manuais não verificam a integridade do banco de dados após cada operação" - restrições e um esquema de banco de dados bem projetado aumentam ainda mais e poupariam a você todo o trabalho de passar um dia testando, como você viu o bug imediatamente .
precisa
@gbjbaanb: neste caso, o 'cheque' era muito mais complexa do que a integridade do esquema simples, é por isso que há um teste automatizado para ele
Steven A. Lowe
0

Meu primeiro projeto concluído completamente em TDD foi de código aberto em 2002. Você ainda pode encontrá-lo aqui:

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

Agora, no trabalho, estou trabalhando principalmente em TDD, mas nem todos da nossa equipe trabalham, tudo bem, desde que os testes sejam escritos no final do dia.

Também escrevemos um aplicativo gwt-gae completo usando TDD para a parte principal. http://netnumero.appengine.com/company/mycompany

Não posso liberar esse código, mas estou trabalhando em um projeto de exemplo completo feito no TDD para GWT, que está usando o TDD também na interface do usuário.

Assim que eu terminar (feriados de Natal), publicarei aqui https://github.com/ubertob/gwt-tdd-example

Uberto
fonte