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.