SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Como Podemos Salvar
o Coração do Software
      Jorge Oleques
Apresentação

 Pós – Graduando em Engenharia de Software pela InfNet/FGV
 Graduado em Analise e Desenvolvimento de Sistemas pela FTECBrasil
 Desenvolvedor Java
 Desenvolvedor PHP
 Scrum Master
 PO - Product Owner


 Blog: joleques.blogspot.com.br
 Twitter: @jorgeoleques
 GitHub : github.com/joleques
 Email : joleques@gmail.com
Sumario
  Introdução
  Fatores de Risco
  Sinais
  Transição
  Pilares Para Transição
  Teste de Unidade
  Refactory
  Padrões GRASP
  Exemplos e Discussão
  Conclusão
Introdução



“Quando um software traz consigo um comportamento complexo e é
desprovido de um bom design, torna-se difícil refatorar ou combinar
elementos. Começam a aparecer duplicações a partir do momento em
que o desenvolvedor não mostra confiança em prever todas as
implicações de uma mudança”.(Erick Evans, 2010,DDD 2ºEd)
Fatores de Risco

  Colesterol Alto
  Hipertensão Arterial
  Diabetes
  Fumo
  Estresse
Fatores de Risco

 Regras de Negócio espalhada
 Código Ruim
 Domínio mal modelado
 Falta da Linguagem Única
 Problemas na OO
Sinais

1. Corpo
  Sensação de pressão no peito
  Suor frio e intenso
  Desconforto acompanhado de tontura
  Desmaio
  Náuseas
  Falta de ar
Sinais

2. Software

  Manutenção difícil
  Código duplicado
  Método longo
  Classe grande
  Lista de parâmetros longa
  Código difícil de entender
  Dificuldade de adicionar novas funcionalidades
Coração Saudável




    Cada Coisa no seu lugar
    Código Limpo
    Linguagem Ubiqua
    Coberto por testes
Transição




 Escrever código que possa ser entendido e executado por uma máquina é fácil,
  todavia escrever código que possa ser lido e entendido por humanos é bem
  mais complexo (Joshua Kerievsky)
Pilares Para Transição



  Testes de Unidade
  Rafactory
  Padrões GRASP
Teste de Unidade


“     Para refatorar, o primeiro passo é sempre o
    mesmo. Eu preciso construir um conjunto sólido de
    testes para cada sessão do código...”


    “...eu sou humano e ainda cometo erros. Então, eu
     preciso de testes sólidos.”
Martin Fowler, 1999
TDD (Test Drive Development)
Benefícios do TDD

 Maior qualidade do código
 Diminuição dos BUGs
 Orientação na criação do modelo
 Maior cobertura do código
Refactory



“Devido à dificuldade para se manter um código considerado
ruim, um cronograma de entrega de um produto poderá atrasar
em vista do tempo extra que será necessário para realizar a
tarefa de alteração no código.”(MARTIN, 2009).
Refactory

 Melhoria Continua
 Eliminar Maus Cheiros
 Código Limpo
 Modelo Flexível
Tipos de Refatoração
 Extrair Método (Extract Method)
 Mover Método (Move Method)
 Mover Atributo (Move Field')
 Extrair Classe (Extract Class)
 Encapsular Atributo (Encapsulate Field)
 Renomear Método (Rename Method)
 Subir Método (Pull Up Method)
 Subir Atributo (Pull Up Field)
 Descer Método (Push Down Method)
 Descer Atributo (Push Down Field)
 Extrair Sub-classe (Extract Subclass)
 Extrair Super-classe (Extract Superclass)
Padrões GRASP (General
Responsibility Assignment Software
Pattern)


"Entender responsabilidades é essencial para o
bom projeto orientado a objetos". (Martin
Fowler)
GRASP

 Princípios Fundamentais para a Atribuição de
 Responsabilidades em projetos OO
 Qualidade
 Não sobrecarregar Objetos
Padrões GRASP
 Especialista da Informação
 Criador
 Alta Coesão
 Baixo Acoplamento
 Controler
 Polimorfismo
 Invenção Pura
 Indireção
 Variações Protegidas
Exemplos e Discussão




Quem ama a prática sem teoria é como um marinheiro
navegando sem os lemes e sem bussola, não sabendo assim
nunca onde vai chegar..(Leonardo da Vinci)
Exemplos e Discussão - Expert

Problema: Dado que exista pelo menos uma vaga nas
salas da prova escolhida pelo candidato, quando o
candidato realizar a inscrição, então o candidato
deve ser inserido na sala e a inscrição realizada.


  Especialista da Informação
  Alta Coesão
  Baixo Acoplamento
Exemplos e Discussão - Expert

                Código Legado
