SlideShare a Scribd company logo
1 of 52
Especificação por
meio de exemplos
UMA INTRODUÇÃO

Fábio Nogueira de Lucena
Referência


Specification By Example:
How successful teams deliver the right software
Gojko Adzic, Manning, 2011

http://specificationbyexample.com/
Créditos para o autor e sua obra


Specification By Example:
How successful teams deliver the right software
Gojko Adzic, Manning, 2011

Frases, citações e excertos obtidos
deste livro.
Aviso
 As

informações aqui contidas são
uma interpretação do conteúdo do
livro indicado no slide anterior.
 Consulte o original para detalhes.
Esteja alerta!


Tecnologias são propostas e criadas continuamente para resolver
problemas. Duas questões surgem:

A estratégia realmente contribui?
 O problema resolvido é parecido
com o meu?

Orientações


Conhecimento de cerca de 50 projetos.



Alguns pequenos, outros envolvendo equipes espalhadas por
diversos continentes.



Processos executados: XP, Scrum, Kanban e similares.



Outros nomes



Behavior-Driven Development





Testes de aceitação ágil

Specification by Example, ...

Apresentado por meio de padrões
Tradicionalmente, ...
Desenvolver software exige extensas
especificações funcionais e longas fases de
testes.
O que não é compatível com liberações
semanais.
O que precisamos?


Evitar especificação “exagerada”



Documentação confiável que explica o que o sistema
faz



Verificar de forma eficiente se o sistema faz o que a
especificação diz.



Manter documentação relevante e confiável com o
mínimo de custo de manutenção.

Especificação por meio de exemplos é
uma estratégia dirigida para atingir estes objetivos.
“Ao revelar os padrões de processos
empregados por equipes de sucesso,
eu espero ajudar outros a implementar
estas ideias deliberadamente.”
Gojko Adzic
Specification By Example
Manning, 2011.
Padrões de processos


Derivar escopo de objetivos



Especificar de forma colaborativa



Ilustrar usando exemplos



Refinar a especificação



Automatizar a validação sem alterar especificações



Validar frequentemente



Evoluir o sistema de documentação
Derivar escopo de objetivos
Domínio da solução

Derivar escopo de objetivos
Domínio do problema
Derivar escopo de objetivos
(contexto)


Escopo é solução para problema do domínio.



Escopo é um meio de se atingir um objetivo de negócio.



Muitos esperam a definição do escopo pelo cliente, product owner
ou usuário antes de iniciar a implementação.



Tudo que ocorre antes da implementação é geralmente ignorado
pela equipe de desenvolvimento.



Após a especificação, desenvolvedores implementam a solução.
Derivar escopo de objetivos


Se clientes definem o escopo, então o projeto não se beneficia do
conhecimento das pessoas na equipe de desenvolvimento.



O software fará o que o cliente pediu, mas não necessariamente o
que precisava.
ESCOPO

O Código de Trânsito Brasileiro foi alterado
(Lei nº 11.910 de 18 de março de 2009)
“Art. 105. São equipamentos obrigatórios dos veículos,
entre outros a serem estabelecidos pelo CONTRAN: (...)
VII - equipamento suplementar de retenção –
air bag frontal para o condutor e o passageiro do banco dianteiro. (...)
CONTRAN, Resolução no. 312, instituiu a obrigatoriedade do sistema
antitravamento das rodas (freio ABS).
OBJETIVO

Segurança
ESCOPO

“Eu quero um carro com vido elétrico, ... Sério?

OBJETIVO

Ah, conforto.
RESUMO

Posso indicar o carro com as características, mas como
especialista em automóveis, se eu conhecesse o real
objetivo, possivelmente seria mais útil, efetivo, ...
Derivar escopo de objetivos
„Em vez de “cegamente” aceitar
requisitos como a solução para um
problema desconhecido, equipes de
sucesso derivam escopo de objetivos.’
Gojko Adzic
Derivar escopo de objetivos


Inicia-se com objetivo de negócio do cliente.



Todos colaboram para definir o escopo que atinge o objetivo.



A equipe trabalha com os usuários do negócio na determinação
da solução.



Aqueles do negócio concentram-se no objetivo de uma
característica desejável e no valor que esperam extrair dela.



