Pemecahan Masalah & Debugging

Seni Menemukan dan Memperbaiki Error

Pemrograman Dasar - Pertemuan 13

🎯 Problem Solving dalam Pemrograman

Definisi

  • Kemampuan memecahkan masalah dengan logika dan kode
  • Proses mengubah requirements menjadi solusi program
  • Skill terpenting seorang programmer

Analoginya

  • Seperti detektif yang memecahkan kasus
  • Seperti dokter yang mendiagnosa penyakit
  • Puzzle yang harus disusun dengan logika

Mengapa Penting?

  • 80% waktu programmer dihabiskan untuk debugging
  • Problem solving adalah core skill programming
  • Lebih penting dari hafalan syntax

"Programming isn't about what you know; it's about what you can figure out."

- Chris Pine

🚀 5 Langkah Pemecahan Masalah

1

Pahami Masalah

  • Baca dan analisa requirements
  • Tanyakan: Apa input dan output yang diharapkan?
  • Identifikasi constraints dan rules
2

Break Down Masalah

  • Pecah menjadi sub-masalah kecil
  • Buat step-by-step solution
  • Flowchart atau pseudocode
3

Cari Solusi

  • Research pattern yang sama
  • Gunakan algoritma yang sesuai
  • Tulis rencana solusi
4

Implementasi

  • Translate solusi ke kode
  • Coding step by step
  • Test setiap bagian
5

Test & Refine

  • Test dengan berbagai kasus
  • Optimasi jika perlu
  • Dokumentasi

💡 Contoh: Menghitung Nilai Rata-rata

Masalah:

"Buat program menghitung rata-rata nilai dari 3 mata pelajaran"

Langkah 1 - Pahami:

  • Input: 3 nilai (number)
  • Output: rata-rata (number)
  • Process: (nilai1 + nilai2 + nilai3) / 3

Langkah 2 - Break Down:

  1. Input tiga nilai
  2. Jumlahkan semua nilai
  3. Bagi dengan jumlah mata pelajaran
  4. Tampilkan hasil

Langkah 3 - Pseudocode:

START
INPUT nilai1, nilai2, nilai3
total = nilai1 + nilai2 + nilai3
rata_rata = total / 3
OUTPUT rata_rata
END

🔍 Apa itu Debugging?

Definisi

  • Proses menemukan dan memperbaiki error/bug dalam program
  • "Bug" = serangga (dulu ada ngengat di komputer)
  • "Debug" = menghilangkan serangga

Jenis Error Umum

  • Syntax Error - Kesalahan penulisan kode
  • Runtime Error - Error saat program jalan
  • Logical Error - Program jalan tapi hasil salah

Mindset Debugging

  • Jangan panik, error adalah hal normal
  • Setiap error adalah pelajaran
  • Sabar dan systematic

📖 Sejarah "Bug"

Istilah "bug" pertama kali digunakan oleh Grace Hopper pada tahun 1947 ketika ngengat ditemukan terperangkap di dalam komputer Harvard Mark II.

🛠️ Teknik Debugging untuk Pemula

1. Baca Pesan Error

// Contoh error PHP
Parse error: syntax error, unexpected '$nama' (T_VARIABLE)
// Artinya: Ada syntax error sebelum variable $nama

2. Gunakan echo/print untuk Melacak

echo "Langkah 1 selesai<br>";
$hasil = prosesData($input);
echo "Hasil: " . $hasil . "<br>"; // Cek nilai variable

3. Cek Tipe Data dan Nilai

var_dump($variable); // Lihat tipe dan nilai
print_r($array); // Cek isi array

4. Test Bagian Kecil

  • Isolasi bagian kode yang bermasalah
  • Test dengan input sederhana
  • Verifikasi step by step

❌ Common Error PHP & Solusinya

