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.


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 )

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.


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


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.


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!


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.