A equipe então sugere uma solução que é mais barata, mais
rápida, ...
Especificar de forma
colaborativa
Em vez de contar com uma única pessoa
para obter as especificações corretamente,
equipes de sucesso colaboram com entendidos no
negócio para especificar a solução.
Cria uma
“propriedade compartilhada”
das especificações, tornando a
equipe mais engajada.
Ilustrar usando exemplos
Em vez de esperar pelo registro preciso de
especificações em uma linguagem de programação
durante a implementação, equipes de sucesso
ilustram especificações usando exemplos.
Equipe trabalha com especialistas do negócio
para identificar “exemplos chave” que
descrevem a funcionalidade esperada.
Desenvolvedores sugerem exemplos que
ilustram casos “problemáticos”.
Todos têm uma compreensão compartilhada
do que precisa ser produzido.
Exemplos chave servem como alvo para
desenvolvedores e como critério de avaliação
objetivo para checar se o desenvolvimento
está concluído.
Se os exemplos são fáceis de entender,
então podem ser empregados como
requisitos detalhados e não ambíguos.
Refinar a especificação
Especialistas no negócio tendem a pensar
da perspectiva da interface com o usuário.

Detalhar como algo deve ser feito é em
vez do que é exigido é um desperdício.
Muitos detalhes tornam exemplos difíceis
de comunicar e compreender.
Equipes de sucesso, ao
refinar a especificação,
removem informações “não essenciais”
e criam um contexto preciso e concreto
para o desenvolvimento e testes.
Equipes de sucesso especificam
o que é suposto que o software
faça, em vez de como ele faz.
Cucumber (exemplo)

Especificação com
exemplos é uma
especificação de
trabalho, é um teste de
aceitação, é um teste
funcional.
Automatizar a validação
sem alterar especificações
Verificação rápida é essencial para o desenvolvimento
de software em iterações curtas.
Ou seja, é preciso tornar o processo de validação
barato e eficiente.
Solução óbvia: automação.
Automação sim, mas como?
Rhino Mocks

Especificações
automatizadas
tecnicamente
são inacessíveis aos
especialistas do negócio.
Várias versões
Versão desenvolvedor

Versão mais legível

Sincronização???!!!
Equipes de sucesso não correm o risco de
“tradução entre formatos”.
Exemplos chave que são
compreensíveis e
acessíveis a toda a
equipe tornam-se
especificações
executáveis.

Cucumber (exemplo)
Se é preciso alterar, então há um único lugar.
Única fonte

Consumida por
desenvolvedores,
responsáveis por testes,
especialistas no domínio,
e outros.
Fitnesse
Wiki
Concordion
Concordion
Cucumber
specFlow
codeeffects

http://rule.codeeffects.com/
OpenRules
Validar frequentemente
Um suporte eficiente de
software exige sabermos o
quê ele faz e o porquê.
Em muitos casos, a única forma
de fazer isto é recorrer ao
código ou encontrar alguém
que possa fazer para nós.
Código é, frequentemente, a única coisa em que
podemos confiar; muita documentação é
desatualizada antes do término do projeto.
Desenvolvedores são oráculos de conhecimento
e gargalos de informação.
Evoluir o sistema de
documentação
Ao longo do tempo, mudanças ocorrem e
provocam atualizações na
“documentação viva”.
Créditos para o autor e sua obra
(agradecimentos finais)


Specification By Example:
How successful teams deliver the right software
Gojko Adzic, Manning, 2011

Frases, citações e excertos obtidos
deste livro.

More Related Content

What's hot

홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
Módulo 5 - Redes de Computadores e Internet, Apostila
Módulo 5 - Redes de Computadores e Internet, ApostilaMódulo 5 - Redes de Computadores e Internet, Apostila
Módulo 5 - Redes de Computadores e Internet, Apostila
Paulo Guimarães
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
min woog kim
 
개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님
NAVER D2
 
Notes on Reducing Firefox's Memory Consumption
Notes on Reducing Firefox's Memory ConsumptionNotes on Reducing Firefox's Memory Consumption
Notes on Reducing Firefox's Memory Consumption
nnethercote
 

What's hot (20)

