O TDD é viável em projetos colaborativos de código aberto

11

Digamos que eu queria iniciar um projeto de código aberto que espero / espero que muitas pessoas enviem patches e outros enfeites. É viável adotar uma abordagem estrita de TDD? Posso / devo esperar / confiar que os colaboradores escrevam testes de qualidade sempre que enviam um patch?

Uma coisa que eu tenho pensado é escrever suítes de teste para relatórios individuais de bugs e solicitações de recursos e exigir que todas as solicitações de patches / pull façam os testes passarem, mas nesse momento parece que seria melhor apenas escrever o recurso / correção de bugs Eu mesmo.

Até onde eu sei, a maioria dos principais projetos de código aberto que usam TDD (ou pelo menos testes de gravação) parecem ser escritos exclusivamente por um indivíduo ou equipe, onde é fácil aplicar práticas como o TDD.

DormoTheNord
fonte
Compartilhar sua pesquisa ajuda a todos. Conte-nos o que você tentou e por que ele não atendeu às suas necessidades. Isso demonstra que você dedicou um tempo para tentar ajudar a si mesmo, evita reiterar respostas óbvias e, acima de tudo, ajuda a obter uma resposta mais específica e relevante. Veja também How to Ask
gnat
@gnat Eu procurei no StackExchange, e houve algumas perguntas em que as pessoas perguntam exemplos de projetos de código aberto com testes de unidade, o que não é o mesmo que a minha pergunta. Conforme sua solicitação, adicionamos mais algumas informações.
DormoTheNord
1
DormoTheNord Acredito que @gnat significa exemplos específicos citados .
haneefmubarak
"seria melhor apenas escrever o recurso / correção de erro." Com ou sem testes? Você é um proponente do TDD ou está apenas verificando se é viável nesse contexto?
Jeffo
É claro que você pode / deve esperar que os colaboradores escrevam testes de qualidade sempre que enviarem um patch. Isso não é apenas benéfico - é extremamente comum hoje em grandes projetos de código aberto (posso dar exemplos, se você quiser).
Benjamin Gruenbaum

Respostas:

29

Você não pode realmente aplicar uma abordagem TDD (teste primeiro) em um projeto de código aberto, onde os patches podem ser enviados pelo público em geral.

O que você pode aplicar é que todos os patches devem ter um conjunto de casos de teste para as correções incluídas no patch e que esses casos de teste, bem como todos os casos de teste existentes, devem passar. Você pode impor isso concedendo apenas direitos de confirmação a alguns desenvolvedores confiáveis ​​conhecidos por usar e concordar com as políticas do projeto e afirmando publicamente que envios / solicitações pull serão incorporados apenas se eles forem aprovados em casos de teste (com cobertura suficiente).

Isso não garante que o teste seja escrito primeiro , mas garante que o teste seja escrito .

Bart van Ingen Schenau
fonte
1
Certamente o proprietário do repositório pode recusar-se a fazer alterações que não estejam em conformidade com os padrões de qualidade do projeto? Talvez a qualidade e a quantidade de contribuições sejam prejudicadas se os colaboradores não gostarem disso, mas isso não significa que você não possa aplicá-lo. Certamente?
Tom W
2
@ TomW: Como você verificaria se meu envio foi criado de acordo com as práticas do TDD e não, por exemplo, com os testes escritos após a conclusão da implementação?
Bart van Ingen Schenau
Ah, entendo o que você quer dizer. Suponho que alguma perda de rigor seja inevitável, mas você ainda pode verificar se o código vem com testes, se os testes são suficientemente granulares e cobrem tudo o que deveriam. Não estou familiarizado com o git, mas, para uma determinada solicitação pull, é possível inspecionar a sequência de confirmações desse conjunto de alterações para ver se o desenvolvedor seguiu um processo adequado para produzi-lo?
Tom W
Em outras palavras, você não pode confirmar o processo interno de uma pessoa, mas pode garantir que a saída atenda a um determinado padrão. Exigir testes e garantir que o design seja lógico estão ao alcance do proprietário.
Adrian Schneider
1

Você pode pedir às pessoas que enviem correções somente para teste antes de poderem trabalhar no código; isso proporcionaria uma oportunidade adicional de revisar o design planejado antes que o próprio código fosse gravado.

Na prática, isso pode matar qualquer entusiasmo que as pessoas têm por contribuir com o projeto - ou pode acender um fogo naqueles que concordam com sua metodologia.

Os revisores teriam que ser muito bons em rever rapidamente as revisões de design, para não atrapalhar o desenvolvimento.

Alex Feinman
fonte