Minha IBM Efetue login Inscreva-se
O que é depuração?

O que é depuração?

Explore a solução de depuração da IBM Inscreva-se para receber o boletim informativo Think
Ilustração com colagem de pictogramas de engrenagem, braço robótico, celular

Publicado: 16 de setembro de 2024
Colaboradores: Camilo Quiroz-Vazquez

O que é depuração?

O que é depuração?

Depuração é o processo de encontrar, isolar e resolver erros de codificação conhecidos como bugs em programas de software. A depuração ajuda a descobrir a causa de erros de codificação, evitar problemas de função do software e melhorar o desempenho geral do software.

Erros de codificação, como erros lógicos, erros de tempo de execução, erros de sintaxe e erros semânticos, podem levar a falhas, resultados incorretos ou imprecisos, vulnerabilidades de segurança e perda de dados. Diferentemente do teste de software, que permite que os desenvolvedores investiguem os efeitos desses erros no código-fonte de um programa, a depuração busca a causa raiz e a correção desses erros.  

Por meio do processo de depuração, os desenvolvedores de software conduzem a análise da causa raiz para garantir que os bugs encontrados nos programas de computador sejam corrigidos e não ocorram novamente. Os bugs podem afetar negativamente a estabilidade, a confiabilidade e a experiência do usuário do software. Ferramentas e estratégias de depuração ajudam a otimizar o processo de depuração.

Solução de problemas e depuração

Saiba como solucionar problemas e depurar os erros mais comuns no Resilient.

Conteúdo relacionado O que há de novo no IBM z/OS Debugger
O processo de depuração

O processo de depuração

A depuração normalmente envolve seis etapas:

- Reproduzir as condições
- Encontrar o bug
- Determinar a causa raiz
- Corrigir o bug
- Testar para validar a correção
- Documentar o processo

Etapa 1: reproduzir as condições
 

O processo de depuração exige especificidade; os engenheiros não podem confiar em uma descrição de segunda mão do problema para diagnosticá-lo com precisão. Portanto, a primeira etapa do processo de depuração é replicar as condições que causaram o aparecimento do bug. A reprodução do bug permite que os programadores e engenheiros observem o erro em primeira mão e coletem dados contextuais para o restante do processo de depuração.

Etapa 2: encontrar o bug
 

O próximo passo é identificar a origem do bug com a maior precisão possível, examinando minuciosamente o código e revisando todos os logs disponíveis. Durante essa etapa, os desenvolvedores normalmente dependem de ferramentas de depuração que facilitam a pesquisa em grandes trechos de código, em vez de trabalhar manualmente.

Passo 3: Determinar a causa raiz
 

Os desenvolvedores determinam o que causa um bug examinando a lógica e o fluxo do código e como diferentes componentes do código interagem sob as condições específicas em que o bug ocorre.

Etapa 4: corrigir o bug
 

Essa etapa normalmente envolve a solução de problemas e a revisão do código para corrigir o problema, além da recompilação e da nova execução do software para garantir que o bug seja corrigido. Essas revisões podem envolver várias iterações, pois as primeiras tentativas podem falhar ou introduzir inadvertidamente novos bugs. 

A maioria dos desenvolvedores usa um sistema de controle de versão para rastrear alterações, para que possam reverter facilmente quaisquer modificações que não resolvam o problema ou criar novas. 

Etapa 5: Teste para validar a correção
   

Os testes executados após a correção de um bug incluem:

  • Testes de unidade, que testam o segmento de código individual alterado para corrigir o bug
  • Testes de integração, que testam todo o módulo que contém o bug corrigido
  • Testes de sistema, que testam todo o sistema no qual o módulo alterado é executado
  • Testes de Regression, que garantem que o código corrigido não afeta o desempenho da aplicação, ou seja, que a aplicação não regrediu devido à correção do bug.

Etapa 6: Documentar o processo
 

Como etapa final, os desenvolvedores registram os detalhes do processo de reparo, incluindo o que causou o bug, como ele foi corrigido e quaisquer outras informações relevantes. A documentação é uma ferramenta valiosa para os programadores usarem quando bugs semelhantes ocorrerem no futuro.

