Cara Menggunakan Kombinasi Set sebagai Data Uji untuk Pengujian Unit yang Efektif

Pengujian unit adalah praktik penting dalam pengembangan perangkat lunak, memastikan bahwa kode Anda berfungsi sebagaimana mestinya di bawah berbagai kondisi. Saat menguji fungsi yang bergantung pada input numerik—seperti yang menentukan apakah tiga panjang dapat membentuk segitiga yang valid—Anda harus mempertimbangkan baik kasus normal maupun tepi. Posting blog ini akan memandu Anda melalui pembuatan dan penggunaan kombinasi set sebagai data uji, memastikan evaluasi menyeluruh terhadap fungsi Anda.

Memahami Masalah

Saat menguji fungsi yang memeriksa apakah tiga panjang dapat membentuk segitiga, Anda memerlukan serangkaian kasus uji yang beragam. Ini mencakup:

  • Nilai Normal: Panjang yang biasa (misalnya, 5, 10, 5).
  • Kasus Tepi: Nilai yang menantang algoritma, seperti:
    • Angka negatif (misalnya, -1, 0).
    • Angka yang sangat besar yang mungkin menyebabkan overflow (misalnya, 1000, inf).
    • Nilai pada batas input yang valid.

Berikut adalah contoh himpunan input yang mungkin Anda gunakan:

(inf, 0, -1), (5, 10, 1000), (10, 5, 5), (0, -1, 5), (1000, inf, inf)

Tantangannya adalah menghasilkan kombinasi dari nilai-nilai ini—baik dengan maupun tanpa pengulangan. Mari kita lihat cara menangani masalah ini secara efektif.

Menghasilkan Kombinasi Set

Untuk menghasilkan kombinasi dari sekumpulan nilai, Anda bisa mengimplementasikannya dalam berbagai bahasa pemrograman. Di bawah ini, saya akan berbagi metode menggunakan C, yang memungkinkan Anda menghitung kombinasi dengan cara yang tepat.

Implementasi Algoritma dalam C

Dalam semangat algoritma matematika, kita bisa merujuk pada “Algoritma 515”, sebagaimana dipresentasikan oleh Buckles dan Lybanon. Fungsi C berikut akan membantu menghasilkan set p elemen yang diurutkan secara leksikografis ke-x dari n:

void combination(int* c, int n, int p, int x) {
    int i, r, k = 0;
    for(i = 0; i < p - 1; i++) {
        c[i] = (i != 0) ? c[i - 1] : 0;
        do {
            c[i]++;
            r = choose(n - c[i], p - (i + 1)); // Fungsi pembantu diperlukan
            k = k + r;
        } while(k < x);
        k = k - r;
    }
    c[p - 1] = c[p - 2] + x - k;
}

Penjelasan Kode

  • Input Fungsi: Fungsi ini menerima array c di mana kombinasi akan disimpan, jumlah total elemen n, jumlah elemen yang akan digabungkan p, dan indeks kombinasi tertentu x yang akan diproduksi.
  • Loop Luar: Loop luar beriterasi untuk mengisi p - 1 elemen dari kombinasi.
  • Loop Dalam: Ini menggunakan do-while loop untuk meningkatkan kombinasi hingga set ke-x yang diperlukan ditemukan.

Mendapatkan Fungsi Pembantu

Anda akan membutuhkan fungsi choose untuk menghitung kombinasi dari n yang diambil k pada suatu waktu:

int choose(int n, int k) {
    if (k > n || k < 0) return 0;
    if (k == 0 || k == n) return 1;
    if (k == 1) return n;

    int r = 1;
    for (int i = 1; i <= k; i++) {
        r = r * (n - i + 1) / i;
    }
    return r;
}

Kesimpulan

Menguji fungsi dengan kombinasi set numerik dapat sangat meningkatkan keandalan perangkat lunak Anda. Dengan menghasilkan kasus uji yang beragam, Anda dapat memastikan kode Anda dapat menangani input yang tidak terduga.

Jika Anda memiliki pertanyaan atau saran tentang penerapan strategi pengujian, jangan ragu untuk berbagi pemikiran Anda di kolom komentar. Bersama-sama, kita dapat membuat pengembangan perangkat lunak lebih kokoh!