DevQA: Especificações Vivas: Como criar testes compiláveis para o seu User Case ou User Story

Kamilla Queiroz Xavier
Kamilla Queiroz XavierQuality Engineer Leader à @Sicredi

Será que era possível criar uma documentação formal que pudesse servir de base para o desenvolvedor, e assim diminuir o gap entre requisitos, desenvolvimento e testes ? Será que era possível ter documentações ou especificações vivas, ou seja, onde é ela mantida consistente com o código e é entregue como evidência de software funcionando ?

DevQA: Especificações Vivas: Como criar testes compiláveis para o seu User Case ou
Story - por Kamilla Queiróz
Será que era possível criar uma documentação formal que pudesse servir de base para o
desenvolvedor, e assim diminuir o gap entre requisitos, desenvolvimento e testes ? Será que
era possível ter documentações ou especificações vivas, ou seja, on
consistente com o código e é entregue como evidência de software funcionando ?
Introdução
É possível pensarmos que ao invés de trabalharmos para criar e manter uma série de
documentações estáticas e com custo de manutenção elevado, que gradualmente se tornará
ultrapassado, podemos desenvolver espec
entre conhecimento do negócio e a tecnologia, assim colaborando para que o foco do
desenvolvimento se mantenha na entrega de valor
Uma possível solução para essas questões, pode ser o uso de uma técnica cha
nada mais é que uma técnica ágil de desenvolvimento, também conhecida como
Specification By Example, que visa a integração entre regras de negócio com linguagem de
programação, encorajando a colaboração entre as várias partes envolvidas em um projeto de
desenvolvimento de software.
BDD
O Behaviour-Driven Development
ainda sendo possível pensá-
desenvolvimento orientado a testes
desenvolvimento, sendo escrito primeiro o testes para somente depois o código
conceitos do DDD, focando no comportamento do sistema somado a um desenvolvimento
visando testes.
DevQA: Especificações Vivas: Como criar testes compiláveis para o seu User Case ou
Será que era possível criar uma documentação formal que pudesse servir de base para o
desenvolvedor, e assim diminuir o gap entre requisitos, desenvolvimento e testes ? Será que
era possível ter documentações ou especificações vivas, ou seja, onde é ela mantida
consistente com o código e é entregue como evidência de software funcionando ?
É possível pensarmos que ao invés de trabalharmos para criar e manter uma série de
documentações estáticas e com custo de manutenção elevado, que gradualmente se tornará
ultrapassado, podemos desenvolver especificações vivas, que aliam e diminuem a distância
entre conhecimento do negócio e a tecnologia, assim colaborando para que o foco do
desenvolvimento se mantenha na entrega de valor
Uma possível solução para essas questões, pode ser o uso de uma técnica cha
nada mais é que uma técnica ágil de desenvolvimento, também conhecida como
, que visa a integração entre regras de negócio com linguagem de
programação, encorajando a colaboração entre as várias partes envolvidas em um projeto de
desenvolvimento de software.
Fig #1 - como visto ficando a cargo do negócio
definições de Features / Cenários / Passos/Etapas
(steps) e para a tecnologia Definições para etapas (Step
definitions) / Código / Biblioteca de automação
Driven Development, tem seu foco no comportamento do software, também
-lo como um aperfeiçoamento sendo a próxima milha para o
desenvolvimento orientado a testes - uma vez que os testes ainda orientam o
sendo escrito primeiro o testes para somente depois o código
conceitos do DDD, focando no comportamento do sistema somado a um desenvolvimento
DevQA: Especificações Vivas: Como criar testes compiláveis para o seu User Case ou User
Será que era possível criar uma documentação formal que pudesse servir de base para o
desenvolvedor, e assim diminuir o gap entre requisitos, desenvolvimento e testes ? Será que
de é ela mantida
consistente com o código e é entregue como evidência de software funcionando ?
É possível pensarmos que ao invés de trabalharmos para criar e manter uma série de
documentações estáticas e com custo de manutenção elevado, que gradualmente se tornará
ificações vivas, que aliam e diminuem a distância
entre conhecimento do negócio e a tecnologia, assim colaborando para que o foco do
Uma possível solução para essas questões, pode ser o uso de uma técnica chamada BDD, que
nada mais é que uma técnica ágil de desenvolvimento, também conhecida como
, que visa a integração entre regras de negócio com linguagem de
programação, encorajando a colaboração entre as várias partes envolvidas em um projeto de
como visto ficando a cargo do negócio
definições de Features / Cenários / Passos/Etapas
(steps) e para a tecnologia Definições para etapas (Step
definitions) / Código / Biblioteca de automação
, tem seu foco no comportamento do software, também
sendo a próxima milha para o
uma vez que os testes ainda orientam o
sendo escrito primeiro o testes para somente depois o código - com alguns
conceitos do DDD, focando no comportamento do sistema somado a um desenvolvimento
As especificações criadas quando, utilizado BDD usam a mesma linguagem onipresente
visto no domínio real, o qual pode ser benéfico tanto para usuários técnicos como para
usuários de negócio.
Assim o BDD se apoia no uso de um vocabulário pequeno e bem específico, nesse ponto sendo
seu foco a linguagem e as interações usadas no proces
“ruídos” na comunicação de forma que todos os interessados
– estejam alinhados, apoiando todos os envolvidos e reduzindo riscos de desenvolvimento
inadequado. A “venda da ideia” para BD
por envolver mais gente, seja mais “trabalhoso” de implantar.
Todo o desenvolvimento das especificações são baseadas em cenários, que utilizam a
linguagem de negócio usada pelo próprio cliente e pode ser ex
especificações fornecidas durante o procedimento de levantamento dos requisitos. Sendo que
alguns frameworks utilizam o conteúdo das estórias escritas em um arquivo de texto como
cenários para os testes.
Se lembrarmos de quando Dan North
perceber a sugestão para que fosse seguido um padrão de escrita.
Fig. #2 - Modelo sugerido por Dan North
Dessa forma, a documentação que é produzida quando escrevemos especificações em BDD, dá
aos leitores uma ideia de como o sistema irá se com
simplesmente verificar se os métodos estão retornados os dados corretos, ou seja, o software
é criado baseado em critérios de aceitação. Com isso, podemos atender as necessidades de
ambos os envolvidos no projeto, técnicos
aspectos do DDD com os conceitos fundamentais do TDD.
BDD pode ser realizado utilizando frameworks de testes de unidade, ou com frameworks
específicos de BDD que têm surgido em diversas linguagens. Um dos
BDD, JBehave, foi criado por Dan North, seguido de um framework em Ruby chamado
RBehave, no qual foi depois incorporado ao projeto
Hellesoy, é um outro exemplo que pode ser usado para testar código Java, .NET e Flex.
Utilizando o Cucumber, as funcionalidades do sistema são escritas em arquivos de texto e em
uma linguagem de domínio específico chamada
natural, mas que contém algumas palavras chaves que orientam sua sintaxe:
As especificações criadas quando, utilizado BDD usam a mesma linguagem onipresente
visto no domínio real, o qual pode ser benéfico tanto para usuários técnicos como para
Assim o BDD se apoia no uso de um vocabulário pequeno e bem específico, nesse ponto sendo
seu foco a linguagem e as interações usadas no processo de desenvolvimento, minimizando os
“ruídos” na comunicação de forma que todos os interessados – tanto de TI, quanto do negócio
estejam alinhados, apoiando todos os envolvidos e reduzindo riscos de desenvolvimento
inadequado. A “venda da ideia” para BDD costuma ser mais fácil do que para TDD. Embora,
por envolver mais gente, seja mais “trabalhoso” de implantar.
Todo o desenvolvimento das especificações são baseadas em cenários, que utilizam a
linguagem de negócio usada pelo próprio cliente e pode ser extraída das estórias ou
especificações fornecidas durante o procedimento de levantamento dos requisitos. Sendo que
alguns frameworks utilizam o conteúdo das estórias escritas em um arquivo de texto como
Dan North apresentou este conceito ainda em 2003, é possível
perceber a sugestão para que fosse seguido um padrão de escrita.
Modelo sugerido por Dan North - sendo esse apenas um modelo e não um formato obrigatório.
Dessa forma, a documentação que é produzida quando escrevemos especificações em BDD, dá
aos leitores uma ideia de como o sistema irá se comportar em vários cenários, e não
simplesmente verificar se os métodos estão retornados os dados corretos, ou seja, o software
é criado baseado em critérios de aceitação. Com isso, podemos atender as necessidades de
ambos os envolvidos no projeto, técnicos ou especialistas no negócio, através da mistura dos
aspectos do DDD com os conceitos fundamentais do TDD.
BDD pode ser realizado utilizando frameworks de testes de unidade, ou com frameworks
específicos de BDD que têm surgido em diversas linguagens. Um dos primeiros frameworks de
, foi criado por Dan North, seguido de um framework em Ruby chamado
, no qual foi depois incorporado ao projeto RSpec. O Cucumber, escrito por
um outro exemplo que pode ser usado para testar código Java, .NET e Flex.
Utilizando o Cucumber, as funcionalidades do sistema são escritas em arquivos de texto e em
uma linguagem de domínio específico chamada Gherkin muito semelhante à linguagem
natural, mas que contém algumas palavras chaves que orientam sua sintaxe:
As especificações criadas quando, utilizado BDD usam a mesma linguagem onipresente como
visto no domínio real, o qual pode ser benéfico tanto para usuários técnicos como para
Assim o BDD se apoia no uso de um vocabulário pequeno e bem específico, nesse ponto sendo
so de desenvolvimento, minimizando os
tanto de TI, quanto do negócio
estejam alinhados, apoiando todos os envolvidos e reduzindo riscos de desenvolvimento
D costuma ser mais fácil do que para TDD. Embora,
Todo o desenvolvimento das especificações são baseadas em cenários, que utilizam a
traída das estórias ou
especificações fornecidas durante o procedimento de levantamento dos requisitos. Sendo que
alguns frameworks utilizam o conteúdo das estórias escritas em um arquivo de texto como
apresentou este conceito ainda em 2003, é possível
sendo esse apenas um modelo e não um formato obrigatório.
Dessa forma, a documentação que é produzida quando escrevemos especificações em BDD, dá
portar em vários cenários, e não
simplesmente verificar se os métodos estão retornados os dados corretos, ou seja, o software
é criado baseado em critérios de aceitação. Com isso, podemos atender as necessidades de
ou especialistas no negócio, através da mistura dos
BDD pode ser realizado utilizando frameworks de testes de unidade, ou com frameworks
primeiros frameworks de
, foi criado por Dan North, seguido de um framework em Ruby chamado
, escrito por Aslak
um outro exemplo que pode ser usado para testar código Java, .NET e Flex.
Utilizando o Cucumber, as funcionalidades do sistema são escritas em arquivos de texto e em
muito semelhante à linguagem
• Funcionalidade
• Contexto
• Cenário
• Dado
• Quando
• Então
• E
• Mas
• Esquema de cenário
• Exemplos
Desta forma os testes de BDD são compostos, basicamente
funcionalidades - features e por arquivos de definição de passos
funcionalidades são compostos por cenários, que exemplificam uma ou mais regras de negócio
do sistema.
As funcionalidades são descritas e armazenadas em arquivos com extensão
descrevem um comportamento desejado para o sistema. Cada Funcionalidade pode conter
diversos cenários. Cada cenário é um exemplo concreto de como o sistema deveria se
comportar em uma determinada situação.
Devemos perceber que os cenários seguem sempre um padrão:
1. Colocam o sistema em um determinado estado;
2. Fazem alguma ação sobre o sistema (provocação);
3. Examinam o novo estado.
Fig #3 - Exemplo de um arquivo de funcionalidade com fluxo simples de login.
Dado que os cenários estão feitos, podemos agora criar uma ambiente de execução desses
cenários e fazer o primeiro passo do TDD, ou seja, criar meu teste unitário e deixar ele
"quebrando". Depois disso é hora da construção e implementação, onde para cada
funcionalidade criada, um ou mais cenários sejam atendidos, ou seja, meus testes começam a
funcionar.
Conclusão
Com isso, o BDD se torna uma evolução do TDD, saindo do ambiente somente de
desenvolvimento, e chegando nas áreas de requisitos, teste e qualidad
Desta forma os testes de BDD são compostos, basicamente, por arquivos que especificam as
e por arquivos de definição de passos - steps . Os arquivos com as
funcionalidades são compostos por cenários, que exemplificam uma ou mais regras de negócio
scritas e armazenadas em arquivos com extensão .feature
descrevem um comportamento desejado para o sistema. Cada Funcionalidade pode conter
diversos cenários. Cada cenário é um exemplo concreto de como o sistema deveria se
inada situação.
Devemos perceber que os cenários seguem sempre um padrão:
Colocam o sistema em um determinado estado;
Fazem alguma ação sobre o sistema (provocação);
Examinam o novo estado.
Exemplo de um arquivo de funcionalidade com fluxo simples de login.
Dado que os cenários estão feitos, podemos agora criar uma ambiente de execução desses
cenários e fazer o primeiro passo do TDD, ou seja, criar meu teste unitário e deixar ele
"quebrando". Depois disso é hora da construção e implementação, onde para cada
uncionalidade criada, um ou mais cenários sejam atendidos, ou seja, meus testes começam a
Com isso, o BDD se torna uma evolução do TDD, saindo do ambiente somente de
desenvolvimento, e chegando nas áreas de requisitos, teste e qualidade.
, por arquivos que especificam as
. Os arquivos com as
funcionalidades são compostos por cenários, que exemplificam uma ou mais regras de negócio
.feature. Cenários
descrevem um comportamento desejado para o sistema. Cada Funcionalidade pode conter
diversos cenários. Cada cenário é um exemplo concreto de como o sistema deveria se
Dado que os cenários estão feitos, podemos agora criar uma ambiente de execução desses
cenários e fazer o primeiro passo do TDD, ou seja, criar meu teste unitário e deixar ele
"quebrando". Depois disso é hora da construção e implementação, onde para cada
uncionalidade criada, um ou mais cenários sejam atendidos, ou seja, meus testes começam a
Com isso, o BDD se torna uma evolução do TDD, saindo do ambiente somente de
Vantagens
Para a Engenharia:
• é um teste que evita defeito, não que encontra defeitos;
• torna os testes como requisitos; torna os testes mais elegantes;
• torna os testes mais legíveis e sucintos;
• torna os testes mais simples para pessoas de negócios;
• consome menos tempo para escrever testes;
• é uma documentação executável;
• é tecnicamente um teste de unidade, integração ou sistema, mas com valor de teste
de aceite;
Para a Gestão:
• pode ser usado como ferramenta para mensura o tamanho e progresso do projeto;
• é uma documentação evolutiva;
• é formado por critérios de aceite que representam o valor do produto e não valor de
documentação;
Desvantagens
• é necessário uma boa abstração e uma visão sistêmica para criar os cenários;
• é necessário um especialista de negócio para fazer a duas mãos os cenários;
• refactoring é necessário e comum.
• deve está aliado a um ambiente de integração contínua.
Links Relacionados
The RSpec Book: Behaviour-Driven Development with RSpec, Cucumber, and Friends
Wikipedia: Behavior-driven development
BDDWiki: BehaviourDrivenDevelopment
Publicado originalmente em O Tapioca: http://www.otapioca.com.br/?p=2574