Exemplos de depuração

Exemplos de depuração

Conhecer os tipos de bugs que um sistema enfrenta permite que engenheiros e desenvolvedores de software encontrem a maneira apropriada de corrigir um código quebrado quando surge um erro. Exemplos de erros comuns que exigem depuração:

Erros semânticos
 

Um pedaço de código que viola as regras de uma linguagem de codificação causa um erro semântico. Ao contrário de um erro lógico, que produz uma saída incorreta, um erro semântico não produzirá uma saída significativa.

Erros de sintaxe
 

Esse erro ocorre quando um desenvolvedor perde um elemento do código, como parênteses, vírgula ou outro erro tipográfico. Ao contrário das linguagens humanas escritas, onde uma frase com um erro tipográfico ainda pode ser entendida, partes ausentes do código causam erros imediatamente.

Erros lógicos
 

Esse tipo de bug inclui uma sintaxe tecnicamente correta, mas com direções incorretas que causam uma saída indesejada. Como a sintaxe está correta, esses erros podem ser difíceis de detectar. Quando um sistema não trava imediatamente e a localização exata do código incorreto pode ser demorada para encontrar.

Erros de tempo de execução
 

Esses erros acontecem quando uma aplicação está em execução ou sendo inicializado. Ocasionalmente, erros de tempo de execução podem ser corrigidos atualizando, reiniciando ou reinstalando uma aplicação. Outras vezes, podem ser um sinal de um programa que requer mais memória ou de outro tipo de erro, como um erro lógico.

Tipos de depuração

Tipos de depuração

O processo de depuração pode ser desafiador e trabalhoso. Conhecer as várias abordagens do processo de depuração pode tornar o gerenciamento da tarefa mais eficaz.

Backtracking
 

Nesta abordagem, os desenvolvedores trabalham de trás para frente a partir do ponto em que o erro foi detectado para encontrar a origem do bug. Especificamente, eles refazem os passos que o programa seguiu com o código-fonte problemático para ver onde as coisas deram errado. O backtracking pode ser eficaz quando usado juntamente com um depurador.   

Eliminação da causa
 

Uma técnica de depuração orientada por hipóteses e eliminação de causas exige que a equipe especule sobre as causas do erro e teste cada possibilidade de forma independente. Essa abordagem funciona melhor quando a equipe está familiarizada com o código e as circunstâncias que envolvem o bug.

Dividir e conquistar
 

Ao depurar grandes bases de código, as equipes podem dividir linhas de código em segmentos (funções, módulos, métodos de classe ou outras divisões lógicas testáveis) e testar cada um separadamente para localizar o erro. Quando o segmento problemático é identificado, ele pode ser dividido e testado até que a origem do bug seja identificada.

Imprimir e registrar depuração
 

A estratégia de depuração "imprimir e registrar" envolve a adição de instruções de impressão ou "logs" ao código para exibir valores de variáveis, stacks de chamadas, o fluxo de execução e outras informações relevantes. Essa abordagem é especialmente útil para depurar sistemas simultâneos ou distribuídos em que a ordem de execução pode afetar o comportamento do programa.

Depuração de Rubber Duck
 

Nessa abordagem, os desenvolvedores "explicam ou discutem" o código, linha por linha, para qualquer objeto inanimado. A ideia é que, ao tentar explicar o código em voz alta, os desenvolvedores possam entender melhor sua lógica (ou a falta dela) e identificar bugs com mais facilidade.

Depuração automatizada
 

A depuração automatizada se baseia em algoritmos de análise, inteligência artificial (IA) e aprendizado de máquina para automatizar uma ou mais etapas do processo de depuração. As ferramentas de depuração com tecnologia de IA podem pesquisar grandes conjuntos de código mais rapidamente para identificar erros ou restringir seções de código que podem ser examinadas mais detalhadamente por um desenvolvedor.

