palestra tasafo conf-2015: refatoração com métricas

50
Conf 2015 Cláudio Martins [email protected] Novembro/2015 1

Upload: claudio-martins

Post on 18-Feb-2017

452 views

Category:

Software


0 download

TRANSCRIPT

Conf 2015

Cláudio [email protected]

Novembro/2015

1

Sobre o palestrante : Cláudio Martins

Sou Mestre em Computação pela Universidade Federal do Rio Grande do Sul (UFRGS/2003), graduado em Tecnologia de PD (UFPA/1989), especialista em Análise e Projeto de Sistemas (UFPA/1998). Sistemas (UFPA/1998). Professor do Instituto Federal do Pará (IFPA), e analista de sistemas da Companhia de Informática de Belém (Cinbesa). Trabalho há mais de vinte anos com engenharia de software e sistemas de informação.

2Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Lattes: http://lattes.cnpq.br/7014997829591968

LinkedIn: http://br.linkedin.com/in/claudiomartins2010

Facebook: https://www.facebook.com/claudiomartins2000

Blog: http://claudiomartins-prof.blogspot.com.br/

• A palestra tem por objetivo apresentar as principais métricas de código orientado a objetos como suporte à tarefa de refatoração de código.

Agenda

à tarefa de refatoração de código.

• A palestra é dividida em três partes:

– Motivação

– Refatoração

– Métricas para Software Orientado a Objetos

3

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Motivação:Motivação:

Software, manutenção e qualidade

4

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

O que é Software?

• Há pouco tempo, as pessoas não conseguiam perceber a existência ou importância do software. importância do software.

– Hardware/Equipamento e software se confundiam em só um conceito.

• Hoje, o software está presente e onipresente em vários meios e dispositivos.

Software (definição)•Programas de computador (código, instruções), estruturas de dados e... •A documentação necessária para instalar, usar e tornar os programas compreensíveis para quem os mantêm.

5

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Custo do Software

• Ao longo do ciclo de vida, os custos em Desenvolvimento e Manutenção do Software:

▫ Desenvolvimento ................ 30 a 40 %▫ Desenvolvimento ................ 30 a 40 %▫ Manutenção ........................ 60 a 70 %

6

Custos relativos ao Desenvolvimento

do Software e Manutenção.Custos relativos a TIC, Desenvolvimento de

Software e Manutenção de Software

Sem Manutenção, tudo se desgasta, tudo se desgasta,

deteriora.

7

Ciclo de vida do hardware/equipamentos físicos

8

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Ciclo de vida do Software

9

Diz respeito a uma das 8 Leis de Lehman: Complexidade crescente - Se não forem tomadas medidas para reduzir ou manter a complexidade de um software, conforme ele é alterado sua complexidade irá aumentar progressivamente. Deve haver um esforço para reduzir a complexidade final de um sistema enquanto este recebe alterações.Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Reengenharia de Software

10

• É o processo de alterar a codificação do software sem alterar sua

funcionalidade.

– Ex: definição e nomes de dados e código do programa, melhorias e

simplificações em instruções.

Reestruturação de Código

simplificações em instruções.

• O propósito principal é tornar o programa mais fácil de ser

compreendido.

Fundamentos da Reengenharia 11

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Refatoração (Refactoring) Refatoração (Refactoring) de Software OO

12

Refatoração

• Refatoração (do inglês, Refactoring) é o processo de modificar um software para melhorar sua estrutura interna (do código) sem alterar seu comportamento interna (do código) sem alterar seu comportamento externo.

– Martin Fowler et al. (1999).

• Refatoração busca tornar o software mais fácil de entender e mais barato de se modificar (evoluir).

• O uso desta técnica evita a deterioração tão comum • O uso desta técnica evita a deterioração tão comum durante o ciclo de vida de um código.

• Não se trata de otimização.

– Refatorar ~ Refabricar ~ Reestruturar

– É uma prática “ágil”!13

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Refatoração (Refactoring) de Software •A refatoração visa auxiliar o processo de desenvolvimento (programação) e evolução (manutenção) do software a partir de mecanismos de reestruturação de código (orientado a objetos).

14

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

“Mau cheiro” (Bad Smell)

Problemas de qualidade de código

15

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Exemplo prático de Refatoração•Considere a classe ‘C’, responsável por implementar funcionalidades em uma conta bancária:

public class C {public double s;public void sacar(double valor){

this.s = s – valor;}public static void main(String args[]){

C c = new C();C c = new C();c.s = 100;c.sacar(50);System.out.println(“Saldo:”+c.s);

}}

