APLICATIVO PARA CÁLCULO DE MÉTRICA DE …dsc.inf.furb.br/arquivos/tccs/apresentacoes/2006-1... ·...

Post on 21-Sep-2018

215 views 0 download

Transcript of APLICATIVO PARA CÁLCULO DE MÉTRICA DE …dsc.inf.furb.br/arquivos/tccs/apresentacoes/2006-1... ·...

APLICATIVO PARA CÁLCULO DE MÉTRICA

DE SOFTWARE EM CÓDIGO-FONTE PL/SQL

Karine Trevisani CunhaAlexander Roberto Valdameri - Orientador

Roteiro

• Introdução• Objetivos• Motivação• Fundamentação Teórica• Desenvolvimento

– Especificação (requisitos e diagramas)– Implementação (trechos importantes)

• Operacionalidade• Conclusão• Extensões• Relevância Pessoal

Introdução

• Métrica de software• Complexidade Ciclomática (CC) proposta

por McCabe• Códigos escritos em PL/SQL

Objetivos

• Calcular a métrica da CC em códigos PL/SQL

– Identificar as quebras de fluxo do código– Gerar o resultado, acompanhado de um

parecer

Motivação

• Necessidade da empresa• Mensuração de sistemas legado• Avaliação da complexidade• Possibilidade de melhoria• Diminuição dos custos de manutenção• Somente códigos Delphi e Java

Métricas de Software

• “Não se pode controlar o que não se pode medir.” (De Marco, 1989)

• Classificação– Processo

– Produto

• A métrica deste trabalho é de produto

• Crescente preocupação das empresas em mensurar sistemas.• As métricas vem se aprimorando.• Hoje são amplamente utilizadas.

Teste de Software

• Testar para obter qualidade• Antes, durante e depois• Ocorrência de erros por várias causas• A atividade deve ter especial atenção• Tipos de teste mais conhecido

– Caixa Preta

– Caixa Branca• Teste do caminho básico

• Estrutural, realizado com base nos códigos gerados

• Funcional, simula ação do usuário

Manutenibilidade

• Processo de modificação após entrega• Atributo de qualidade da ISO/IEC 9126-1• Pode corresponder a 70% do custo do

sistema• Um dos aspectos para o calculo:

complexidade• Ciência do Software e Complexidade

Ciclomática

Ciência do Software

• Métrica de Halstead• Calculada após a geração do código• Formado basicamente de operadores e

operandos

• São gerados valores como o comprimento global do programa, o nível do programa, o nível da linguagem, entre outros.

número total de ocorrências de operandos N2

número total de ocorrências de operadores N1

número de operandos distintos n2

número de operadores distintos n1

Complexidade Ciclomática

• Mede testabilidade e manutenibilidade• Proposta por McCabe na década de 70• Mostra o quanto um programa é complexo• Resulta um único número• O resultado pode ser comparado,

independente da linguagem• Costuma ser representado por um grafo

com uma entrada e uma saída, mostrando o fluxo de ações

Complexidade Ciclomática

• Testabilidade: número mínimo de casos de teste necessários para testar todos os caminhos independentes

• Manutenibilidade: observar a classificação a seguir:

programa incompreensível, risco muito alto maior que 50

programa de risco elevado 21 - 50

programa mais complexo, risco moderado. 11 - 20

programa simples, sem muito risco. 1 - 10

Avaliação do RiscoCC

Quanto menor a CC, menor esforço pra manter o siste maSe CC muito grande, quebrar código em vários módulo s

Notação de Fluxo

• Representação gráfica de um módulo de software

• Cada estrutura lógica tem sua própria representação

Complexidade Ciclomática

• Fórmula:

CC = E – N + p» E = número de arestas

» N = número de nós

» p = número de entradas e saídas

• Como só existe uma entrada e uma saída, p é sempre igual a 2

• Graficamente, é também o nº. de regiões

PL/SQL

• Extensão procedural da linguagem SQL• Apresenta basicamente a seguinte estrutura:

• Dois tipos de construções condicionais: IF e LOOP

DECLARE-- Bloco de declaração (opcional)

BEGIN-- Programa propriamente dito

EXCEPTION-- Bloco de exceções (opcional)END

Estruturas Condicionais

• Caracterizam uma quebra no fluxo de dados

DECLAREv_nro_ordem