Contenu connexe

Tendances(9)

Apresentação - SoftwareApresentação - Software
Apresentação - Software
matheusvetor4.6K vues
DevOps - visão geralDevOps - visão geral
DevOps - visão geral
Allyson Chiarini915 vues
UmlUml
Uml
Fábio Nogueira de Lucena1.6K vues
O poder da colaboração pessoalO poder da colaboração pessoal
O poder da colaboração pessoal
Cisco do Brasil1.8K vues
Vender soluções de vídeo da CiscoVender soluções de vídeo da Cisco
Vender soluções de vídeo da Cisco
Cisco do Brasil1.3K vues

Similaire à DevQA: Especificações Vivas: Como criar testes compiláveis para o seu User Case ou User Story

BDDBDD
BDDCOTIC-PROEG (UFPA)
969 vues13 diapositives
Bdd&tddBdd&tdd
Bdd&tddMárcio Habigzang Brufatto
502 vues35 diapositives
DDDDDD
DDDThiago Veiga
230 vues35 diapositives
Fdd em uma casca de bananaFdd em uma casca de banana
Fdd em uma casca de bananaejedelmal
3.5K vues23 diapositives

Similaire à DevQA: Especificações Vivas: Como criar testes compiláveis para o seu User Case ou User Story(20)

BDDBDD
BDD
COTIC-PROEG (UFPA)969 vues
Bdd&tddBdd&tdd
Bdd&tdd
Márcio Habigzang Brufatto502 vues
DDDDDD
DDD
Thiago Veiga230 vues
Fdd em uma casca de bananaFdd em uma casca de banana
Fdd em uma casca de banana
ejedelmal3.5K vues
Subm_SamuelPereira_FINALSubm_SamuelPereira_FINAL
Subm_SamuelPereira_FINAL
ND Engineering and Software - Health Technology182 vues
Padrões Web & Code StandardPadrões Web & Code Standard
Padrões Web & Code Standard
Toni Albuquerque1.1K vues
Instituto Stela S&T#001, Projeto de software com testes unitáriosInstituto Stela S&T#001, Projeto de software com testes unitários
Instituto Stela S&T#001, Projeto de software com testes unitários
Instituto Stela (Florianópolis-SC, Brasil)637 vues
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlab
Jackson F. de A. Mafra339 vues
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
Ruben Marcus Luz Paschoarelli1.8K vues
Introdução a BDDIntrodução a BDD
Introdução a BDD
Ismael4.6K vues
Domain Driven DesignDomain Driven Design
Domain Driven Design
Daniel Everling107 vues
Apresentacao ADDs Cases AlfrescoApresentacao ADDs Cases Alfresco
Apresentacao ADDs Cases Alfresco
ADDs Solutions538 vues

