Desenvolvimento

26 out, 2016

Especificação Por Exemplo como ela é – Parte 03

Publicidade

Chegamos ao último artigo da nossa série! Se você não estava acompanhando e chegou agora, pode ver o primeiro aqui e o segundo aqui. 26Automatizar as especificações

Depois de tudo especificado e do entendimento estar uniforme, partimos para automatizar as especificações a fim de ter uma suíte de testes regressivos que nos ajude no decorrer da vida do produto.

Um grande desafio nesse ponto é automatizar sem mudar as especificações que foram escritas anteriormente (por isso aquelas dicas de não amarrar a especificação a elementos da tela, design ou fazê-la parecer um script).

Os testes automatizados ajudam a garantir que a documentação seja viva: depois de implementados e sendo executados frequentemente (falaremos disso no próximo ponto), qualquer diferença entre o que estiver especificado e o software será relatada e você poderá investigar para saber se realmente é um problema ou se algum requisito mudou e você esqueceu de atualizar a especificação (de alguma forma você acaba sendo obrigado a atualizar a especificação, diferente do cenário citado no primeiro post, quando se tem muitas fontes de documentação e algumas delas sempre acabam desatualizadas em relação ao código do software).

LEMBRETE: código de teste deve ser tratado como código de produção. Principalmente quando você começa a automatizar testes, deve-se pensar na melhor arquitetura para que eles tenham fácil manutenção a longo prazo.

Validar frequentemente

Não adianta apenas escrever as especificações e os testes automatizados se eles não forem executados com frequência. Para isso utilizamos um servidor de Integração Contínua para rodar frequentemente nossos testes. A periodicidade deve ser decidida conforme a necessidade do projeto, mas geralmente vale a pena rodar os testes sempre que for colocada uma nova release no ambiente de testes.

Problemas:

Infelizmente os testes de interface são bem lentos e podem ser instáveis já que eles dependem de todos os componentes que a aplicação utiliza. Alguns cuidados devem ser tomados para que os testes realmente agreguem ao projeto e não se tornem uma dor de cabeça:

– Identificar os testes instáveis, isolá-los e corrigi-los;
– Ter um ambiente dedicado para execução desses testes;
– Ter deploy automatizado;
– Isolar sistemas externos;

Evoluir a documentação viva

Por fim, as especificações devem ser organizadas de acordo com um senso lógico e ter as seguintes características:

– fácil de entender: como já falamos anteriormente, as especificações não devem ser muito longas e nem usar conceitos técnicos de automação, assim elas se tornam fáceis de entender também para as pessoas de negócio que não têm conhecimento técnico;

– consistentes: as especificações descrevem como o sistema funciona. Mesmo que mude a linguagem utilizada no desenvolvimento, as especificações continuarão válidas e persistirão durante a vida do produto. Por isso é importante que elas sejam consistentes. Dicas: basear a linguagem da especificação em personas e colaborar para definir a linguagem do domínio de negócio que será utilizada (por exemplo entender os termos específicos do negócio)

– organizada para fácil acesso: ela deve estar disponível para acesso a todos que estiverem interessados e organizada de forma lógica. Por exemplo: podem estar separadas por processos de negócio – login, logout, carrinho, pagamento, etc)

Concluindo

Existem outras características muito interessantes sobre Especificação por Exemplo que podem ser vistas no livro, que eu recomendo muito a leitura.

Como citei no primeiro artigo da série o objetivo era tentar esclarecer um pouco do que se trata a especificação e o quanto ela é útil, não apenas para escrever testes automatizados, mas principalmente para ajudar a descobrir qual o produto certo que vai atender ao cliente e estimular a colaboração entre todos os envolvidos.

Ficou alguma dúvida ou tem algo a acrescentar? Aproveite os campos abaixo. Até a próxima!

Referências:

Specification by Example: How Successful Teams Deliver the Right Software
Eradicating Non-Determinism in Tests

 

Artigo publicado originalmente em http://www.concretesolutions.com.br/2016/09/24/especificacao-por-exemplo-3/