16

Exemplo prático de Refatoração: Renomear Classe Solução:

Trocar o nome da classe

public class Conta {public double s;public void sacar(double valor){

this.s = s – valor;}public static void main(String args[]){

Conta c = new Conta();Conta c = new Conta();c.s = 100;c.sacar(50);System.out.println(“Saldo:”+c.s);

}}

17

Exemplos comuns de Refatoração

•Mudança do nome de variáveis•Mudança do nome de variáveis•Mudanças nas interfaces dos objetos•Pequenas mudanças arquiteturais•Decompor grandes métodos em métodos menores•Encapsular código repetido em um novo método•Generalização de métodos. Ex:•Generalização de métodos. Ex:

raizQuadrada(float x)⇒ raiz (float x, int n)

18

Catálogo de Refatorações•Existem algumas propostas de catálogos. Ex:

▫Kerievsky's (2004)▫Sven Gort e Philippe T’Seyen, Refactoring Thumbnails, ▫Alur et. al.,no livro “Core J2EE Patterns, 2001 (obs: p/ arquitetura JEE)

•Talvez o mais conhecido dos catálogos seja o proposto por Fowler [2000]

19

http://www.martinfowler.com/

O que é Métrica?

Métrica é a medição de um atributo

20

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

um atributo (propriedades ou características ) de uma determinada entidade (produto, processo ou recursos).

• A abordagem tradicional para refatorar código é a leitura do código em busca dos ‘maus cheiros’ (bad smell).

– Essa é uma abordagem que pode ser subjetiva e dependente de

Motivação: “Code Smell” e Refatoração

– Essa é uma abordagem que pode ser subjetiva e dependente de um especialista (principalmente em grandes sistemas!).

– Para grandes sistemas é inviável.

21http://martinfowler.com/bliki/CodeSmell.html

• Abordagem baseada em Métricas de Software.

• As métricas de software podem medir inúmeras características do software

Como podemos refatorar de forma objetiva?

características do software

– da qualidade do produto

– do processo de desenvolvimento do software.

• Em refatoração, o foco estará nas métricas de software voltadas ao produto de software no que se refere ao código.código.

22

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

• As métricas que interessam à refatoração estão relacionadas aos atributos de software :

– Tamanho

Métricas de Software

– Tamanho

– Complexidade

– Acoplamento

– Coesão

• Em algum sentido, medir o grau de “Abstração” do software

• No caso da refatoração, esses atributos estarão • No caso da refatoração, esses atributos estarão relacionados as seguintes elementos do código OO: pacotes, classes e métodos.

23

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Há várias métricas que medem a qualidade interna.

Ex:– Total de linhas de código (Lines of Code – LOC)

Métricas de software ( qualidade interna / código)

– Total de linhas de código (Lines of Code – LOC)

– Número de classes (NC – Number of Classes)

– Falta de coesão em métodos (LCOM)

– Depth of Inheritance Tree (DIT)

– Number of Overridden Methods (NORM)

– Number of Methods (NOM)

– Number of FieldsNumber of Fields

– Specialization Index

– McCabe Cyclomatic Complexity

– Weighted Methods per Class (WMC)

– Etc.24

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

• LOC é a mais antiga e a mais simples das métricas de software.• LOC mede o tamanho (em linhas) das classes e métodos.• Normalmente não contabiliza as linha em branco.

Linhas de Código (LOC – Lines of Code)

LOC = 77 linhas

25Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

LOCm = 5 LOCm = 5 comentários

• Métricas de complexidade indicam o quanto é complexo é um código (do método, classe, pacote), em relação às estruturas internas de comandos e como são organizados.

Métricas de complexidade

organizados.

• Ex:– Métricas simples para medir complexidade:

• Número de atributos (NF – Number of Fields)

• Número de métodos (NOM – Number of Methods)

• Número de Parâmetros (NP – Number of Parameters)

– Métricas mais usadas para complexidade:• Profundidade de Blocos Aninhados (NBD – Nested Block Depth)

• Complexidade Ciclomática de McCabe (CC ou VG)

• Métodos Ponderados por Classe (WMC – Weighted Methods per Class)

26

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Métricas simples relacionadas à complexidade

NF = 5 campos

NP = 6 Parameters

27

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

NOM =7 métodos

• NBD representa o número máximo de blocos de código aninhados (Nested Block Depth) em um determinado método.