Os sistemas automatizados podem replicar linhas de código e automatizar testes para verificar se um sistema está funcionando como pretendido. A automação desempenha um papel importante tanto na integração contínua (CI) quanto na entrega contínua (CD), duas abordagens que aceleram o teste e a implantação de novos códigos.

Depuração de força bruta
 

Normalmente implementada quando outros métodos falham, a depuração por força bruta envolve percorrer toda a base de código, linha por linha, para identificar a origem do problema. Essa abordagem demorada também pode ser útil para depurar pequenos programas quando o engenheiro ou programador que está fazendo a depuração não está familiarizado com a base de código.

 

Ferramentas de depuração

Ferramentas de depuração

Os depuradores são ferramentas e APIs avançadas que otimizam o desenvolvimento de software localizando erros de codificação em um sistema operacional ou processo de desenvolvimento de aplicações. Os depuradores representam um negócio massivo e em crescimento. Com o cenário cada vez maior de aplicativos e programas para computadores e dispositivos móveis, não é surpresa que o mercado global de depuradores deva crescer significativamente até o final da década1 .

As corporações estão investindo milhões no desenvolvimento de ferramentas sofisticadas de depuração (como chatbots de IA que podem depurar código)2  e pesquisadores universitários estão criando ferramentas que podem depurar videogames de forma autônoma3 e depurar linguagens de programação específicas de domínio4.

As ferramentas e tecnologias podem variar muito em seus recursos, mas, essencialmente, todas oferecem interfaces de linha de comando que ajudam as organizações a encontrar e corrigir problemas de bug. A maioria também oferece recursos de depuração remota e tutoriais que tornam o software mais acessível para iniciantes.

Exemplos de ferramentas de depuração incluem:

Ambientes de desenvolvimento integrados (IDEs)
   

Os IDEs oferecem aos programadores de computador recursos abrangentes para o desenvolvimento de software. Muitos IDEs, como Visual Studio, Eclipse e PyCharm, vêm com um "modo de depuração". Essas ferramentas de depuração integradas permitem que os desenvolvedores executem código linha por linha (depuração por etapas), parem a execução do programa em pontos específicos (pontos de interrupção) e examinem o estado das variáveis e da memória a qualquer momento, entre outros recursos. 

Os IDEs também estão disponíveis como plug-ins de código aberto compatíveis com uma variedade de linguagens de programação, como Java, Python, JavaScript e TypeScript, e linguagens de script, como PHP.

Depuradores autônomos
 

Depuradores autônomos, como o GNU Debugger (GDB), oferecem recursos avançados de depuração, incluindo pontos de interrupção condicionais e pontos de vigilância. Eles também facilitam a depuração reversa, que ocorre quando os programadores executam um programa de trás para frente. Eles tendem a ser mais poderosos e versáteis do que os depuradores integrados em IDEs ou outras ferramentas de desenvolvimento, mas também têm uma curva de aprendizado mais acentuada para os usuários e exigem mais conhecimento técnico. 

Utilitários de registro
 

Essas ferramentas fornecem maneiras de registrar o estado de um programa em vários pontos no código. Os logs podem então ser analisados para encontrar anomalias ou padrões problemáticos. O registro é útil para resolver problemas de bugs que ocorrem em ambientes de produção, onde a depuração interativa pode não ser viável. 

Analisadores de código estático
 

As ferramentas de análise de código estático analisam o código sem executá-lo, procurando possíveis erros e corrigindo bugs e desvios dos padrões de codificação. Em vez de se concentrar na sintaxe (como fazem os intérpretes e compiladores), essas ferramentas analisam a semântica do código-fonte, ajudando os desenvolvedores a detectar erros comuns de programação e a aplicar estilos de codificação consistentes. 

Ferramentas de análise dinâmica
 

Essencialmente, o oposto dos analisadores de código estático, as ferramentas de análise dinâmica monitoram o software enquanto ele é executado para detectar problemas como vazamentos de recursos ou problemas de simultaneidade. Essa ferramenta ajuda as equipes de desenvolvimento a detectar bugs que a análise estática pode deixar passar, como vazamentos de memória ou estouro de buffer.

