SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
Código limpo
 Diego Magalhães Cunha
     Gustavo Moreira
Tauan Nascimento Almeida
Introdução
O custo de ter um código confuso
● Ao longo de um certo tempo de trabalho,
  equipes que trabalham rapidamente no
  inicio de um projeto podem perceber mais
  tarde que estão indo a passos de tartaruga.

● Cada alteração feita no código causa uma
  falha em outras duas ou tres partes do
  mesmo código.
O custo de ter um código confuso
● Mudança alguma é trivial.

● Cada adição ou modificação ao sistema
  exige que restaurações, amarrações e
  remendos sejam "entendidas" de modo que
  outras possam ser incluidas.
O custo de ter um código confuso
● Com o tempo, a bagunça se torna tão
  grande e profunda que não dá para arrumá-
  la.

● Não há absolutamente solução alguma.
O grande replanejamento
● No final, a equipe se rebela.

● Todos informam à gerência que não
  conseguem mais trabalhar neste irritante
  código-fonte e exigem um replanejamento
  do projeto.
O grande replanejamento
● Apesar de a gerência não querer gastar
  recursos em uma nova remodelação, ela
  não pode negar que a produtividade está
  péssima.

● No final das contas, ela acaba cedendo às
  exigências dos desenvolvedores e autoriza
  o grande replanejamento desejado.
O grande replanejamento
● É, então , formada uma nova equipe
  especializada.

● Por ser um projeto inteiramente novo, todos
  querem fazer parte dessa equipe.

● Eles desejam começar do zero e criar algo
  belo de verdade.
O grande replanejamento
● Mas apenas os melhores e mais brilhantes
  são selecionados e os outros deverão
  continuar na manutenção do sistema atual.

● Agora ambos os times estão numa corrida.
O grande replanejamento
● A nova equipe precisa construir um novo
  sistema que faça o mesmo que o antigo,
  além de ter de ser manter atualizada em
  relaçao às mudanças feitas constantemente
  no sistema antigo.

● Este, a gerencia não substuirá até que o
  novo possa fazer tudo também.
O grande replanejamento
● Essa corrida pode durar um bom tempo. Já
  vi umas levarem 10 anos.

● E, quando ela termina, os membros originais
  da nova equipe já foram embora há muito
  tempo, e os atuais exigem o replanejamento
  de um novo sistema, pois está tudo uma
  zona novamente.
O grande replanejamento
● Se você já vivenciou pelo menos um pouco
  dessa situação, entao sabe que dedicar
  tempo para limpar seu código nao é apenas
  eficaz em termos de custo, mas uma
  questão de sobrevivencia profissional.
O problema do prazo
● Todos os gerentes protegem os prazos e os
  requisitos, mas essa é a função deles.

● A sua, é proteger o código.
O problema do prazo
● Por mais que os prazos estejam estourados,
  preze por um código bem feito, bem escrito.

● Imagine se você fosse um médico e seu
  paciente (seu chefe, neste contexto)
  exigisse que você não lavasse suas mãos
  antes de uma operação devido a perda de
  tempo.
O problema do prazo
● É óbvio que você não dará ouvidos a este
  paciente.

● Da mesma forma, em alguns momentos, o
  atraso é aceitável levando em consideração
  as consequências.
Mas afinal, o que é ou como é um
         código limpo?
O que é ou como é um código
limpo?
● Existem várias definições.

● Vamos citar algumas definições dadas por
  alguns dos pioneiros neste assunto.
