Bug, Falha, Defeito… e Incidente
No campo da qualidade de software, entender a terminologia correta é fundamental para que a nossa comunicação seja eficaz e a resolução de problemas seja conseguida de forma mais fácil.
Termos como bug, falha, defeito e incidente são frequentemente utilizados, mas muitas vezes de forma intercambiável, o que pode causar alguma confusão para os que não estão completamente à vontade com estes conceitos e suas definições.
Espero com este artigo esclarecer estes conceitos, discutir como e quando são encontrados, como devem ser reportados e quem deve ser informado dos mesmos.
Definições e Diferenças
Bug
- Definição: Um bug é um erro, problema ou falha inesperada no software, que causa um comportamento incorreto ou inesperado do mesmo. 
- Quando é normalmente encontrado: Durante o desenvolvimento do software, na execução dos testes ou na utilização do software. 
- Registo: através de ferramentas de registo e mapeamento de bugs (Jira, Bugzilla). 
- Pessoas que devem ser notificadas: Programadores, QAs, gestores de projeto. 
Defeito
- Definição: Um defeito é uma discrepância entre o comportamento esperado do software (especificado na documentação) e o comportamento real observado. 
- Quando é normalmente encontrado: durante os testes de validação e de verificação. 
- Registo: através de ferramentas de gestão de defeitos. 
- Pessoas que devem ser notificadas: QAs, programadores, analistas de negócios (BA). 
Falha
- Definição: Uma falha é a incapacidade de um sistema (ou componente) de executar a função exigida, conforme especificado. 
- Quando é normalmente encontrado: durante a operação do sistema (ou seja, a sua execução/utilização) em ambiente de produção. 
- Registo: sistemas de monitorização de falhas e logs. 
- Pessoas que devem ser notificadas: Equipa de operações, equipa de suporte técnico, gestores de projeto. 
Incidente
- Definição: Um incidente é qualquer evento que não faz parte da operação padrão de um serviço e que causa, ou pode causar, uma interrupção ou redução na qualidade desse serviço. 
- Quando é normalmente encontrado: Em qualquer fase do ciclo de vida do software, especialmente em produção. 
- Registo: Sistemas de gestão de incidentes (ITIL). 
- Pessoas que devem ser notificadas: Suporte técnico, gestores de projeto, clientes. 
Foco no Ciclo de Testes
Durante as diferentes fases do ciclo de testes, o principal foco e objectivo é na identificação e resolução bugs, falhas, defeitos e incidentes varia:
- Planeamento de Testes: Definir estratégias para identificar e documentar defeitos e bugs. 
- Desenvolvimento: Os programadores focam-se em identificar e corrigir bugs. 
- Testes de Unidade e Integração: Identificar e reportar bugs e defeitos. 
- Testes de Sistema: QAs encontram e documentam defeitos e falhas. 
- Testes de Aceitação: Incidentes e defeitos são identificados e reportados. 
- Implantação: Monitorização para identificar e resolver falhas e incidentes em produção. 
Como reportar e gerir os problemas encontrados
Reportar Bugs e Defeitos
- Ferramentas: Jira, Bugzilla, Trello. 
- O que não deve faltar: Título, descrição detalhada, passos para reproduzir, resultados esperados vs. resultados reais, screenshots, logs. 
- Prioridade: Deve ser classificado por severidade e impacto no sistema. 
Reportar Falhas
- Ferramentas: Ferramentas de monitorização, como Nagios, Splunk,… 
- O que não deve faltar: Descrição do problema, impacto, tempo de ocorrência, logs do sistema. 
- Prioridade: Alta prioridade para falhas que afetem a operação do sistema. 
Reportar Incidentes
- Ferramentas: ITIL Incident Management Tools, ServiceNow. 
- O que não deve faltar: Descrição do incidente, impacto, tempo de ocorrência, medidas temporárias (workarounds). 
- Prioridade: Imediato para incidentes críticos que interrompem o serviço (os chamados showstoppers). 
Apresentação de resultados
- Possíveis Formatos: Relatórios de bugs, relatórios de testes, dashboards. 
- Conteúdo: Estatísticas de bugs, status de defeitos, resumo de falhas e incidentes, impacto no projeto. 
Workarounds
- Definição: Soluções temporárias para contornar um problema até que uma correção permanente seja implementada. 
- Exemplos Práticos: - Bug: Reiniciar a aplicação para resolver um bug temporário. 
- Falha: Redirecionar o tráfego para um servidor backup. 
- Incidente: Utilizar um método alternativo para completar uma transação. 
 
Exemplos Práticos
Bug
- Exemplo: Um botão "Salvar" não funciona numa aplicação web. 
- Contexto: Encontrado durante testes de sistema. 
- Registo: Descrito no Jira com passos para reproduzir e logs da consola do browser. 
Defeito
- Exemplo: O sistema calcula de forma incorrecta os impostos. 
- Contexto: Encontrado durante os testes de validação contra os requisitos. 
- Registo: Detalhado com especificações do requisito e comportamento observado vs esperado. 
Falha
- Exemplo: Um servidor de base de dados falha, tornando a aplicação indisponível. 
- Contexto: Ocorrido no ambiente de produção. 
- Registo: Registrado em sistemas de monitorização, com logs do sistema. 
Incidente
- Exemplo: Um serviço de autenticação de utilizadores fica indisponível, afetando o login. 
- Contexto: Ocorrido em produção durante um pico de carga nos acessos ao sistema. 
- Registo: Descrito no sistema de gestão de incidentes, com indicação do impacto e das possíveis medidas temporárias. 
A compreensão clara e a gestão eficaz de bugs, falhas, defeitos e incidentes são essenciais para a qualidade de software.
Cada termo possui um significado específico e um papel crucial no ciclo de vida do desenvolvimento de software.
Ao adoptarmos boas práticas de registo e gestão dos problemas, as equipas conseguem garantir que os problemas são resolvidos de forma eficiente, melhorando assim a confiabilidade e a satisfação do utilizador final.

