SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Gustavo Fontes 
Desenvolvedor de software 
Email: Gustavo.ferrazfontes@gmail.com 
Blog: http://praisethecode.wordpress.com
O que é ? 
TDD é uma metodologia de desenvolvimento onde define 
que: todo o código a ser escrito parte de um teste, ou seja, 
você primeiro escreve o teste da forma mais simples que 
puder antes mesmo dos recursos necessários existirem. 
Obviamente o teste irá falhar, então somente após esta falha 
você inicia a implementação dos recursos
O que é ?
Por que adotar? 
1) TDD Garante a qualidade do código desde o inicio 
2) A maioria dos praticantes de TDD seguem os princípios SOLID 
3) TDD garante um alto nível de fidelidade entre o código e os requisitos de 
negocio 
4) TDD estimula a criação do simples, focando mais em libraries e API’s 
5) TDD estimula a comunicação com o negocio. Criando os testes, você 
estimula a interação com os usuários de negocio 
6) TDD ajuda a manter os códigos não utilizados fora do sistema, ajudando 
assim, no entendimento e na preservação do sistema
Beneficio 
Fonte: 
http://powersoftwo.agileinstitute.com/2012/08/the-roi-of-test-driven-development.html 
http://research.microsoft.com/en-us/groups/ese/nagappan_tdd.pdf 
http://www.somkiat.cc/tdd-wrong-invest/
Ciclo de vida do projeto 
1. Escrever o teste antes de escrever o código 
• Garante que você nunca escreva um código que não adicione 
valor para à aplicação 
2. Escrever somente o necessário (Just Enough) para o 
teste passar 
3. Analisar as áreas com maior potencial de melhoria à ser 
aplicada
1. Escrever o teste primeiro 
Ao escrever primeiro o teste, o resultado será uma falha. Isso 
porque o seu teste está tentando instanciar objetos e executar 
métodos que ainda não existe. 
Para quem está iniciando, esta primeira etapa pode parecer 
desnecessária, mas ela garante que você não escreva código 
sem valor para aplicação, e que a funcionalidade a ser testada 
ainda não exista. Por isso, a importância de que você inicie pelo 
teste.
2. Escrever somente o necessário 
Uma vez que você cria um teste, o objetivo é escrever somente 
o necessário para fazer o teste passar. Nem mais, nem menos. 
A estratégia a ser tomada é como ir do ponto “A” (um teste que 
falhou) para o ponto “B” (um teste que passou) pelo caminho 
mais curto e rápido possível. 
Nesta etapa, você não precisa se preocupar com outros 
aspectos, como por exemplo, se o código esta seguindo boas 
praticas, se suas variáveis estão com uma nomenclatura 
intuitiva, se é um código elegante. O objetivo é fazer o teste 
passar.
3. Refatoração 
Esta é a etapa onde você irá melhorar o nome daquela variável, 
corrigir duplicações de código, verificar se o seu código não 
esta violando nenhum principio SOLID e se é possível aplicar 
algum pattern para melhorar o código. 
O objetivo nesta etapa é deixar o seu código o mais coeso e 
sucinto possível. 
Após realizar todas essas verificações, é hora de executar 
novamente o teste para garantir que a refatoração realizada não 
“quebrou” nenhum teste.
Boas Praticas
SOLID PRINCIPLES 
Os princípios S.O.L.I.D. foram introduzidos na comunidade pelo 
Robert “Uncle Bob” Martin. 
São 5 princípios para desenvolvimento de software que utiliza 
OOP com o objetivo levar os softwares para um alto nível de 
qualidade.
SOLID PRINCIPLES 
OS 5 princípios são divididos em: 
• Single Responsibility Principle 
• Open/close principle 
• Liskov substitution principle 
• Interface segregation principle 
• Dependency inversion principle
SOLID PRINCIPLES 
• Single responsibility principle (SRP)ou principio da 
responsabilidade única, define que, cada método ou classe 
deve ter somente uma razão para ser alterado. 
• Open/Close principle(OCP) ou principio do aberto/fechado, 
defini que, métodos e classes devem estar abertos para 
extensão e fechados para modificação. 
• Liskov principle(LSP) ou principio de liskov, define que, i, 
objeto utilizado em uma aplicação pode ser substituído pela 
super classe sem afetar o funcionamento da mesma.
SOLID PRINCIPLES 
• Interface segregation principle(ISP) ou principio da segregação 
de interface, define que, a classe cliente não deve ser forçada 
implementar métodos de uma interface que não são utilizados. 
• Dependency Inversion Principle ou principio da inversão de 
dependência, define que, os códigos devem depender de 
abstrações(interfaces/classes abstratas) e não de 
implementações concretas
MOCK
Mock 
• Definição 
• Mock é um termo genérico utilizado para referenciar 
uma família de objetos substitutos, que permitem isolar 
as classes de um sistema de forma bastante simples. 
• Existem três tipos de Mock 
• Dummy, Fake, stub e Mock
Dummy 
• Dummy é um tipo de mock que substitui um recurso 
externo. Ele retorna um resposta predefinida para um 
método quando o mesmo é invocado. 
• Não pode variar o retorno baseando-se no parâmetro de 
entrada.
Dummy
Dummy
Fakes and stub 
• Fakes e stub podem variar seu retorno baseando-se no 
parâmetro de retorno
Fakes and stub
Fakes and stub
Mock 
• Oferece as mesmas funcionalidades de um stub e/ou Fakes 
• Podem ter regras definidas para determinar em que ordem 
métodos foram chamados 
• Podem acompanhar quantas vezes o método foi chamado
Mock
Mock
Moq Framework 
• Facilidade e agilidade na criação de Mocks 
• Fortemente tipado 
• Alta granularidade 
• Intuitivo
Moq Framework
Moq Framework
Resumo 
• Mock são uteis quando você precisa substituir interações 
mais complexas 
• Fakes, stubs são uteis para testes mais simples. Tente 
sempre dar preferencia para eles
Utilizando TDD no inicio de um projeto
Definindo o projeto 
Uma aplicação é definida por um conjunto de requisitos 
funcionais e não funcionais. 
Os requisitos não funcionais descrevem um conjunto de 
condições ou parâmetros dentro do qual são necessários para a 
aplicação existir. 
Requisitos funcionais descrevem o que a aplicação deve fazer 
para atender o negócio. 
Depois que estas informações são coletadas, os requisitos 
funcionais são utilizados para criar as “user stories” (histórias 
do usuário). Estas “User stories” são decompostas em features 
que são atribuídas para os desenvolvedores para ser construída.
Project Overview 
É uma descrição de alto nível das necessidades de negócio 
da aplicação. Ela descreve o objetivo geral da aplicação, os 
work flow chaves, e as principais funções do usuário 
O objetivo da visão geral de um projeto é identificar as 
necessidades tendo uma visão objetiva e um pouco isolada 
da tecnologia que será usada. A tecnologia deve atender as 
necessidades do negócio, não o contrário.
Definindo as User Stories 
No desenvolvimento ágil, as user stories define as regras de 
negócio e o work flow da aplicação. As user stories, que são 
definidas pela necessidade do negócio, são os requisitos 
funcionais da aplicação. 
1. As user stories são coletadas e decompostas em 
features 
2. As features serão atribuídas para um desenvolvedor para 
definir os seus testes 
3. por fim, o desenvolvimento desses testes irá guiar e 
definir como será o design da aplicação
Coletando as User stories 
Entrevistas com o cliente podem ser uteis, pois permite que 
o desenvolvedor tenha uma comunicação mais “intima” com 
o usuário, possibilitando assim, um melhor resultado neste 
processo de coleta. As entrevistas podem ser guiadas por 
questões formais e seguidas de uma sessão de respostas 
da mesma, uma conversa informal na qual buscamos extrair 
os requisitos de negócio necessários para a aplicação.
Coletando as User stories 
Tecnicas utilizadas: 
1. Shadowing: significa simplesmente acompanhar os usuários por 
um período e observar como eles executam o seu trabalho. A 
técnica Shadowing, permite a nos, aprender bastante sobre os 
problemas que acontecem no dia à dia do usuário. 
2. JAD sessions: O conceito desta técnica é reunir de uma só vez 
todos os usuários e coletar as users stories de cada usuário. O 
benefício de JAD sessions é que todas as divergências de regra de 
negócio que são comuns de acontecer, são discutidas entre os 
próprios usuários e resolvidas imediatamente. Este processo pode 
ser útil para os usuários que entendem as necessidades de outras 
partes do negócio, e como essas necessidades estão relacionadas 
com as outras.
Referencias 
•

