Já tive algumas discussões com amigos da comunidade sobre a utilização de Especificação Por Exemplo, e todas elas acabaram por me motivar a escrever este artigo e tentar esclarecer o assunto. ![]()
Situação: quando a galera de QA ouve falar de especificação, BDD, ATDD ou outros termos correlacionados, pensa logo na automação de testes e no fato de que será acrescentada mais uma camada de abstração (as features), gerando mais trabalho.
Problema: pensar na especificação apenas como mais uma camada da automação de testes. Ela definitivamente não é isso.
O que ela é, então?
A Especificação Por Exemplo (ou Sbe, do inglês Specification By Example) é um conjunto de práticas que ajudam a construir o produto certo, focando na comunicação entre as pessoas envolvidas no projeto de forma que todos possam ter o mesmo entendimento e que contribuam para o produto. Ela tem foco no negócio (nada de termos em tecniquês), preconizando uma linguagem comum e uma documentação que seja viva.
Construir Certo X Produto Certo
Essa, pra mim, é uma das maiores sacadas da Especificação: entender qual o produto certo baseado no problema que o cliente quer resolver ou nos objetivos de negócio.
Construir certo, utilizando as melhores práticas de desenvolvimento, melhores ferramentas, testes automatizados, continuous delivery e tantas outras coisas de nada adianta se o produto não atinge os objetivos de negócio e não gera lucro pra empresa.
Mas como? Vou detalhar nos próximos artigos, mas em resumo a especificação foca na colaboração dos indivíduos envolvidos (QAs, Devs, POs, Uxs, Stakeholders, toda a galera) para, a partir dos objetivos de negócio, descobrir quais features são relevantes e vão atender a esse objetivo.
Geralmente, os stakeholders já pensam no final do processo (quero um carro, por exemplo), mas na maioria das vezes existe uma distância entre o que eles querem (o carro) e o que eles precisam (você pode descobrir que eles só têm que percorrer 900m, e uma bicicleta é o máximo que eles precisam).
Então, a especificação te dá processos que vão ajudar a melhorar o entendimento e a colaboração dos envolvidos no projeto, focando no real problema (ou objetivo de negócio) do stakeholder. Além disso, te oferece exemplos que podem utilizados para automatizar os testes. ![]()
Documentação Viva
Em desenvolvimento de software, existem vários tipos de documentação que podem ser aplicados ao gosto do cliente. O problema é que fatalmente ela acaba ficando desatualizada em relação ao código da aplicação.
Além disso, existem dois cenários extremos que acabam acontecendo:
Cenário 1 (geralmente observado em desenvolvimento Cascata) – muitos e diferentes documentos (Termo de Iniciação, Termo de Abertura do Projeto, Casos de Uso, Especificação Técnica, Plano de Testes, Casos de Teste etc.).
Cenário 2 (geralmente observado em desenvolvimento ágil) – já que é documentação mínima, não vamos fazer documentação. Nosso código é o documento.
Ambos os cenários são extremos. No primeiro, você tem toneladas de documentos completamente apartados do código da aplicação e que com o decorrer do projeto vão ficar desatualizados. No segundo, você tem apenas o código como documentação, impedindo que pessoas não técnicas (POs e até mesmo os stakeholders) tenham uma ferramenta pra colaborar no entendimento dos requisitos com o time.
Por isso a especificação fala da Documentação Viva. Ela é:
- simples de manter: um único documento, em um único lugar (geralmente no controle de versão junto com o código);
- sempre atualizada: qualquer mudança que seja necessária será feita apenas nela;
- executável: você utiliza essa documentação (isso mesmo, o texto em pt-br que você escreveu pra definir o comportamento da aplicação) para automatizar testes (agora sim a gente fala de testes automatizados);
- confiável: como ela está sempre atualizada, ela é confiável. Além disso, como essa documentação foi automatizada por meio de testes, sempre que algum comportamento mudar o teste vai falhar e te obrigar a atualizar a documentação;
- colaborativa: é construída com a ajuda de todos os envolvidos no projeto;
- esclarecedora: clara o suficiente para que todos entendam e serve de fonte de consultas caso exista alguma dúvida na hora de desenvolver.
Vamos para os padrões então
Como pode ser visto na figura acima, a especificação trata de 7 processos:
- Derivar o escopo a partir do objetivo;
- Especificar colaborativamente;
- Ilustrar usando exemplos;
- Refinar a especificação;
- Automatizar as especificações;
- Validar frequentemente;
- Evoluir a documentação viva;
Nos próximos artigos, vou falar detalhadamente de cada um desses processos.
IMPORTANTE: Da próxima vez que ouvir falar de Especificação Por Exemplo, não pense primeiramente em testes automatizados (eles são consequência), e sim em um conjunto de padrões pra construir o produto certo.
Ficou alguma dúvida ou tem algum comentário sobre o texto? Deixe sua contribuição abaixo. Até a próxima!
***
Artigo publicado em http://www.concretesolutions.com.br/2016/09/22/especificacao-por-exemplo-1/