– A métrica NBD mede a complexidade do método.

Profundidade de Blocos Aninhados

(NBD – Nested Block Depth)

28

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Complexidade Ciclomática (CC ou VG) de McCabe

Mede complexidade de código do método. Normalmente, VG < 5 => complexidade menorÉ calculada contando o número de laços e condicionais existentes, somando-se 1 no final.

29

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

• WMC mede a complexidade individual de uma classe.

– A complexidade de uma classe é reflete o número de seus métodos e suas complexidades.

Métodos Ponderados por Classe

(WMC – Weighted Methods per Class)

métodos e suas complexidades.

• WMC é geralmente calculado como a somatório das complexidades dos métodos da classe.

– A métrica de complexidade dos métodos geralmente é medida pela Complexidade Ciclomática (McCabe).

30

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Métricas de Acoplamento

Medem o acoplamento entre classes ou subsistemas, isto é, medem a ligação ou dependência entre essas classes ou subsistemas (pacotes).

31

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Recomendação:Classes com responsabilidades claras e um baixo acoplamento

• Acoplamento Eferente (EC- Efferent Coupling ou EC):

– número total de classes dentro de um pacote que dependem de classes externas ao pacote.

Métricas de Acoplamento

de classes externas ao pacote.

• Acoplamento Aferente (AC - Afferent Coupling)

– número total de classes externas de um pacote que dependem de classes de dentro desse pacote

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

32

Acoplamento Eferente (Ce – Efferent Coupling)

33

O acoplamento eferente do pacote = 2- há duas classes dentro do pacote que dependem de classes fora do

pacote.

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Acoplamento Aferente (Ca – Afferent Coupling)

34

O acoplamento aferente do pacote é cinco, pois existem 5 classes fora do pacote que dependem de classes dentro do pacote.

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Ex: CBO (Coupling Between Object Classes)

CBO mede o total de mensagens trocadas entre os objetos das classes analisadas em um pacote/sistema.Ex: CBO do pacote = 8, há 8 relacionamentos entre classes do pacote e classes externas ao pacote.e classes externas ao pacote.

35

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

• Profundidade da Árvore de Herança (DIT – Depth of Inheritance Tree)

• Número de Filhos (NoC – Number of Children)

Métricas de Herança

• Número de Filhos (NoC – Number of Children)

• Número de Métodos Redefinidos (NORM –Number of Overridden Methods)

• Índice de Especialização (SI – Specialization Index)

36

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

• Essa métrica admite valores entre zero e um.

• Uma medida de abstração (A) próxima de zero (0) :

– indica que as entidades analisadas são bastante concretas e

Abstração (A – Abstractness)

– indica que as entidades analisadas são bastante concretas e que o mecanismo de abstração foi pouco utilizado, o que reduzirá a probabilidade de reúso da entidade.

• Quando a métrica se aproxima de um (1):

