# Plano de Medição

## Plano de Medição

### Contexto

O LoremBot é uma aplicação criada no contexto da disciplina Desenho de Software da Universidade de Brasília (UnB) - Faculdade do Gama (FGA), que visa criar um framework que facilite a criação de bots para o telegram.

### Problema

Para melhorar e garantir qualidade em um determinado projeto de software é necessário primeiramente entender e definir os processos, produtos e recursos envolvidos neste projeto, sendo assim o Plano de Medição é de grande ajuda para definir os pontos positivos que devem ser mantidos e os pontos que podem melhorar e devem ser alterados no projeto. Considerando todos estes fatores a equipe de desenho precisa gerenciar a equipe de desenvolvimento e se ater aos prazos e requisitos da matéria além de manter o nível de qualidade.

### Planejamento de Medição

A abordagem GQM (Goal Question Metric) será adotada para identificar as métricas que atinjam os objetivos propostos para o contexto do projeto LoremBot.

## 1 Plano de medição - Conceitual

### Código

|                         |                             |
| ----------------------- | --------------------------- |
| **Analisar**            | o código                    |
| **para**                | entender e garantir         |
| **os pontos**           | manutenabilidade e eficácia |
| **pelo ponto de vista** | de desenvolvedor            |
| **sob o contexto**      | do projeto LoremBot         |

#### Abstraction Sheet

|                                                                                                                          |                                                                                               |
| ------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------- |
| **Foco na Qualidade**                                                                                                    | **Fatores de Variação**                                                                       |
| <p><strong>Q.1</strong> Complexidade Ciclomática <br> <strong>Q.2</strong> Duplicação de código</p>                      | <p>Padronização do código <br> Complexidade do Software <br> Experiência com a tecnologia</p> |
| **Hipóteses de Baseline**                                                                                                | **Impacto nas hipóteses de ​Baseline**                                                        |
| <p><strong>Q.1</strong> Complexidade Ciclomática < 4 <br> <strong>Q.2</strong> Duplicação de código em nível regular</p> | <p>Fator de complexidade bom, com boa manutenibilidade <br> Necessidade de retrabalho</p>     |

## 2 Plano de medição - Operacional

**Código**

* Quão manutenível é o código?
* Quão fiel o código é às boas práticas de programação?

## 3 Plano de medição - Quantitativo

#### Quão manutenível é o código?

* Erros do flake8 por arquivo.
* Métodos com alto número de argumentos.
* Arquivos com alto número de linhas.
* Blocos de código idênticos.
* Blocos de código semelhantes.
* Classes com alto número de métodos.
* Métodos com alto número de linhas.
* Quantidade de estruturas de decisão muito aninhadas.

#### Quão fiel o código é às boas práticas de programação?

* Erros do flake8 por arquivo.
* Blocos de código idênticos.
* Blocos de código semelhantes.
* Métodos com alto número de linhas.
* Métodos com vários 'return'.

## Métricas

| **Métrica**             | **Erros do flake8 por arquivo**                                                                                          |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| **Objetivo de Medição** | Garantir a simplicidade na leitura do código                                                                             |
| **Obtenção**            | A ferramenta de integração contínua executa o flake8 nos arquivos do projeto sempre que código é mandado ao reprositório |
| **Escala**              | Absoluta                                                                                                                 |
| **Análise**             | Caso ocorra ao menos um erro deverá haver uma refatoração do código                                                      |

| **Métrica**             | **Métodos com alto número de argumentos**                             |
| ----------------------- | --------------------------------------------------------------------- |
| **Objetivo de Medição** | Garantir a modularidade                                               |
| **Obtenção**            | O code climate gera alertas para cada ocorrência                      |
| **Escala**              | Absoluta                                                              |
| **Análise**             | Caso ocorra ao menos uma issue deverá haver uma refatoração do código |

| **Métrica**             | **Arquivos com alto número de linhas**                                |
| ----------------------- | --------------------------------------------------------------------- |
| **Objetivo de Medição** | Garantir a modularidade do código                                     |
| **Obtenção**            | O code climate gera alertas para cada ocorrência                      |
| **Escala**              | Absoluta                                                              |
| **Análise**             | Caso ocorra ao menos uma issue deverá haver uma refatoração do código |

| **Métrica**             | **Blocos de código idênticos**                                        |
| ----------------------- | --------------------------------------------------------------------- |
| **Objetivo de Medição** | Garantir a simplicidade de leitura do código                          |
| **Obtenção**            | O code climate gera alertas para cada ocorrência                      |
| **Escala**              | Absoluta                                                              |
| **Análise**             | Caso ocorra ao menos uma issue deverá haver uma refatoração do código |

| **Métrica**             | **Blocos de código semelhantes**                                      |
| ----------------------- | --------------------------------------------------------------------- |
| **Objetivo de Medição** | Garantir a simplicidade de leitura do código                          |
| **Obtenção**            | O code climate gera alertas para cada ocorrência                      |
| **Escala**              | Absoluta                                                              |
| **Análise**             | Caso ocorra ao menos uma issue deverá haver uma refatoração do código |

| **Métrica**             | **Classes com alto número de métodos**                                |
| ----------------------- | --------------------------------------------------------------------- |
| **Objetivo de Medição** | Garantir a visibilidade das classes                                   |
| **Obtenção**            | O code climate gera alertas para cada ocorrência                      |
| **Escala**              | Absoluta                                                              |
| **Análise**             | Caso ocorra ao menos uma issue deverá haver uma refatoração do código |

| **Métrica**             | **Métodos com alto número de linhas**                                 |
| ----------------------- | --------------------------------------------------------------------- |
| **Objetivo de Medição** | Garantir a visibilidade dos métodos                                   |
| **Obtenção**            | O code climate gera alertas para cada ocorrência                      |
| **Escala**              | Absoluta                                                              |
| **Análise**             | Caso ocorra ao menos uma issue deverá haver uma refatoração do código |

| **Métrica**             | **Quantidade de estruturas de decisão muito aninhadas**               |
| ----------------------- | --------------------------------------------------------------------- |
| **Objetivo de Medição** | Garantir a simplicidade de leitura do código                          |
| **Obtenção**            | O code climate gera alertas para cada ocorrência                      |
| **Escala**              | Absoluta                                                              |
| **Análise**             | Caso ocorra ao menos uma issue deverá haver uma refatoração do código |

| **Métrica**             | **Métodos com vários 'return'**                                       |
| ----------------------- | --------------------------------------------------------------------- |
| **Objetivo de Medição** | Garantir a simplicidade de leitura do código                          |
| **Obtenção**            | O code climate gera alertas para cada ocorrência                      |
| **Escala**              | Absoluta                                                              |
| **Análise**             | Caso ocorra ao menos uma issue deverá haver uma refatoração do código |
