Plano GQM - Measurement-and-Metrics-2018-1/2017.1-SIGS GitHub Wiki
Data | Versão | Descrição | Autor(es) |
---|---|---|---|
02/04/2017 | 1.0 | Elaboração do Documento | Vinícius Carvalho |
05/04/2017 | 1.1 | Justificativa de Métricas | Vinícius Carvalho |
05/04/2017 | 1.2 | Contextualização das Questões | Vinícius Carvalho |
07/04/2017 | 1.3 | Revisão | Vinícius Carvalho |
17/04/2017 | 1.4 | Alteração da rastreabilidade GQM | Vinícius Carvalho |
O.1 - Qualidade do produto
Dado que o sistema proposto deverá abranger as localidades da Universidade de Brasília e seus funcionários deverão utilizar posteriormente. O _software_ em produção será mantido pela equipe do CPD - Centro de Informática da UnB, e existe a necessidade de fazê-lo com alta manutenibilidade, para que o cliente não tenha problemas em preservá-lo. Isto é, um produto de software documentado, altamente padronizado e com bons indicadores de orientação a objeto. Maior foco será na parte de padronização de código (Folha de estilo) e bons indicadores de orientação a objeto, que serão evidenciados neste plano. Desta forma, o objetivo do GQM é:
Analisar | código |
---|---|
Com o propósito de | melhorar |
Com respeito a | Manutenibilidade do software |
Sobre o ponto de vista do | desenvolvedor |
No contexto do | projeto SIGS |
A questão anuncia a necessidade de se obter informações em uma linguagem natural, podendo-se formular uma ou mais questões para cada categoria de questões; quanto à resposta, deve estar de acordo com o objetivo.
O abstraction sheet facilita a comunicação entre a equipe de GQM e a equipe de projeto durante o processo e a revisão do plano GQM representando uma visão simplificada do plano.
Foco na qualidade - Q.1.1 O produto apresenta uma boa manutenibilidade? |
Fatores de variação - A produtividade não atender a expectativa; - Conhecimento da equipe limitado; |
Hipótese de baseline - 30% de cobertura de teste até a primeira release; - 90% de cobertura de teste até a segunda release; |
Impacto das hipóteses de baseline - Baixa qualidade do produto de _softwar_e; - Baixa manutenibilidade. |
Essa seção descreve as métricas que serão aplicadas ao projeto como padrão de qualidade.
Para cada métrica será dada uma descrição do que é a métrica, seus respectivos indicadores interpretativos, os resultados esperados para o projeto e as melhorias propostas para reverter quadros desfavoráveis, isto é, possíveis medidas que a equipe deve tomar para obter índices positivos quando estes estiverem comprometidos.
Métrica | M.1.1.1 - Cobertura de teste |
---|---|
Objetivo da Medição | Garantir que o software não contenha erros de lógica ou digitação, assim tendo uma garantia de qualidade. |
Descrição | A cobertura de teste é dada pela proporção entre linhas testadas e a quantidade total de linhas de código. A cobertura de código é importante para acompanhar o andamento dos desenvolvimento dos testes. Testes estes que garantem a qualidade e quantidades mínimas de erros de desenvolvimento. |
Fórmula | Cobertura = Linhas testadas / Linhas totais |
Escala da Medição | Racional |
Coleta | Responsável: Equipe de gerência. Periodicidade ou Evento: A cada iteração. Ferramenta: SimpleCov |
Procedimentos | Será feito o uso da ferramenta no último commit para obter os dados. Será mantido junto com as outras métricas em uma tabela para acompanhar o software. |
Análise | Primeira release: “Dentro do esperado” dado por CoberturaTeste > 30% “Fora do planejado” dado por CoberturaTeste < 30% Segunda release: “Dentro do esperado” dado por CoberturaTeste > 90% “Fora do planejado” dado por CoberturaTeste < 90% |
Providências | Caso a métrica esteja abaixo do esperado na primeira release, em qualquer uma das iterações que envolvam desenvolvimento, a equipe de gerência deve ser alertada e a coach (Monitora) deve ser procurada em caso de dificuldades. Caso a métrica esteja abaixo do esperado na segunda release, na primeira semana a equipe de desenvolvimento deve ser alertada apontada para possíveis materiais de ajuda. Se continuar por uma segunda semana, a equipe de gerência deve interferir, participando do desenvolvimento de testes. |
Métrica | M.1.1.2 - Complexidade ciclomática (Flog) |
---|---|
Objetivo da Medição | Verificar a quantidade de caminhos de execução independentes. |
Descrição | Complexidade ciclomática é o número de caminhos independentes dentro do grafo de nós dentro do sistema. Cada nó é um bloco de código sequencial do sistema. De forma resumida e sucinta, complexidade ciclomática equivale ao número de desvios (ou estruturas condicionais) mais 1. Como a coleta consiste em contar o número de condicionais, a métrica também é chamada de complexidade condicional. Ela indica o número de testes que o fragmento de software precisa ter para cobrir todos caminhos linearmente independentes de execução. |
Fórmula | V(G) = e - n + p Onde V(G) é a complexidade ciclomática, n = vértice, e = aresta, p = componentes conectados A média é feita, M(V(G)), dando a complexidade ciclomática média. |
Escala da Medição | Racional |
Coleta | Responsável: Equipe de gerência. Periodicidade ou Evento: A cada iteração. Ferramenta: Rubycritic |
Procedimentos | Será feito o uso da ferramenta no último commit para obter os dados. Será mantido junto com as outras métricas em uma tabela para acompanhar o _softwar_e. |
Análise | De acordo com a ferramenta, baseado em conhecimentos empíricos: 0 a 25 - Nível aceitável 26 a 60 - Refatoração de método 61 e acima - Muito complexa (perigo) |
Providências | Como a métrica de complexidade ciclomática verifica o número de caminhos independentes no código, é necessário diminuir o número de estruturas que causem isso. Loops, Condicionais e recursividades. Caso a métrica esteja acima do esperado, na primeira semana a equipe de desenvolvimento deve ser alertada e apontada para possíveis materiais de ajuda. Se continuar por uma segunda semana, a equipe de gerência de interferir, participando da manutenção do código. |
Métrica | M.1.1.3 - Duplicações de Código (Flay) |
---|---|
Objetivo da Medição | Garantir o reaproveitamento de código, reduzindo duplicação de código idêntico ou semelhante. |
Descrição | A análise estática também pode identificar código idêntico e semelhante. A ferramenta procura árvores de sintaxe grandes e idênticas e também usa correspondência fuzzy para detectar código que difere apenas pelos identificadores e constantes específicos usados. |
Fórmula | Quantidade de sintaxes idênticas ou semelhantes presentes no código. |
Escala da Medição | Racional |
Coleta | Responsável: Equipe de gerência. Periodicidade ou Evento: A cada iteração. Ferramenta: Rubycritic |
Procedimentos | Será feito o uso da ferramenta no último commit da iteração para obter os dados. Será mantido junto com as outras métricas em uma tabela para acompanhar a evolução do software. |
Análise dos indicadores | Os resultados devem apresentar índices abaixo de 25, o que indica um código com pouquíssima duplicação de código e potencialmente manutenível. |
Providências | Como a métrica de conexões aferente se refere a acoplamento, então esta deve ser tratada diminuindo o número de classes que conversão com a classe em questão. Talvez isso se dê por uma falta de coesão, ou seja, informações que deveriam estar juntas estão em lugares diferentes. Caso a métrica esteja acima do esperado, na primeira semana a equipe de desenvolvimento deve ser alertada e apontada para possíveis materiais de ajuda. Se continuar por uma segunda semana, a equipe de gerência de interferir, participando da manutenção do código. |
Métrica | M.1.1.4 - Quantidade de Alterações (Churn) |
---|---|
Objetivo da Medição | Monitorar alterações de arquivos de origem. |
Descrição | Contagem do número de vezes que uma classe foi modificada no seu histórico de controle de versão. |
Fórmula | Número de alterações no arquivo. |
Escala da Medição | Racional |
Coleta | Responsável: Equipe de gerência. Periodicidade ou Evento: A cada iteração. Ferramenta: Rubycritic |
Procedimentos | Será feito o uso da ferramenta no último commit para obter os dados. Será mantido junto com as outras métricas numa tabela para acompanhar o software. |
Análise | Verificada no indicador I.1 |
Métrica | M.1.1.5 - Checkstyle |
---|---|
Objetivo da Medição | Garantir a manutenibilidade do código. |
Descrição | Analisador estático de código para checar se o código fonte está de acordo com as regras de codificação na linguagem especificada. Auxilia nas boas práticas de programação na qual melhora-se a qualidade do código, reusabilidade, clareza, entre outros fatores. |
Fórmula | Não se aplica |
Escala da Medição | Racional |
Coleta | Responsável: Equipe de gerência. Periodicidade ou Evento: A cada iteração. Ferramenta: Rubocop |
Procedimentos | Será feito o uso da ferramenta no último commit para obter os dados. Será mantido junto com as outras métricas numa tabela para acompanhar o software. |
Análise dos indicadores | Indicação de trechos não condizentes com a convenção da linguagem. |
Providências | Refatoração do código com o objetivo de seguir as regras e a convenção da linguagem. |
Métrica | M.1.2.1 - Falhas de Segurança |
---|---|
Objetivo da Medição | Garantir a segurança do software. Contribuir para redução de vulnerabilidades em sistemas complexos. |
Descrição | Esta medição atuará sobre a vulnerabilidade de código. A ferramenta auxilia a analisar esteticamente o código do aplicativo Rails para encontrar problemas de segurança em qualquer estágio de desenvolvimento. |
Fórmula | Não se aplica |
Escala da Medição | Racional |
Coleta | Responsável: Equipe de gerência. Periodicidade ou Evento: A cada iteração. Ferramenta: Brakeman |
Procedimentos | Será feito o uso da ferramenta no último commit para obter os dados. Será apresentado um relatório de todos os problemas de segurança encontrados pela ferramenta. |
Análise e indicadores | A ferramenta Brakeman oferece as seguintes diretrizes: Alto: Muito provável que a entrada do usuário seja usada de forma insegura. Médio:Uso inseguro de uma variável, podendo ou não ser entrada do usuário. Fraca:Normalmente significa que a entrada do usuário foi indiretamente usada de uma maneira potencialmente insegura. O considerado ideal para este projeto é o indicador Alta. |
Providências | Mitigação de vulnerabilidades. |
Indicador | I.1 - Turbulência |
---|---|
Objetivo | Verificar partes de código que necessitam de refatoração. |
Descrição | A relação de Churn e Complexidade nos apresenta os arquivos que estão gerando mais dificuldades para o projeto e para os desenvolvedores. |
Fórmula | Churn x Complexidade |
Escala da Medição | Racional |
Coleta | Responsável: Equipe de gerência. Periodicidade ou Evento: A cada iteração. Ferramenta: *Rubycritic |
Procedimentos | Será feito o uso da ferramenta no último commit para obter os dados. Será apresentado um relatório de todos os problemas de segurança encontrados pela ferramenta. |
Análise e indicadores | A ferramenta oferece um gráfico, e a partir da análise dessa figura, utiliza-se as seguintes diretrizes: Superior direito - Classes com alta complexidade e alto churn. Essas são boas prioridades para a refatoração pois seus problemas de manutenção estão afetando os desenvolvedores em uma base regular. Superior esquerdo - Classes com alta complexidade e baixo churn. Possui menor prioridade de refatoração, porém possui código com necessidade de depuração. Inferior esquerdo - Classes com baixo churn e baixa complexidade. O melhor tipo de resultado a ter. A maior parte do código deve estar neste quadrante. Inferior direito - Classes com baixa complexidade e alto churn. Pode ser justificada por refatorações constantes, não há muito o que refatorar neste caso. |
Providências | Refatoração do código. |