O desenvolvimento orientado por testes (TDD) é uma abordagem de desenvolvimento de software na qual os testes de software são escritos antes das funções correspondentes.
Os desenvolvedores escrevem apenas o código necessário para passar em cada teste; em seguida, tanto o teste quanto o código são refinados antes de avançar para um novo teste e depois para uma nova funcionalidade.
O desenvolvimento orientado por testes essencialmente força os desenvolvedores a reduzir o ritmo, validar e refinar o código em ciclos de feedback mais curtos Embora não seja obrigatório, as equipes de DevOps incentivam programadores, de iniciantes a profissionais experientes, a usar o TDD em uma ampla variedade de linguagens de programação. Por exemplo, Java, Python e outras, interfaces de programação de aplicativos (APIs) e aplicações de programas.
Programar nesse estilo fortalece a relação entre programação, testes (na forma de testes automatizados em nível de unidade) e design de código. Embora o desenvolvimento orientado por testes possa aumentar o tempo inicial de desenvolvimento, já foi demonstrado que ele melhora a funcionalidade e a flexibilidade do código e economiza tempo no geral.
Ao identificar e lidar imediatamente com qualquer erro, os desenvolvedores que usam TDD podem evitar que pequenos problemas se tornem maiores. O desenvolvimento orientado por testes obriga os desenvolvedores a validar e refinar o código enquanto avançam, agilizando assim as verificações e correções finais de qualidade.
Frameworks de teste alternativos incluem escrever o código de produção antes de todos os testes automatizados ou escrever toda o pacote de testes antes do código de produção. Esses métodos, embora não necessariamente ineficazes, demonstraram aumentar o tempo necessário de depuração, especialmente em projetos maiores e mais complexos.
O desenvolvimento orientado por testes é comumente usado para a criação de novos códigos de produção, mas também é frequentemente aplicado para melhorar a depuração de código legado desenvolvido com técnicas mais antigas ou diferentes.
O desenvolvimento orientado por testes inverte o processo tradicional de desenvolvimento ao colocar os testes antes do desenvolvimento Como uma abordagem iterativa, ele melhora a qualidade e a legibilidade do código ao promover fluxos de trabalho testáveis que resultam em código de alta qualidade no nível de unidade. Quando desenvolvedores implementam testes de unidade, eles se concentram em uma pequena porção da lógica, como um algoritmo individual. Escrever código especificamente para que os testes passem não apenas resulta em código mais limpo e durável, mas também ajuda a melhorar a documentação.
Boletim informativo do setor
Mantenha-se atualizado sobre as tendências mais importantes e fascinantes do setor em IA, automação, dados e muito mais com o boletim informativo da Think. Consulte a declaração de privacidade da IBM.
Sua inscrição será entregue em inglês. Você pode encontrar um link para cancelar a inscrição em todos os boletins informativos. Você pode gerenciar suas inscrições ou cancelar a inscrição aqui. Consulte nossa declaração de privacidade da IBM para obter mais informações.
Existem dois principais níveis de desenvolvimento orientado por testes.
No desenvolvimento orientado por testes de aceitação — às vezes chamado de desenvolvimento orientado por comportamento (BDD) — os programadores escrevem um único teste de aceitação e, em seguida, apenas o código necessário para que ele seja aprovado. Testes de aceitação às vezes são chamados de testes de cliente ou testes de aceitação do cliente.
Geralmente, podem ser entendidos como casos de teste necessários para a funcionalidade mínima, conforme descrito pelos stakeholders do produto. O ATDD busca identificar requisitos detalhados e executáveis. Os testes de aceitação podem ser realizados com diversas ferramentas de teste, como Fitnesse ou RSpec.
Às vezes chamado simplesmente de TDD, o TDD do desenvolvedor exige que os programadores escrevam testes individuais para avaliar sua própria solução a um teste de ATDD. O TDD do desenvolvedor usa ferramentas de automação de testes, como JUnit ou VBUnit.
Ao empregar uma estratégia de desenvolvimento orientado a testes, os programadores primeiro escrevem testes para verificar cada elemento ou função individual de um software antes de escrever código suficiente para passar nesse teste individual. Uma vez concluído, o software é testado novamente e, se aprovado, o código é refinado (um processo conhecido como refatoração) para incluir apenas os elementos essenciais. Os desenvolvedores então repetem esse processo para cada função subsequente do software.
O processo de desenvolvimento orientado por testes é dividido em cinco etapas individuais:
De forma simples, o processo de desenvolvimento orientado por testes segue um ciclo repetitivo, conhecido como ciclo vermelho-verde-refatorar. As etapas do ciclo são:
Embora as origens específicas do desenvolvimento orientado por testes sejam desconhecidas, o conceito de escrever os testes primeiro e o código de produção em segundo lugar não era uma prática comum até meados da década de 1990. Antes disso, os frameworks de testes separavam os desenvolvedores da verificação de seus próprios códigos. No entanto, à medida que a engenharia de software evoluiu, as equipes de DevOps passaram a demandar metodologias mais rápidas e flexíveis para atender às necessidades dos stakeholders, especialmente em contextos de requisitos em constante mudança.
O desenvolvimento orientado por testes evoluiu a partir de vários frameworks de testes inovadores e, com o tempo, foi adotado como um componente modular em outros frameworks também. Mais notavelmente, ele está incluído no conceito de Extreme Programming (XP), um framework ágil de desenvolvimento de software criado para melhorar tanto a qualidade do software quanto a qualidade de vida dos desenvolvedores.
O engenheiro de software Kent Beck, uma figura importante na comunidade ágil e criador do Extreme Programming, é creditado por ter “redescoberto” o desenvolvimento orientado por testes. Nas palavras do próprio Beck:
“A descrição original do TDD estava em um livro antigo sobre programação. Dizia que você deve pegar a fita de input, digitar manualmente a fita de saída que espera e, em seguida, programar até que a fita de saída real corresponda à saída esperada. Depois que escrevi o primeiro framework xUnit em Smalltalk, lembrei-me de ter lido isso e decidi experimentar. Essa foi a origem do TDD para mim. Ao descrever o TDD para programadores mais experientes, frequentemente ouço: ‘Claro. De que outra forma você programaria?’. Portanto, considero meu papel como o de 'redescobrir' o TDD.”
Datas notáveis na evolução do desenvolvimento orientado por testes incluem:
Como componente da Extreme Programming, o desenvolvimento orientado por testes mostrou-se benéfico não apenas para criar um código melhor, mas também programadores melhores. O TDD pode permitir que os programadores compreendam melhor seus projetos e ajudem a orientar o design do programa. Ao colocar o caso de teste antes da implementação de cada funcionalidade, os desenvolvedores precisam visualizar como uma função será utilizada por um cliente ou usuário. Essa abordagem posiciona a interface do produto antes da implementação e ajuda os desenvolvedores a criarem aplicações mais centradas no usuário.
Alguns benefícios adicionais do desenvolvimento orientado por testes incluem:
Embora haja muitos benefícios valiosos no uso do TDD, ele não está livre de desafios. Embora a gravidade desses desafios possa depender do projeto ou ser atenuada por diversas outras técnicas, algumas das desvantagens do TDD incluem:
Aumente a resiliência da sua empresa com soluções impulsionadas por IA para cadeia de suprimentos e gerenciamento inteligente de ativos.
Transforme suas operações empresariais com a IBM utilizando dados ricos e tecnologias de IA poderosas para integrar processos de otimização.
O IBM Cloud Pak for Business Automation é um conjunto modular de componentes de software integrados para gerenciamento e automação de operações.