고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
Tecnologias Atuais de Redes - Aula 3 - VPN [Apostila]
Tecnologias Atuais de Redes - Aula 3 - VPN [Apostila]Tecnologias Atuais de Redes - Aula 3 - VPN [Apostila]
Tecnologias Atuais de Redes - Aula 3 - VPN [Apostila]
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
Camada de enlace parte1
Camada de enlace   parte1Camada de enlace   parte1
Camada de enlace parte1
 
『게임 매니악스 액션 게임 알고리즘』 - 미리보기
『게임 매니악스 액션 게임 알고리즘』 - 미리보기『게임 매니악스 액션 게임 알고리즘』 - 미리보기
『게임 매니악스 액션 게임 알고리즘』 - 미리보기
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
Aula1-Conceitos de SGBD
Aula1-Conceitos de SGBDAula1-Conceitos de SGBD
Aula1-Conceitos de SGBD
 
Módulo 5 - Redes de Computadores e Internet, Apostila
Módulo 5 - Redes de Computadores e Internet, ApostilaMódulo 5 - Redes de Computadores e Internet, Apostila
Módulo 5 - Redes de Computadores e Internet, Apostila
 
Sd05 (si) relógios e sincronização
Sd05 (si)   relógios e sincronizaçãoSd05 (si)   relógios e sincronização
Sd05 (si) relógios e sincronização
 
Ad-Tech on AWS 세미나 | AWS와 실시간 입찰
Ad-Tech on AWS 세미나 | AWS와 실시간 입찰Ad-Tech on AWS 세미나 | AWS와 실시간 입찰
Ad-Tech on AWS 세미나 | AWS와 실시간 입찰
 
CMM e CMMI
CMM e CMMICMM e CMMI
CMM e CMMI
 
Protocolo MQTT - Redes de Computadores
Protocolo MQTT - Redes de Computadores Protocolo MQTT - Redes de Computadores
Protocolo MQTT - Redes de Computadores
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
Redes de comunicação - TGPSI
Redes de comunicação - TGPSIRedes de comunicação - TGPSI
Redes de comunicação - TGPSI
 
Variables, Arreglos y Tipos de Datos en VB .NET
Variables, Arreglos y Tipos de Datos en VB .NETVariables, Arreglos y Tipos de Datos en VB .NET
Variables, Arreglos y Tipos de Datos en VB .NET
 
개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님
 
O papel do Arquiteto de Soluções na RPA.
O papel do Arquiteto de Soluções na RPA.O papel do Arquiteto de Soluções na RPA.
O papel do Arquiteto de Soluções na RPA.
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
Notes on Reducing Firefox's Memory Consumption
Notes on Reducing Firefox's Memory ConsumptionNotes on Reducing Firefox's Memory Consumption
Notes on Reducing Firefox's Memory Consumption
 

Viewers also liked

Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?
Bernardo Fontes
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
Rafael Ponte
 

Viewers also liked (7)

Uml
UmlUml
Uml
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?
 
Behaviour Driven Development (BDD) With Apex on Force.com
Behaviour Driven Development (BDD) With Apex on Force.comBehaviour Driven Development (BDD) With Apex on Force.com
Behaviour Driven Development (BDD) With Apex on Force.com
 
Como o Cucumber Funciona
Como o Cucumber FuncionaComo o Cucumber Funciona
Como o Cucumber Funciona
 
BDD com Cucumber
BDD com CucumberBDD com Cucumber
BDD com Cucumber
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
 
ATDD - Acceptance Test Driven Development
ATDD - Acceptance Test Driven DevelopmentATDD - Acceptance Test Driven Development
ATDD - Acceptance Test Driven Development
 

Similar to Especificação por meio de exemplos (BDD, testes de aceitação, ...)

Fdd em uma casca de banana
Fdd em uma casca de bananaFdd em uma casca de banana
Fdd em uma casca de banana
ejedelmal
 
1- Apresentacao Metodologia RCP
1- Apresentacao Metodologia RCP1- Apresentacao Metodologia RCP
1- Apresentacao Metodologia RCP
Frank Coelho
 

Similar to Especificação por meio de exemplos (BDD, testes de aceitação, ...) (20)

