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