Exemplos e Discussão - Expert
2. Teste de Unidade
Exemplos e Discussão - Expert
3. Refactory

 Extrair Método (Extract Method)
 Mover Método (Move Method)
 Renomear Método (Rename Method)
Exemplos e Discussão - Expert
4. Código Refatorado
Exemplos e Discussão - Expert
5. Análise
  Diminuição das dependências
  Flexibilidade do Código
  Código Limpo e Claro
Exemplos e Discussão - Variação Protegida

Problema: Dado que eu saiba o tipo de fase,
Quando eu listar as Provas ou os Candidatos, Então
o sistema pode apresentar as provas para o
candidato escolher ou montar relatório com os
candidatos

  Variação Protegida
  Polimorfismo
Exemplos e Discussão - Variação Protegida
1. Código Legado
Exemplos e Discussão - Variação Protegida
1. Código Legado
Exemplos e Discussão - Variação Protegida
2. Teste de Unidade
Exemplos e Discussão - Variação Protegida
3. Refactory
 Extrair Classe (Extract Class)
 Extrair Super-classe (Extract Superclass)
 Descer Método (Push Down Method)
Exemplos e Discussão - Variação Protegida
                        4. Código Refatorado
Exemplos e Discussão - Variação Protegida
                              5. Análise
                          Diminuição das dependências
                          Flexibilidade do Código
                          Diminuição da Complexidade
                          Código Limpo e Claro
Exemplos e Discussão – Invenção Pura
1. Código Legado
Exemplos e Discussão – Invenção Pura
2. Teste de Unidade
Exemplos e Discussão – Invenção Pura
3. Refactory
 Extrair Classe (Extract Class)
 Extrair Método (Extract Method)
Exemplos e Discussão – Invenção Pura
4. Código Refatorado
Exemplos e Discussão – Invenção Pura
5. Análise
  Diminuição das dependências
  Manutenção Simples
  Código Limpo e Claro
Exemplos e Discussão – Invenção Pura
5. Análise
  Diminuição das dependências
  Manutenção Simples
  Código Limpo e Claro
Conclusão

 Diminuição das dependências
 Manutenção Simples
 Código Limpo e Claro
 Flexibilidade do Código
 Diminuição da Complexidade
Conclusão
1. Projeto Legado
Conclusão
1. Projeto Refatorado
Obrigado


 Blog: joleques.blogspot.com.br
 Twitter: @jorgeoleques
 GitHub : github.com/joleques
 Email : joleques@gmail.com

Weitere ähnliche Inhalte

Was ist angesagt?

Desenvolvimento orientado a testes - TDD
Desenvolvimento orientado a testes - TDDDesenvolvimento orientado a testes - TDD
Desenvolvimento orientado a testes - TDD
washingtonlslima
 
Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09
Inael Rodrigues
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Gabriel Rubens
 

Was ist angesagt? (20)

TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 
Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anos
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
 
Introdução a TDD
Introdução a TDDIntrodução a TDD
Introdução a TDD
 
Desenvolvimento orientado a testes - TDD
Desenvolvimento orientado a testes - TDDDesenvolvimento orientado a testes - TDD
Desenvolvimento orientado a testes - TDD
 
Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
Tdd na veia
Tdd na veiaTdd na veia
Tdd na veia
 
Automatizando testes em 4 passos
Automatizando testes em 4 passosAutomatizando testes em 4 passos
Automatizando testes em 4 passos
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09
 
TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software Ágil
 
TDD direto das trincheiras
TDD direto das trincheirasTDD direto das trincheiras
TDD direto das trincheiras
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
TDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVATDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVA
 
Test Driven Development - Em busca de feedback util e concreto
Test Driven Development - Em busca de feedback util e concretoTest Driven Development - Em busca de feedback util e concreto
Test Driven Development - Em busca de feedback util e concreto
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
Facilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPFacilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHP
 
Design patterns de uma vez por todas
Design patterns de uma vez por todasDesign patterns de uma vez por todas
Design patterns de uma vez por todas
 

Ähnlich wie Apresentacao tdc 2012

Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
Thiago Ghisi
 
TDC Florianópolis 2013 - Refatorar! porque ninguém gosta de código que cheir...
TDC Florianópolis 2013  - Refatorar! porque ninguém gosta de código que cheir...TDC Florianópolis 2013  - Refatorar! porque ninguém gosta de código que cheir...
TDC Florianópolis 2013 - Refatorar! porque ninguém gosta de código que cheir...
Elias Souza
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti Patterns
Herval Freire
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
Igor Sobreira
 
A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...
Toni Esteves
 
Automação de testes para equipes agile
Automação de testes para equipes agileAutomação de testes para equipes agile
Automação de testes para equipes agile
Alini Rebonatto
 