Introdução a Metodologia XP (E Xtreme Programming)
Introdução a Metodologia XP (E Xtreme Programming)Introdução a Metodologia XP (E Xtreme Programming)
Introdução a Metodologia XP (E Xtreme Programming)
 
Modelos de Processo de Desenvolvimento de Software 2 - Prof.ª Cristiane Fidelix
Modelos de Processo de Desenvolvimento de Software 2 - Prof.ª Cristiane FidelixModelos de Processo de Desenvolvimento de Software 2 - Prof.ª Cristiane Fidelix
Modelos de Processo de Desenvolvimento de Software 2 - Prof.ª Cristiane Fidelix
 
38484931 questionario-es
38484931 questionario-es38484931 questionario-es
38484931 questionario-es
 
Specificationby example
Specificationby example Specificationby example
Specificationby example
 
Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?
 
Engenharia de software aula 6 - Introdução ao Desenvolvimento Ágil
Engenharia de software aula 6 - Introdução ao Desenvolvimento ÁgilEngenharia de software aula 6 - Introdução ao Desenvolvimento Ágil
Engenharia de software aula 6 - Introdução ao Desenvolvimento Ágil
 
Fdd em uma casca de banana
Fdd em uma casca de bananaFdd em uma casca de banana
Fdd em uma casca de banana
 
Introdução: eXtreme Programming
Introdução: eXtreme ProgrammingIntrodução: eXtreme Programming
Introdução: eXtreme Programming
 
Desenvolvimento Ágil
Desenvolvimento ÁgilDesenvolvimento Ágil
Desenvolvimento Ágil
 
Programacao Extrema
Programacao ExtremaProgramacao Extrema
Programacao Extrema
 
Desenvolvimento ágil de software
Desenvolvimento ágil de softwareDesenvolvimento ágil de software
Desenvolvimento ágil de software
 
DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquitetura
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégias
 
Métodos Ágeis - Aula02
Métodos Ágeis - Aula02Métodos Ágeis - Aula02
Métodos Ágeis - Aula02
 
1- Apresentacao Metodologia RCP
1- Apresentacao Metodologia RCP1- Apresentacao Metodologia RCP
1- Apresentacao Metodologia RCP
 
1 apresentacao metodologia rcp
1  apresentacao metodologia rcp1  apresentacao metodologia rcp
1 apresentacao metodologia rcp
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócio
 
Lista de Práticas Ágeis
Lista de Práticas ÁgeisLista de Práticas Ágeis
Lista de Práticas Ágeis
 

More from Fábio Nogueira de Lucena

More from Fábio Nogueira de Lucena (20)

CSS
CSSCSS
CSS
 
Fundamentos de Programação Front-End
Fundamentos de Programação Front-EndFundamentos de Programação Front-End
Fundamentos de Programação Front-End
 
JavaScript: Aprendendo a programar
JavaScript: Aprendendo a programarJavaScript: Aprendendo a programar
JavaScript: Aprendendo a programar
 
HTML5: Primeiros Contatos (visão geral)
HTML5: Primeiros Contatos (visão geral)HTML5: Primeiros Contatos (visão geral)
HTML5: Primeiros Contatos (visão geral)
 
HTTP: Um Curso Básico
HTTP: Um Curso BásicoHTTP: Um Curso Básico
HTTP: Um Curso Básico
 
Apresentacao curso-2017-08-08
Apresentacao curso-2017-08-08Apresentacao curso-2017-08-08
Apresentacao curso-2017-08-08
 
Jornada Goiana em Engenharia de Software 2017
Jornada Goiana em Engenharia de Software 2017Jornada Goiana em Engenharia de Software 2017
Jornada Goiana em Engenharia de Software 2017
 
Arquétipos
ArquétiposArquétipos
Arquétipos
 
Introducao integracao
Introducao integracaoIntroducao integracao
Introducao integracao
 
Healthdb Visão Geral
Healthdb Visão GeralHealthdb Visão Geral
Healthdb Visão Geral
 
Engenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógicoEngenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógico
 
Arquitetura de Software EXPLICADA
Arquitetura de Software EXPLICADAArquitetura de Software EXPLICADA
Arquitetura de Software EXPLICADA
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Arquitetura software
Arquitetura softwareArquitetura software
Arquitetura software
 
