Pengujian Otomatis dan Kasus Batas

Uji kontrak fungsi dengan contoh biasa, batas, dan masukan tidak sah.

Mapel
Pemrograman
Jenjang
Kuliah
Waktu baca
3 menit
Terbit
8 Oktober 2026

Tujuan belajar

Kamu dapat menulis pengujian unit sederhana dengan unittest, memilih kasus batas, dan membedakan kegagalan uji dari galat pada kode.

Bekal awal

Kamu memahami fungsi, return, percabangan, dan exception. Kamu dapat menghitung hasil fungsi sederhana dengan tangan.

Mengubah janji fungsi menjadi pemeriksaan

Sebuah fungsi perlu kontrak yang jelas: masukan apa yang diterima, keluaran apa yang dijanjikan, dan apa yang terjadi pada masukan tidak sah. Misalnya fungsi biaya_kirim memiliki aturan berat sampai 2 kg seharga 8000, di atas 2 kg seharga 12000, dan berat nol atau negatif ditolak. Satu contoh seperti berat 1 belum cukup menguji batas. Coba nilai 1, 2, dan 3 agar kedua sisi batas terlihat. Coba 0 agar perilaku masukan salah terlihat. Pengujian otomatis menjalankan pemeriksaan itu berulang kali setelah kode berubah.

Modul unittest menyediakan TestCase dan metode seperti assertEqual serta assertRaises. assertEqual membandingkan nilai aktual dengan nilai harapan. assertRaises memeriksa bahwa operasi tertentu benar-benar menimbulkan exception yang diharapkan. Uji sebaiknya kecil dan mandiri: satu uji menunjukkan satu sifat penting. Nama uji menjelaskan aturan yang diuji. Bila uji gagal, baca nilai aktual dan yang diharapkan, lalu cari apakah kontrak, kode, atau harapan uji yang keliru. Jangan langsung mengubah harapan hanya agar uji menjadi hijau.

Contoh kerja 1: menguji batas ongkir

import unittest

def biaya_kirim(berat):
    if berat <= 0:
        raise ValueError("berat harus positif")
    return 8000 if berat <= 2 else 12000

class UjiOngkir(unittest.TestCase):
    def test_batas_dua_kilo(self):
        self.assertEqual(biaya_kirim(2), 8000)

    def test_di_atas_batas(self):
        self.assertEqual(biaya_kirim(3), 12000)

    def test_berat_nol(self):
        with self.assertRaises(ValueError):
            biaya_kirim(0)

Jejak uji pertama: 2 <= 0 salah, lalu 2 <= 2 benar, jadi hasil 8000 dan uji lulus. Uji kedua menghasilkan 12000. Uji ketiga masuk cabang berat <= 0 dan melempar ValueError; assertRaises menganggapnya hasil yang diharapkan. Jika file dijalankan melalui perintah python -m unittest nama_berkas.py, ketiga metode uji ditemukan dan dijalankan.

Contoh kerja 2: menemukan perubahan yang merusak

Andaikan pengembang mengganti <= 2 menjadi < 2 pada baris return. Untuk berat 3, hasil masih 12000; uji di atas batas tetap lulus. Namun untuk berat tepat 2, perbandingan 2 < 2 salah, hasil menjadi 12000 dan test_batas_dua_kilo gagal karena mengharapkan 8000. Kegagalan itu memberi petunjuk khusus bahwa operator batas berubah. Kasus tepat pada batas jauh lebih informatif daripada hanya mencoba angka jauh dari batas.

Kesalahan umum dan debugging

Jangan menguji hanya jalur yang mudah, misalnya berat 1. Jangan pula menulis uji yang menghitung hasil dengan rumus yang sama persis dengan implementasi; kesalahan yang sama dapat muncul di keduanya. Turunkan nilai harapan dari aturan bisnis yang tertulis. Bedakan “failure” ketika hasil tidak cocok dari “error” ketika uji sendiri atau kode menimbulkan galat tak terduga. Jalankan uji kecil setelah perubahan, lalu periksa pesan kegagalan. Pastikan setiap uji bisa dijalankan sendiri tanpa mengandalkan urutan uji lain atau keadaan bersama yang tertinggal.

Jaga agar uji dapat dipercaya

Sebuah uji dapat lulus karena kebetulan bila masukan dan nilai harapannya terlalu mudah. Misalnya uji berat 1 tidak membedakan operator < 2 dari <= 2. Pasangkan tiap aturan dengan masukan yang dapat membuktikan batasnya. Ketika memperbaiki galat, jalankan lagi semua uji kecil yang relevan; perubahan satu cabang dapat memengaruhi cabang lain. Bila uji bergantung pada berkas atau keadaan global, siapkan data awalnya di dalam uji atau fixture supaya hasil tidak bergantung pada urutan eksekusi. Pengujian yang mandiri lebih mudah diulang oleh orang lain dan lebih berguna saat kode berkembang.

Ringkasan dan latihan

Pengujian mengubah aturan menjadi pemeriksaan yang dapat diulang. Tulis uji tambahan untuk berat 1 dan -1. Kemudian sengaja ubah operator batas, jalankan pengujian, dan jelaskan uji mana yang menangkap kesalahan serta mengapa.

python · 17 baris
import unittest

def biaya_kirim(berat):
    if berat <= 0:
        raise ValueError("berat harus positif")
    return 8000 if berat <= 2 else 12000

class UjiOngkir(unittest.TestCase):
    def test_batas_dua_kilo(self):
        self.assertEqual(biaya_kirim(2), 8000)

    def test_di_atas_batas(self):
        self.assertEqual(biaya_kirim(3), 12000)

    def test_berat_nol(self):
        with self.assertRaises(ValueError):
            biaya_kirim(0)
Fungsi dan tiga pengujian unit untuk kasus batas

Sumber belajar

Penjelasan dan contoh disusun ulang untuk materi ini; sumber dapat dibuka untuk belajar lebih lanjut.

Cek pemahaman: Pengujian Otomatis dan Kasus Batas

Lembar kerja · jawab langsung di halaman ini

Soal
3

Memuat soal…