Plus de Kamilla Queiroz Xavier(20)

Poder & Força do 1:1Poder & Força do 1:1
Poder & Força do 1:1
Kamilla Queiroz Xavier111 vues
Do caos às métricas de fluxoDo caos às métricas de fluxo
Do caos às métricas de fluxo
Kamilla Queiroz Xavier146 vues
Pizza Kanban GamePizza Kanban Game
Pizza Kanban Game
Kamilla Queiroz Xavier1.3K vues
Vamos conversar sobre transição de carreira?Vamos conversar sobre transição de carreira?
Vamos conversar sobre transição de carreira?
Kamilla Queiroz Xavier75 vues
Agilidade,  e agora?Agilidade,  e agora?
Agilidade, e agora?
Kamilla Queiroz Xavier86 vues
DevOps é SIM uma questão de QADevOps é SIM uma questão de QA
DevOps é SIM uma questão de QA
Kamilla Queiroz Xavier121 vues
DevOps pela visão de QADevOps pela visão de QA
DevOps pela visão de QA
Kamilla Queiroz Xavier127 vues
DevOps pela visão de QADevOps pela visão de QA
DevOps pela visão de QA
Kamilla Queiroz Xavier274 vues
DevOps pela visão de QADevOps pela visão de QA
DevOps pela visão de QA
Kamilla Queiroz Xavier528 vues
Qualidade e Teste de Software - O que preciso saberQualidade e Teste de Software - O que preciso saber
Qualidade e Teste de Software - O que preciso saber
Kamilla Queiroz Xavier1.1K vues