Prontuário Eletrônico do Paciente
Prontuário Eletrônico do PacienteProntuário Eletrônico do Paciente
Prontuário Eletrônico do Paciente
 
Introducao
IntroducaoIntroducao
Introducao
 
Como desenvolver-software
Como desenvolver-softwareComo desenvolver-software
Como desenvolver-software
 
Orientação a Objetos (3)
Orientação a Objetos (3)Orientação a Objetos (3)
Orientação a Objetos (3)
 
Orientação a Objetos (2)
Orientação a Objetos (2)Orientação a Objetos (2)
Orientação a Objetos (2)
 
Orientação a Objetos (1)
Orientação a Objetos (1)Orientação a Objetos (1)
Orientação a Objetos (1)
 

Recently uploaded

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Recently uploaded (6)

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

Especificação por meio de exemplos (BDD, testes de aceitação, ...)

  • 1. Especificação por meio de exemplos UMA INTRODUÇÃO Fábio Nogueira de Lucena
  • 2. Referência  Specification By Example: How successful teams deliver the right software Gojko Adzic, Manning, 2011 http://specificationbyexample.com/
  • 3. Créditos para o autor e sua obra  Specification By Example: How successful teams deliver the right software Gojko Adzic, Manning, 2011 Frases, citações e excertos obtidos deste livro.
  • 4. Aviso  As informações aqui contidas são uma interpretação do conteúdo do livro indicado no slide anterior.  Consulte o original para detalhes.
  • 5. Esteja alerta!  Tecnologias são propostas e criadas continuamente para resolver problemas. Duas questões surgem: A estratégia realmente contribui?  O problema resolvido é parecido com o meu? 
  • 6. Orientações  Conhecimento de cerca de 50 projetos.  Alguns pequenos, outros envolvendo equipes espalhadas por diversos continentes.  Processos executados: XP, Scrum, Kanban e similares.  Outros nomes   Behavior-Driven Development   Testes de aceitação ágil Specification by Example, ... Apresentado por meio de padrões
  • 7. Tradicionalmente, ... Desenvolver software exige extensas especificações funcionais e longas fases de testes. O que não é compatível com liberações semanais.
  • 8. O que precisamos?  Evitar especificação “exagerada”  Documentação confiável que explica o que o sistema faz  Verificar de forma eficiente se o sistema faz o que a especificação diz.  Manter documentação relevante e confiável com o mínimo de custo de manutenção. Especificação por meio de exemplos é uma estratégia dirigida para atingir estes objetivos.
  • 9.
  • 10. “Ao revelar os padrões de processos empregados por equipes de sucesso, eu espero ajudar outros a implementar estas ideias deliberadamente.” Gojko Adzic Specification By Example Manning, 2011.
  • 11. Padrões de processos  Derivar escopo de objetivos  Especificar de forma colaborativa  Ilustrar usando exemplos  Refinar a especificação  Automatizar a validação sem alterar especificações  Validar frequentemente  Evoluir o sistema de documentação
  • 12. Derivar escopo de objetivos
  • 13. Domínio da solução Derivar escopo de objetivos Domínio do problema
  • 14. Derivar escopo de objetivos (contexto)  Escopo é solução para problema do domínio.  Escopo é um meio de se atingir um objetivo de negócio.  Muitos esperam a definição do escopo pelo cliente, product owner ou usuário antes de iniciar a implementação.  Tudo que ocorre antes da implementação é geralmente ignorado pela equipe de desenvolvimento.  Após a especificação, desenvolvedores implementam a solução.
  • 15. Derivar escopo de objetivos  Se clientes definem o escopo, então o projeto não se beneficia do conhecimento das pessoas na equipe de desenvolvimento.  O software fará o que o cliente pediu, mas não necessariamente o que precisava.
  • 16. ESCOPO O Código de Trânsito Brasileiro foi alterado (Lei nº 11.910 de 18 de março de 2009) “Art. 105. São equipamentos obrigatórios dos veículos, entre outros a serem estabelecidos pelo CONTRAN: (...) VII - equipamento suplementar de retenção – air bag frontal para o condutor e o passageiro do banco dianteiro. (...) CONTRAN, Resolução no. 312, instituiu a obrigatoriedade do sistema antitravamento das rodas (freio ABS).
  • 18. ESCOPO “Eu quero um carro com vido elétrico, ... Sério? OBJETIVO Ah, conforto.
  • 19. RESUMO Posso indicar o carro com as características, mas como especialista em automóveis, se eu conhecesse o real objetivo, possivelmente seria mais útil, efetivo, ...
  • 20. Derivar escopo de objetivos „Em vez de “cegamente” aceitar requisitos como a solução para um problema desconhecido, equipes de sucesso derivam escopo de objetivos.’ Gojko Adzic
  • 21. Derivar escopo de objetivos  Inicia-se com objetivo de negócio do cliente.  Todos colaboram para definir o escopo que atinge o objetivo.  A equipe trabalha com os usuários do negócio na determinação da solução.  Aqueles do negócio concentram-se no objetivo de uma característica desejável e no valor que esperam extrair dela.  A equipe então sugere uma solução que é mais barata, mais rápida, ...
  • 23. Em vez de contar com uma única pessoa para obter as especificações corretamente, equipes de sucesso colaboram com entendidos no negócio para especificar a solução.
  • 24. Cria uma “propriedade compartilhada” das especificações, tornando a equipe mais engajada.
  • 26. Em vez de esperar pelo registro preciso de especificações em uma linguagem de programação durante a implementação, equipes de sucesso ilustram especificações usando exemplos.
  • 27. Equipe trabalha com especialistas do negócio para identificar “exemplos chave” que descrevem a funcionalidade esperada. Desenvolvedores sugerem exemplos que ilustram casos “problemáticos”. Todos têm uma compreensão compartilhada do que precisa ser produzido.
  • 28. Exemplos chave servem como alvo para desenvolvedores e como critério de avaliação objetivo para checar se o desenvolvimento está concluído. Se os exemplos são fáceis de entender, então podem ser empregados como requisitos detalhados e não ambíguos.
  • 30. Especialistas no negócio tendem a pensar da perspectiva da interface com o usuário. Detalhar como algo deve ser feito é em vez do que é exigido é um desperdício.
  • 31. Muitos detalhes tornam exemplos difíceis de comunicar e compreender.
  • 32. Equipes de sucesso, ao refinar a especificação, removem informações “não essenciais” e criam um contexto preciso e concreto para o desenvolvimento e testes.
  • 33. Equipes de sucesso especificam o que é suposto que o software faça, em vez de como ele faz. Cucumber (exemplo) Especificação com exemplos é uma especificação de trabalho, é um teste de aceitação, é um teste funcional.
  • 34. Automatizar a validação sem alterar especificações
  • 35. Verificação rápida é essencial para o desenvolvimento de software em iterações curtas. Ou seja, é preciso tornar o processo de validação barato e eficiente. Solução óbvia: automação.
  • 36. Automação sim, mas como? Rhino Mocks Especificações automatizadas tecnicamente são inacessíveis aos especialistas do negócio.
  • 37. Várias versões Versão desenvolvedor Versão mais legível Sincronização???!!!
  • 38. Equipes de sucesso não correm o risco de “tradução entre formatos”. Exemplos chave que são compreensíveis e acessíveis a toda a equipe tornam-se especificações executáveis. Cucumber (exemplo)
  • 39. Se é preciso alterar, então há um único lugar. Única fonte Consumida por desenvolvedores, responsáveis por testes, especialistas no domínio, e outros.
  • 48. Um suporte eficiente de software exige sabermos o quê ele faz e o porquê. Em muitos casos, a única forma de fazer isto é recorrer ao código ou encontrar alguém que possa fazer para nós.
  • 49. Código é, frequentemente, a única coisa em que podemos confiar; muita documentação é desatualizada antes do término do projeto. Desenvolvedores são oráculos de conhecimento e gargalos de informação.
  • 50. Evoluir o sistema de documentação
  • 51. Ao longo do tempo, mudanças ocorrem e provocam atualizações na “documentação viva”.
  • 52. Créditos para o autor e sua obra (agradecimentos finais)  Specification By Example: How successful teams deliver the right software Gojko Adzic, Manning, 2011 Frases, citações e excertos obtidos deste livro.