1. Syntax Error
// SALAH
if ($nilai > 75 {
    echo "Lulus";
}

// BENAR
if ($nilai > 75) {
    echo "Lulus";
}
2. Undefined Variable
// SALAH
echo $nama; // $nama belum didefinisikan

// BENAR
$nama = "Budi";
echo $nama;
3. Array Error
// SALAH
echo $mahasiswa[3]; // Index tidak ada

// BENAR
if(isset($mahasiswa[3])) {
    echo $mahasiswa[3];
}
4. Missing Semicolon
// SALAH
$nama = "Budi"
echo $nama;

// BENAR
$nama = "Budi";
echo $nama;

🔧 Tools Debugging Dasar

🌐

Browser Developer Tools

F12 untuk membuka
Tab Console untuk error JavaScript
Tab Network untuk request

📝

XAMPP/Laragon Error Log

Cek file error log
Lokasi: logs/error.log
Detail error PHP

🐘

PHP Built-in Functions

var_dump(), print_r()
debug_backtrace()
error_reporting()

💻

Text Editor dengan Syntax Highlighting

VS Code, Sublime Text
Warna berbeda untuk syntax
Auto-completion

Contoh Penggunaan Debug Functions:

// Aktifkan error reporting
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Debugging functions:
$data = ["nama" => "Budi", "umur" => 20];
var_dump($data);
print_r($data);

// Cek call stack
// debug_backtrace();

🧩 Strategi untuk Masalah Kompleks

1. Divide and Conquer

  • Pecah masalah besar jadi kecil
  • Selesaikan bagian per bagian
  • Gabungkan solusi

2. Rubber Duck Debugging

  • Jelaskan masalah ke rubber duck (atau teman)
  • Seringkali solusi muncul saat menjelaskan
  • Memaksa untuk berpikir sistematis

3. Code Tracing

  • Tulis di kertas: jalannya program
  • Track nilai variable step by step
  • Contoh: Loop manual tracing

4. Check Common Pitfalls

  • Off-by-one error (loop)
  • Case sensitivity
  • Tipe data tidak match
  • Operator precedence

🦆 Rubber Duck Debugging

Teknik ini bekerja karena dengan menjelaskan masalah secara detail ke "bebek karet", kita dipaksa untuk memikirkan setiap asumsi dan langkah secara eksplisit, yang seringkali mengungkap solusi yang sebelumnya terlewat.

🔍 Studi Kasus: Program Gaji Karyawan

Program yang Error:

<?php
$gaji_pokok = 5000000;
$tunjangan = 1000000;
$pajak = 0.1;

$gaji_kotor = $gaji_pokok + $tunjangan
$pajak_dipotong = $gaji_kotor * $pajak;
$gaji_bersih = $gaji_kotor - $pajak_dipotong;

echo "Gaji bersih: " . $gaji_bersih;
?>
Error Message: Parse error: syntax error, unexpected '$pajak_dipotong' (T_VARIABLE) on line 7

Langkah Debugging:

  1. Identifikasi Error: Parse error - missing semicolon
  2. Perbaikan: Tambahkan ; di line 6 setelah $tunjangan
  3. Test: Program jalan, tapi hasilnya?
  4. Verifikasi: Hitung manual untuk cek kebenaran
Program Setelah Diperbaiki:
Gaji kotor: 6,000,000
Pajak: 600,000
Gaji bersih: 5,400,000

🛡️ Mencegah Error Sebelum Terjadi

1. Penamaan yang Jelas

// BURUK
$a = 10;
$b = 20;

// BAIK
$jumlah_barang = 10;
$harga_satuan = 20000;

2. Comment dan Dokumentasi

/**
* Menghitung diskon berdasarkan total belanja
* @param float $total_belanja
* @return float jumlah diskon
*/
function hitungDiskon($total_belanja) {
  // Logic here
}

3. Test Incremental

  • Test setiap fungsi setelah dibuat
  • Gunakan input sederhana dulu
  • Baru test dengan kasus kompleks

4. Version Control (Git)

  • Backup kode regularly
  • Bisa kembali ke versi sebelumnya
  • Collaboration yang aman

🏆 Workshop: Debugging Challenge

Program A - Error:

<?php
$numbers = [1, 2, 3, 4, 5];
$total = 0;

for($i = 0; $i <= count($numbers); $i++) {
  $total = $total + $numbers[i];
}

echo "Rata-rata: " . $total / count($numbers);
?>
Error yang harus ditemukan:
  • Off-by-one error dalam loop
  • Missing $ pada variable array
  • Logical error dalam perhitungan

Program B - Error:

<?php
function cekGrade($nilai) {
  if ($nilai >= 90)
    return "A";
  else if ($nilai >= 80)
    return "B";
  else if ($nilai >= 70)
    return "C"
  else
    return "D";
}

echo cekGrade(85);
?>
Error yang harus ditemukan:
  • Missing semicolon
  • Missing curly braces
  • Syntax error

💪 Mindset Menghadapi Error

❌ Jangan:

  • Panik dan frustasi
  • Menyalahkan diri sendiri
  • Copy-paste solusi tanpa paham
  • Terburu-buru

✅ Lakukan:

  • Tenang dan ambil napas
  • Baca error message dengan seksama
  • Cari pattern error yang sama
  • Break down masalah
  • Celebrate small wins

Ingat:

Setiap programmer pernah error
Error adalah bagian dari learning process
Skill debugging akan terbentuk dengan practice

📚 Ringkasan Pertemuan 13

Yang Telah Dipelajari:

  • ✅ Konsep problem solving dalam programming
  • ✅ Langkah-langkah systematic debugging
  • ✅ Common error dan solusinya
  • ✅ Tools dan teknik debugging
  • ✅ Mindset menghadapi error

Tugas Individu:

Buat program sederhana yang sengaja mengandung 3 jenis error:

  • 1 Syntax error
  • 1 Runtime error
  • 1 Logical error

Tukar dengan teman dan debug program masing-masing!

Deadline: Pertemuan depan

Format Pengumpulan: File PHP yang berisi program dengan error dan solusi perbaikannya

💫 Words of Wisdom

"It's not that I'm so smart,
it's just that I stay with problems longer."

- Albert Einstein

"The most effective debugging tool
is still careful thought, coupled with
judiciously placed print statements."

- Brian Kernighan

"First, solve the problem.
Then, write the code."

- John Johnson

Happy Debugging! 🐛➡️✨