26
Código Limpo e seu Mapeamento em Métricas de Código-fonte Lucianna T. Almeida João Machini Orientador: Fabio Kon Coorientador: Paulo Meirelles 1 Sunday, November 14, 2010

Código Limpo e seu Mapeamento em Métricas de Código-fontejoaomm/mac499/arquivos/a...Código Limpo Simplicidade Expressividade Flexibilidade Orientação a Objetos Sunday, November

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • Código Limpo e seu Mapeamento em Métricasde Código-fonte

    Lucianna T. AlmeidaJoão Machini

    Orientador: Fabio KonCoorientador: Paulo Meirelles

    1Sunday, November 14, 2010

  • O Problemavoid dslk(unsigned char janela[],int *posprim,

    int *posult,int primeira,int aux, int dist,unsigned char compr,int n)

    { int i,t; int auxi; t=0; auxi=n; primeira=primeira-n; if(dist==0 && aux < 2){ (*posprim)--; for(i=(*posprim);i

  • O Problemavoid dslk(unsigned char janela[],int *posprim,

    int *posult,int primeira,int aux, int dist,unsigned char compr,int n)

    { int i,t; int auxi; t=0; auxi=n; primeira=primeira-n; if(dist==0 && aux < 2){ (*posprim)--; for(i=(*posprim);i

  • O Problema

    2Sunday, November 14, 2010

  • Código Limpo

    Simplicidade

    Expressividade

    Flexibilidade

    Orientação a Objetos

    3Sunday, November 14, 2010

  • Mapeamento

    Métricas de Código-fonte

    Cenários

    + =Ajuda na Detecção

    de Problemas

    4Sunday, November 14, 2010

  • Nosso TCC

    Código

    Métricas

    Conceitos

    CódigoLimpo

    5Sunday, November 14, 2010

  • Métodos

    6Sunday, November 14, 2010

  • Métodosdef custosAPartirDoVertice(vertice): custos = novo Lista(numeroDeVertices) fila = nova FilaDePrioridades(numeroDeVertices) for i in (1, numeroDeVertices): custos[i] = -1 custos[vertice] = 0 fila.insere(nova Aresta(0,0)) while(fila.vazia()): verticeDoMomento = fila.verticeDaArestaComCustoMinimo() for aresta in (arestasDoVertice(verticeDoMomento)): verticeDestino = aresta.verticeDestino() custo = aresta.custo() if(custos[verticeDestino] == -1): custos[verticeDestino] = custos[verticeDoMomento] + custo fila.insere(nova Aresta(verticeDestino, custos[verticeDestino])) else if(custos[verticeDestino] > custos[verticeDoMomento] + custo): custos[verticeDestino] = custos[verticeDoMomento] + custo return custos

    7Sunday, November 14, 2010

  • Métodosdef custosAPartirDoVertice(vertice): custos = novo Lista(numeroDeVertices) fila = nova FilaDePrioridades(numeroDeVertices) for i in (1, numeroDeVertices): custos[i] = -1 custos[vertice] = 0 fila.insere(nova Aresta(0,0)) while(fila.vazia()): verticeDoMomento = fila.verticeDaArestaComCustoMinimo() for aresta in (arestasDoVertice(verticeDoMomento)): verticeDestino = aresta.verticeDestino() custo = aresta.custo() if(custos[verticeDestino] == -1): custos[verticeDestino] = custos[verticeDoMomento] + custo fila.insere(nova Aresta(verticeDestino, custos[verticeDestino])) else if(custos[verticeDestino] > custos[verticeDoMomento] + custo): custos[verticeDestino] = custos[verticeDoMomento] + custo return custos

    Alto LOC12

    34

    56

    7891011

    121314

    1516

    17

    7Sunday, November 14, 2010

  • Métodosdef custosAPartirDoVertice(vertice): custos = novo Lista(numeroDeVertices) fila = nova FilaDePrioridades(numeroDeVertices) for i in (1, numeroDeVertices): custos[i] = -1 custos[vertice] = 0 fila.insere(nova Aresta(0,0)) while(fila.vazia()): verticeDoMomento = fila.verticeDaArestaComCustoMinimo() for aresta in (arestasDoVertice(verticeDoMomento)): verticeDestino = aresta.verticeDestino() custo = aresta.custo() if(custos[verticeDestino] == -1): custos[verticeDestino] = custos[verticeDoMomento] + custo fila.insere(nova Aresta(verticeDestino, custos[verticeDestino])) else if(custos[verticeDestino] > custos[verticeDoMomento] + custo): custos[verticeDestino] = custos[verticeDoMomento] + custo return custos

    Alto LOC12

    34

    56

    7891011

    121314

    1516

    17

    while

    Alta CYCLOfor

    for

    if

    else if

    7Sunday, November 14, 2010

  • Métodosdef custosAPartirDoVertice(vertice): custos = novo Lista(numeroDeVertices) fila = nova FilaDePrioridades(numeroDeVertices) for i in (1, numeroDeVertices): custos[i] = -1 custos[vertice] = 0 fila.insere(nova Aresta(0,0)) while(fila.vazia()): verticeDoMomento = fila.verticeDaArestaComCustoMinimo() for aresta in (arestasDoVertice(verticeDoMomento)): verticeDestino = aresta.verticeDestino() custo = aresta.custo() if(custos[verticeDestino] == -1): custos[verticeDestino] = custos[verticeDoMomento] + custo fila.insere(nova Aresta(verticeDestino, custos[verticeDestino])) else if(custos[verticeDestino] > custos[verticeDoMomento] + custo): custos[verticeDestino] = custos[verticeDoMomento] + custo return custos

    Alto LOC12

    34

    56

    7891011

    121314

    1516

    17

    while

    Alta CYCLOfor

    for

    if

    else if

    Alto MaxNesting

    7Sunday, November 14, 2010

  • Métodosdef custosAPartirDoVertice(vertice): custos = novo Lista(numeroDeVertices) fila = nova FilaDePrioridades(numeroDeVertices) for i in (1, numeroDeVertices): custos[i] = -1 custos[vertice] = 0 fila.insere(nova Aresta(0,0)) while(fila.vazia()): verticeDoMomento = fila.verticeDaArestaComCustoMinimo() for aresta in (arestasDoVertice(verticeDoMomento)): verticeDestino = aresta.verticeDestino() custo = aresta.custo() if(custos[verticeDestino] == -1): custos[verticeDestino] = custos[verticeDoMomento] + custo fila.insere(nova Aresta(verticeDestino, custos[verticeDestino])) else if(custos[verticeDestino] > custos[verticeDoMomento] + custo): custos[verticeDestino] = custos[verticeDoMomento] + custo return custos

    Alto LOC12

    34

    56

    7891011

    121314

    1516

    17

    while

    Alta CYCLOfor

    for

    if

    else if

    Alto MaxNesting

    Muitas tarefas Muitos detalhes

    7Sunday, November 14, 2010

  • Métodos

    8Sunday, November 14, 2010

  • Métodos

    8Sunday, November 14, 2010

  • Métodos

    def inicializaFila(vertice): fila = nova FilaDePrioridades() fila.insere(nova Aresta(0,0))

    def inicializaCustos(vertice): for i in (1, numeroDeVertices): custos[i] = -1 custos[vertice] = 0

    def atualizaCustosAteAcabarVertices(): while(fila.vazia()): verticeDoMomento = fila.verticeDaArestaComCustoMinimo() atualizaCustosAPartirDe(vertice)

    def custosAPartirDoVertice(vertice):inicializaCustos()inicializaFila()atualizaCustosAteAcabarVertices()

    8Sunday, November 14, 2010

  • Classes

    9Sunday, November 14, 2010

  • ClassesM1 M2 M3

    M4

    A1

    M4M4

    A2 A3

    10Sunday, November 14, 2010

  • ClassesM1 M2 M3

    M4

    A1

    M4M4

    A2 A3

    Alto LCOM4

    10Sunday, November 14, 2010

  • ClassesM1 M2 M3

    M4

    A1

    M4M4

    A2 A3

    Alto LCOM4

    AvgNRA

  • ClassesM1 M2 M3

    M4

    A1

    M4M4

    A2 A3

    Alto LCOM4

    AvgNRA

  • Classes

    11Sunday, November 14, 2010

  • Classes

    11Sunday, November 14, 2010

  • Estudo de CasoAnalizo-Metrics

    - Ferramenta para cálculo de métricas de código-fonte em C++, Java e C

    - Software Livre que já colaborávamos

    Estudo de Caso- Melhorias no código da ferramenta para deixá-lo mais limpo

    - Observação das métricas durante o desenvolvimento

    12Sunday, November 14, 2010

  • Referências

    - BECK, Kent. Implementation Patterns. Addison Wesley, 2007

    - MARTIN, Robert C. Clean Code, Prentice Hall, 2008;

    - LANZA, Michele; MARINESCU, Radu. Object Oriented Metrics in Practice. Springer, 2006.

    13Sunday, November 14, 2010

  • 14Sunday, November 14, 2010