Bjarne Stroustrup
Gosto do meu código elegante e eficiente. A
lógica deve ser direta para dificultar o
encobrimento de bugs, as dependências
mínimas para facilitar a manutenção, o
tratamento de erros completo de acordo com
uma estratégia clara e o desempenho próximo
do mais eficiente de modo a não incitar as
pessoas a tornarem o código confuso com
otimizações sorrateiras.
O código deve proporcionar uma leitura
natural.
Grady Booch
Um codigo limpo é simples e direto. Ele é tão
bem legível quanto uma prosa bem escrita.
Ele jamais torna confuso o objetivo do
desenvolvedor, em vez disso, ele está repleto
de abstrações claras e linhas de controle
objetivas.
Dave Thomas
Alem de seu criador, um desenvolvedor pode ler e
melhorar um código limpo.
Ele tem:
- teste de unidade e de aceitação,
- nomes significativos,
- oferece apenas uma maneira, e não várias, de se fazer
uma tarefa;
- possui poucas dependências, as quais são explicitamente
declaradas,
- oferecem uma API mínima e clara.
Dave Thomas
O código deve ser inteligivel já que dependendo da
linguagem, nem toda informação necessária pode ser
expressa no código em si.
Nomes Significativos
● Nomes são peças chaves em um código
  ○ Variáveis, classes, métodos, ...


● Devem nos dizer três coisas
  ○ Porque existem
  ○ O que fazem
  ○ Como são usados
Dicas para bons nomes
● Distinções significativas
   ○ Nomes como a1, a2, a3, ..., não dizem nada sobre a
     variável, método, etc.


● Não usar trocadilhos ou abreviações
   ○ O nome deve ser auto-explicativo.
Métodos e Funções



  "A primeira regra dos métodos é que eles
 devem ser pequenos, a segunda é que eles
         devem ser menores ainda. "
Métodos e Funções
● Conter no máximo 20 linhas

● Nível de identação não pode ser maior que
  2

● Receber o mínimo de parâmetros possível
  ○ Receber muitos parâmetros dificulta o Teste Unitário


● Somente uma responsabilidade
Métodos e Funções
● Exemplo
  public boolean checkPassword(String username, String
  password)
  {
     String passwordStatus = cryptographer.decrypt
     (password);
     if(passwordStatus.equals(“OK”) ) {
          Session.initialize();
          return true;
     }
     return false;
  }
Comentários
● São úteis quando colocados nos locais
  certos
  ○ Informar uma consequência
  ○ Explicar uma decisão tomada


● O principal motivo para se escrever um
  comentário é um código ilegível

             "Explique-se no código."
Formatação
● Forma de comunicação do desenvolvedor

● Leitores entenderam o que estão lendo

● Auxilia mudanças futuras
Dicas para formatação
● Não escreva classes com mais de 500
  linhas
  ○ Classes menores são mais fáceis de se entender


● Estabeleça um limite sensato para o
  tamanho de uma linha

● Faça uma boa identação
  ○ Não deixe seu código grudado
Tratamento de erros
● Não exagerar no tratamento de erros
  ○ Não é possível enxergar objetivo do código


● Use exceções
  ○ Linguagens antigas retornavam códigos de erro


● Forneça exceções com contexto
  ○ Mensagens passadas juntamente com a exceção,
    como tipo de falha
Testes Unitários (TDD - Test Driven Development)
● É uma técnica de desenvolvimento de software que
   baseia em pequenos ciclos de repetições;

● Para cada funcionalidade do sistema é criado um teste
   antes;

● Esse teste deverá falhar, pois não temos nenhuma
   funcionalidade;

● Logo após fazemos o teste passar implementando a
   funcionalidade.
Motivos para o uso do TDD
● Feedback rápido sobre a nova funcionalidade e sobre
  as outras funcionalidades existentes no sistema;
● Código é mais limpo, já que escrevemos códigos
  simples para o teste passar;
● Segurança no Refactoring pois podemos ver o que
  estamos ou não afetando;
● Segurança na correção de bugs;
● Maior produtividade já que o desenvolvedor encontra
  menos bugs e não desperdiça tempo com depuradores;
● Código da aplicação mais flexível e menos acoplado.
Ciclo de Desenvolvimento TDD
●   Red, Green, Refactor:
●   Escrevemos um Teste que inicialmente não passa (Red) - ele deve falhar;

