BDD - Especificações por exemplo

De acordo com Gojko Adzic, autor de 'Especificação por Exemplo', Especificação por Exemplo é um conjunto de padrões de processo que facilitam a mudança em produtos de software para garantir que o produto certo seja entregue com eficiência ”.

A Especificação por Exemplo é uma abordagem colaborativa para definir os requisitos e testes funcionais orientados a negócios para produtos de software com base na captura e ilustração de requisitos usando exemplos realistas em vez de declarações abstratas.

Especificação por exemplo - Visão geral

O objetivo da Especificação por Exemplo é focar no desenvolvimento e entrega de requisitos de negócios priorizados e verificáveis. Embora o conceito de Especificação por Exemplo em si seja relativamente novo, é simplesmente uma reformulação das práticas existentes.

Ele oferece suporte a um vocabulário conciso e muito específico, conhecido como linguagem onipresente que -

  • Habilita requisitos executáveis.

  • É usado por todos na equipe.

  • É criado por uma equipe multifuncional.

  • Capta a compreensão de todos.

A especificação por exemplo pode ser usada como uma entrada direta na construção de testes automatizados que refletem o domínio do negócio. Assim, o foco da Especificação por Exemplo é construir o produto certo e construir o produto da maneira certa.

Objetivo da Especificação por Exemplo

O objetivo principal da Especificação por Exemplo é construir o produto certo. Concentra-se na compreensão compartilhada, estabelecendo assim uma única fonte de verdade. Ele permite a automação dos critérios de aceitação para que o foco esteja na prevenção de defeitos, e não na detecção de defeitos. Também promove testes precoces para encontrar os defeitos precocemente.

Uso de SbE

A especificação por exemplo é usada para ilustrar o comportamento esperado do sistema que descreve o valor do negócio. A ilustração é feita por meio de exemplos concretos e reais. Esses exemplos são usados ​​para criar requisitos executáveis ​​que são -

  • Testável sem tradução.

  • Capturado na documentação ao vivo.

A seguir estão as razões pelas quais usamos exemplos para descrever especificações particulares -

  • Eles são mais fáceis de entender.

  • Eles são mais difíceis de interpretar mal.

Vantagens do SbE

As vantagens de usar a Especificação por Exemplo são -

  • Maior qualidade

  • Desperdício reduzido

  • Risco reduzido de defeitos de produção

  • Esforço focado

  • As alterações podem ser feitas com mais segurança

  • Envolvimento de negócios aprimorado

Aplicações de SbE

Especificação por exemplo encontre aplicativos em -

  • Seja um negócio complexo ou uma organização complexa.

  • Não funciona bem para problemas puramente técnicos.

  • Não funciona bem para produtos de software focados em IU.

  • Pode ser aplicado a sistemas legados também.

SbE e teste de aceitação

As vantagens da Especificação por Exemplo em termos de teste de Aceitação são -

  • Uma única ilustração é usada para requisitos detalhados e testes

  • O andamento do projeto é em termos de testes de aceitação -

    • Cada teste serve para testar um comportamento.

    • Um teste está passando por um comportamento ou não.

    • Um teste de aprovação representa que o comportamento específico foi concluído.

    • Se um projeto que requer 100 comportamentos para ser concluído tem 60 comportamentos concluídos, ele está 60% concluído.

  • Os testadores mudam da correção de defeitos para a prevenção de defeitos e contribuem para o design da solução.

  • A automação permite a compreensão instantânea do impacto de uma mudança de requisito na solução.

Especificação por exemplo - O que isso significa para diferentes funções

O objetivo da Especificação por Exemplo é promover a colaboração de todos na equipe, incluindo o cliente em todo o projeto para entregar valor de negócio. Todos, para melhor compreensão, usam o mesmo vocabulário.

Função Uso de SbE
Analista de negócios
  • Os requisitos são inequívocos e sem lacunas funcionais.

  • Desenvolvedores, realmente leiam as especificações.

Desenvolvedor
  • Os desenvolvedores entendem melhor o que está sendo desenvolvido.

  • O progresso do desenvolvimento é monitorado melhor contando as especificações que foram desenvolvidas corretamente.