Weitere ähnliche Inhalte

Was ist angesagt?

Conhecendo o eXtreme Programming
Conhecendo o eXtreme ProgrammingConhecendo o eXtreme Programming
Conhecendo o eXtreme ProgrammingDaniel Wildt
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingRodrigo Branas
 
Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)Claudia Melo
 
Apresentando Extreme Programming
Apresentando Extreme ProgrammingApresentando Extreme Programming
Apresentando Extreme ProgrammingMilfont Consulting
 
Extreme Programming (XP) e Scrum
Extreme Programming (XP) e ScrumExtreme Programming (XP) e Scrum
Extreme Programming (XP) e ScrumRafael Souza
 
Introdução: eXtreme Programming
Introdução: eXtreme ProgrammingIntrodução: eXtreme Programming
Introdução: eXtreme ProgrammingDenis L Presciliano
 
Bate-papo com Especialista Terra XP
Bate-papo com Especialista Terra XPBate-papo com Especialista Terra XP
Bate-papo com Especialista Terra XPWildtech
 
IPA Conhecendo XP
IPA Conhecendo XPIPA Conhecendo XP
IPA Conhecendo XPWildtech
 
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 ÁgilRebecca Betwel
 
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane FidelixCris Fidelix
 
Metodologias ágeis de desenvolvimento trabalho
Metodologias ágeis de desenvolvimento   trabalhoMetodologias ágeis de desenvolvimento   trabalho
Metodologias ágeis de desenvolvimento trabalhoRuan Pozzebon
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareLuciano Almeida
 