●   Adicionamos a nova funcionalidade do sistema;

●   Fazemos o Teste passar (Green);

●   Refatoramos o código da nova funcionalidade (Refactoring);

●   Escrevemos o próximo Teste.
Classes
● O nome da classe deve representar sua
  funcionalidade, explicando o que ela faz;

● Não deve conter palavras como “mas”, “e”, ”
  ou”, “se”:
  ○ "AvaliarSePodePromoverParaPremium";
  ○ "AvaliadorDeClientePremium".


● Ter no máximo 25 palavras.
Princípio da responsabilidade única
          (SRP) - da Classe
● Segundo Mr. Robert C. Martin, "uma classe só
  deve mudar por um único motivo";

● Pergunta a se fazer: esta classe vai ter que
  mudar por mais um motivo com esta introdução
  que estou fazendo?

● Resultado: Muitos métodos pequenos, com
  muitas classes pequenas. Muita modularidade.
Princípio da responsabilidade única
          (SRP) - da Classe
● Háverá muitas funções, mas cada uma com
  uma única responsabilidade, e elas irão fazê-
  las direito;

● Os dados e comportamento estão juntos,
  porém modularizados;
Design Emergente
● É um design que nunca é o final, sempre
  está em evolução;

● Kent Beck criou 4 regras básicas para o que
  ele chamou Simple Design:
  ○   Rode todos os testes;
  ○   Remova Duplicação;
  ○   Expresse sua intenção;
  ○   Diminua o número de classes e métodos.
Design Emergente
● Rode todos os testes:
  ○ Fazer um sistema testável é possuir todos os testes
    passando;
  ○ Ele se torna verificável.


● Remova duplicação de código;
  ○ Exemplo: Se você percebeu que tem um método
    que se repete em mais de uma classe, remova-o
    das classes e crie uma nova classe, mesmo que
    seja só para ter este método.
Design Emergente
● Expresse sua intenção:
  ○ Escolher bons nomes, deixar métodos e classes
    pequenas e separar responsabilidades.

● Diminuir o número de classes e métodos:
  ○ Sempre que possível, mantenha sistemas pequenos
    enquanto ao mesmo tempo se mantém métodos e
    classes pequenas.
Conclusão
● Estes princípios nos ajudam a desenvolver
  códigos de maior qualidade;

● Torna o código comunicável entre os
  membros das equipes de programação;

● E    influencia    em      uma    melhor
  manuteniblidade do código.
Obrigado!
Bibliografia
● MARTIN, ROBERT C. Código Limpo:
  Habilidades Práticas do Agile Software. São
  Paulo: Bookman, 2009.
● http://blog.bluesoft.com.br/bluesoft-labs-
  clean-code-por-bruno-lui/
● http://blog.lambda3.com.
  br/2009/02/principio-da-responsabilidade-
  unica-srp/
● http://www.k19.com.br/artigos/tdd-simples-e-
  pratico-parte-i/

Mais conteúdo relacionado

Mais procurados

Clean code: understanding Boundaries and Unit Tests
Clean code: understanding Boundaries and Unit TestsClean code: understanding Boundaries and Unit Tests
Clean code: understanding Boundaries and Unit Testsradin reth
 
Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de UnidadeAline Ferreira
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 
Extreme programming (xp) - Resumo
Extreme programming (xp) - ResumoExtreme programming (xp) - Resumo
Extreme programming (xp) - ResumoDaniel Brandão
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução BásicaChristian Perone
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e GitIgor Steinmacher
 
Introdução a linguagem c karen lowhany
Introdução a linguagem c   karen lowhanyIntrodução a linguagem c   karen lowhany
Introdução a linguagem c karen lowhanyKaren Costa
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentElias Nogueira
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosDaniel Brandão
 
