Testing Sederhana: Memastikan Solusi Bekerja dengan Benar - Perwira Learning Center


1. LATAR BELAKANG

Pada pembelajaran kali ini, saya mempelajari tentang testing atau pengujian program. Setelah memahami masalah, memecahnya, dan mengenali pola, langkah selanjutnya adalah memastikan solusi benar-benar bekerja dengan baik. Sebagai siswa SMK yang sedang mengembangkan kemampuan programming, saya menyadari bahwa menulis kode yang "terlihat benar" tidak cukup - kita harus membuktikan bahwa kode tersebut benar-benar bekerja dalam berbagai kondisi.

Dalam dunia programming profesional, testing adalah fase yang tidak boleh dilewatkan. Bug yang lolos ke production bisa mengakibatkan kerugian besar. Pembelajaran ini difokuskan pada teknik testing sederhana yang bisa langsung diterapkan oleh pemula, khususnya manual testing menggunakan test cases yang terstruktur.

2. ALAT DAN BAHAN

2.1 Perangkat Lunak

  • Visual Studio Code - Text editor untuk menulis kode JavaScript
  • Google Chrome - Browser dengan Developer Console untuk testing
  • Node.js - (Opsional) Runtime environment untuk menjalankan JavaScript

2.2 Perangkat Keras

  • Laptop/PC

3. PEMBAHASAN

3.1 Pengertian Testing dalam Programming

Testing adalah proses memverifikasi bahwa program bekerja sesuai yang diharapkan. Testing berarti menjalankan kode dengan berbagai input untuk memastikan outputnya benar dan tidak ada error.

Testing bukan hanya mencari error, tapi membangun confidence bahwa kode kita reliable. Jika semua test pass, kita yakin program berfungsi baik. Jika ada test yang fail, kita tahu persis di mana masalahnya.

3.2 Mengapa Testing Sangat Penting

Mencegah Bug di Production Bug yang ditemukan saat development lebih murah diperbaiki daripada bug yang ditemukan setelah dipakai user.

Meningkatkan Confidence Dengan testing komprehensif, kita percaya diri bahwa kode bekerja benar.

Mempermudah Maintenance Test cases memastikan perubahan kode tidak merusak fungsi yang sudah bekerja.

3.3 Jenis-jenis Test Case

Normal Case Kondisi normal dengan input valid yang paling sering terjadi.

  • Contoh: Input [80, 75, 90] → Output 81.67

Edge Case Kondisi ekstrem yang masih valid tapi jarang terjadi.

  • Contoh: Array kosong [], array 1 elemen [100], nilai batas [0, 100]

Error Case Kondisi dengan input tidak valid.

  • Contoh: Tipe data salah, nilai di luar range

3.4 Strategi Testing Manual Sederhana

Step 1: Buat Test Cases Sebelum Coding

Format test case:

Input: [data]
Expected Output: [hasil yang diharapkan]
Status: PASS/FAIL

Step 2: Implementasikan Fungsi

Tulis kode fungsi yang akan di-test.

Step 3: Jalankan Test Cases

Jalankan fungsi dengan setiap test case, bandingkan hasil.

Step 4: Fix Bug Jika Ada

Debug dan perbaiki, lalu test ulang semua.

3.5 Contoh Penerapan: Testing Fungsi Validasi Input

Soal: "Buatlah fungsi validasi input pendaftaran siswa. Validasi: nama minimal 3 karakter, umur 15-20 tahun, email harus ada '@'."

Implementasi:

// FUNGSI VALIDASI INPUT SISWA + TESTING

function validasiInputSiswa(data) {
  let errors = [];
  
  // Validasi data tidak null
  if (!data) {
    return { valid: false, errors: ["Data tidak boleh kosong"] };
  }
  
  // Validasi nama
  if (!data.nama || data.nama.trim().length < 3) {
    errors.push("Nama minimal 3 karakter");
  }
  
  // Validasi umur
  if (!data.umur || typeof data.umur !== 'number') {
    errors.push("Umur harus berupa angka");
  } else if (data.umur < 15 || data.umur > 20) {
    errors.push("Umur harus antara 15-20 tahun");
  }
  
  // Validasi email
  if (!data.email || !data.email.includes('@')) {
    errors.push("Email harus mengandung '@'");
  }
  
  // Return hasil
  if (errors.length > 0) {
    return { valid: false, errors };
  }
  
  return { valid: true, errors: [] };
}


// HELPER FUNCTION UNTUK TESTING

