SlideShare uma empresa Scribd logo
1 de 78
Baixar para ler offline
1
Engenharia de Software e Sistemas
Cap. 9 - Refactoring
Prof. Dr. Thiago Mendes e Prof. Dr. Cleber Lira
thiagosouto@ifba.edu.br, cleberlira@ifba.edu.br
1
Licença CC-BY; créditos para Marco Tulio Valente. Engenharia de Software Moderna: Princípios e Práticas para Desenvolvimento de Software com
Produtividade, 2020 https://engsoftmoderna.info, @engsoftmoderna.
Relembrando Cap. 1 (Introdução)
2
Manutenção de Software
● Preventiva: bugs "latentes"
● Corretiva: bugs reportados por usuários
● Adaptativa: customizações, novas versões de LP/SO
● Evolutiva: novas funcionalidades
● Refactoring: melhorias no código ou design
3
Antes de começar com refactoring …
Leis de Lehman
4
Leis de Lehman
● Leis empíricas sobre evolução de software
● Propostas por Meir Lehman, nas décadas 70-80
5
Resumo das Leis de Lehman
● Sistemas devem ser sempre mantidos para serem úteis
● Mas manutenções aumentam a complexidade e
deterioram a qualidade do código
● A não ser que um trabalho seja realizado para evitar isso
6
Modernamente, este trabalho ganhou
o nome de refactoring
Refactoring
● Transformações de código que melhoram a
manutenibilidade de um sistema mas sem afetar o seu
funcionamento externo
7
Refactoring
● Conceito tornou-se bastante popular ...
8
2018
2000
1999
Refactoring
● Refactoring = refatoração
● Não vamos traduzir… termo em inglês é muito usado
9
Eunão sou um excelente programador, mas um bom
programador com excelentes hábitos – Kent Beck
10
Catálogo de Refactorings
● Extração de Métodos
● Inline de Métodos
● Movimentação de Métodos
● Extração de Classes
● Renomeação
● etc
11
Extração de Métodos
12
Extração de Métodos
13
Um exemplo real ...
14
15
Antes
16
Depois
17
Danilo Silva, Nikolaos Tsantalis, Marco Tulio Valente. Why
We Refactor? Confessions of GitHub Contributors. FSE
2016.
Canivete-suíço dos
refactorings
Inline de Métodos (contrário de extração)
18
19
Antes
20
Depois
Movimentação de Métodos
21
22
Casos particulares de movimentação
(ao longo de uma hierarquia de classes)
23
24
Pull Up Method
25
Push Down Method
Extração de Classes
26
27
Renomeação
(variáveis, parâmetros, métodos, classes, exceções, etc)
28
Dar bons nomes a variáveis é um dos
problemas mais difíceis em programação!
29
30
Renomação é o refactoring mais popular
Murphy-Hill, et al. How We Refactor, and How We Know It. IEEE TSE 2012.
Prática de Refactorings
31
Refactorings dependem de testes
Desenvolvedores evitam refatorações em sistemas
sem testes. Em vez disso, eles reduzem as modificações
àquelas necessárias para implementar novas
funcionalidades ou corrigir bugs. Assim, a complexidade
vai se acumulando e erros de projeto não são corrigidos
-- John Ousterhout
32
Quando refatorar?
1. Refactorings oportunistas
2. Refactorings planejados
33
Refactorings Oportunistas
● Realizados no meio de uma outra tarefa de programação
● Tipo de refactoring mais comum
● Para cada mudança que tiver que realizar em um
sistema, primeiro torne-a fácil (aviso: isso pode ser difícil),
então realize a mudança facilmente -- Kent Beck
34
Refactorings Planejados
● Correção de um problema de design mais complexo
● Sessão apenas para realização de refactorings
35
Refactorings Automatizados
(realizados com auxílio de uma IDE)
36
37
38
39
Danilo Silva, Nikolaos Tsantalis, Marco Tulio Valente. Why We Refactor?
Confessions of GitHub Contributors. FSE 2016.
Observação: O único rename
analisado foi de pacote
40
Code Smells
41
Code (ou Bad) Smells
● Indicadores de código de baixa qualidade
● Difícil de manter, entender, modificar ou testar
● Portanto, candidato a refatoração
42
Catálogo de Code Smells
● Código Duplicado
● Métodos Longos
● Classes Grandes
● Feature Envy
● Métodos com Muitos
Parâmetros
● Variáveis Globais
43
● Obsessão por Tipos
Primitivos
● Objetos Mutáveis
● Classes de Dados
● Comentários
Código Duplicado
44
Código Duplicado
● Dificulta a manutenção
● Portanto, código candidato a refatoração
45
46
Aiko Yamashita, Leon Moonen. Do
developers care about code smells? An
exploratory survey. WCRE 2013.
Código Duplicado ⇒ Clones
47
Clone Tipo 1 (comentários e espaços)
48
Código Original
Clone Tipo 2 (tipo 1 + nomes diferentes)
49
Código Original
Clone Tipo 3 (tipo 2 + mudanças em comandos)
50
Código Original
Clone Tipo 4 (algoritmos diferentes, mas equivalentes)
51
Código Original
Feature Envy
52
Feature Envy
● Método que "inveja" dados e métodos de outra classe
● Usa mais métodos e dados dessa outra classe
● Logo, é um candidato a ser movido para ela
53
54
Variáveis Globais
55
Variáveis Globais
● Acoplamento ruim
● Dificulta o entendimento de um método
56
Para entender o que f retorna, precisamos conhecer o valor de g
Esse valor pode variar entre chamadas de f, etc
Obsessão por Tipos Primitivos
57
Obsessão por Tipos Primitivos
● CEP, Moeda, Data, Hora, Cor, Email, etc não devem ser
de tipos primitivos
● Mas sim de um tipo próprio, com alguns métodos
● Por exemplo, métodos para validação de valores
58
Objetos Mutáveis
59
Objetos Mutáveis vs Imutáveis
● Mutáveis: estado pode mudar
● Imutáveis: uma vez criados, estado não muda
60
Objetos Imutáveis: Strings em Java
61
Hello World
HELLO WORLD
Por que objetos imutáveis são "bons"?
● Dão "segurança" a quem criou o objeto
● Pode-se passar o objeto para outros métodos e ter
certeza de que eles não vão alterar o seu estado
62
Como interpretar esse code smell
● Sempre que possível, implemente objetos imutáveis
● Principalmente, objetos mais simples (CEP, Data, Hora, etc)
● Mas, por outro lado, em linguagens imperativas é natural
ter um bom número de objetos mutáveis.
63
Comentários
64
A ideia é a seguinte:
"não comente código ruim, reescreva-o"
-- B. Kerninghan & P. J. Plauger
65
66
67
Comentários "Ruído" (nada acrescentam …)
68
// this function sends an email
void sendEmail() {
...
}
// this class holds data for an employee
public class Employee {
...
}
Mais um exemplo de comentários "ruído"
69
Comentários apenas repetem o
que já está bem claro no código
Fonte: A Philosophy of Software Design (capítulo 13)
Evidentemente, nem todo comentário é um
code smell ...
70
Quando é útil comentar?
● Código complexo por natureza
71
// format matched kk:mm:ss EEE, MMM dd, yyy
Pattern timePattern = Pattern.compile("d*:d*:d* w*, w*, d*, d*");
Quando é útil comentar?
72
● Documentação de APIs
/**
* Registers the text to display in a tool tip. The text
* displays when the cursor lingers over the component.
*
* @param text the string to display. If the text is null,
* the tool tip is turned off for this component.
*/
public void setToolTipText(String text) {
Antes de terminar...
Débito Técnico
73
Débito Técnico
● Metáfora para explicar a importância de boas práticas e
princípios de Engenharia de Software
● Proposto por Ward Cunningham (1992)
● Soluções não-ótimas de design que dificultam a
manutenção e evolução de um sistema
74
75
76
Projeto no qual TD
não foi pago
Projeto no qual TD foi
sendo pago
Speed = velocidade de implementação de novas funcionalidades
Exemplos de Débito Técnico
● Ausência de testes
● Ausência de builds automatizado
● Problemas arquiteturais
● Alto acoplamento e baixa coesão
● Code smells
● Ausência completa de documentação
● Código que não segue layout pré-definido
77
Fim
78

Mais conteúdo relacionado

Semelhante a ESP204 - Cap. 9 - Refactoring.pdf

ESP204 - Cap. 2 - Processos.pdf
ESP204 - Cap. 2 - Processos.pdfESP204 - Cap. 2 - Processos.pdf
ESP204 - Cap. 2 - Processos.pdfAndreLisboa13
 
Desenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo realDesenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo realHenrique Schmidt
 
Desenvolvimento de software mundo ideal x mundo real
Desenvolvimento de software  mundo ideal x mundo realDesenvolvimento de software  mundo ideal x mundo real
Desenvolvimento de software mundo ideal x mundo realWilly Salazar
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingMarcelo Láias
 
Engenharia de Software: Processos de Software
Engenharia de Software: Processos de SoftwareEngenharia de Software: Processos de Software
Engenharia de Software: Processos de Softwaregabriel-colman
 
XP Programming
XP ProgrammingXP Programming
XP ProgrammingCJR, UnB
 
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...Joberto Diniz
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHPCezar Souza
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareDextra Sistemas / Etec Itu
 
Aula 05 qs - cocomo
Aula 05   qs - cocomoAula 05   qs - cocomo
Aula 05 qs - cocomoJunior Gomes
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitAdolfo Neto
 

Semelhante a ESP204 - Cap. 9 - Refactoring.pdf (20)

ESP204 - Cap. 2 - Processos.pdf
ESP204 - Cap. 2 - Processos.pdfESP204 - Cap. 2 - Processos.pdf
ESP204 - Cap. 2 - Processos.pdf
 
Desenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo realDesenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo real
 
Desenvolvimento de software mundo ideal x mundo real
Desenvolvimento de software  mundo ideal x mundo realDesenvolvimento de software  mundo ideal x mundo real
Desenvolvimento de software mundo ideal x mundo real
 
FC-Logic
FC-LogicFC-Logic
FC-Logic
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Qualidade e Testes de Software
Qualidade e Testes de SoftwareQualidade e Testes de Software
Qualidade e Testes de Software
 
Aula 05
Aula 05Aula 05
Aula 05
 
Engenharia de Software: Processos de Software
Engenharia de Software: Processos de SoftwareEngenharia de Software: Processos de Software
Engenharia de Software: Processos de Software
 
XP Programming
XP ProgrammingXP Programming
XP Programming
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
 
Código limpo php
Código limpo phpCódigo limpo php
Código limpo php
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 
Clean code part 2
Clean code   part 2Clean code   part 2
Clean code part 2
 
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHP
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
Aula 05 qs - cocomo
Aula 05   qs - cocomoAula 05   qs - cocomo
Aula 05 qs - cocomo
 
Extreme programming (xp)
 Extreme programming   (xp) Extreme programming   (xp)
Extreme programming (xp)
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com Junit
 

Último

Apresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPMApresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPMdiminutcasamentos
 
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptxVagner Soares da Costa
 
Tipos de Cargas - Conhecendo suas Características e Classificações.pdf
Tipos de Cargas - Conhecendo suas Características e Classificações.pdfTipos de Cargas - Conhecendo suas Características e Classificações.pdf
Tipos de Cargas - Conhecendo suas Características e Classificações.pdfMarcos Boaventura
 
Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3filiperigueira1
 
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdfPROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdfdanielemarques481
 
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptxVagner Soares da Costa
 
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docxTRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docxFlvioDadinhoNNhamizi
 

Último (7)

Apresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPMApresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPM
 
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
 
Tipos de Cargas - Conhecendo suas Características e Classificações.pdf
Tipos de Cargas - Conhecendo suas Características e Classificações.pdfTipos de Cargas - Conhecendo suas Características e Classificações.pdf
Tipos de Cargas - Conhecendo suas Características e Classificações.pdf
 
Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3
 
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdfPROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
 
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
 
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docxTRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
 

ESP204 - Cap. 9 - Refactoring.pdf

  • 1. 1 Engenharia de Software e Sistemas Cap. 9 - Refactoring Prof. Dr. Thiago Mendes e Prof. Dr. Cleber Lira thiagosouto@ifba.edu.br, cleberlira@ifba.edu.br 1 Licença CC-BY; créditos para Marco Tulio Valente. Engenharia de Software Moderna: Princípios e Práticas para Desenvolvimento de Software com Produtividade, 2020 https://engsoftmoderna.info, @engsoftmoderna.
  • 2. Relembrando Cap. 1 (Introdução) 2
  • 3. Manutenção de Software ● Preventiva: bugs "latentes" ● Corretiva: bugs reportados por usuários ● Adaptativa: customizações, novas versões de LP/SO ● Evolutiva: novas funcionalidades ● Refactoring: melhorias no código ou design 3
  • 4. Antes de começar com refactoring … Leis de Lehman 4
  • 5. Leis de Lehman ● Leis empíricas sobre evolução de software ● Propostas por Meir Lehman, nas décadas 70-80 5
  • 6. Resumo das Leis de Lehman ● Sistemas devem ser sempre mantidos para serem úteis ● Mas manutenções aumentam a complexidade e deterioram a qualidade do código ● A não ser que um trabalho seja realizado para evitar isso 6 Modernamente, este trabalho ganhou o nome de refactoring
  • 7. Refactoring ● Transformações de código que melhoram a manutenibilidade de um sistema mas sem afetar o seu funcionamento externo 7
  • 8. Refactoring ● Conceito tornou-se bastante popular ... 8 2018 2000 1999
  • 9. Refactoring ● Refactoring = refatoração ● Não vamos traduzir… termo em inglês é muito usado 9
  • 10. Eunão sou um excelente programador, mas um bom programador com excelentes hábitos – Kent Beck 10
  • 11. Catálogo de Refactorings ● Extração de Métodos ● Inline de Métodos ● Movimentação de Métodos ● Extração de Classes ● Renomeação ● etc 11
  • 14. Um exemplo real ... 14
  • 17. 17 Danilo Silva, Nikolaos Tsantalis, Marco Tulio Valente. Why We Refactor? Confessions of GitHub Contributors. FSE 2016. Canivete-suíço dos refactorings
  • 18. Inline de Métodos (contrário de extração) 18
  • 22. 22
  • 23. Casos particulares de movimentação (ao longo de uma hierarquia de classes) 23
  • 27. 27
  • 28. Renomeação (variáveis, parâmetros, métodos, classes, exceções, etc) 28
  • 29. Dar bons nomes a variáveis é um dos problemas mais difíceis em programação! 29
  • 30. 30 Renomação é o refactoring mais popular Murphy-Hill, et al. How We Refactor, and How We Know It. IEEE TSE 2012.
  • 32. Refactorings dependem de testes Desenvolvedores evitam refatorações em sistemas sem testes. Em vez disso, eles reduzem as modificações àquelas necessárias para implementar novas funcionalidades ou corrigir bugs. Assim, a complexidade vai se acumulando e erros de projeto não são corrigidos -- John Ousterhout 32
  • 33. Quando refatorar? 1. Refactorings oportunistas 2. Refactorings planejados 33
  • 34. Refactorings Oportunistas ● Realizados no meio de uma outra tarefa de programação ● Tipo de refactoring mais comum ● Para cada mudança que tiver que realizar em um sistema, primeiro torne-a fácil (aviso: isso pode ser difícil), então realize a mudança facilmente -- Kent Beck 34
  • 35. Refactorings Planejados ● Correção de um problema de design mais complexo ● Sessão apenas para realização de refactorings 35
  • 37. 37
  • 38. 38
  • 39. 39 Danilo Silva, Nikolaos Tsantalis, Marco Tulio Valente. Why We Refactor? Confessions of GitHub Contributors. FSE 2016. Observação: O único rename analisado foi de pacote
  • 40. 40
  • 42. Code (ou Bad) Smells ● Indicadores de código de baixa qualidade ● Difícil de manter, entender, modificar ou testar ● Portanto, candidato a refatoração 42
  • 43. Catálogo de Code Smells ● Código Duplicado ● Métodos Longos ● Classes Grandes ● Feature Envy ● Métodos com Muitos Parâmetros ● Variáveis Globais 43 ● Obsessão por Tipos Primitivos ● Objetos Mutáveis ● Classes de Dados ● Comentários
  • 45. Código Duplicado ● Dificulta a manutenção ● Portanto, código candidato a refatoração 45
  • 46. 46 Aiko Yamashita, Leon Moonen. Do developers care about code smells? An exploratory survey. WCRE 2013.
  • 48. Clone Tipo 1 (comentários e espaços) 48 Código Original
  • 49. Clone Tipo 2 (tipo 1 + nomes diferentes) 49 Código Original
  • 50. Clone Tipo 3 (tipo 2 + mudanças em comandos) 50 Código Original
  • 51. Clone Tipo 4 (algoritmos diferentes, mas equivalentes) 51 Código Original
  • 53. Feature Envy ● Método que "inveja" dados e métodos de outra classe ● Usa mais métodos e dados dessa outra classe ● Logo, é um candidato a ser movido para ela 53
  • 54. 54
  • 56. Variáveis Globais ● Acoplamento ruim ● Dificulta o entendimento de um método 56 Para entender o que f retorna, precisamos conhecer o valor de g Esse valor pode variar entre chamadas de f, etc
  • 57. Obsessão por Tipos Primitivos 57
  • 58. Obsessão por Tipos Primitivos ● CEP, Moeda, Data, Hora, Cor, Email, etc não devem ser de tipos primitivos ● Mas sim de um tipo próprio, com alguns métodos ● Por exemplo, métodos para validação de valores 58
  • 60. Objetos Mutáveis vs Imutáveis ● Mutáveis: estado pode mudar ● Imutáveis: uma vez criados, estado não muda 60
  • 61. Objetos Imutáveis: Strings em Java 61 Hello World HELLO WORLD
  • 62. Por que objetos imutáveis são "bons"? ● Dão "segurança" a quem criou o objeto ● Pode-se passar o objeto para outros métodos e ter certeza de que eles não vão alterar o seu estado 62
  • 63. Como interpretar esse code smell ● Sempre que possível, implemente objetos imutáveis ● Principalmente, objetos mais simples (CEP, Data, Hora, etc) ● Mas, por outro lado, em linguagens imperativas é natural ter um bom número de objetos mutáveis. 63
  • 65. A ideia é a seguinte: "não comente código ruim, reescreva-o" -- B. Kerninghan & P. J. Plauger 65
  • 66. 66
  • 67. 67
  • 68. Comentários "Ruído" (nada acrescentam …) 68 // this function sends an email void sendEmail() { ... } // this class holds data for an employee public class Employee { ... }
  • 69. Mais um exemplo de comentários "ruído" 69 Comentários apenas repetem o que já está bem claro no código Fonte: A Philosophy of Software Design (capítulo 13)
  • 70. Evidentemente, nem todo comentário é um code smell ... 70
  • 71. Quando é útil comentar? ● Código complexo por natureza 71 // format matched kk:mm:ss EEE, MMM dd, yyy Pattern timePattern = Pattern.compile("d*:d*:d* w*, w*, d*, d*");
  • 72. Quando é útil comentar? 72 ● Documentação de APIs /** * Registers the text to display in a tool tip. The text * displays when the cursor lingers over the component. * * @param text the string to display. If the text is null, * the tool tip is turned off for this component. */ public void setToolTipText(String text) {
  • 74. Débito Técnico ● Metáfora para explicar a importância de boas práticas e princípios de Engenharia de Software ● Proposto por Ward Cunningham (1992) ● Soluções não-ótimas de design que dificultam a manutenção e evolução de um sistema 74
  • 75. 75
  • 76. 76 Projeto no qual TD não foi pago Projeto no qual TD foi sendo pago Speed = velocidade de implementação de novas funcionalidades
  • 77. Exemplos de Débito Técnico ● Ausência de testes ● Ausência de builds automatizado ● Problemas arquiteturais ● Alto acoplamento e baixa coesão ● Code smells ● Ausência completa de documentação ● Código que não segue layout pré-definido 77