Feature driven development
Feature driven developmentFeature driven development
Feature driven developmentIzabel Rodrigues
 

Was ist angesagt? (20)

Conhecendo o eXtreme Programming
Conhecendo o eXtreme ProgrammingConhecendo o eXtreme Programming
Conhecendo o eXtreme Programming
 
Extreme programming (xp)
 Extreme programming   (xp) Extreme programming   (xp)
Extreme programming (xp)
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)
 
Apresentando Extreme Programming
Apresentando Extreme ProgrammingApresentando Extreme Programming
Apresentando Extreme Programming
 
Metodologias Ageis
Metodologias AgeisMetodologias Ageis
Metodologias Ageis
 
Extreme Programming (XP) e Scrum
Extreme Programming (XP) e ScrumExtreme Programming (XP) e Scrum
Extreme Programming (XP) e Scrum
 
Extreme Programming XP
Extreme Programming XPExtreme Programming XP
Extreme Programming XP
 
Introdução: eXtreme Programming
Introdução: eXtreme ProgrammingIntrodução: eXtreme Programming
Introdução: eXtreme Programming
 
Metodologias ágeis de desenvolvimento
Metodologias ágeis de desenvolvimento Metodologias ágeis de desenvolvimento
Metodologias ágeis de desenvolvimento
 
Bate-papo com Especialista Terra XP
Bate-papo com Especialista Terra XPBate-papo com Especialista Terra XP
Bate-papo com Especialista Terra XP
 
IPA Conhecendo XP
IPA Conhecendo XPIPA Conhecendo XP
IPA Conhecendo 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
 
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
 
