APLICATIVO PARA CÁLCULO DE MÉTRICA DE SOFTWARE EM CÓDIGO-FONTE PL/SQL Karine Trevisani Cunha Alexander 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 Crescente preocupação das empresas em mensurar sistemas. As métricas vem se aprimorando. Hoje são amplamente utilizadas. A métrica deste trabalho é de produto
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 Funcional, simula ação do usuário Estrutural, realizado com base nos códigos gerados
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 n1 n2 N1 N2 número de operadores distintos número de operandos distintos número total de ocorrências de operadores número total de ocorrências de operandos São gerados valores como o comprimento global do programa, o nível do programa, o nível da linguagem, entre outros.
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: CC 1-10 11-20 21-50 maior que 50 Avaliação do Risco programa simples, sem muito risco. programa mais complexo, risco moderado. programa de risco elevado programa incompreensível, risco muito alto Quanto menor a CC, menor esforço pra manter o sistema Se CC muito grande, quebrar código em vários módulos
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: DECLARE -- Bloco de declaração (opcional) BEGIN -- Programa propriamente dito EXCEPTION -- Bloco de exceções (opcional) END Dois tipos de construções condicionais: IF e LOOP
Estruturas Condicionais Caracterizam uma quebra no fluxo de dados IF v_nome = MARCELO THEN v_cargo := GERENTE ; v_depto := 7; v_salario := sal * 0.20; END IF; IF v_data_conclu > v_data_prev THEN v_flag := Atrasada ; ELSE v_flag := Adiantada ; END IF; IF v_comeco > 100 THEN v_comeco := 2 * v_comeco; ELSIF v_comeco >= 50 THEN v_comeco := 0.5 * v_comeco; ELSE v_comeco := 0.1 * v_comeco; END IF; DECLARE v_nro_ordem item.nro_ordem%type := 100; v_contador NUMBER(2):= 1; BEGIN LOOP INSERT INTO item(nro_ordem, seq) VALUES (v_nro_ordem, v_contador); v_contador := v_contador + 1; EXIT WHEN v_contador > 50; END LOOP; END; DECLARE v_nro_ordem item.nro_ordem%type := 100; BEGIN FOR i IN 1..10 LOOP INSERT INTO (nro_ordem, seq) VALUES (v_nro_ordem, v_contador); END LOOP; END; DECLARE v_nro_ordem item.nro_ordem%type := 100; v_contador NUMBER(2):= 0; BEGIN WHILE v_contador < 10 LOOP INSERT INTO (nro_ordem, seq) VALUES (v_nro_ordem, v_contador); v_contador := v_contador + 1; END LOOP; END;
Exemplo
Resolução CC = E - N + 2 E = 9 N = 7 CC = 4 Usando a outra maneira, apenas gráfica, o resultado é o mesmo, são 4 regiões distintas 1 2 3 4 1-7 1-2 - 5-6 - 1-7 1-2 - 3-5 - 6-1 - 7 1-2 - 3-4 - 5-6 - 1-7
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 Uso Contempla 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
String Tokenizer Codificação
Cálculo da CC Codificação
Versão Console Geração do Resultado Rotina de Ajuda
Operacionalidade Tela principal Arquivo escolhido Escolha de arquivos Botão de cálculo Botão Sobre...
Operacionalidade Tela de Resultados Nova análise Classificação Salvar em arquivo Área de resultados
Conclusões Cenário real da empresa Diferente dos outros trabalhos Será continuada a versão console e adequada à empresa. Com isso o QA poderá ter estatísticas sobre os sistemas implantados e novos desenvolvimentos Objetivos alcançados. 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.