Ähnlich wie Apresentacao tdc 2012 (20)

Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
 
Code Smells
Code SmellsCode Smells
Code Smells
 
TDC2013 - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...
TDC2013  - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...TDC2013  - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...
TDC2013 - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Gerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2aGerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2a
 
TDC Florianópolis 2013 - Refatorar! porque ninguém gosta de código que cheir...
TDC Florianópolis 2013  - Refatorar! porque ninguém gosta de código que cheir...TDC Florianópolis 2013  - Refatorar! porque ninguém gosta de código que cheir...
TDC Florianópolis 2013 - Refatorar! porque ninguém gosta de código que cheir...
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
 
Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014
 
Introdução ao XP
Introdução ao XPIntrodução ao XP
Introdução ao XP
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti Patterns
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
Certificacao Php
Certificacao PhpCertificacao Php
Certificacao Php
 
A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...
 
Automação de testes para equipes agile
Automação de testes para equipes agileAutomação de testes para equipes agile
Automação de testes para equipes agile
 
Meus 50 Cents sobre Teste de Software
Meus 50 Cents sobre Teste de SoftwareMeus 50 Cents sobre Teste de Software
Meus 50 Cents sobre Teste de Software
 
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 

Mehr von Jorge Oleques

Lei de Demeter parte
Lei de Demeter parteLei de Demeter parte
Lei de Demeter parte
Jorge Oleques
 

Mehr von Jorge Oleques (6)

Todo Super-herói tem suas fraquezas. Saiba como o Super-Agile foi derrotado.
Todo Super-herói tem suas fraquezas. Saiba como o Super-Agile foi derrotado.Todo Super-herói tem suas fraquezas. Saiba como o Super-Agile foi derrotado.
Todo Super-herói tem suas fraquezas. Saiba como o Super-Agile foi derrotado.
 
Lei de Demeter parte
Lei de Demeter parteLei de Demeter parte
Lei de Demeter parte
 
TDD e Clean Code, garantia de um desenvolvimento saudável
TDD e Clean Code, garantia de um desenvolvimento saudávelTDD e Clean Code, garantia de um desenvolvimento saudável
TDD e Clean Code, garantia de um desenvolvimento saudável
 
Introdução Domain-Driven-Design
Introdução Domain-Driven-Design Introdução Domain-Driven-Design
Introdução Domain-Driven-Design
 
TDD e Clean Code
TDD e Clean CodeTDD e Clean Code
TDD e Clean Code
 
Solid
SolidSolid
Solid
 