Testador
  • Os testadores entendem melhor o que está sendo testado.

  • Os testadores estão envolvidos desde o início e têm uma função no design.

  • Os testadores trabalham para a prevenção de defeitos em vez da detecção de defeitos.

Todos
  • Economiza tempo identificando erros desde o início.

  • Um produto de qualidade é produzido desde o início.

SbE - Um Conjunto de Padrões de Processo

Como vimos no início deste capítulo, a Especificação por Exemplo é definida como um conjunto de padrões de processo que facilitam a mudança nos produtos de software para garantir que o produto certo seja entregue com eficiência.

Os padrões de processo são -

  • Especificação colaborativa

  • Ilustrando especificações usando exemplos

  • Refinando a especificação

  • Exemplos de automação

  • Validando freqüentemente

  • Documentação viva

Especificação Colaborativa

Os objetivos da especificação colaborativa são -

  • Faça com que as várias funções em uma equipe tenham um entendimento comum e um vocabulário compartilhado.

  • Envolva todos no projeto para que possam contribuir com suas diferentes perspectivas sobre um recurso.

  • Garanta a comunicação compartilhada e a propriedade dos recursos.

Esses objetivos são alcançados em um workshop de especificações também conhecido como Reunião dos Três Amigos. Os Três Amigos são BA, QA e o desenvolvedor. Embora existam outras funções no projeto, esses três seriam responsáveis ​​e responsáveis ​​desde a definição até a entrega dos recursos.

During the meeting −

  • O Analista de Negócios (BA) apresenta os requisitos e testes para um novo recurso.

  • Os três Amigos (BA, Desenvolvedor e QA) discutem o novo recurso e revisam as especificações.

  • O controle de qualidade e o desenvolvedor também identificam os requisitos ausentes.

  • Os três amigos

    • Utilize um modelo compartilhado usando uma linguagem onipresente.

    • Use vocabulário de domínio (um glossário é mantido, se necessário).

    • Procure diferenças e conflitos.

  • Não pule para os detalhes de implementação neste momento.

  • Chegue a um consenso sobre se um recurso foi especificado o suficiente.

  • Um senso comum de requisitos e propriedade de teste facilita as especificações de qualidade

  • Os requisitos são apresentados como cenários, que fornecem requisitos explícitos e inequívocos. Um cenário é um exemplo do comportamento do sistema da perspectiva dos usuários.

Ilustrando a Especificação usando Exemplos

Os cenários são especificados usando a estrutura Dado-Quando-Então para criar uma especificação testável -

Given <alguma pré-condição>

And <pré-condições adicionais> Optional

When <ocorre uma ação / gatilho>

Then <alguma pós-condição>

And <pós-condições adicionais> Optional

Esta especificação é um exemplo de comportamento do sistema. Também representa um critério de aceitação do sistema.

A equipe discute os exemplos e o feedback é incorporado até que haja acordo de que os exemplos cobrem o comportamento esperado do recurso. Isso garante uma boa cobertura de teste.

Refinando a Especificação

Para refinar uma especificação,

  • Seja preciso ao escrever os exemplos. Se um exemplo se tornar complexo, divida-o em exemplos mais simples.

  • Concentre-se na perspectiva do negócio e evite detalhes técnicos.

  • Considere as condições positivas e negativas.

  • Siga o vocabulário específico do domínio.

  • Discuta os exemplos com o cliente.

    • Escolha conversas para fazer isso.

    • Considere apenas os exemplos nos quais o cliente está interessado. Isso permite a produção apenas do código necessário e evita cobrir todas as combinações possíveis, que podem não ser necessárias

  • Para garantir que o cenário seja aprovado, todos os casos de teste desse cenário devem ser aprovados. Portanto, aprimore as especificações para torná-las testáveis. Os casos de teste podem incluir vários intervalos e valores de dados (casos de limite e canto), bem como diferentes regras de negócios, resultando em alterações nos dados.

  • Especifique regras de negócios adicionais, como cálculos complexos, manipulação / transformação de dados, etc.

  • Inclui cenários não funcionais (por exemplo, desempenho, carga, usabilidade, etc.) como Especificação por Exemplo

Exemplos de automação

A camada de automação precisa ser mantida muito simples - apenas a fiação da especificação para o sistema em teste. Você pode usar uma ferramenta para o mesmo.