item.nro_ordem%TYPE := 100;v_contador NUMBER(2):= 0;BEGIN

WHILE v_contador < 10 LOOPINSERT INTO (nro_ordem, seq)VALUES (v_nro_ordem, v_contador);

v_contador := v_contador + 1;END LOOP;

END;

DECLAREv_nro_ordem

item.nro_ordem%TYPE := 100;BEGIN

FOR i IN 1..10 LOOPINSERT INTO (nro_ordem, seq)VALUES (v_nro_ordem, v_contador);

END LOOP;END;

DECLAREv_nro_ordem

item.nro_ordem%TYPE := 100;v_contador NUMBER(2):= 1;BEGIN

LOOPINSERT INTO item(nro_ordem, seq)VALUES (v_nro_ordem, v_contador);

v_contador := v_contador + 1;EXIT WHEN v_contador > 50;

END LOOP;END;

IF v_comeco > 100 THENv_comeco := 2 * v_comeco;

ELSIF v_comeco >= 50 THENv_comeco := 0.5 * v_comeco;

ELSEv_comeco := 0.1 * v_comeco;

END IF;

IF v_data_conclu > v_data_prev THENv_flag := ‘Atrasada’;

ELSEv_flag := ‘Adiantada’;

END IF;

IF v_nome = ‘MARCELO’ THENv_cargo := ‘GERENTE’;v_depto := 7;v_salario := sal * 0.20;

END IF;

Exemplo

Resolução

• CC = E - N + 2

E = 9N = 7

CC = 4

1 - 2 - 3 - 4 - 5 - 6 - 1 - 7 4

1 - 2 - 3 - 5 - 6 - 1 - 7 3

1 - 2 - 5 - 6 - 1 - 7 2

1 - 7 1

Usando a outra maneira, apenas

gráfica, o resultado é o mesmo, são 4 regiões distintas

Trabalhos Correlatos

• Possamai (2000) - Métricas para Pascal• Seibt (2001) - Métricas OO• Gonçalves (2003) - Métricas e testes para

Delphi

Requisitos

• Importação de arquivos PL/SQL (RF)

• Reconhecer quebras de fluxo de dados (RF)

• Apresentar resultado com um parecer (RF)

• Gravar resultado em arquivos externos (RF)

• Ser desenvolvido em Java (RNF)

• Usar a métrica conforme McCabe (RNF)

Especificação

• Inicialmente especificado para operação em modo console

• Versão final da especificação visando operação em modo gráfico

• Foram utilizados os conceitos dos diagramas da UML

• Foram criados os diagramas de caso de uso e de classes para o aplicativo.

• Especificado através da ferramenta Enterprise Architect

Caso de UsoContempla os requisitos de importação de arquivos e reconhecimento de quebras

Contempla o requisito de apresentar o resultado com parecer

Contempla o requisito de gravar o resultado em arquivos externos

Diagrama de Classes

Desenvolvimento

• Criada uma versão console e outra gráfica• Ambas implementadas em Java 1.4.2• Versão console - ferramenta Eclipse• Versão gráfica - ferramenta Net Beans

Codificação

• String Tokenizer

Codificação

• Cálculo da CC

Versão Console

Rotina de Ajuda →

← Geração do Resultado

Operacionalidade

• Tela principal

Botão de cálculo Botão Sobre...

Escolha de arquivos Arquivo escolhido

Operacionalidade

• Tela de Resultados

Classificação

Nova análise

Salvar em arquivo

Área de resultados

Conclusões

• Cenário real da empresa

• Diferente dos outros trabalhos

• Objetivos alcançados.

Será continuada a versão console e adequada à empresa.Com isso o QA poderá ter estatísticas sobre os sistemas implantados e novos desenvolvimentos

Por não usar estruturas gráficas como os demais, não foi preciso BNF e nem fazer o cálculo por arestas e nós

Extensões

• Sugestões para trabalhos futuros e aperfeiçoamentos:– Sub-rotinas críticas;

– Outras métricas;– Leitura do banco de dados;

– Base de dados dos resultados;– Linguagem PL para outros bancos;

– Outras linguagens procedurais.

Relevância Pessoal

• Consolidação dos conceitos de desenvolvimento de projetos;

• Notoriedade conseguida dentro da empresa;

• Aprendizado da linguagem Java;• Mais uma etapa vencida.