Pendekatan Smart dalam Menguji Program
1. Pengujian Unit (Unit Testing)
Pengujian unit fokus pada pengujian komponen individu dari program, seperti fungsi atau metode, secara terpisah untuk memastikan mereka berfungsi dengan benar.
a. Menulis Fungsi Uji
Buat fungsi uji untuk memeriksa setiap fungsi dalam program Anda dengan berbagai input. Ini bisa dilakukan dengan menulis kode pengujian di dalam fungsi main()
atau menggunakan kerangka kerja pengujian unit seperti Google Test untuk C++.
Contoh Pengujian Unit untuk Fungsi dalam C++:
Misalkan kita memiliki fungsi Hitung Ratarata
:
#include <iostream>
using namespace std;
// Fungsi untuk menghitung rata-rata dari lima angka
float hitungRataRata(float a, float b, float c, float d, float e) {
return (a + b + c + d + e) / 5;
}
int main() {
// Pengujian unit untuk fungsi hitungRataRata
float hasil = hitungRataRata(10, 20, 30, 40, 50);
if (hasil == 30) {
cout << "Pengujian unit berhasil: Rata-rata sesuai" << endl;
} else {
cout << "Pengujian unit gagal: Rata-rata tidak sesuai" << endl;
}
return 0;
}
2. Pengujian Fungsi Utama (Integration Testing)
Pengujian fungsi utama memastikan bahwa seluruh bagian program bekerja dengan baik bersama-sama. Ini mencakup pengujian alur logika dari input hingga output.
a. Menyiapkan Kasus Uji
Uji program dengan berbagai kasus uji untuk memastikan bahwa program menangani berbagai skenario input dengan benar.
Contoh Kasus Uji:
#include <iostream>using namespace std;
// Fungsi utama program
int main() {
// Kasus uji
float angka1, angka2, angka3, angka4, angka5;
cout << "Masukkan lima angka:" << endl;
cout << "Angka 1: ";
cin >> angka1;
cout << "Angka 2: ";
cin >> angka2;
cout << "Angka 3: ";
cin >> angka3;
cout << "Angka 4: ";
cin >> angka4;
cout << "Angka 5: ";
cin >> angka5;
float total = angka1 + angka2 + angka3 + angka4 + angka5;
float rataRata = total / 5;
cout << "Total: " << total << endl;
cout << "Rata-rata: " << rataRata << endl;
// Kasus uji dengan input yang berbeda
// Misalkan input adalah 1, 2, 3, 4, 5
// Output yang diharapkan adalah Total: 15 dan Rata-rata: 3
return 0;
}
3. Pengujian Kinerja (Performance Testing)
Pengujian kinerja mengukur seberapa efisien program dalam hal penggunaan sumber daya dan waktu eksekusi.
a. Mengukur Waktu Eksekusi
Gunakan fungsi clock()
dari library <ctime>
untuk mengukur waktu eksekusi program.
Contoh Pengujian Kinerja:
#include <iostream>
#include <ctime>
using namespace std;
int main() {
clock_t start = clock();
// Program atau bagian kode yang akan diuji
for (int i = 0; i < 1000000; ++i) {
// Simulasi beban kerja
}
clock_t end = clock();
double elapsed = double(end - start) / CLOCKS_PER_SEC;
cout << "Waktu eksekusi: " << elapsed << " detik" << endl;
return 0;
}
4. Pengujian Kesalahan (Error Testing)
Pengujian kesalahan memastikan bahwa program menangani kondisi kesalahan dengan benar dan tidak gagal atau crash.
a. Menggunakan Input yang Tidak Valid
Cobalah memberikan input yang tidak valid atau ekstrem dan pastikan program memberikan respons yang sesuai, seperti pesan kesalahan atau penanganan yang tepat.
Contoh Pengujian Kesalahan:
#include <iostream>
using namespace std;
int main() {
int angka;
cout << "Masukkan angka positif: ";
cin >> angka;
if (angka < 0) {
cout << "Error: Angka harus positif!" << endl;
} else {
cout << "Angka yang dimasukkan: " << angka << endl;
}
return 0;
}
5. Pengujian Validasi Input
Pastikan program dapat menangani semua jenis input yang mungkin diterima dengan benar, termasuk input yang tidak valid.
a. Menggunakan Input dari Pengguna
Untuk program yang menerima input dari pengguna, pastikan bahwa input yang diterima valid dan sesuai dengan format yang diharapkan.
Contoh Validasi Input:
#include <iostream>
using namespace std;
int main() {
float angka;
cout << "Masukkan angka desimal: ";
while (!(cin >> angka)) {
cin.clear(); // membersihkan kesalahan
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // membuang input yang salah
cout << "Input tidak valid. Masukkan angka desimal: ";
}
cout << "Angka yang dimasukkan: " << angka << endl;
return 0;
}
6. Pengujian Keamanan
Pastikan bahwa program tidak memiliki kerentanan yang dapat dimanfaatkan oleh pihak ketiga, seperti buffer overflow atau injeksi kode.
7. Dokumentasi Pengujian
Dokumentasikan hasil pengujian, termasuk kasus uji, hasil yang diharapkan, dan hasil aktual. Dokumentasi ini berguna untuk pemeliharaan dan analisis lebih lanjut.
Contoh Dokumentasi Pengujian:
Kasus Uji: Input lima angka untuk menghitung rata-rata
- Input: 10, 20, 30, 40, 50
- Hasil yang Diharapkan: Total = 150, Rata-rata = 30
- Hasil Aktual: Total = 150, Rata-rata = 30
- Status: Lulus
Kasus Uji: Input angka negatif
- Input: -10, 20, -30, 40, 50
- Hasil yang Diharapkan: Total = 50, Rata-rata = 10
- Hasil Aktual: Total = 50, Rata-rata = 10
- Status: Lulus