fábrica de software ferramentas para auditoria de código eduardo aranha

44
Fábrica de Software Ferramentas para Auditoria Ferramentas para Auditoria de Código de Código Eduardo Aranha

Upload: natalia-santo

Post on 07-Apr-2016

224 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Ferramentas para Auditoria de Ferramentas para Auditoria de CódigoCódigo

Eduardo Aranha

Page 2: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Ferramentas para Auditoria Ferramentas para Auditoria de Códigode Código• Metamata Audit

• Metamata Metrics

• JavaPureCheck

Page 3: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Ferramentas para Auditoria Ferramentas para Auditoria de Códigode Código• Metamata Audit

– Avalia código fonte procurando erros, pontos fracos, estilos de acordo com padrões de codificação

– Sugere modificações geralmente para melhorar• Performance, Robustês, Legibilidade

– Métricas: boas práticas de programação– Habilitação das métricas– Criação de métricas próprias

Page 4: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• Ordem de ocorrência dos modificadores• Corpo de loops e de comandos if

obrigatoriamente dentro de blocos• Importação de classes

– pacote java.lang– desnecessárias– tipo <nome-pacote>.*

Page 5: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• Convenções de Nomeclatura

– Classes, interfaces, métodos, atributos, constantes, pacotes, variáveis locais

• v.isEmpty() == true• for (int i = 0 ; i < v.size() ; i++ { ... }• while (...) { str = str + “...”; }• int i; float f; ... ; f = (float) i;

Page 6: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• class Carro extends Veiculo { ... }

Carro car; ... ; if (car instanceof Veiculo) ...Veiculo v; ... ; if (v instanceof Carro) ...

• i = j = 3 + 4;• i = j++ + 10 ; ... ; i = (j = 5) + 1;• int sum(i) { ... ; i++ ; ... } ...; sum(n)• for (int i = 0 ; ...; i++) { ... ; i = 10 ; ... }

Page 7: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• if (a && b || c) { ... } ... if ((a && b) || c) { ... }• class C { int f; ... int do() { int f; ... } ...

int do(int f) { ... } ... }• class C {int index() { ... } ...

int do() { int index; ... } ... }• abstract interface MyInterface { ... }

Page 8: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• Um método que retorna valor não deve

alterar o estado (polêmico)class M { int i; ... void incr() { i++ } ... int val() { i-- ; incr(); return i; } }Justificativa: – separação de métodos que consultam estados x

executam Desvantagem: eficiência

Page 9: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• Métodos sincronizados

synchronized void do() { ... } void do() {synchronized (this) { ... } }Vantagens:– Legibilidade (+ de 1 sync.), redefinição,

depuraçãoDesvantagens:– Eficiência de alguns compiladores

Page 10: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• Métodos estáticos sincronizados

static synchronized void do() { ... } void do() {

synchronized (MyClass.this) { ... } }Vantagens:– Livre de problemas em certas versões do

JDK

Page 11: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• interface I { public static final int x = 4;

public abstract void do(); }

• int x[]; double[] num[]; char[] c;

• try { ... } catch (MyException me) {}

• try { throw new IOException(); } catch (Exception e) { ... }

Page 12: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• import MyClass; ... ; import MyClass; ...

• Declarações locais (variáveis, parâmetros, membros privados) não utilizadas

• Declarações globais (acessível fora da própria classe) não utilizadas

Page 13: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• class SuperClass {

private void f(Vector v) {...} }

class SubClass extends SuperClass {

private void f(Vector v) {...} }

Page 14: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• class SuperClass {

void f(Vector v) {...} }

class SubClass extends SuperClass {

abstract void f(Vector v); }

Page 15: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• class SuperClass { void f(int i) {...}

void f(Vector v) {...} }

class SubClass extends SuperClass {

void f(double d) {...} }

Page 16: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• public class MyClass1 { public int f(int i) { ... } int f(char i) { ... } } class MyClass2 { // classe de outro pacote public void do() {

char c = ...; MyClass1 mc = ...; mc.f(c); } }

Page 17: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• switch (exp) {

case 1: ...case 2: ......case 256: ...case 257: ...

}

Page 18: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• class MyClass {

static void do() { ... }}

class MyClass2 {void f() { MyClass c = ... ; ... ;

c.do(); }}

Page 19: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas na Métricas utilizadas na ferramenta Metamata Auditferramenta Metamata Audit• class MyClass {

static int valor;static void init(int i) { valor = i; }}

class MyClass2 {static int valor2 = MyClass.valor + 2;}

Page 20: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Ferramentas para Auditoria Ferramentas para Auditoria de Códigode Código• Metamata Metrics

– Identifica complexidade, acoplamento e coesão de código

– Métricas baseadas em recomendações da quality assurance comunity

– Serve de guia para cálculo da qualidade de software