Programacao Extrema
Programacao ExtremaProgramacao Extrema
Programacao Extrema
 
Metodologias ágeis de desenvolvimento trabalho
Metodologias ágeis de desenvolvimento   trabalhoMetodologias ágeis de desenvolvimento   trabalho
Metodologias ágeis de desenvolvimento trabalho
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
Feature Driven Development - FDD
Feature Driven Development - FDDFeature Driven Development - FDD
Feature Driven Development - FDD
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 
Feature driven development
Feature driven developmentFeature driven development
Feature driven development
 

Ähnlich wie Introdução ao TDD

Desenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeDesenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeUniversidade Tiradentes
 
Specificationby example
Specificationby example Specificationby example
Specificationby example Laís Berlatto
 
Aula 7 - Modelos de Ciclo de Vida.pptx
Aula 7 - Modelos de Ciclo de Vida.pptxAula 7 - Modelos de Ciclo de Vida.pptx
Aula 7 - Modelos de Ciclo de Vida.pptxALEXANDRELISBADASILV
 
Este trabalho trata
Este trabalho trataEste trabalho trata
Este trabalho trataRoni Reis
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Developer Academy
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...Isaac de Souza
 
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égiasKleitor Franklint Correa Araujo
 
Desenvolvimento ágil de software: análise sintética a partir de KANBAN
Desenvolvimento ágil de software: análise sintética a partir de KANBANDesenvolvimento ágil de software: análise sintética a partir de KANBAN
Desenvolvimento ágil de software: análise sintética a partir de KANBANFernando Palma
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 
Test driven development
Test driven developmentTest driven development
Test driven developmentclauvane1708
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshopguestd37c23
 
aula7 software ciclo de vida analise req
aula7 software ciclo de vida analise reqaula7 software ciclo de vida analise req
aula7 software ciclo de vida analise reqpatriciaalipiosilva
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27Hélio Medeiros
 

Ähnlich wie Introdução ao TDD (20)

Desenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeDesenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por teste
 
Specificationby example
Specificationby example Specificationby example
Specificationby example
 
Aula 7 - Modelos de Ciclo de Vida.pptx
Aula 7 - Modelos de Ciclo de Vida.pptxAula 7 - Modelos de Ciclo de Vida.pptx
Aula 7 - Modelos de Ciclo de Vida.pptx
 
38484931 questionario-es
38484931 questionario-es38484931 questionario-es
38484931 questionario-es
 
Teste Driven Development
Teste Driven DevelopmentTeste Driven Development
Teste Driven Development
 
Tdd x testes unidades
Tdd x testes unidadesTdd x testes unidades
Tdd x testes unidades
 
Este trabalho trata
Este trabalho trataEste trabalho trata
Este trabalho trata
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Modelos de processos de software
Modelos de processos de softwareModelos de processos de software
Modelos de processos de software
 
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
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Tudo são Dados - PHP Conference 2008
Tudo são Dados - PHP Conference 2008Tudo são Dados - PHP Conference 2008
Tudo são Dados - PHP Conference 2008
 
Desenvolvimento ágil de software: análise sintética a partir de KANBAN
Desenvolvimento ágil de software: análise sintética a partir de KANBANDesenvolvimento ágil de software: análise sintética a partir de KANBAN
Desenvolvimento ágil de software: análise sintética a partir de KANBAN
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
 
aula7 software ciclo de vida analise req
aula7 software ciclo de vida analise reqaula7 software ciclo de vida analise req
aula7 software ciclo de vida analise req
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
 

