Exemplos reais de aplicativos criados com TDD e boa cobertura de teste? [fechadas]

17

Existem aplicativos de código aberto desenvolvidos usando desenvolvimento orientado a testes que servem como modelos de como o bom teste de unidade deve funcionar?

Eu preferiria ver exemplos em C # e .NET. (Observe que mencionei aplicativos, não apenas bibliotecas.)

Sou um programador de nível intermediário que realmente quer acreditar e praticar o TDD. O aplicativo em que trabalho no meu dia-a-dia é bastante complicado - cerca de 1 milhão de linhas de código - e eu adoraria introduzir mais testes de unidade. Temos alguns testes de unidade em funcionamento, mas meus esforços no TDD e com o trabalho no código que já está sendo testado não foram animadores.

Na minha experiência reconhecidamente limitada, o TDD parece incentivar muita complexidade em nome da dissociação. Os bits do aplicativo que são difíceis de testar - e que coincidentemente tendem a ser críticos - são empurrados para a periferia, para o campo de testes de integração que podem ou não ser escritos. (Estou pensando nos suspeitos comuns aqui, no acesso ao sistema de arquivos, na hidratação de objetos de um banco de dados, nas chamadas assíncronas da web etc.)

O código que está sendo testado tende a envolver muita colaboração entre objetos, e talvez alguma lógica simples de fluxo, tudo o que acontece na memória e que pode ser escrito de uma maneira mais simples e compreensível, se tudo não tiver que ser totalmente dissociado. para teste.

Entendo as técnicas para zombar de dependências e coisas do tipo, mas, na minha experiência, o uso pesado de zombaria leva a testes muito frágeis. Se meu primeiro instinto ao ver vários testes ficarem vermelhos é: "Ótimo, agora tenho que consertar todas as zombarias", então meus testes se tornaram uma chatice, e não uma rede de segurança.

Estou tentando superar essa barreira mental e, como parte disso, estou lendo o livro de Michael Feathers, Trabalhando efetivamente com o código legado . Espero que me mostre um pouco do que estou perdendo.

Também gostaria de estudar alguns aplicativos .NET não triviais com boa cobertura de código, talvez um sistema de gerenciamento de conteúdo ou um aplicativo CRUD. A estrutura de teste do FitNesse de que o tio Bob fala é sobre algo que provavelmente examinarei, mas seria bom ver algo escrito na linguagem com a qual estou mais familiarizado.

Todas as sugestões ou palavras de sabedoria serão apreciadas.

Josh Earl
fonte
2
Não é bem assim ... Estou interessado em ver exemplos de aplicações do mundo real. A resposta aceita nesse post recomenda uma estrutura de teste. Eu já vi alguns exemplos de estruturas e bibliotecas antes, mas isso não aborda minha pergunta.
Josh Earl
@JoshEarl - Concordo .. Eu não acho que minha resposta abaixo teria sido relevante para o outro post
hanzolo

Respostas:

14

Não sei se o TDD foi usado, mas um exemplo estelar de teste é o sqlite, que possui uma cobertura notável de 100% das ramificações e possui mais de 1000 vezes mais códigos e scripts de teste que o código do produto.

Bryan Oakley
fonte
4
Isso soa como um desperdício notável de esforço, se o seu rácio de código para código de teste é tão alta
Ryathal
6
@ Ryathal: O custo da falha determina o esforço de teste, não o comprimento do código testado. Dado o uso amplo o suficiente em abordagens suficientemente críticas, o teste pode ter valido a pena. Não tenho muita certeza se o SQLite não exagera.
thiton
3
O sqlite é definitivamente essencial para muitas pessoas. Você pode se surpreender com a frequência com que é usado (OSX, iOS, Android OS, por exemplo). E você deve perceber que muitas dessas linhas de código e dados de teste provavelmente foram geradas por máquina. Um banco de dados de força industrial possui muitos casos extremos.
Bryan Oakley
10
O SQLite é o banco de dados SQL mais utilizado no planeta, sua base de instalação é uma ordem de magnitude maior que o MySQL, PostgreSQL, SQL Server, Oracle e DB2 combinados . Provavelmente é um dos softwares mais usados, ponto final. Se houvesse um erro no SQLite, todos os smartphones do planeta parariam de funcionar. Eu acho que isso justifica um pouco de paranóia.
Jörg W Mittag
@ JörgWMittag uau, eu nunca soube disso sobre SQLite. Divertido. Obrigado. Mas 1000 vezes mais código de teste. Isso é incrivel.
mike roedor
0

Muitas bibliotecas de código aberto de terceiros são TDDed. As bibliotecas do Hibernating Rhinos, como RhinoMocks e NHibernate, são TDDed por seus desenvolvedores que usam o XUnit como a estrutura de teste de unidade.

Agora, com o OSS, você normalmente não pode garantir que TUDO no produto tenha sido TDDed. A comunidade pode ter padrões, incluindo essa prática, e pode até usar um build-bot que executa métricas de cobertura de código, mas TDD é uma mentalidade que deve ser incorporada pelo desenvolvedor e com o público em geral capaz de se comprometer a abrir troncos VCS de origem como os do GitHub, qualquer pessoa pode cometer qualquer alteração com qualquer quantidade de cobertura de teste (ou se for necessária cobertura, os testes poderiam ter sido gravados após o fato, o que é uma violação do espírito do TDD, mas na verdade não existe uma boa maneira de capturá-lo no commit).

KeithS
fonte