Sobes.tech
Junior

De que depende a gradação do nível de gravidade dos erros (severity)?

sobes.tech IA

Resposta da IA

A graduação do nível de gravidade dos erros (severity) depende do impacto do defeito na funcionalidade, estabilidade ou segurança do produto de software. Avalia-se o dano potencial para o utilizador ou negócio.

Fatores principais que influenciam a severity:

  • Criticidade da funcionalidade: Quão importante é a função afetada para o funcionamento da aplicação.
  • Impacto nas operações principais: Se o defeito impede a realização de tarefas-chave.
  • Perda de dados ou fundos: Se o defeito pode levar a fuga ou perda de dados, bem como perdas financeiras.
  • Disponibilidade do sistema: Se o defeito bloqueia total ou parcialmente o uso da aplicação.
  • Possibilidade de solução alternativa: Se existe uma forma alternativa de realizar a ação.
  • Frequência de ocorrência: Com que frequência o defeito se manifesta (embora isto seja mais um fator de prioridade, também pode influenciar a severity se o defeito for crítico e constante).

Níveis típicos de severity (que podem variar dependendo do projeto e da empresa):

  • Blocker: O produto é completamente inutilizável, funcionalidade criticamente importante bloqueada, não é possível continuar o trabalho ou testes. Perda de dados ou perdas financeiras garantidas.
  • Critical: Funcionalidade criticamente importante não funciona ou funciona incorretamente. As operações principais estão seriamente afetadas, mas há possibilidade de trabalho parcial. Não há solução alternativa.
  • Major: Funcionalidade importante mas não crítica não funciona ou funciona incorretamente. Pode haver interrupções nas operações principais, mas existe uma solução alternativa. Podem ocorrer perdas de dados, mas não críticas.
  • Minor: Interrupções menores na funcionalidade ou problemas de usabilidade. Não afeta as operações principais. Existe uma solução simples.
  • Trivial: Defeitos cosméticos, erros no texto, que não afetam a funcionalidade.
enum DefectSeverity {
    case blocker, critical, major, minor, trivial
}

func determineSeverity(defectFunctionality: FunctionalityLevel, impact: ImpactLevel) -> DefectSeverity {
    switch (defectFunctionality, impact) {
    case (.critical, .blocksAll): return .blocker // Função crítica, bloqueia completamente o trabalho
    case (.critical, .majorIssue): return .critical // Função crítica, problemas graves
    case (.essential, .blocksAll): return .critical // Função principal, bloqueia completamente o trabalho
    case (.essential, .majorIssue): return .major // Função principal, problemas graves
    case (_, .minorIssue): return .minor // Problemas menores
    case (_, .cosmetic): return .trivial // Problemas cosméticos
    default: return .minor // Valor padrão
    }
}

enum FunctionalityLevel {
    case critical, essential, minor
}

enum ImpactLevel {
    case blocksAll, majorIssue, minorIssue, cosmetic
}

// Uso:
let severity = determineSeverity(defectFunctionality: .critical, impact: .blocksAll)
print(severity) // Mostrará: blocker