Introdução ao TDD

  • 1. Gustavo Fontes Desenvolvedor de software Email: Gustavo.ferrazfontes@gmail.com Blog: http://praisethecode.wordpress.com
  • 2. O que é ? TDD é uma metodologia de desenvolvimento onde define que: todo o código a ser escrito parte de um teste, ou seja, você primeiro escreve o teste da forma mais simples que puder antes mesmo dos recursos necessários existirem. Obviamente o teste irá falhar, então somente após esta falha você inicia a implementação dos recursos
  • 4. Por que adotar? 1) TDD Garante a qualidade do código desde o inicio 2) A maioria dos praticantes de TDD seguem os princípios SOLID 3) TDD garante um alto nível de fidelidade entre o código e os requisitos de negocio 4) TDD estimula a criação do simples, focando mais em libraries e API’s 5) TDD estimula a comunicação com o negocio. Criando os testes, você estimula a interação com os usuários de negocio 6) TDD ajuda a manter os códigos não utilizados fora do sistema, ajudando assim, no entendimento e na preservação do sistema
  • 5. Beneficio Fonte: http://powersoftwo.agileinstitute.com/2012/08/the-roi-of-test-driven-development.html http://research.microsoft.com/en-us/groups/ese/nagappan_tdd.pdf http://www.somkiat.cc/tdd-wrong-invest/
  • 6. Ciclo de vida do projeto 1. Escrever o teste antes de escrever o código • Garante que você nunca escreva um código que não adicione valor para à aplicação 2. Escrever somente o necessário (Just Enough) para o teste passar 3. Analisar as áreas com maior potencial de melhoria à ser aplicada
  • 7. 1. Escrever o teste primeiro Ao escrever primeiro o teste, o resultado será uma falha. Isso porque o seu teste está tentando instanciar objetos e executar métodos que ainda não existe. Para quem está iniciando, esta primeira etapa pode parecer desnecessária, mas ela garante que você não escreva código sem valor para aplicação, e que a funcionalidade a ser testada ainda não exista. Por isso, a importância de que você inicie pelo teste.
  • 8. 2. Escrever somente o necessário Uma vez que você cria um teste, o objetivo é escrever somente o necessário para fazer o teste passar. Nem mais, nem menos. A estratégia a ser tomada é como ir do ponto “A” (um teste que falhou) para o ponto “B” (um teste que passou) pelo caminho mais curto e rápido possível. Nesta etapa, você não precisa se preocupar com outros aspectos, como por exemplo, se o código esta seguindo boas praticas, se suas variáveis estão com uma nomenclatura intuitiva, se é um código elegante. O objetivo é fazer o teste passar.
  • 9. 3. Refatoração Esta é a etapa onde você irá melhorar o nome daquela variável, corrigir duplicações de código, verificar se o seu código não esta violando nenhum principio SOLID e se é possível aplicar algum pattern para melhorar o código. O objetivo nesta etapa é deixar o seu código o mais coeso e sucinto possível. Após realizar todas essas verificações, é hora de executar novamente o teste para garantir que a refatoração realizada não “quebrou” nenhum teste.
  • 10.
  • 12. SOLID PRINCIPLES Os princípios S.O.L.I.D. foram introduzidos na comunidade pelo Robert “Uncle Bob” Martin. São 5 princípios para desenvolvimento de software que utiliza OOP com o objetivo levar os softwares para um alto nível de qualidade.
  • 13. SOLID PRINCIPLES OS 5 princípios são divididos em: • Single Responsibility Principle • Open/close principle • Liskov substitution principle • Interface segregation principle • Dependency inversion principle
  • 14. SOLID PRINCIPLES • Single responsibility principle (SRP)ou principio da responsabilidade única, define que, cada método ou classe deve ter somente uma razão para ser alterado. • Open/Close principle(OCP) ou principio do aberto/fechado, defini que, métodos e classes devem estar abertos para extensão e fechados para modificação. • Liskov principle(LSP) ou principio de liskov, define que, i, objeto utilizado em uma aplicação pode ser substituído pela super classe sem afetar o funcionamento da mesma.
  • 15. SOLID PRINCIPLES • Interface segregation principle(ISP) ou principio da segregação de interface, define que, a classe cliente não deve ser forçada implementar métodos de uma interface que não são utilizados. • Dependency Inversion Principle ou principio da inversão de dependência, define que, os códigos devem depender de abstrações(interfaces/classes abstratas) e não de implementações concretas
  • 16. MOCK
  • 17. Mock • Definição • Mock é um termo genérico utilizado para referenciar uma família de objetos substitutos, que permitem isolar as classes de um sistema de forma bastante simples. • Existem três tipos de Mock • Dummy, Fake, stub e Mock
  • 18. Dummy • Dummy é um tipo de mock que substitui um recurso externo. Ele retorna um resposta predefinida para um método quando o mesmo é invocado. • Não pode variar o retorno baseando-se no parâmetro de entrada.
  • 19. Dummy
  • 20. Dummy
  • 21. Fakes and stub • Fakes e stub podem variar seu retorno baseando-se no parâmetro de retorno
  • 24. Mock • Oferece as mesmas funcionalidades de um stub e/ou Fakes • Podem ter regras definidas para determinar em que ordem métodos foram chamados • Podem acompanhar quantas vezes o método foi chamado
  • 25. Mock
  • 26. Mock
  • 27. Moq Framework • Facilidade e agilidade na criação de Mocks • Fortemente tipado • Alta granularidade • Intuitivo
  • 30. Resumo • Mock são uteis quando você precisa substituir interações mais complexas • Fakes, stubs são uteis para testes mais simples. Tente sempre dar preferencia para eles
  • 31. Utilizando TDD no inicio de um projeto
  • 32. Definindo o projeto Uma aplicação é definida por um conjunto de requisitos funcionais e não funcionais. Os requisitos não funcionais descrevem um conjunto de condições ou parâmetros dentro do qual são necessários para a aplicação existir. Requisitos funcionais descrevem o que a aplicação deve fazer para atender o negócio. Depois que estas informações são coletadas, os requisitos funcionais são utilizados para criar as “user stories” (histórias do usuário). Estas “User stories” são decompostas em features que são atribuídas para os desenvolvedores para ser construída.
  • 33. Project Overview É uma descrição de alto nível das necessidades de negócio da aplicação. Ela descreve o objetivo geral da aplicação, os work flow chaves, e as principais funções do usuário O objetivo da visão geral de um projeto é identificar as necessidades tendo uma visão objetiva e um pouco isolada da tecnologia que será usada. A tecnologia deve atender as necessidades do negócio, não o contrário.
  • 34. Definindo as User Stories No desenvolvimento ágil, as user stories define as regras de negócio e o work flow da aplicação. As user stories, que são definidas pela necessidade do negócio, são os requisitos funcionais da aplicação. 1. As user stories são coletadas e decompostas em features 2. As features serão atribuídas para um desenvolvedor para definir os seus testes 3. por fim, o desenvolvimento desses testes irá guiar e definir como será o design da aplicação
  • 35. Coletando as User stories Entrevistas com o cliente podem ser uteis, pois permite que o desenvolvedor tenha uma comunicação mais “intima” com o usuário, possibilitando assim, um melhor resultado neste processo de coleta. As entrevistas podem ser guiadas por questões formais e seguidas de uma sessão de respostas da mesma, uma conversa informal na qual buscamos extrair os requisitos de negócio necessários para a aplicação.
  • 36. Coletando as User stories Tecnicas utilizadas: 1. Shadowing: significa simplesmente acompanhar os usuários por um período e observar como eles executam o seu trabalho. A técnica Shadowing, permite a nos, aprender bastante sobre os problemas que acontecem no dia à dia do usuário. 2. JAD sessions: O conceito desta técnica é reunir de uma só vez todos os usuários e coletar as users stories de cada usuário. O benefício de JAD sessions é que todas as divergências de regra de negócio que são comuns de acontecer, são discutidas entre os próprios usuários e resolvidas imediatamente. Este processo pode ser útil para os usuários que entendem as necessidades de outras partes do negócio, e como essas necessidades estão relacionadas com as outras.