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/FAILStep 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:
- Test Cases Komprehensif: Mencakup normal, edge, dan error cases
- Helper Function:
runTest()membuat testing terstruktur - Clear Output: Setiap test menampilkan input, output, dan status
- 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/
0 Komentar