Python Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem PythonPython Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem Pythonantonio sérgio nogueira
 
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
 
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software Aula Modelos de Processos Tradicionais para Desenvolvimento de Software
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software Cloves da Rocha
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 

Mais procurados (20)

Aula4 levantamento requisitos
Aula4 levantamento requisitosAula4 levantamento requisitos
Aula4 levantamento requisitos
 
Clean code: understanding Boundaries and Unit Tests
Clean code: understanding Boundaries and Unit TestsClean code: understanding Boundaries and Unit Tests
Clean code: understanding Boundaries and Unit Tests
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
 
Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de Unidade
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Extreme programming (xp) - Resumo
Extreme programming (xp) - ResumoExtreme programming (xp) - Resumo
Extreme programming (xp) - Resumo
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e Git
 
Introdução a linguagem c karen lowhany
Introdução a linguagem c   karen lowhanyIntrodução a linguagem c   karen lowhany
Introdução a linguagem c karen lowhany
 
Clean code
Clean code Clean code
Clean code
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
Python Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem PythonPython Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem Python
 
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
 
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software Aula Modelos de Processos Tradicionais para Desenvolvimento de Software
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software
 
Clean code
Clean codeClean code
Clean code
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 

Semelhante a Codigo limpo

Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atechcesarcneto
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3Inael Rodrigues
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasRafael Chinelato Del Nero
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Coding Dojo - Funcionamento
Coding Dojo - FuncionamentoCoding Dojo - Funcionamento
Coding Dojo - Funcionamentothiagodp
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTiago Link
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de softwareHeider Lopes
 
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
 
ESP204 - Cap. 2 - Processos.pdf
ESP204 - Cap. 2 - Processos.pdfESP204 - Cap. 2 - Processos.pdf
ESP204 - Cap. 2 - Processos.pdfAndreLisboa13
 

Semelhante a Codigo limpo (20)

Clean code part 2
Clean code   part 2Clean code   part 2
Clean code part 2
 
Gisele
GiseleGisele
Gisele
 
BDD em Ação
BDD em AçãoBDD em Ação
BDD em Ação
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3
 
Overview de QA
Overview de QA Overview de QA
Overview de QA
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivas
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Codigo limpo.pptx
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
 
Coding Dojo - Funcionamento
Coding Dojo - FuncionamentoCoding Dojo - Funcionamento
Coding Dojo - Funcionamento
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste você
 
FC-Logic
FC-LogicFC-Logic
FC-Logic
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
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...
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
ESP204 - Cap. 2 - Processos.pdf
ESP204 - Cap. 2 - Processos.pdfESP204 - Cap. 2 - Processos.pdf
ESP204 - Cap. 2 - Processos.pdf
 
Clean code
Clean codeClean code
Clean code
 

Último

A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...DirceuNascimento5
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...PatriciaCaetano18
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdfmarlene54545
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPaulaYaraDaasPedro
 
QUIZ ensino fundamental 8º ano revisão geral
QUIZ ensino fundamental 8º ano revisão geralQUIZ ensino fundamental 8º ano revisão geral
QUIZ ensino fundamental 8º ano revisão geralAntonioVieira539017
 
Renascimento Cultural na Idade Moderna PDF
Renascimento Cultural na Idade Moderna PDFRenascimento Cultural na Idade Moderna PDF
Renascimento Cultural na Idade Moderna PDFRafaelaMartins72608
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptxJssicaCassiano2
 
Artigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.pptArtigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.pptRogrioGonalves41
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do séculoBiblioteca UCS
 
Poesiamodernismo fase dois. 1930 prosa e poesiapptx
Poesiamodernismo fase dois. 1930 prosa e poesiapptxPoesiamodernismo fase dois. 1930 prosa e poesiapptx
Poesiamodernismo fase dois. 1930 prosa e poesiapptxPabloGabrielKdabra
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Cabiamar
 
Expansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XVExpansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XVlenapinto
 