Apresentacao tdc 2012

  • 1. Como Podemos Salvar o Coração do Software Jorge Oleques
  • 2. Apresentação Pós – Graduando em Engenharia de Software pela InfNet/FGV Graduado em Analise e Desenvolvimento de Sistemas pela FTECBrasil Desenvolvedor Java Desenvolvedor PHP Scrum Master PO - Product Owner Blog: joleques.blogspot.com.br Twitter: @jorgeoleques GitHub : github.com/joleques Email : joleques@gmail.com
  • 3. Sumario Introdução Fatores de Risco Sinais Transição Pilares Para Transição Teste de Unidade Refactory Padrões GRASP Exemplos e Discussão Conclusão
  • 4. Introdução “Quando um software traz consigo um comportamento complexo e é desprovido de um bom design, torna-se difícil refatorar ou combinar elementos. Começam a aparecer duplicações a partir do momento em que o desenvolvedor não mostra confiança em prever todas as implicações de uma mudança”.(Erick Evans, 2010,DDD 2ºEd)
  • 5. Fatores de Risco Colesterol Alto Hipertensão Arterial Diabetes Fumo Estresse
  • 6. Fatores de Risco Regras de Negócio espalhada Código Ruim Domínio mal modelado Falta da Linguagem Única Problemas na OO
  • 7. Sinais 1. Corpo Sensação de pressão no peito Suor frio e intenso Desconforto acompanhado de tontura Desmaio Náuseas Falta de ar
  • 8. Sinais 2. Software Manutenção difícil Código duplicado Método longo Classe grande Lista de parâmetros longa Código difícil de entender Dificuldade de adicionar novas funcionalidades
  • 9. Coração Saudável Cada Coisa no seu lugar Código Limpo Linguagem Ubiqua Coberto por testes
  • 10. Transição Escrever código que possa ser entendido e executado por uma máquina é fácil, todavia escrever código que possa ser lido e entendido por humanos é bem mais complexo (Joshua Kerievsky)
  • 11. Pilares Para Transição Testes de Unidade Rafactory Padrões GRASP
  • 12. Teste de Unidade “ Para refatorar, o primeiro passo é sempre o mesmo. Eu preciso construir um conjunto sólido de testes para cada sessão do código...” “...eu sou humano e ainda cometo erros. Então, eu preciso de testes sólidos.” Martin Fowler, 1999
  • 13. TDD (Test Drive Development)
  • 14. Benefícios do TDD Maior qualidade do código Diminuição dos BUGs Orientação na criação do modelo Maior cobertura do código
  • 15. Refactory “Devido à dificuldade para se manter um código considerado ruim, um cronograma de entrega de um produto poderá atrasar em vista do tempo extra que será necessário para realizar a tarefa de alteração no código.”(MARTIN, 2009).
  • 16. Refactory Melhoria Continua Eliminar Maus Cheiros Código Limpo Modelo Flexível
  • 17. Tipos de Refatoração Extrair Método (Extract Method) Mover Método (Move Method) Mover Atributo (Move Field') Extrair Classe (Extract Class) Encapsular Atributo (Encapsulate Field) Renomear Método (Rename Method) Subir Método (Pull Up Method) Subir Atributo (Pull Up Field) Descer Método (Push Down Method) Descer Atributo (Push Down Field) Extrair Sub-classe (Extract Subclass) Extrair Super-classe (Extract Superclass)
  • 18. Padrões GRASP (General Responsibility Assignment Software Pattern) "Entender responsabilidades é essencial para o bom projeto orientado a objetos". (Martin Fowler)
  • 19. GRASP Princípios Fundamentais para a Atribuição de Responsabilidades em projetos OO Qualidade Não sobrecarregar Objetos
  • 20. Padrões GRASP Especialista da Informação Criador Alta Coesão Baixo Acoplamento Controler Polimorfismo Invenção Pura Indireção Variações Protegidas
  • 21. Exemplos e Discussão Quem ama a prática sem teoria é como um marinheiro navegando sem os lemes e sem bussola, não sabendo assim nunca onde vai chegar..(Leonardo da Vinci)
  • 22. Exemplos e Discussão - Expert Problema: Dado que exista pelo menos uma vaga nas salas da prova escolhida pelo candidato, quando o candidato realizar a inscrição, então o candidato deve ser inserido na sala e a inscrição realizada. Especialista da Informação Alta Coesão Baixo Acoplamento
  • 23. Exemplos e Discussão - Expert Código Legado
  • 24. Exemplos e Discussão - Expert 2. Teste de Unidade
  • 25. Exemplos e Discussão - Expert 3. Refactory Extrair Método (Extract Method) Mover Método (Move Method) Renomear Método (Rename Method)
  • 26. Exemplos e Discussão - Expert 4. Código Refatorado
  • 27. Exemplos e Discussão - Expert 5. Análise Diminuição das dependências Flexibilidade do Código Código Limpo e Claro
  • 28. Exemplos e Discussão - Variação Protegida Problema: Dado que eu saiba o tipo de fase, Quando eu listar as Provas ou os Candidatos, Então o sistema pode apresentar as provas para o candidato escolher ou montar relatório com os candidatos Variação Protegida Polimorfismo
  • 29. Exemplos e Discussão - Variação Protegida 1. Código Legado
  • 30. Exemplos e Discussão - Variação Protegida 1. Código Legado
  • 31. Exemplos e Discussão - Variação Protegida 2. Teste de Unidade
  • 32. Exemplos e Discussão - Variação Protegida 3. Refactory Extrair Classe (Extract Class) Extrair Super-classe (Extract Superclass) Descer Método (Push Down Method)
  • 33. Exemplos e Discussão - Variação Protegida 4. Código Refatorado
  • 34. Exemplos e Discussão - Variação Protegida 5. Análise Diminuição das dependências Flexibilidade do Código Diminuição da Complexidade Código Limpo e Claro
  • 35. Exemplos e Discussão – Invenção Pura 1. Código Legado
  • 36. Exemplos e Discussão – Invenção Pura 2. Teste de Unidade
  • 37. Exemplos e Discussão – Invenção Pura 3. Refactory Extrair Classe (Extract Class) Extrair Método (Extract Method)
  • 38. Exemplos e Discussão – Invenção Pura 4. Código Refatorado
  • 39. Exemplos e Discussão – Invenção Pura 5. Análise Diminuição das dependências Manutenção Simples Código Limpo e Claro
  • 40. Exemplos e Discussão – Invenção Pura 5. Análise Diminuição das dependências Manutenção Simples Código Limpo e Claro
  • 41. Conclusão Diminuição das dependências Manutenção Simples Código Limpo e Claro Flexibilidade do Código Diminuição da Complexidade
  • 44. Obrigado Blog: joleques.blogspot.com.br Twitter: @jorgeoleques GitHub : github.com/joleques Email : joleques@gmail.com