function runTest(testName, input, expectedValid) {
  console.log(`\n${testName}`);
  console.log("Input:", JSON.stringify(input));
  
  const result = validasiInputSiswa(input);
  const isPassed = result.valid === expectedValid;
  
  console.log("Output:", result);
  console.log("Status:", isPassed ? "✓ PASS" : "✗ FAIL");
  
  return isPassed;
}


// TEST CASES

console.log("=== TESTING VALIDASI INPUT SISWA ===");

let passed = 0;
let total = 0;

// Normal cases
total++;
if (runTest(
  "Test 1: Data Valid",
  { nama: "Budi", umur: 17, email: "budi@email.com" },
  true
)) passed++;

total++;
if (runTest(
  "Test 2: Nama Panjang",
  { nama: "Budi Santoso", umur: 18, email: "budi@test.com" },
  true
)) passed++;

// Edge cases
total++;
if (runTest(
  "Test 3: Nama 3 Karakter (Minimal)",
  { nama: "Ali", umur: 16, email: "ali@test.com" },
  true
)) passed++;

total++;
if (runTest(
  "Test 4: Umur 15 (Minimal)",
  { nama: "Siti", umur: 15, email: "siti@test.com" },
  true
)) passed++;

total++;
if (runTest(
  "Test 5: Umur 20 (Maksimal)",
  { nama: "Andi", umur: 20, email: "andi@test.com" },
  true
)) passed++;

// Error cases
total++;
if (runTest(
  "Test 6: Nama Terlalu Pendek",
  { nama: "AB", umur: 17, email: "ab@test.com" },
  false
)) passed++;

total++;
if (runTest(
  "Test 7: Umur Terlalu Muda",
  { nama: "Deni", umur: 14, email: "deni@test.com" },
  false
)) passed++;

total++;
if (runTest(
  "Test 8: Email Invalid",
  { nama: "Feri", umur: 17, email: "feriemail.com" },
  false
)) passed++;

total++;
if (runTest(
  "Test 9: Data Null",
  null,
  false
)) passed++;

// Summary
console.log("\n" + "=".repeat(50));
console.log("TEST SUMMARY");
console.log("=".repeat(50));
console.log(`Total Tests  : ${total}`);
console.log(`Passed       : ${passed}`);
console.log(`Failed       : ${total - passed}`);
console.log(`Success Rate : ${((passed/total)*100).toFixed(2)}%`);
console.log("=".repeat(50));

if (passed === total) {
  console.log("SEMUA TEST PASS!");
} else {
  console.log("ADA TEST YANG FAIL!");
}

Penjelasan:

  1. Test Cases Komprehensif: Mencakup normal, edge, dan error cases
  2. Helper Function: runTest() membuat testing terstruktur
  3. Clear Output: Setiap test menampilkan input, output, dan status
  4. Summary: Ringkasan berapa test yang pass/fail

3.6 Kendala dan Solusi

Kendala 1: Malas Testing

Merasa testing buang waktu.

Solusi: Testing adalah investasi. Bug yang lolos lebih mahal diperbaiki daripada waktu untuk testing di awal.

Kendala 2: Tidak Tahu Test Case Apa Saja

Bingung harus buat test case apa.

Solusi: Minimal 5 test cases:

  • 1 normal case
  • 2 edge cases
  • 2 error cases

Kendala 3: Output Test Berantakan

Console log berantakan, sulit dibaca.

Solusi: Buat format output yang konsisten dengan separator dan status yang jelas.

4. KESIMPULAN

Testing adalah bagian integral dari problem solving yang tidak boleh diabaikan. Dengan membuat test cases komprehensif yang mencakup normal case, edge case, dan error case, kita bisa menangkap bug sejak dini. Strategi testing manual sederhana dengan format yang terstruktur sudah cukup efektif untuk pemula. Yang penting adalah membangun habit untuk selalu testing sebelum menganggap pekerjaan selesai.

5. DAFTAR PUSTAKA

Beck, K. (2002). Test Driven Development: By Example. Addison-Wesley Professional.

Mozilla Developer Network. (2024). Debugging JavaScript. Diakses dari https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/What_went_wrong

Fowler, M. (2018). Refactoring: Improving the Design of Existing Code. Addison-Wesley Professional.

W3Schools. (2024). JavaScript Debugging. Diakses dari https://www.w3schools.com/js/js_debugging.asp

freeCodeCamp. (2023). Introduction to Software Testing. Diakses dari https://www.freecodecamp.org/news/testing-in-javascript/

Posting Komentar

0 Komentar