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.