• Nenhum resultado encontrado

Código Limpo e seu Mapeamento em Métricas de Código-fonte

N/A
N/A
Protected

Academic year: 2022

Share "Código Limpo e seu Mapeamento em Métricas de Código-fonte"

Copied!
26
0
0

Texto

(1)

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

(2)

O Problema

void 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<254;i++)

janela[i]=janela[i+1] + dlk2((*posprim));

janela[254]=janela[256];

} else{

(*posprim)=(*posprim)-compr;

if(*posprim<0)

(*posprim)=0;

for(;auxi>0;auxi--)

for(t=(*posprim);t<254;t++) janela[t]=janela[t+1];

aux=aux-n;

(3)

O Problema

void 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<254;i++)

janela[i]=janela[i+1] + dlk2((*posprim));

janela[254]=janela[256];

} else{

(*posprim)=(*posprim)-compr;

if(*posprim<0)

(*posprim)=0;

for(;auxi>0;auxi--)

for(t=(*posprim);t<254;t++) janela[t]=janela[t+1];

aux=aux-n;

for(;n>0;n--)

janela[255-n]=janela[(aux-n)+1];

} }

?

?

? ?

? ? ?

(4)

O Problema

(5)

Código Limpo

Simplicidade Expressividade

Flexibilidade

Orientação a Objetos

(6)

Mapeamento

Métricas de Código-fonte

Cenários

+ = Ajuda na Detecção

de Problemas

(7)

Nosso TCC

Código

Métricas

Conceitos

Código

Limpo

(8)

Métodos

(9)

Métodos

def 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

(10)

Métodos

def 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 LOC

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

(11)

Métodos

def 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 LOC

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

while

Alta CYCLO

for

for

if

else if

(12)

Métodos

def 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 LOC

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

while

Alta CYCLO

for

for

if

else if

Alto MaxNesting

(13)

Métodos

def 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 LOC

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

while

Alta CYCLO

for

for

if

else if

Alto MaxNesting

(14)

Métodos

(15)

Métodos

(16)

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

(17)

Classes

(18)

Classes

M1 M2 M3

M4

A1

M4 M4

A2 A3

(19)

Classes

M1 M2 M3

M4

A1

M4 M4

A2 A3

Alto LCOM4

(20)

Classes

M1 M2 M3

M4

A1

M4 M4

A2 A3

Alto LCOM4

AvgNRA <<< NOA

7/6 = 1.16 3 1

1

1 2

1 1

3 2

1

(21)

Classes

M1 M2 M3

M4

A1

M4 M4

A2 A3

Alto LCOM4

AvgNRA <<< NOA

7/6 = 1.16 3 1

1

1 2

1 1

3 2

1

Muitas Muitas razões

(22)

Classes

(23)

Classes

(24)

Estudo de Caso

Analizo-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

(25)

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.

(26)

Referências

Documentos relacionados

Mezuro[4] - plataforma para monitoramento de código-fonte Kalibro[5] - software que realiza coleta e análise de métricas de código-fonte.. Com o Mezuro prestes a entrar em produção,

Nos evangelhos apócrifos Maria Madalena não aparece como pecadora penitente, no entanto em alguns textos ela é a companheira de Jesus, ou seja, ela teria sido casada

Capacete de segurança, tipo aba frontal, classe B, com suspensão injetada em plástico, com ou sem jugular com ajuste simples.. Capacete de segurança, tipo aba frontal, classe B,

ITEM FONTE CÓDIGO DESCRIÇÃO DOS SERVIÇOS UNID... ORÇAMENTO SINTÉTICO OBRA : RETROFIT DO

O projeto do aplicativo desenvolvido durante o início deste trabalho para esse estudo de caso específico também deve ser submetido a análise de aproximação ao código do sistema e

Este trabalho teve como objetivo principal o monitoramento de métricas estáticas de código fonte, essencialmente métricas OO, e fazer um estudo da evolução de seus valores

Neste trabalho, buscou-se, por meio de um ambiente de Data Warehousing, fa- cilitar a interpretação e avaliar as métricas de código-fonte e os cenários de limpeza de código a fim de

Técnica Descrição Con tribuiçõ es Consequências Comp osiçã o de M é to dos Comp o r os méto dos em chama- das para outros rigorosamen te no mesmo nív el de abstração abaixo •