– O software é bastante abstrato o que evidencia a existência de classes abstratas e interfaces (com poucas de classes abstratas e interfaces (com poucas funcionalidades implementadas).

– Normalmente “frameworks” possuem A próximo de 1.

37

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

• A métrica Instabilidade (I) avalia entidades (pacotes, p.ex) quanto a sua dependência perante outras entidades, servindo de avaliação quanto ao impacto de

Instabilidade (I – Instability)

entidades, servindo de avaliação quanto ao impacto de mudanças na entidade a ser medida.

• A métrica Instabilidade admite valores entre zero e um.

• A instabilidade é o resultado da divisão do acoplamento eferente de um pacote pelo total de acoplamentos (aferentes e eferentes) dele. (aferentes e eferentes) dele.

– De uma maneira bem simples, um pacote é instável se ele depende de muitos outros pacotes. Dessa forma, pacotes projetados para serem reusáveis devem ter baixa instabilidade.

38

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

• A Distância (Distance from the Main Sequence - D) relaciona a Abstração (A) e a Instabilidade (I), calculado pela distância do ponto traçado entre A e I e a linha

Distância (Distance from the Main Sequence – D

ou Dn)

pela distância do ponto traçado entre A e I e a linha (seqüência) principal (ideal) do balanceamento entre A e I.

• A Distância Normalizada da Sequência Principal

(Dn) varia entre 0 e 1

• Dn deve ser melhor para valores baixo, demonstrando um balancemento entre a instabilidade e abstração.balancemento entre a instabilidade e abstração.

39

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Gráfico de Abstração vs. Instabilidade (para Dn)

Dn deve se manter próxima à linha da sequência principal

11

Abstração

Dn

40

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

1Instabilidade 0

• Há muitas ferramentas disponíveis no mercado, tanto comerciais quanto open-source, para coleta de métricas de código (análise estática de código):

Ferramentas de medição

métricas de código (análise estática de código):

• Ex (software livre):

– FindBugs (http://findbugs.sourceforge.net/)

– PMD (http://pmd.sourceforge.net)

– Checkstyle (http://checkstyle.sourceforge.net/index.html)

– JDepend (http://clarkware.com/software/JDepend.html)– JDepend (http://clarkware.com/software/JDepend.html)

– Eclipse Metrics

– Simple Code Metrics (NetBeans)

41

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

• O sistema “Locadora de Vídeo”, usado no livro de Martin Fowler, apresenta dificuldades na manutenção e evolução para novos requisitos (gerar conta no formato HTML, p.ex).

Exemplo de Refatoraçao com Métricas:

Código da “Locadora de Vídeo”

para novos requisitos (gerar conta no formato HTML, p.ex).

• Desafio/Meta: Desenvolva um projeto de refatoração

prevendo melhorias no código quanto à redução da

complexidade e melhorias das abstrações presentes do

sistema.

FilmeLocaçãoCliente

42

códigoPreço: int

Filme

diasAlugados: int

LocaçãoCliente

conta()

1**1

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Métricas obtidas para o sistema original

43

Método “conta()” com VG= 8 (Complexidade

Ciclomátitica) altaQualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Resultados após refatorações no projeto

44

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Análise e interpretação das métricas de pacote

Relacionadas ao pacote

•O sistema “Locadora de Vídeo” após as refatorações (Extração de métodos, Método Fábrica, Polimorfismo, etc) apresenta melhoras nas métricas:

•A (Abstração) e D (Distância da sequência principal) , refletindo os efeitos da criação de classes abstratas

45

refletindo os efeitos da criação de classes abstratas (ClassificaçãoPreço) e interface (Alugável).

•O resultado da refatoração, como é de se esperar, fez aumentar a métrica NCP (Número de classes) e LOC (linhas de código), porém para um benefício a favor do reuso, manuteção e legibilidade da aplicação.

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Análise e interpretação das métricas de classes

46

Melhorias na coesão (LCC- Loose Class Cohesion) e acoplamento

(LCOM e TCC) das classes.

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Análise e interpretação das métricas de métodos

47

Melhoria na complexidade (VG) do Melhoria na complexidade (VG) do método “conta”, cuja

responsabilidades foram movidas para outros métodos de outras

classes (LOC diminui no método).

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

• Quando se avalia a qualidade do produto de software, um dos atributos a ser considerado é a facilidade de manutenção/evolução do software.

Considerações Finais

manutenção/evolução do software.

• Refatoração é uma das estratégia a ser adotada para tratar e melhorar o projeto e a evolução do software.

• Para grandes sistemas de software, a refatoração torna-se um desafio. – Para isso, é importante adotar métricas e ferramentas que

ajudem o processo de refatoração.ajudem o processo de refatoração.

• Assim, garantindo a qualidade do projeto do software, garante-se a viabilidade econômica e uso desse software por um tempo maior no ciclo de vida.

48

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

Obrigado pela atenção!

@_ClaudioMartins

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins

49

http://claudiomartins-prof.blogspot.com.br/

• Chidamber, S. R. & Kemerer, C. F. (1994). A Metrics Suite for Object Oriented Design (IEEE Transactions on Software Engineering, Vol. 20, No. 6). Em: http://www.pitt.edu/~ckemerer/CK%20research%20papers/

Referências

Em: http://www.pitt.edu/~ckemerer/CK%20research%20papers/MetricForOOD_ChidamberKemerer94.pdf

• FOWLER, Martin. Refactoring. Disponível em <http://www.refactoring.com>.

• McCabe, T. J. 1976. A complexity measure. IEEE Trans. Software Eng. 2, 4, 308–320.

• PRESSMANN, Roger S. (1995). Engenharia de Software. 3. ed. • PRESSMANN, Roger S. (1995). Engenharia de Software. 3. ed. São Paulo: Makron Books.

• SOMMERVILLE, Ian (2003). Engenharia de Software. São Paulo: Addison Wesley.

50

Qualidade de software - Refatoraça e Métricas / Prof. Msc. Cláudio Martins