DevQA: Especificações Vivas: Como criar testes compiláveis para o seu User Case ou User Story

  • 1. DevQA: Especificações Vivas: Como criar testes compiláveis para o seu User Case ou Story - por Kamilla Queiróz Será que era possível criar uma documentação formal que pudesse servir de base para o desenvolvedor, e assim diminuir o gap entre requisitos, desenvolvimento e testes ? Será que era possível ter documentações ou especificações vivas, ou seja, on consistente com o código e é entregue como evidência de software funcionando ? Introdução É possível pensarmos que ao invés de trabalharmos para criar e manter uma série de documentações estáticas e com custo de manutenção elevado, que gradualmente se tornará ultrapassado, podemos desenvolver espec entre conhecimento do negócio e a tecnologia, assim colaborando para que o foco do desenvolvimento se mantenha na entrega de valor Uma possível solução para essas questões, pode ser o uso de uma técnica cha nada mais é que uma técnica ágil de desenvolvimento, também conhecida como Specification By Example, que visa a integração entre regras de negócio com linguagem de programação, encorajando a colaboração entre as várias partes envolvidas em um projeto de desenvolvimento de software. BDD O Behaviour-Driven Development ainda sendo possível pensá- desenvolvimento orientado a testes desenvolvimento, sendo escrito primeiro o testes para somente depois o código conceitos do DDD, focando no comportamento do sistema somado a um desenvolvimento visando testes. DevQA: Especificações Vivas: Como criar testes compiláveis para o seu User Case ou Será que era possível criar uma documentação formal que pudesse servir de base para o desenvolvedor, e assim diminuir o gap entre requisitos, desenvolvimento e testes ? Será que era possível ter documentações ou especificações vivas, ou seja, onde é ela mantida consistente com o código e é entregue como evidência de software funcionando ? É possível pensarmos que ao invés de trabalharmos para criar e manter uma série de documentações estáticas e com custo de manutenção elevado, que gradualmente se tornará ultrapassado, podemos desenvolver especificações vivas, que aliam e diminuem a distância entre conhecimento do negócio e a tecnologia, assim colaborando para que o foco do desenvolvimento se mantenha na entrega de valor Uma possível solução para essas questões, pode ser o uso de uma técnica cha nada mais é que uma técnica ágil de desenvolvimento, também conhecida como , que visa a integração entre regras de negócio com linguagem de programação, encorajando a colaboração entre as várias partes envolvidas em um projeto de desenvolvimento de software. Fig #1 - como visto ficando a cargo do negócio definições de Features / Cenários / Passos/Etapas (steps) e para a tecnologia Definições para etapas (Step definitions) / Código / Biblioteca de automação Driven Development, tem seu foco no comportamento do software, também -lo como um aperfeiçoamento sendo a próxima milha para o desenvolvimento orientado a testes - uma vez que os testes ainda orientam o sendo escrito primeiro o testes para somente depois o código conceitos do DDD, focando no comportamento do sistema somado a um desenvolvimento DevQA: Especificações Vivas: Como criar testes compiláveis para o seu User Case ou User Será que era possível criar uma documentação formal que pudesse servir de base para o desenvolvedor, e assim diminuir o gap entre requisitos, desenvolvimento e testes ? Será que de é ela mantida consistente com o código e é entregue como evidência de software funcionando ? É possível pensarmos que ao invés de trabalharmos para criar e manter uma série de documentações estáticas e com custo de manutenção elevado, que gradualmente se tornará ificações vivas, que aliam e diminuem a distância entre conhecimento do negócio e a tecnologia, assim colaborando para que o foco do Uma possível solução para essas questões, pode ser o uso de uma técnica chamada BDD, que nada mais é que uma técnica ágil de desenvolvimento, também conhecida como , que visa a integração entre regras de negócio com linguagem de programação, encorajando a colaboração entre as várias partes envolvidas em um projeto de como visto ficando a cargo do negócio definições de Features / Cenários / Passos/Etapas (steps) e para a tecnologia Definições para etapas (Step definitions) / Código / Biblioteca de automação , tem seu foco no comportamento do software, também sendo a próxima milha para o uma vez que os testes ainda orientam o sendo escrito primeiro o testes para somente depois o código - com alguns conceitos do DDD, focando no comportamento do sistema somado a um desenvolvimento
  • 2. As especificações criadas quando, utilizado BDD usam a mesma linguagem onipresente visto no domínio real, o qual pode ser benéfico tanto para usuários técnicos como para usuários de negócio. Assim o BDD se apoia no uso de um vocabulário pequeno e bem específico, nesse ponto sendo seu foco a linguagem e as interações usadas no proces “ruídos” na comunicação de forma que todos os interessados – estejam alinhados, apoiando todos os envolvidos e reduzindo riscos de desenvolvimento inadequado. A “venda da ideia” para BD por envolver mais gente, seja mais “trabalhoso” de implantar. Todo o desenvolvimento das especificações são baseadas em cenários, que utilizam a linguagem de negócio usada pelo próprio cliente e pode ser ex especificações fornecidas durante o procedimento de levantamento dos requisitos. Sendo que alguns frameworks utilizam o conteúdo das estórias escritas em um arquivo de texto como cenários para os testes. Se lembrarmos de quando Dan North perceber a sugestão para que fosse seguido um padrão de escrita. Fig. #2 - Modelo sugerido por Dan North Dessa forma, a documentação que é produzida quando escrevemos especificações em BDD, dá aos leitores uma ideia de como o sistema irá se com simplesmente verificar se os métodos estão retornados os dados corretos, ou seja, o software é criado baseado em critérios de aceitação. Com isso, podemos atender as necessidades de ambos os envolvidos no projeto, técnicos aspectos do DDD com os conceitos fundamentais do TDD. BDD pode ser realizado utilizando frameworks de testes de unidade, ou com frameworks específicos de BDD que têm surgido em diversas linguagens. Um dos BDD, JBehave, foi criado por Dan North, seguido de um framework em Ruby chamado RBehave, no qual foi depois incorporado ao projeto Hellesoy, é um outro exemplo que pode ser usado para testar código Java, .NET e Flex. Utilizando o Cucumber, as funcionalidades do sistema são escritas em arquivos de texto e em uma linguagem de domínio específico chamada natural, mas que contém algumas palavras chaves que orientam sua sintaxe: As especificações criadas quando, utilizado BDD usam a mesma linguagem onipresente visto no domínio real, o qual pode ser benéfico tanto para usuários técnicos como para Assim o BDD se apoia no uso de um vocabulário pequeno e bem específico, nesse ponto sendo seu foco a linguagem e as interações usadas no processo de desenvolvimento, minimizando os “ruídos” na comunicação de forma que todos os interessados – tanto de TI, quanto do negócio estejam alinhados, apoiando todos os envolvidos e reduzindo riscos de desenvolvimento inadequado. A “venda da ideia” para BDD costuma ser mais fácil do que para TDD. Embora, por envolver mais gente, seja mais “trabalhoso” de implantar. Todo o desenvolvimento das especificações são baseadas em cenários, que utilizam a linguagem de negócio usada pelo próprio cliente e pode ser extraída das estórias ou especificações fornecidas durante o procedimento de levantamento dos requisitos. Sendo que alguns frameworks utilizam o conteúdo das estórias escritas em um arquivo de texto como Dan North apresentou este conceito ainda em 2003, é possível perceber a sugestão para que fosse seguido um padrão de escrita. Modelo sugerido por Dan North - sendo esse apenas um modelo e não um formato obrigatório. Dessa forma, a documentação que é produzida quando escrevemos especificações em BDD, dá aos leitores uma ideia de como o sistema irá se comportar em vários cenários, e não simplesmente verificar se os métodos estão retornados os dados corretos, ou seja, o software é criado baseado em critérios de aceitação. Com isso, podemos atender as necessidades de ambos os envolvidos no projeto, técnicos ou especialistas no negócio, através da mistura dos aspectos do DDD com os conceitos fundamentais do TDD. BDD pode ser realizado utilizando frameworks de testes de unidade, ou com frameworks específicos de BDD que têm surgido em diversas linguagens. Um dos primeiros frameworks de , foi criado por Dan North, seguido de um framework em Ruby chamado , no qual foi depois incorporado ao projeto RSpec. O Cucumber, escrito por um outro exemplo que pode ser usado para testar código Java, .NET e Flex. Utilizando o Cucumber, as funcionalidades do sistema são escritas em arquivos de texto e em uma linguagem de domínio específico chamada Gherkin muito semelhante à linguagem natural, mas que contém algumas palavras chaves que orientam sua sintaxe: As especificações criadas quando, utilizado BDD usam a mesma linguagem onipresente como visto no domínio real, o qual pode ser benéfico tanto para usuários técnicos como para Assim o BDD se apoia no uso de um vocabulário pequeno e bem específico, nesse ponto sendo so de desenvolvimento, minimizando os tanto de TI, quanto do negócio estejam alinhados, apoiando todos os envolvidos e reduzindo riscos de desenvolvimento D costuma ser mais fácil do que para TDD. Embora, Todo o desenvolvimento das especificações são baseadas em cenários, que utilizam a traída das estórias ou especificações fornecidas durante o procedimento de levantamento dos requisitos. Sendo que alguns frameworks utilizam o conteúdo das estórias escritas em um arquivo de texto como apresentou este conceito ainda em 2003, é possível sendo esse apenas um modelo e não um formato obrigatório. Dessa forma, a documentação que é produzida quando escrevemos especificações em BDD, dá portar em vários cenários, e não simplesmente verificar se os métodos estão retornados os dados corretos, ou seja, o software é criado baseado em critérios de aceitação. Com isso, podemos atender as necessidades de ou especialistas no negócio, através da mistura dos BDD pode ser realizado utilizando frameworks de testes de unidade, ou com frameworks primeiros frameworks de , foi criado por Dan North, seguido de um framework em Ruby chamado , escrito por Aslak um outro exemplo que pode ser usado para testar código Java, .NET e Flex. Utilizando o Cucumber, as funcionalidades do sistema são escritas em arquivos de texto e em muito semelhante à linguagem
  • 3. • Funcionalidade • Contexto • Cenário • Dado • Quando • Então • E • Mas • Esquema de cenário • Exemplos Desta forma os testes de BDD são compostos, basicamente funcionalidades - features e por arquivos de definição de passos funcionalidades são compostos por cenários, que exemplificam uma ou mais regras de negócio do sistema. As funcionalidades são descritas e armazenadas em arquivos com extensão descrevem um comportamento desejado para o sistema. Cada Funcionalidade pode conter diversos cenários. Cada cenário é um exemplo concreto de como o sistema deveria se comportar em uma determinada situação. Devemos perceber que os cenários seguem sempre um padrão: 1. Colocam o sistema em um determinado estado; 2. Fazem alguma ação sobre o sistema (provocação); 3. Examinam o novo estado. Fig #3 - Exemplo de um arquivo de funcionalidade com fluxo simples de login. Dado que os cenários estão feitos, podemos agora criar uma ambiente de execução desses cenários e fazer o primeiro passo do TDD, ou seja, criar meu teste unitário e deixar ele "quebrando". Depois disso é hora da construção e implementação, onde para cada funcionalidade criada, um ou mais cenários sejam atendidos, ou seja, meus testes começam a funcionar. Conclusão Com isso, o BDD se torna uma evolução do TDD, saindo do ambiente somente de desenvolvimento, e chegando nas áreas de requisitos, teste e qualidad Desta forma os testes de BDD são compostos, basicamente, por arquivos que especificam as e por arquivos de definição de passos - steps . Os arquivos com as funcionalidades são compostos por cenários, que exemplificam uma ou mais regras de negócio scritas e armazenadas em arquivos com extensão .feature descrevem um comportamento desejado para o sistema. Cada Funcionalidade pode conter diversos cenários. Cada cenário é um exemplo concreto de como o sistema deveria se inada situação. Devemos perceber que os cenários seguem sempre um padrão: Colocam o sistema em um determinado estado; Fazem alguma ação sobre o sistema (provocação); Examinam o novo estado. Exemplo de um arquivo de funcionalidade com fluxo simples de login. Dado que os cenários estão feitos, podemos agora criar uma ambiente de execução desses cenários e fazer o primeiro passo do TDD, ou seja, criar meu teste unitário e deixar ele "quebrando". Depois disso é hora da construção e implementação, onde para cada uncionalidade criada, um ou mais cenários sejam atendidos, ou seja, meus testes começam a Com isso, o BDD se torna uma evolução do TDD, saindo do ambiente somente de desenvolvimento, e chegando nas áreas de requisitos, teste e qualidade. , por arquivos que especificam as . Os arquivos com as funcionalidades são compostos por cenários, que exemplificam uma ou mais regras de negócio .feature. Cenários descrevem um comportamento desejado para o sistema. Cada Funcionalidade pode conter diversos cenários. Cada cenário é um exemplo concreto de como o sistema deveria se Dado que os cenários estão feitos, podemos agora criar uma ambiente de execução desses cenários e fazer o primeiro passo do TDD, ou seja, criar meu teste unitário e deixar ele "quebrando". Depois disso é hora da construção e implementação, onde para cada uncionalidade criada, um ou mais cenários sejam atendidos, ou seja, meus testes começam a Com isso, o BDD se torna uma evolução do TDD, saindo do ambiente somente de
  • 4. Vantagens Para a Engenharia: • é um teste que evita defeito, não que encontra defeitos; • torna os testes como requisitos; torna os testes mais elegantes; • torna os testes mais legíveis e sucintos; • torna os testes mais simples para pessoas de negócios; • consome menos tempo para escrever testes; • é uma documentação executável; • é tecnicamente um teste de unidade, integração ou sistema, mas com valor de teste de aceite; Para a Gestão: • pode ser usado como ferramenta para mensura o tamanho e progresso do projeto; • é uma documentação evolutiva; • é formado por critérios de aceite que representam o valor do produto e não valor de documentação; Desvantagens • é necessário uma boa abstração e uma visão sistêmica para criar os cenários; • é necessário um especialista de negócio para fazer a duas mãos os cenários; • refactoring é necessário e comum. • deve está aliado a um ambiente de integração contínua. Links Relacionados The RSpec Book: Behaviour-Driven Development with RSpec, Cucumber, and Friends Wikipedia: Behavior-driven development BDDWiki: BehaviourDrivenDevelopment Publicado originalmente em O Tapioca: http://www.otapioca.com.br/?p=2574