Download pdf - Apresentacao tdc 2012

Transcript

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 : [email protected]

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

“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)

Introdução

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 peitoSuor frio e intensoDesconforto acompanhado de tontura Desmaio Náuseas Falta de ar

Sinais

2. Software

Manutenção difícilCódigo duplicado Método longo Classe grande Lista de parâmetros longaCódigo difícil de entenderDificuldade 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)

Maior qualidade do código

Diminuição dos BUGs

Orientação na criação do modelo

Maior cobertura do código

Benefícios do TDD

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)

Especialista da Informação

Alta Coesão

Baixo Acoplamento

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.

Exemplos e Discussão - Expert

1. 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

Diminuição das dependências

Flexibilidade do Código

Código Limpo e Claro

5. Análise

Exemplos e Discussão - Expert

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

Exemplos e Discussão - Variação Protegida

Variação Protegida

Polimorfismo

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

Extrair Classe (Extract Class)

Extrair Super-classe (Extract Superclass)

Descer Método (Push Down Method)

3. Refactory

Exemplos e Discussão - Variação Protegida

4. Código Refatorado

Exemplos e Discussão - Variação Protegida

Diminuição das dependências

Flexibilidade do Código

Diminuição da Complexidade

Código Limpo e Claro

5. Análise

Exemplos e Discussão - Variação Protegida

1. Código Legado

Exemplos e Discussão – Invenção Pura

2. Teste de Unidade

Exemplos e Discussão – Invenção Pura

Extrair Classe (Extract Class)

Extrair Método (Extract Method)

3. Refactory

Exemplos e Discussão – Invenção Pura

4. Código Refatorado

Exemplos e Discussão – Invenção Pura

Diminuição das dependências

Manutenção Simples

Código Limpo e Claro

5. Análise

Exemplos e Discussão – Invenção Pura

Diminuição das dependências

Manutenção Simples

Código Limpo e Claro

5. Análise

Exemplos e Discussão – Invenção Pura

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ão1. Projeto Refatorado

Obrigado

Blog: joleques.blogspot.com.br

Twitter: @jorgeoleques

GitHub : github.com/joleques

Email : [email protected]