– Habilitação das métricas

Page 21: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata Metrics• V(G)

– Número de caminhos possíveis de execução em um código

– Complexidade– Comandos while, if, for, switch

Page 22: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata Metrics• LOC

– Linhas de código

– Legibilidade, reusabilidade, manutenbilidade– Número de linhas de código, em branco ou de

comentário, número de comandos

Page 23: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata Metrics• DIT

– Profundidade de hierarquias de classes– Interfaces e classe Object: profundidade 1– Outras classes: 1 + profundidade da superclasse

Page 24: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata Metrics• NOA

– Números de atributos declarados em uma classe– Quanto maior o estado, maior a dificuldade de

• manter invariantes• entendimento

Page 25: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata Metrics• NRM

– Número de Métodos Remotos– Um método é remoto para uma classe se ele for

invocado e não for declarado• Na própria classe• Em alguma superclasse ou superinterface• Em alguma subclasse

Page 26: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata Metrics• NLM

– Número de Métodos Locais

– Um método é local para uma classe se ele for invocado e for declarado na própria classe ou interface

Page 27: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata Metrics• WMC

– Complexidade da Classe de acordo seus Métodos locais– Conta número de métodos locais ponderando de acordo

com • V(G)• Número de parâmetros

Page 28: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata Metrics• RFC

– Tamanho do conjunto de resposta para uma classe – Conjunto de resposta

• Métodos locais e de outros objetos• Podem ser chamados a partir da invocação de um método da

classe

• DAC– Número por classe de tipos utilizados na definição de

atributos que não sejam do próprio tipo da classe, das subclasses e das superclasses

Page 29: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata Metrics• FAN OUT

– Número de tipos utilizados na declaração de• Atributos• Partâmetros formais e retornos de métodos• Throws• Variáveis locais

que não sejam do próprio tipo da classe, das subclasses e das superclasses

Page 30: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata Metrics• CBO

– Acoplamento entre classes baseado • No acesso de membros de outras classes• Na passagem de objetos de outras classes como parâmetro de

métodos – Usa o Fan Out

Page 31: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Métricas utilizadas no Métricas utilizadas no Metamata MetricsMetamata Metrics• LCOM

– Falta de coesão dos métodos de uma classe– Interseção dos conjuntos de atributos acessados por

esses métodos

• NOCL– Número de classes definidas

Page 32: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Ferramentas para Auditoria Ferramentas para Auditoria de Códigode Código• JavaPureCheck

– Inspeciona o código em busca de problemas de portabilidade

– Parte do 100% Pure Java Certification Program

– Identifica alguns dos problemas levantados pelo 100% Pure Java Certification Program

Page 33: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Desenvolvendo Programas Desenvolvendo Programas PurosPuros• Linhas guias

– Runtime.exec()– Class.forName() (warning)– ClassNotFoundException.printStackTrace()– RemoteException.printStackTrace()– Hard-coded path (/log/output.log)– Código nativo

Page 34: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Desenvolvendo Programas Desenvolvendo Programas PurosPuros• Linhas guias (cont.)

– Prioridades de Threads– Tamanho e posição diretamente de

componentes visuais– Method.invoke()– AWT Peer classes ao invés das interfaces AWT– System.exit(), System.in, System.out

Page 35: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Desenvolvendo Programas Desenvolvendo Programas PurosPuros• Linhas guias (cont.)

– Drives JDBC (drive é portável?)– Terminador de linha (\n, \r\n, …)– Processamento da linha de comando– Internacionalização– Unicode– …

Page 36: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Execução do Execução do JavaPureCheckJavaPureCheck• Input

Page 37: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Execução do Execução do JavaPureCheckJavaPureCheck• Check

Page 38: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Execução do Execução do JavaPureCheckJavaPureCheck• Analyse

Page 39: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Execução do Execução do JavaPureCheckJavaPureCheck• Warning

Page 40: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Execução do Execução do JavaPureCheckJavaPureCheck• Error

Page 41: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Execução do Execução do JavaPureCheckJavaPureCheck• Relatório

Page 42: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Conclusões e Trabalhos Conclusões e Trabalhos FuturosFuturos• Grande suporte para o controle de qualidade

de código• Pouco suporte para o controle de qualidade

do projeto• Nenhum suporte para as outras atividades• Auditoria do código do Radix• Mapeamento de problemas em refactorings

Page 43: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

ReferênciasReferências

• www.metamata.com• www.metamata.com/audit.html• www.metamata.com/metrics.html• www.javasoft.com• java.sun.com/100percent/index.html

Page 44: Fábrica de Software Ferramentas para Auditoria de Código Eduardo Aranha

Fábrica de Software

Ferramentas para Auditoria de Ferramentas para Auditoria de CódigoCódigo

Eduardo Aranha