Realize a automação de teste usando Domain Specific Language (DSL) e mostre uma conexão clara entre entradas e saídas. Concentre-se na especificação e não no script. Certifique-se de que os testes são precisos, fáceis de entender e testáveis.

Validando Freqüentemente

Inclua validação de exemplo em seu pipeline de desenvolvimento com cada mudança (adição / modificação). Existem muitas técnicas e ferramentas que podem (e devem) ser adotadas para ajudar a garantir a qualidade de um produto. Eles giram em torno de três princípios-chaveTest Early, Test Well e Test Often.

Execute os testes com freqüência para que você possa identificar os elos fracos. Os exemplos que representam os comportamentos ajudam a rastrear o progresso e um comportamento é considerado concluído somente após a aprovação no teste correspondente.

Documentação viva

Mantenha as especificações tão simples e curtas quanto possível. Organize as especificações e desenvolva-as à medida que o trabalho avança. Torne a documentação acessível a todos na equipe.

Especificação por exemplo de etapas do processo

A ilustração mostra as etapas do processo em Especificação por exemplo.

Antipadrões

Os antipadrões são certos padrões no desenvolvimento de software considerados uma má prática de programação. Ao contrário dos padrões de design, que são abordagens comuns para problemas comuns, que foram formalizados e geralmente são considerados uma boa prática de desenvolvimento, os antipadrões são o oposto e são indesejáveis

Os antipadrões dão origem a vários problemas.

Antipadrão Problemas
Sem colaboração
  • Muitas suposições

  • Construindo coisa errada

  • Testando coisa errada

  • Desconheço quando o código é concluído

Desconheço quando o código é concluído
  • Testes difíceis de manter

  • Especificação difícil de entender

  • Perda de interesse de representantes comerciais

Exemplos muito detalhados ou muito centrados na IU
  • Testes difíceis de manter

  • Especificações difíceis de entender

  • Perda de interesse de representantes comerciais

Esforço subestimado necessário
  • As equipes pensam que falharam e ficam decepcionadas cedo

Solução para os problemas - Qualidade

A qualidade pode ser garantida observando os anti-padrões. Para minimizar os problemas criados pelos anti-padrões, você deve -

  • Reúna-se para especificar usando exemplos.

  • Limpe e melhore os exemplos.

  • Escreva um código que satisfaça os exemplos

  • Automatize os exemplos e implante.

  • Repita a abordagem para cada história de usuário.

Para resolver os problemas devido a anti-padrões significa adesão a -

  • Collaboration.

  • Focando no quê.

  • Foco nos negócios.

  • Esteja preparado.

Vamos entender o que cada uma das opções acima significa.

Colaboração

Em colaboração -

  • Empresários, desenvolvedores e testadores fornecem informações a partir de suas próprias perspectivas.

  • Exemplos automatizados provam que a equipe construiu a coisa certa.

  • O processo é mais valioso do que os próprios testes.

Focando no que

Você deve se concentrar na questão - 'o quê'. Enquanto se concentra em 'o quê' -

  • Não tente cobrir todos os casos possíveis.

  • Não se esqueça de usar diferentes tipos de testes.

  • Mantenha os exemplos o mais simples possível.

  • Os exemplos devem ser facilmente entendidos pelos usuários do sistema.

  • As ferramentas não devem desempenhar um papel importante nas oficinas.

Foco nos negócios

Para focar no negócio -

  • Mantenha as especificações na intenção do negócio.

  • Inclua negócios na criação e revisão de especificações.

  • Oculte todos os detalhes na camada de automação.

Esteja preparado

Esteja preparado para o seguinte -

  • Os benefícios não são imediatamente aparentes, mesmo quando as práticas da equipe são alteradas.

  • Apresentar o SbE é um desafio.

  • Requer tempo e investimentos.

  • O teste automatizado não é gratuito.

Ferramentas

O uso de ferramentas não é obrigatório para a Especificação por Exemplo, embora na prática várias ferramentas estejam disponíveis. Há casos de sucesso seguindo a Especificação por Exemplo, mesmo sem usar uma ferramenta.

As seguintes ferramentas suportam Especificação por Exemplo -

  • Cucumber

  • SpecFlow

  • Fitnesse

  • Jbehave

  • Concordion

  • Behat

  • Jasmine

  • Relish

  • Speclog