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
-
tabelas
-
páginas de wiki
-
ou mesmo código em uma DSL (linguagem específica do domínio).
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:
-
Se eu adicionar outra instância do mesmo produto ao carrinho, devo aumentar o número ou adicioná-lo como um novo item?
-
Existe um limite para quantas unidades do mesmo produto eu posso adicionar ao meu carrinho de compras?
-
Existe um limite para quantos itens eu posso adicionar ao meu carrinho?
_____________________________
| 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.
-
Treine todos sobre o assunto para que fiquem na mesma página. Comece assegurando que todos na organização tenham acesso a materiais de treinamento para que possam ser instruídos quando se trata de ATDD.
-
Capacite a todos nas habilidades para suas funções e responsabilidades. A implementação do ATDD requer habilidades muito específicas, incluindo as sociais — sabendo como discutir e colaborar com especialistas de domínio, por exemplo. Naturalmente, também são necessárias habilidades técnicas, tais como competência em ferramentas de teste.
-
Familiarize-se com os requisitos no formato de histórias de usuários. As histórias de usuários são certamente um dos fundamentos do ATDD. É crucial que todos os membros da equipe se sintam à vontade para ler e também escrever os requisitos de software usando este formato. Mais tarde, você deve expandir isto para também ser competente na linguagem Gherkin.
-
Durante a reunião inicial, no início de cada iteração, comece a praticar a extração de cenários/critérios de aceitação dos stakeholders e escreva testes em inglês simples com elas. Não é necessário utilizar um formato ou linguagem específica para isto.
-
Após melhorar na etapa anterior, procure por um tutorial ou guia sobre um framework de ATDD específico de testes de aceitação. Adote esse framework e comece a implementar os testes de aceitação de acordo com o ciclo ATDD.
-
Avalie regularmente a abordagem e adapte-se quando necessário.
Leitura Adicional
-
Test Driven Development: By Example, por Kent Beck
-
ATDD by Example: A Practical Guide to Acceptance Test-Driven Development por Markus Gärtner
-
Driving Development with Tests: ATDD and TDD – Artigo por Elisabeth Hendrickson
-
Behavior Driven Development (BDD): Creating Useful Software Customers Want
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.
