Como o ATDD Guia Você na Criação Colaborativa Centradas no Usuário de Aplicações
Agile 101
Conduza a Aceitação do Usuário e do Cliente com ATDD
Como seu nome sugere, o ATDD está relacionado ao TDD, ou Test-Driven Development. Ele também tem semelhanças com abordagens como SBE (Specification by Example) e BDD (Behavior-driven development.) Ao longo do artigo, você entenderá as semelhanças e diferenças entre estas abordagens.
O que é Acceptance Test Driven Development?
Ao contrário do TDD, que é geralmente considerado como uma prática de engenharia, o ATDD é um esforço de equipe: ele traz diferentes atores no processo de desenvolvimento de software — testadores, engenheiros, partes interessadas empresariais — para colaborar. O resultado dessa colaboração são os requisitos para a aplicação, expressos em um formato compreensível por todos, que depois são transformados em testes de aceitação automatizados.
Qual é o Principal Objetivo do Acceptance Test Driven Development?
O ATDD procura fomentar a colaboração que dá origem a uma compreensão compartilhada dos requisitos do sistema, na forma de especificações escritas em inglês simples. As especificações são então transformadas em casos de testes de aceitação automatizados. Qual é o benefício em fazer isso?
Para entender por que isso é útil, pense primeiro em testes unitários. Esta é uma forma de teste que, por sua natureza, é muito centrada no desenvolvimento. Ele ajuda os engenheiros a documentar suas suposições sobre seu código em formato executável. Os testes unitários resolvem o problema de “estamos construindo a coisa certa?
Breve História
Em seu livro seminal “Test-driven development: By Example”, publicado pela primeira vez em 2000, Kent Beck menciona brevemente o ATDD — que ele chama de Application Test-Driven Development — mas rejeita a ideia.
Entretanto, a abordagem começou a ganhar força de qualquer forma, provavelmente devido ao sucesso de ferramentas como Fit e Fitnesse.
Em 2006, Dan North introduziu o conceito de Behavior-driven Development, que originalmente era apenas para substituir parte do vocabulário de TDD, mas acabou evoluindo para a análise de requisitos. O BDD compartilha muitas semelhanças com o ATDD e, com o tempo, grande parte do vocabulário, ferramentas e abordagens de um foi adotado pelo outro.
Como Funciona / Princípios e Práticas?
Uma Visão Geral do ATDD
O desenvolvimento orientado por testes de aceitação tem um fluxo de trabalho semelhante ao do TDD, uma vez que consiste em criar testes antes de escrever o código de produção. Ao contrário do TDD, que se baseia em testes unitários, os testes de ATDD são testes de aceitação. Os testes nascem de especificações que surgem de discussões envolvendo desenvolvedores, testadores e stakeholders ou clientes comerciais.
Src: Mysoftwarequality & Gojko Adzic
Após a criação dos testes, os desenvolvedores escrevem o código para que esses testes sejam aprovados, implementando as funcionalidades de acordo com as especificações.
Dessa forma, você não só obtém especificações abrangentes que todos podem entender e contribuir para — independentemente das habilidades de programação — mas também garante que os desenvolvedores realmente desenvolvam o que o cliente precisa.
Ciclo do Acceptance Test-driven Development
Discutir
Destilar
Demonstrar
Exemplo de Acceptance Test-driven Development
Agora vamos lhe dar um breve exemplo de desenvolvimento orientado por testes de aceitação.
A história do usuário
Discutir: Elaborando os critérios de aceitação
Aqui estão alguns exemplos de possíveis perguntas:
_____________________________
Cenário Inicial | Ação | Resultado Esperado |
Carrinho vazio | Adicionar ao carrinho o produto “Livro ‘Test-Driven Development By Example’”, que custa $29 | O carrinho deve conter um item, e o total deve ser de $29. |
Carrinho com um só produto (“Livro ‘Test-driven development by example’”, custando $29) | Retirar o item do carrinho | Carrinho vazio. Total de $0. |
Carrinho contendo 3 unidades do mesmo produto. | Acrescentar outra unidade do mesmo produto. | Carrinho ainda com três itens. A mensagem é exibida dizendo que os clientes não podem comprar mais de três itens do mesmo produto. |
_____________________________
Destilar: Transformar os critérios em testes automatizados
Fitnesse
Fonte: assertselenium.com
Isto é o que uma tabela de Fitnesse para testar o cenário de “adicionar itens a um carrinho” poderia parecer:
A tabela acima não é uma mera tabela. Esses são testes reais que podem ser executados. Entretanto, uma tentativa de executá-los resulta no seguinte erro:
We still don’t have a fixture, that is, an actual class that “glues” our Fitnesse test to actual code.
Ele diz que o cenário tem passos faltando, e então vai mais além e nos dá conselhos sobre como realmente preencher esses espaços em branco.
Desenvolver: Ligando os testes e implementando a funcionalidade
Semelhanças e Diferenças
Vamos agora discutir como o ATDD é semelhante ou diferente de outras práticas.
Acceptance Test-driven Development vs Test-Driven Development
O Acceptance Test-driven Development é frequentemente comparado ao Test-driven Development. Obviamente, eles estão relacionados, mas como os dois se comparam?
TDD — Test-driven Development — é uma metodologia na qual os desenvolvedores começam o desenvolvimento escrevendo um teste unitário reprovado e só depois escrevem o código de produção para que o teste seja aprovado.
Ao utilizar TDD, os desenvolvedores visam criar um código limpo e simples, composto de módulos frouxamente acoplados, levando a uma maior capacidade de manutenção. Entretanto, o TDD é uma abordagem centrada no desenvolvimento que se baseia em testes unitários. Como você já viu, os testes unitários podem levar ao problema de implementar corretamente as funcionalidades erradas.
O ATDD não se concentra no desenvolvedor, mas incentiva a colaboração entre os desenvolvedores e outros membros da equipe, mesmo aqueles sem habilidades de programação.
Você pode e deve usar TDD e ATDD juntos. No início de cada iteração, comece criando testes de aceitação automatizados com base em discussões com o especialista do domínio.
Quando chegar a hora de realmente implementar o código de produção, use TDD para testar o desenvolvimento do código. Em outras palavras, o TDD é um teste de aceitação automatizado: O TDD pode ser alavancado como um ciclo “interno” dentro das fases gerais do ATDD.
Acceptance Test-driven Development vs Behavior Driven Development
Armadilhas Comuns
As ferramentas ATDD podem ser uma fonte de complexidade/curva de aprendizagem. Por exemplo, o Fitnesse exige que as pessoas usem sua linguagem de markup. Embora existam alternativas — como criar os testes usando uma planilha de Excel e depois importar para o Fitnesse — não há como negar que há uma certa complexidade envolvida.
Para implementar com sucesso não apenas o ATDD, mas os testes de aceitação em geral exigirão treinamento e orientação para que as pessoas estejam prontas para desempenhar o que se espera de suas funções. Você também precisará de uma efetiva defesa ou evangelização para colocar todos a bordo e prontos para aplicar a abordagem.
Sem tudo isso, é provável que você obtenha apenas benefícios limitados.
Começando
Como começar com o ATDD? Aqui estão alguns passos práticos.
Leitura Adicional
Entregue Software que Resolva os Problemas de seus Usuários
A vida é boa quando suas equipes Agile estão sincronizadas!
Contate-Nos hoje para uma demonstração personalizada do SwiftEnterprise! Ou inscreva-se para atualizações abaixo.