O Desenvolvimento Orientado a Testes tem sido a moda na comunidade .NET nos últimos anos. Recentemente, ouvi críticas da comunidade ALT.NET sobre o BDD. O que é isso? O que o torna diferente do TDD?
unit-testing
tdd
bdd
Eu não
fonte
fonte
Respostas:
Entendo que o BDD tem mais a ver com especificação do que com teste . Ele está vinculado ao Design Orientado a Domínio (você não ama esses acrônimos * DD?).
Ele está vinculado a uma certa maneira de escrever histórias de usuários, incluindo testes de alto nível. Um exemplo de Tom ten Thij :
(Em seu artigo, Tom continua executando diretamente essa especificação de teste em Ruby.)
O papa de BDD é Dan North . Você encontrará uma ótima introdução em seu artigo Introducing BDD .
Você encontrará uma comparação de BDD e TDD neste vídeo . Também uma opinião sobre o BDD como "TDD feito corretamente" por Jeremy D. Miller
25 de março de 2013 atualização
O vídeo acima está ausente há um tempo. Aqui está um artigo recente de Llewellyn Falco, BDD vs TDD (explicado) . Acho a explicação dele clara e objetiva.
fonte
Para mim, a principal diferença entre BDD e TDD é foco e redação. E as palavras são importantes para comunicar sua intenção.
O TDD direciona o foco para os testes. E como os testes no "velho mundo em cascata" vêm após a implementação, essa mentalidade leva a um entendimento e comportamento incorretos.
O BDD direciona o foco para o comportamento e as especificações e, assim, as mentes das cachoeiras são distraídas. Portanto, o BDD é mais facilmente entendido como prática de design e não como prática de teste.
fonte
Parece haver dois tipos de BDD.
O primeiro é o estilo original que Dan North discute e que causou a criação das estruturas de estilo xBehave. Para mim, esse estilo é aplicável principalmente a testes de aceitação ou especificações de objetos de domínio.
O segundo estilo é o que Dave Astels popularizou e que, para mim, é uma nova forma de TDD que traz sérios benefícios. Ele se concentra no comportamento, em vez de testar e também em pequenas classes de teste, tentando chegar ao ponto em que você basicamente tem uma linha por método de especificação (teste). Esse estilo é adequado a todos os níveis de teste e pode ser feito usando qualquer estrutura de teste de unidade existente, embora as estruturas mais novas (estilo xSpec) ajudem a focar o comportamento em vez de testar.
Há também um grupo BDD que você pode achar útil:
http://groups.google.com/group/behaviordrivendevelopment/
fonte
O Test-Driven Development é uma metodologia de desenvolvimento de software para teste primeiro, o que significa que requer a gravação do código de teste antes de escrever o código real que será testado. Nas palavras de Kent Beck:
Depois de descobrir como escrever um pequeno pedaço de código, agora, em vez de apenas codificar, queremos obter feedback imediato e praticar "codifique um pouco, teste um pouco, codifique um pouco, teste um pouco". Então, escrevemos imediatamente um teste para isso.
Portanto, o TDD é uma metodologia técnica de baixo nível que os programadores usam para produzir um código limpo que funcione.
Desenvolvimento Orientado a Comportamentos é uma metodologia criada com base no TDD, mas que evoluiu para um processo que não diz respeito apenas a programadores e testadores, mas que lida com toda a equipe e todos os interessados importantes, técnicos e não técnicos. O BDD começou com algumas perguntas simples que o TDD não responde bem: quantos testes devo escrever? O que devo realmente testar - e o que não devo? Quais dos testes que eu escrevo serão de fato importantes para os negócios ou para a qualidade geral do produto e quais são apenas os meus excessos de engenharia?
Como você pode ver, essas questões exigem colaboração entre tecnologia e negócios. As partes interessadas nos negócios e os especialistas em domínio geralmente podem dizer aos engenheiros que tipos de testes parecem úteis - mas apenas se os testes forem de alto nível que lidam com aspectos importantes dos negócios. O BDD chama esses testes de negócios de "exemplos", como em "me diga um exemplo de como esse recurso deve se comportar corretamente" e reserva a palavra "teste" para verificações técnicas de baixo nível, como validação de dados ou integração de APIs de teste. A parte importante é que, embora os testes possam ser criados apenas por programadores e testadores, os exemplos podem ser coletados e analisados por toda a equipe de entrega - por designers, analistas e assim por diante.
Em uma frase, uma das melhores definições de BDD que encontrei até agora é que o BDD é sobre "ter conversas com especialistas em domínio e usar exemplos para obter um entendimento compartilhado do comportamento desejado e descobrir incógnitas". A parte da descoberta é muito importante. À medida que a equipe de entrega coleta mais exemplos, eles começam a entender o domínio dos negócios cada vez mais e, assim, reduzem a incerteza sobre alguns aspectos do produto com os quais precisam lidar. À medida que a incerteza diminui, aumenta a criatividade e a autonomia da equipe de entrega. Por exemplo, agora eles podem começar a sugerir seus próprios exemplos que os usuários de negócios não consideravam possíveis por causa de sua falta de conhecimento técnico.
Agora, é ótimo ter conversas com especialistas em negócios e domínio, mas todos sabemos como isso acaba na prática. Comecei minha jornada com a tecnologia como programador. Como programadores, somos ensinados a escrever código - algoritmos, padrões de design, abstrações. Ou, se você é um designer, é ensinado a projetar- organize informações e crie interfaces bonitas. Porém, quando conseguimos nossos empregos de nível básico, nossos empregadores esperam que "agreguemos valor aos clientes". E entre esses clientes pode ser, por exemplo ... um banco. Mas eu não sabia quase nada sobre operações bancárias, exceto como diminuir eficientemente o saldo da minha conta. Então, eu teria que traduzir de alguma forma o que é esperado de mim em código ... eu teria que construir uma ponte entre o setor bancário e meus conhecimentos técnicos, se eu quisesse agregar algum valor. O BDD me ajuda a construir essa ponte sobre uma base estável de comunicação fluida entre a equipe de entrega e os especialistas em domínio.
Saber mais
Se você quiser ler mais sobre o BDD, escrevi um livro sobre o assunto. “Writing Great Specifications” explora a arte de analisar requisitos e o ajudará a aprender como criar um ótimo processo BDD e a usar exemplos como parte essencial desse processo. O livro fala sobre a linguagem onipresente, coletando exemplos e criando as chamadas especificações executáveis (testes automatizados) a partir dos exemplos - técnicas que ajudam as equipes do BDD a oferecer ótimos softwares dentro do prazo e do orçamento.
Se você estiver interessado em comprar "Writing Great Specifications", poderá economizar 39% com o código promocional 39nicieja2 :)
fonte
Eu experimentei um pouco a abordagem do BDD e minha conclusão prematura é que o BDD é adequado para a implementação de casos de uso, mas não nos detalhes subjacentes. O TDD ainda é bom nesse nível.
O BDD também é usado como uma ferramenta de comunicação. O objetivo é escrever especificações executáveis que possam ser entendidas pelos especialistas do domínio.
fonte
Parece-me que o BDD é um escopo mais amplo. Isso quase implica que o TDD seja usado, que o BDD é a metodologia abrangente que reúne as informações e os requisitos para o uso, entre outras coisas, de práticas do TDD para garantir feedback rápido.
fonte
Com o meu conhecimento mais recente em BDD, quando comparado ao TDD, o BDD se concentra em especificar o que acontecerá a seguir, enquanto o TDD se concentra em definir um conjunto de condições e depois analisar a saída.
fonte
O desenvolvimento orientado a comportamentos parece se concentrar mais na interação e comunicação entre desenvolvedores e também entre desenvolvedores e testadores.
O artigo da Wikipedia tem uma explicação:
Desenvolvimento orientado a comportamento
Mas não pratico o BDD.
fonte
Considere o principal benefício do TDD ser o design. Deve ser chamado de Design Orientado a Testes. O BDD é um subconjunto do TDD, denominado Behavior Driven Design.
Agora considere uma implementação popular do TDD - Unit Testing. As unidades no teste de unidade são tipicamente um pouco de lógica que é a menor unidade de trabalho que você pode fazer.
Quando você une essas unidades de maneira funcional para descrever o comportamento desejado para as máquinas, precisa entender o comportamento que está descrevendo para a máquina. O Design Orientado a Comportamento se concentra em verificar o entendimento dos implementadores sobre os Casos de Uso / Requisitos / Qualquer que seja, e verifica a implementação de cada recurso. O BDD e o TDD em geral servem ao importante objetivo de informar o design e ao segundo objetivo de verificar a correção da implementação, especialmente quando ela é alterada. O BDD feito corretamente envolve biz e dev (e qa), enquanto o Teste de Unidade (possivelmente visto incorretamente como TDD em vez de um tipo de TDD) é normalmente feito no silo dev.
Eu acrescentaria que os testes BDD servem como requisitos de vida.
fonte
O BDD é amplamente TDD feito da maneira correta. No entanto, há um valor adicional que o BDD oferece. Aqui está um link sobre isso:
BDD é mais do que "TDD feito corretamente"
fonte
Não há diferença entre TDD e BDD. exceto que você pode ler melhor seus testes e usá-los como requisitos. Se você escrever seus requisitos com as mesmas palavras que escreve nos testes BDD, poderá obter do seu cliente alguns dos testes definidos prontos para escrever o código.
fonte
Diferença entre desenvolvimento orientado a teste (TDD) e desenvolvimento orientado a comportamento (BDD)
O BDD se concentra no aspecto comportamental do sistema, e não no
aspecto de implementação do sistema no qual o TDD se concentra.
O BDD oferece uma compreensão mais clara do que o sistema deve fazer
da perspectiva do desenvolvedor e do cliente. O TDD apenas
fornece ao desenvolvedor uma compreensão do que o sistema deve fazer.
O BDD permite que o desenvolvedor e o cliente trabalhem juntos na análise de requisitos contida no código-fonte do sistema.
fonte
Em resumo, há uma grande diferença entre TDD e BDD. No TDD, estamos focados principalmente nos dados de teste. No BDD, nosso foco principal é o comportamento do projeto, para que qualquer pessoa que não seja de programação possa entender a linha de código em nome do título de esse método
fonte
Aqui está o instantâneo rápido:
fonte