Profilers de desempenho
 

Profilers de desempenho permitem que os desenvolvedores identifiquem gargalos de desempenho em seu código. Esses sistemas podem medir o uso da CPU, da memória e das operações de E/S, ajudando a localizar operações lentas e ineficientes.

Depuração vs. testes

Depuração vs. testes

Testes e depuração são processos complementares no desenvolvimento de novo código. Embora seus resultados sejam diferentes, tanto o teste quanto a depuração são usados para produzir um código livre de erros.

O teste permite que os desenvolvedores de software entendam o que acontece com um sistema quando ocorrem bugs. Esses testes ajudam os desenvolvedores a saber quando um sistema falhou e os efeitos que a falha pode ter em um software. O teste automatizado permite que os desenvolvedores executem testes contínuos em novos códigos para obter insights sobre vários cenários. Os testes são uma parte fundamental do desenvolvimento de software, mas não explicam por que um erro ocorreu.

Estratégias e ferramentas de depuração são o que os desenvolvedores usam para encontrar a causa raiz dos erros, corrigi-los e documentá-los para evitar que ocorram novamente. Quando usados juntos, a depuração e o teste ajudam as equipes a criar uma abordagem simplificada para desenvolver código e criar produtos de software melhores.

Soluções relacionadas

Soluções relacionadas

IBM instana observability

A plataforma Instana Observability fornece dados de desempenho em tempo real, completos com todo o contexto, para todas as suas equipes. Visibilidade full stack automatizada, granularidade de 1 segundo e 3 segundos para notificar permitem identificação rápida para prevenir e corrigir problemas.

Conheça o IBM Instana Observability Solicite uma demonstração do IBM Instana
IBM Turbonomic

A plataforma de otimização de custos de nuvem híbrida IBM Turbonomic permite que você automatize continuamente ações críticas em tempo real, oferecendo de forma proativa o uso mais eficiente de recursos de computação, armazenamento e rede para seus aplicativos em cada camada do stack. 

Explore o IBM Turbonomic Conheça o IBM Turbonomic sem custo
IBM Cloud Pak para AIOps

Obtenha visibilidade dos dados e das dependências nos ambientes de TI com ferramentas baseadas em IA que ajudam a lidar com o gerenciamento e a correção de incidentes.

Conheça o IBM Cloud Pak for AIOps Experimente um tour autoguiado
Recursos

Recursos

O que é teste de software?

Testes de software são o processo de verificar se um produto ou aplicação de software faz o que deveria fazer.

O que é observabilidade?

A observabilidade oferece visibilidade profunda dos aplicativos distribuídos modernos para identificação e resolução de problemas mais rápidas e automáticas.

O pipeline de CI/CD

O pipeline de integração e entrega contínuas (CI/CD) simplifica o processo de desenvolvimento do produto.

Veja como uma combinação de componentes de TI observáveis, aprendizado de máquina e inteligência artificial (IA) torna possível reconhecer a criação de problemas de software antes que eles se tornem incidentes.

Roteamento de log de observabilidade e dados de eventos

Entenda a importância de rotear de forma segura os dados de log e eventos com o IBM Cloud Logs.

IBM Test Accelerator for Z

O IBM Test Accelerator oferece ferramentas poderosas para testes automatizados, entrega contínua e fluxos de trabalho de desenvolvimento simplificados.

Dê o próximo passo

O IBM Debug for z/OS oferece depuração e cobertura de código para aplicações z/OS escritas em COBOL, PL/I, C/C++ e Assembler.

IBM Debug for z/OS
Notas de rodapé

1 "Global software debugging market analysis [2023-2030," Benzinga, 5 de setembro de 2022
2 "Google’s Bard AI chatbot can now generate and debug code," TechCrunch+, 12 de abril de 2023
3 "Autonomously debugging video games." University of Southern California-Viterbi School of Engineering, 5 de abril de 2023
4 "An easier way to get bugs out of programming languages," MIT News, 7 de abril de 2023