ENTENDENDO E APLICANDO ESPECIFICAÇÃO POR EXEMPLOS LUIZA NUNES & PEDRO SILVA AGILE BRASIL - NOVEMBRO 2016
QUEM SOMOS NÓS? psilva@thoughtworks.com @pedrohns_ lnunes@thoughtworks.com @luhh_nunes
AGENDA Importância da comunicação Definição de Requisitos Especificação por Exemplo Técnicas para Definição de Requisitos BDD Mão na Massa
VAMOS PENSAR Como é feita a definição de requisitos de uma funcionalidade em seu projeto? Qual é a definição de pronto de uma funcionalidade em seu projeto? Como envolver pessoas não técnicas em conversas sobre requisitos técnicos? Como mostrar ao cliente o valor de negócio entregue em uma funcionalidade?
ESTE WORKSHOP, EM RESUMO: Entender o valor da colaboração entre pessoas do time Apresentar um guia para facilitar reuniões de levantamento de requisitos Dicas para a escrita de critérios de aceitação eficazes utilizando Especificação por Exemplo
Requisito: Valor/Necessidade de Negócio Estória de Usuário: Funcionalidade a ser implementada BDD/Exemplos: Ilustração do uso da funcionalidade
Contexto: A entrega gratuita é oferecida aos clientes VIP, uma vez que eles tenham comprado uma quantidade mínima de 5 livros. A entrega gratuita não é oferecida aos clientes regulares ou clientes VIP que tenham comprado qualquer produto além de livros. Como usuário VIP do site de e-commerce Eu quero saber quais o produtos que qualificam entrega grátis Para saber quando eu sou elegível para tal entrega DADO que estou logada como cliente <TIPO DE CLIENTE> E que meu carrinho de compras contém <CONTEÚDO DO CARRINHO> QUANDO eu prossigo para o pagamento ENTÃO sou avisada que fui qualificada para o tipo de entrega <ENTREGA>
Tipo de Consumidor Conteúdo do Carrinho Entrega
UM EXEMPLO Dado que a quantidade mínima de livros para se obter entrega grátis é cinco, então esperamos o seguinte: Tipo de Consumidor Conteúdo do Carrinho Entrega VIP 5 Livros Grátis VIP 4 Livros Padrão Regular 10 Livros Padrão VIP 5 Máquinas de Lavar Padrão VIP 5 Livros, 1 Máquina de Lavar Padrão
DEFININDO ESTÓRIAS DE USUÁRIOS
ESTÓRIA DE USUÁRIO Independente Negociável Valor Estimável Small (pequena) Testável
POR QUE? As inconsistências se tornam mais fáceis de serem identificadas quando escrevemos o nosso entendimento Exemplos do mundo real nos ajuda a eliminar premissas e definir a real regra de negócio Pessoas possuem diferentes abordagens para o mesmo problema. Um momento para se discutir essas abordagens evita a falácia do group thinking.
OS TRÊS AMIGOS
ESPECIFICAÇÃO POR EXEMPLO
O QUE É? Abordagem utilizada para definir requisitos colaborativamente, utilizando exemplos reais ao invés de afirmações abstratas. Especificação por exemplo se utiliza de algumas práticas, como BDD, para a escrita dos critérios de aceitação.
O QUE NÃO É? Uma ferramenta particular de software Escrita de exemplos sem discussões Um processo escrito em pedra
Specification by Example, Gojiko Adzik
BOAS PRÁTICAS Coletar exemplos básicos diretamente dos clientes Usar protótipos/desenhos que exemplificam a UI Explicação do contexto em pequenos parágrafos Utilizar BDD nas especificações Validar/revisar frequentemente
MÁS PRÁTICAS Utilizar respostas positivas e negativas nos exemplos Utilizar classes abstratas de equivalência Explorar todas as combinações possíveis Definir explicitamente todas as dependências na especificação
TÉCNICAS PARA DEFINIÇÃO DE ESTÓRIAS DE USUÁRIO
TÉCNICAS PARA DEFINIR ESTÓRIAS DE USUÁRIO Workshops com o time todo Workshops com representantes dos Três Amigos Pair-writing Desenvolvedores frequentemente revisando as histórias antes da iteração (IPM/pre-planning) Conversas informais Prepare somente exemplos iniciais para IPM/pre-planning ou conversas com stakeholders
ABORDAGEM Dada uma necessidade de negócio, entender: O "porquê e quem"? De onde o valor está vindo? Como o valor está relacionado ao que o usuário final espera/precisa Se há uma solução alternativa
BDD
Formato do BDD DADO (pré-condição) QUANDO (ação) ENTÃO (saída para validação)
BOAS E MÁS PRÁTICAS
EXEMPLO - MÁS PRÁTICAS Contexto: Um agente de Call Center busca por um determinado usuário por seu número de telefone Como um agente de Call Center Eu quero buscar por um cliente utilizando seu número de usuário Para encontrar as demais informações relacionadas a esse cliente DADO um usuário Quando buscar por um cliente ingressando um certo atributo ENTÃO o resultado esperado é exibido
EXEMPLO - MÁS PRÁTICAS Contexto: Um agente de Call Center busca por um determinado usuário por seu número de telefone Como um agente de Call Center Eu quero buscar por um cliente utilizando seu número de usuário Para encontrar as demais informações relacionadas a esse cliente DADO um usuário Quando buscar por um cliente ingressando um certo atributo ENTÃO o resultado esperado é exibido
EXEMPLO - MÁS PRÁTICAS Contexto: Um agente de Call Center busca por um determinado usuário por seu número de telefone Como um agente de Call Center Eu quero buscar por um cliente utilizando seu número de usuário Para encontrar as demais informações relacionadas a esse cliente DADO que eu estou utilizando o sistema como um Agente de Call Center QUANDO eu digito o número do cliente na caixa de busca E clico no botão buscar ENTÃO eu vejo o nome, endereço e documento do cliente exibidos em uma tabela
EXEMPLO - MÁS PRÁTICAS Contexto: Um agente de Call Center busca por um determinado usuário por seu número de telefone Como um agente de Call Center Eu quero buscar por um cliente utilizando seu número de usuário Para encontrar as demais informações relacionadas a esse cliente DADO que eu estou utilizando o sistema como um Agente de Call Center QUANDO eu digito o número do cliente na caixa de busca E clico no botão buscar ENTÃO eu vejo o nome, endereço e documento do cliente exibidos em uma tabela
EXEMPLO - BOAS PRÁTICAS Contexto: Um agente de Call Center busca por um determinado usuário por seu número de telefone Como um agente de Call Center Eu quero buscar por um cliente utilizando seu número de usuário Para encontrar as demais informações relacionadas a esse cliente DADO que eu estou utilizando o sistema como um Agente de Call Center QUANDO eu busco por um cliente, ingressando seu número de telefone ENTÃO o resultado da busca retorna o nome, endereço e documento do cliente buscado
EXEMPLO - BOAS PRÁTICAS Contexto: Um agente de Call Center busca por um determinado usuário por seu número de telefone Como um agente de Call Center Eu quero buscar por um cliente utilizando seu número de usuário Para encontrar as demais informações relacionadas a esse cliente DADO que eu estou utilizando o sistema como um Agente de Call Center QUANDO eu busco por um cliente, ingressando seu número de telefone ENTÃO o resultado da busca retorna o nome, endereço e documento do cliente buscado
AGORA É SUA VEZ!
SMART ALARM Contexto: O monitor de rota deve informar quaisquer problemas no trajeto especificado e avisar o cliente, respeitando o limite de tempo determinado. Como usuário do aplicativo Smart Alarm Eu quero poder adicionar um monitor de rota Para me alertar com antecedência de problemas no percurso entre dois endereços
SMART ALARM
BIBLIOGRAFIA Bridging the Communication Gap - Gojko Adzic Specification by Example - Gojko Adzic User Stories Applied - Mike Cohn The Agile Samurai - Jonathan Rasmusson
OBRIGADO! @luhh_nunes lnunes@thoughtworks.com @pedrohns_ psilva@thoughtworks.com