Introdução
Neste capítulo, vamos explorar as técnicas fundamentais para detetar e resolver erros lógicos no código. Erros lógicos são subtis e surgem quando o programa executa sem erros de sintaxe, mas produz resultados incorretos ou inesperados. A sua deteção e resolução exige uma compreensão profunda do que o código se destina a fazer e, por isso, vamos aprender a aplicar estratégias eficazes para os identificar e corrigir.
Compreender o Fluxo Lógico do Programa
A primeira técnica essencial é entender o fluxo lógico pretendido do programa. Pergunta-te sempre: o que se espera que o programa faça? Esta compreensão detalhada ajuda a identificar onde o fluxo pode não estar a seguir a direção correta.
Exemplo Prático
Suponhamos que tens um programa que verifica se um dado número é par ou ímpar. Se o programa sempre retorna "ímpar", mesmo para números pares, sabes que há um erro lógico. Aqui está um exemplo de como esse erro pode ser detetado e corrigido:
// Código problemático em C++
#include <iostream>
using namespace std;
bool isEven(int num) {
return num % 2 == 1; // Erro lógico aqui
}
int main() {
int number = 4;
if (isEven(number)) {
cout << "Par" << endl;
} else {
cout << "Ímpar" << endl; // Resultado incorreto
}
return 0;
}
Correção: Altera num % 2 == 1
para num % 2 == 0
para corrigir o erro lógico.
bool isEven(int num) {
return num % 2 == 0; // Correção do erro lógico
}
Verificação Cruzada de Saídas
Outra técnica eficaz é a implementação de verificações cruzadas utilizando casos de teste conhecidos e previsíveis. Ao comparar os resultados com os valores esperados, podes identificar discrepâncias que indicam erros lógicos.
Exemplo Prático
Vamos considerar um programa em Python para calcular a média de uma lista de números.
# Código problemático em Python
def calcular_media(lista):
soma = sum(lista)
media = soma / len(lista) + 5 # Erro lógico aqui
return media
notas = [10, 20, 30, 40]
print(calcular_media(notas)) # Saída incorreta
Correção: Remover o + 5
que foi indevidamente adicionado ao cálculo da média.
def calcular_media(lista):
soma = sum(lista)
media = soma / len(lista) # Correção do erro lógico
return media
Rastreio de Variáveis
Rastrear os valores das variáveis ao longo da execução do programa ajuda a perceber onde o fluxo quebra. Escrever mensagens de depuração (debug) ou utilizar ferramentas de depuração integradas nos IDEs pode ser muito útil.
Exemplo Prático em PHP
Vamos utilizar o PHP para demonstrar como o rastreio de variáveis pode ajudar a encontrar um erro lógico numa operação de soma.
// Código problemático em PHP
function somar($a, $b) {
$resultado = $a - $b; // Erro lógico aqui
return $resultado;
}
$num1 = 10;
$num2 = 5;
echo somar($num1, $num2); // Saída incorreta
Correção: Substituir o operador -
por +
.
function somar($a, $b) {
$resultado = $a + $b; // Correção do erro lógico
return $resultado;
}
Resumo
Neste capítulo, abordámos as técnicas para detetar e resolver erros lógicos:
- Compreender o fluxo lógico do programa.
- Utilizar verificações cruzadas com casos de teste.
- Rastrear variáveis para perceber onde ocorrem quebras no fluxo.
Aplicar estas técnicas irá melhorar significativamente a tua capacidade de identificar e corrigir erros lógicos nos teus programas.
Quiz
- Qual a principal diferença entre um erro de sintaxe e um erro lógico num programa?
- Se um programa não devolve o resultado esperado, qual seria a primeira técnica que deves aplicar?
- O que pode causar um erro lógico quando se trabalha com operações matemáticas num programa?
- Que técnica poderias usar para rastrear o fluxo de operações num programa?
- Porque é importante realizar verificações cruzadas com casos de teste conhecidos?