Medição 1 - Confiabilidade
Objetivo de Medição 1: Confiabilidade
| Analisar | o i-Educar |
|---|---|
| Para o propósito de | Avaliar |
| Com respeito a | Confiabilidade |
| Do ponto de vista da | Comunidade de desenvolvedores |
| No contexto da | Disciplina de Qualidade de Software 1 (FCTE - UnB) |
Perguntas e Hipóteses de Medição
Para decompor o objetivo de análise da Confiabilidade, foram formuladas as seguintes perguntas e hipóteses. As hipóteses tornam explícito o conhecimento atual sobre o sistema, que será validado pelas métricas.
Questão 1: Maturidade
Qual é a estabilidade do código em relação à ocorrência de defeitos?
-
Hipótese 1.1 (H1.1): A densidade de defeitos (bugs por KLOC) geral do sistema será superior a 3 bugs/KLOC, indicando um passivo de manutenção que afeta a estabilidade.
-
Hipótese 1.2 (H1.2): O percentual de commits de correção no histórico do projeto será superior a 15%, indicando que uma parcela significativa do esforço de desenvolvimento é reativa, focada na correção de falhas existentes.
Questão 2: Tolerância a Falhas
Qual é o nível de robustez do código contra falhas em tempo de execução?
- Hipótese 2.1 (H2.1): Menos de 50% das operações críticas de entrada/saída (I/O), como conexões com banco de dados e manipulação de arquivos, possuirão um mecanismo adequado de tratamento de exceções (try-catch).
Questão 3: Recuperabilidade
Qual é a eficácia dos mecanismos de recuperação de dados do sistema?
- Hipóteso 3.1 (H3.1): A análise qualitativa das rotinas de backup revelará uma baixa pontuação de manutenibilidade (inferior a 5 em 10), devido à falta de documentação clara e à complexidade do código, representando um risco para a manutenção desses mecanismos.
Seleção das Métricas
Questão 1: Maturidade
-
Métrica 1.1: Densidade de Defeitos no Código
- Definição: Número de issues com a label
bugno repositório GitHub, normalizado por mil linhas de código (KLOC). - Fórmula:
(Número total de issues "bug") / (Total de linhas de código / 1000) -
Coleta: 1. Listar todas as issues com a label
bugvia API do GitHub ou busca manual.- Contar o total de linhas de código PHP (
.php) de todo o projeto, utilizando a ferramentacloc. - Aplicar a fórmula para o escopo global do projeto para validar a H1.1.
- Contar o total de linhas de código PHP (
-
Pontuação de Julgamento:
Excelente Bom Regular Insatisfatório ≤ 1 bug/KLOC >1 e ≤3 bugs/KLOC >3 e ≤6 bugs/KLOC >6 bugs/KLOC - Propósito: Identificar a densidade geral de defeitos reportados no sistema em relação ao seu tamanho.
- Definição: Número de issues com a label
-
Métrica 1.2: Percentual de Commits de Correção
- Definição: Percentual de commits cuja mensagem contém palavras-chave como "fix", "corrige" ou "bugfix".
- Fórmula:
(Número de commits de correção / Número total de commits) * 100 -
Coleta:
- Definir um período de análise (ex: últimos 24 meses).
- Contar o número total de commits com
git log --oneline --no-merges | wc -l - Contar o número de commits de correção com
git log --grep="..." --regexp-ignore-case --oneline --no-merges | wc -l - Aplicar a fórmula para validar a H1.2.
-
Pontuação de Julgamento:
Excelente Bom Regular Insatisfatório ≤ 10% >10% e ≤20% >20% e ≤35% >35% - Propósito: Avaliar se o esforço de desenvolvimento é mais reativo (corrigindo falhas) do que proativo (desenvolvendo novas funcionalidades).
Questão 2: Tolerância a Falhas
-
Métrica 2.1: Índice de Tratamento de Exceções
- Definição: Percentual de operações de I/O críticas que estão contidas dentro de um bloco de tratamento de exceções (
try-catch). - Fórmula:
(Número de operações críticas com try-catch / Número total de operações críticas) * 100 - Coleta: Revisão manual de código ou uso de scripts de análise estática para buscar padrões de tratamento de exceções.
- Definir a lista de "operações críticas": chamadas de função/método para conexão com banco de dados ex:(
new PDO(,pg_connect), manipulação de arquivos (ex:fopen,file_put_contents) etc. - Em todo o código-fonte do projeto, executar scripts de busca (
grepouack) para contar o número total de ocorrências dessas operações. - Executar um segundo script para contar quantas dessas ocorrências estão sintaticamente dentro de um bloco
try { ... }. - Aplicar a fórmula para validar a H2.1.
- Definir a lista de "operações críticas": chamadas de função/método para conexão com banco de dados ex:(
-
Observação: a métrica mede a existência do mecanismo, não sua eficácia.
-
Pontuação de Julgamento:
Excelente Bom Regular Insatisfatório ≥ 90% 70%–89% 40%–69% < 40% - Propósito: Medir a robustez do código contra erros em tempo de execução.
- Definição: Percentual de operações de I/O críticas que estão contidas dentro de um bloco de tratamento de exceções (
Questão 3: Recuperabilidade
-
Métrica 3.1: Análise Qualitativa de Código de Backup
- Definição: Avaliação qualitativa, baseada em um checklist estruturado, das rotinas de backup para verificar sua compreensibilidade, documentação e aderência a boas práticas.
-
Coleta: Inspeção manual do código-fonte das funcionalidades de backup.
- Identificar os arquivos/módulos responsáveis pela funcionalidade de backup/restauração no código-fonte.
- Realizar uma inspeção manual do código aplicando o checklist abaixo. Cada item recebe uma nota de 0 (ausente) a 2 (excelente).
- Checklist de Análise:
- Documentação (Comentários): O código possui comentários explicando a lóǵica geral e os passos críticos?
- Clareza do Código: Os nomes de variáveis e funções são intuitivos e seguem um padrão?
- Tratamento de Erros: O código verifica falhas potenciais (ex: falha de escrita em disco, permissões) e as reporta de forma adequada?
- Configuração: As configurações críticas (ex: caminhos de backup, credenciais) são externalizadas e não "hard-coded"?
- Testabilidade: A estrutura do código permite a criação de testes unitários ou de integração?
- A pontuação final (0 a 10) será a soma dos pontos do checklist, usada para validar a H3.1.
-
Pontuação de Julgamento:
Excelente Bom Regular Insatisfatório 9–10 7–8 4–6 0–3 - Propósito: Avaliar a manutenibilidade e a confiabilidade percebida dos mecanismos de recuperação de dados do ponto de vista de um desenvolvedor.
Critérios para Julgamento
- Aceitável: ≥ 70% das métricas classificadas como "Bom" ou "Excelente". O sistema demonstra robustez e previsibilidade.
- Parcialmente aceitável: Entre 40% e 69% das métricas com nível "Regular" ou superior. O sistema funciona, mas pode apresentar instabilidades pontuais.
- Inaceitável: > 30% das métricas atingindo o nível "Insatisfatório". A estabilidade do sistema é considerada crítica e propensa a falhas.
Relação entre a Confiabilidade, Perguntas e Métricas
| Questão | Métricas Simplificadas | Tipo de Coleta |
|---|---|---|
| Maturidade Qual é a estabilidade do código em relação a defeitos? |
M1.1: Densidade de defeitos (issues "bug" por KLOC) M1.2: Percentual de commits de correção (mensagens com fix/corrige/bugfix) |
GitHub issues + contagem de linhas com cloc (ou similar) Histórico de commits via git log com filtros/regex |
| Tolerância a Falhas Qual é o nível de robustez contra falhas em tempo de execução? |
M2.1: Índice de tratamento de exceções (% operações I/O críticas dentro de try-catch) |
Análise estática / scripts (grep/ack) para localizar operações críticas e verificar blocos try-catch Revisão manual de trechos críticos quando necessário |
| Recuperabilidade Qual é a eficácia dos mecanismos de recuperação de dados? |
M3.1: Pontuação qualitativa das rotinas de backup (checklist, escala 0–10) | Inspeção manual do código e documentação aplicando checklist de avaliação (documentação, clareza, tratamento de erros, configuração, testabilidade) |
Diagrama GQM - Confiabilidade (Representação Estrutural)
Info
Dê zoom com o scroll do mouse no diagrama para ver melhor. Caso prefira, abra em tela cheia.
Você também mode mover o diagrama com o mouse.
graph TB
BusinessObjective["Objetivo: Avaliar Confiabilidade do i-Educar"]
BusinessObjective --> Question1["Q1: Qual é a estabilidade do código em relação à ocorrência de defeitos?"]
BusinessObjective --> Question2["Q2: Qual é o nível de robustez do código contra falhas em tempo de execução?"]
BusinessObjective --> Question3["Q3: Qual é a eficácia dos mecanismos de recuperação de dados do sistema?"]
Question1 --> MetricDefects["M1.1: Densidade de Defeitos no Código"]
Question1 --> MetricFixCommits["M1.2: Percentual de Commits de Correção"]
Question2 --> MetricExceptions["M2.1: Índice de Tratamento de Exceções"]
Question3 --> MetricBackup["M3.1: Análise Qualitativa de Código de Backup"]