3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptxMarlene Cunhada
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptjricardo76
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...marcelafinkler
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...azulassessoria9
 
Educação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxEducação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxMarcosLemes28
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxLuizHenriquedeAlmeid6
 
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdfAPRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdfgerathird
 

Último (20)

A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
 
QUIZ ensino fundamental 8º ano revisão geral
QUIZ ensino fundamental 8º ano revisão geralQUIZ ensino fundamental 8º ano revisão geral
QUIZ ensino fundamental 8º ano revisão geral
 
Renascimento Cultural na Idade Moderna PDF
Renascimento Cultural na Idade Moderna PDFRenascimento Cultural na Idade Moderna PDF
Renascimento Cultural na Idade Moderna PDF
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
Artigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.pptArtigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.ppt
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do século
 
Poesiamodernismo fase dois. 1930 prosa e poesiapptx
Poesiamodernismo fase dois. 1930 prosa e poesiapptxPoesiamodernismo fase dois. 1930 prosa e poesiapptx
Poesiamodernismo fase dois. 1930 prosa e poesiapptx
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024
 
Expansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XVExpansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XV
 
3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.ppt
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
Educação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxEducação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptx
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdfAPRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
 

Codigo limpo

  • 1. Código limpo Diego Magalhães Cunha Gustavo Moreira Tauan Nascimento Almeida
  • 3. O custo de ter um código confuso ● Ao longo de um certo tempo de trabalho, equipes que trabalham rapidamente no inicio de um projeto podem perceber mais tarde que estão indo a passos de tartaruga. ● Cada alteração feita no código causa uma falha em outras duas ou tres partes do mesmo código.
  • 4. O custo de ter um código confuso ● Mudança alguma é trivial. ● Cada adição ou modificação ao sistema exige que restaurações, amarrações e remendos sejam "entendidas" de modo que outras possam ser incluidas.
  • 5. O custo de ter um código confuso ● Com o tempo, a bagunça se torna tão grande e profunda que não dá para arrumá- la. ● Não há absolutamente solução alguma.
  • 6.
  • 7. O grande replanejamento ● No final, a equipe se rebela. ● Todos informam à gerência que não conseguem mais trabalhar neste irritante código-fonte e exigem um replanejamento do projeto.
  • 8. O grande replanejamento ● Apesar de a gerência não querer gastar recursos em uma nova remodelação, ela não pode negar que a produtividade está péssima. ● No final das contas, ela acaba cedendo às exigências dos desenvolvedores e autoriza o grande replanejamento desejado.
  • 9. O grande replanejamento ● É, então , formada uma nova equipe especializada. ● Por ser um projeto inteiramente novo, todos querem fazer parte dessa equipe. ● Eles desejam começar do zero e criar algo belo de verdade.
  • 10. O grande replanejamento ● Mas apenas os melhores e mais brilhantes são selecionados e os outros deverão continuar na manutenção do sistema atual. ● Agora ambos os times estão numa corrida.
  • 11. O grande replanejamento ● A nova equipe precisa construir um novo sistema que faça o mesmo que o antigo, além de ter de ser manter atualizada em relaçao às mudanças feitas constantemente no sistema antigo. ● Este, a gerencia não substuirá até que o novo possa fazer tudo também.
  • 12. O grande replanejamento ● Essa corrida pode durar um bom tempo. Já vi umas levarem 10 anos. ● E, quando ela termina, os membros originais da nova equipe já foram embora há muito tempo, e os atuais exigem o replanejamento de um novo sistema, pois está tudo uma zona novamente.
  • 13. O grande replanejamento ● Se você já vivenciou pelo menos um pouco dessa situação, entao sabe que dedicar tempo para limpar seu código nao é apenas eficaz em termos de custo, mas uma questão de sobrevivencia profissional.
  • 14. O problema do prazo ● Todos os gerentes protegem os prazos e os requisitos, mas essa é a função deles. ● A sua, é proteger o código.
  • 15. O problema do prazo ● Por mais que os prazos estejam estourados, preze por um código bem feito, bem escrito. ● Imagine se você fosse um médico e seu paciente (seu chefe, neste contexto) exigisse que você não lavasse suas mãos antes de uma operação devido a perda de tempo.
  • 16. O problema do prazo ● É óbvio que você não dará ouvidos a este paciente. ● Da mesma forma, em alguns momentos, o atraso é aceitável levando em consideração as consequências.
  • 17. Mas afinal, o que é ou como é um código limpo?
  • 18.
  • 19. O que é ou como é um código limpo? ● Existem várias definições. ● Vamos citar algumas definições dadas por alguns dos pioneiros neste assunto.
  • 20. Bjarne Stroustrup Gosto do meu código elegante e eficiente. A lógica deve ser direta para dificultar o encobrimento de bugs, as dependências mínimas para facilitar a manutenção, o tratamento de erros completo de acordo com uma estratégia clara e o desempenho próximo do mais eficiente de modo a não incitar as pessoas a tornarem o código confuso com otimizações sorrateiras. O código deve proporcionar uma leitura natural.
  • 21. Grady Booch Um codigo limpo é simples e direto. Ele é tão bem legível quanto uma prosa bem escrita. Ele jamais torna confuso o objetivo do desenvolvedor, em vez disso, ele está repleto de abstrações claras e linhas de controle objetivas.
  • 22. Dave Thomas Alem de seu criador, um desenvolvedor pode ler e melhorar um código limpo. Ele tem: - teste de unidade e de aceitação, - nomes significativos, - oferece apenas uma maneira, e não várias, de se fazer uma tarefa; - possui poucas dependências, as quais são explicitamente declaradas, - oferecem uma API mínima e clara.
  • 23. Dave Thomas O código deve ser inteligivel já que dependendo da linguagem, nem toda informação necessária pode ser expressa no código em si.
  • 24. Nomes Significativos ● Nomes são peças chaves em um código ○ Variáveis, classes, métodos, ... ● Devem nos dizer três coisas ○ Porque existem ○ O que fazem ○ Como são usados
  • 25. Dicas para bons nomes ● Distinções significativas ○ Nomes como a1, a2, a3, ..., não dizem nada sobre a variável, método, etc. ● Não usar trocadilhos ou abreviações ○ O nome deve ser auto-explicativo.
  • 26. Métodos e Funções "A primeira regra dos métodos é que eles devem ser pequenos, a segunda é que eles devem ser menores ainda. "
  • 27. Métodos e Funções ● Conter no máximo 20 linhas ● Nível de identação não pode ser maior que 2 ● Receber o mínimo de parâmetros possível ○ Receber muitos parâmetros dificulta o Teste Unitário ● Somente uma responsabilidade
  • 28. Métodos e Funções ● Exemplo public boolean checkPassword(String username, String password) { String passwordStatus = cryptographer.decrypt (password); if(passwordStatus.equals(“OK”) ) { Session.initialize(); return true; } return false; }
  • 29. Comentários ● São úteis quando colocados nos locais certos ○ Informar uma consequência ○ Explicar uma decisão tomada ● O principal motivo para se escrever um comentário é um código ilegível "Explique-se no código."
  • 30. Formatação ● Forma de comunicação do desenvolvedor ● Leitores entenderam o que estão lendo ● Auxilia mudanças futuras
  • 31. Dicas para formatação ● Não escreva classes com mais de 500 linhas ○ Classes menores são mais fáceis de se entender ● Estabeleça um limite sensato para o tamanho de uma linha ● Faça uma boa identação ○ Não deixe seu código grudado
  • 32. Tratamento de erros ● Não exagerar no tratamento de erros ○ Não é possível enxergar objetivo do código ● Use exceções ○ Linguagens antigas retornavam códigos de erro ● Forneça exceções com contexto ○ Mensagens passadas juntamente com a exceção, como tipo de falha
  • 33. Testes Unitários (TDD - Test Driven Development) ● É uma técnica de desenvolvimento de software que baseia em pequenos ciclos de repetições; ● Para cada funcionalidade do sistema é criado um teste antes; ● Esse teste deverá falhar, pois não temos nenhuma funcionalidade; ● Logo após fazemos o teste passar implementando a funcionalidade.
  • 34. Motivos para o uso do TDD ● Feedback rápido sobre a nova funcionalidade e sobre as outras funcionalidades existentes no sistema; ● Código é mais limpo, já que escrevemos códigos simples para o teste passar; ● Segurança no Refactoring pois podemos ver o que estamos ou não afetando; ● Segurança na correção de bugs; ● Maior produtividade já que o desenvolvedor encontra menos bugs e não desperdiça tempo com depuradores; ● Código da aplicação mais flexível e menos acoplado.
  • 35. Ciclo de Desenvolvimento TDD ● Red, Green, Refactor: ● Escrevemos um Teste que inicialmente não passa (Red) - ele deve falhar; ● Adicionamos a nova funcionalidade do sistema; ● Fazemos o Teste passar (Green); ● Refatoramos o código da nova funcionalidade (Refactoring); ● Escrevemos o próximo Teste.
  • 36. Classes ● O nome da classe deve representar sua funcionalidade, explicando o que ela faz; ● Não deve conter palavras como “mas”, “e”, ” ou”, “se”: ○ "AvaliarSePodePromoverParaPremium"; ○ "AvaliadorDeClientePremium". ● Ter no máximo 25 palavras.
  • 37. Princípio da responsabilidade única (SRP) - da Classe ● Segundo Mr. Robert C. Martin, "uma classe só deve mudar por um único motivo"; ● Pergunta a se fazer: esta classe vai ter que mudar por mais um motivo com esta introdução que estou fazendo? ● Resultado: Muitos métodos pequenos, com muitas classes pequenas. Muita modularidade.
  • 38. Princípio da responsabilidade única (SRP) - da Classe ● Háverá muitas funções, mas cada uma com uma única responsabilidade, e elas irão fazê- las direito; ● Os dados e comportamento estão juntos, porém modularizados;
  • 39. Design Emergente ● É um design que nunca é o final, sempre está em evolução; ● Kent Beck criou 4 regras básicas para o que ele chamou Simple Design: ○ Rode todos os testes; ○ Remova Duplicação; ○ Expresse sua intenção; ○ Diminua o número de classes e métodos.
  • 40. Design Emergente ● Rode todos os testes: ○ Fazer um sistema testável é possuir todos os testes passando; ○ Ele se torna verificável. ● Remova duplicação de código; ○ Exemplo: Se você percebeu que tem um método que se repete em mais de uma classe, remova-o das classes e crie uma nova classe, mesmo que seja só para ter este método.
  • 41. Design Emergente ● Expresse sua intenção: ○ Escolher bons nomes, deixar métodos e classes pequenas e separar responsabilidades. ● Diminuir o número de classes e métodos: ○ Sempre que possível, mantenha sistemas pequenos enquanto ao mesmo tempo se mantém métodos e classes pequenas.
  • 42. Conclusão ● Estes princípios nos ajudam a desenvolver códigos de maior qualidade; ● Torna o código comunicável entre os membros das equipes de programação; ● E influencia em uma melhor manuteniblidade do código.
  • 44. Bibliografia ● MARTIN, ROBERT C. Código Limpo: Habilidades Práticas do Agile Software. São Paulo: Bookman, 2009. ● http://blog.bluesoft.com.br/bluesoft-labs- clean-code-por-bruno-lui/ ● http://blog.lambda3.com. br/2009/02/principio-da-responsabilidade- unica-srp/ ● http://www.k19.com.br/artigos/tdd-simples-e- pratico-parte-i/