
Dalam pengembangan software, memastikan program berjalan dengan benar merupakan hal yang penting. Programmer tidak hanya perlu menulis kode, tetapi juga harus menguji apakah setiap bagian aplikasi bekerja sesuai kebutuhan.
Dua jenis pengujian yang sering digunakan adalah unit testing dan integration testing. Keduanya membantu menemukan kesalahan dalam program, tetapi memiliki fokus dan cakupan yang berbeda.
Unit testing berfokus pada pengujian bagian kecil kode secara terpisah, sedangkan integration testing memeriksa apakah beberapa bagian program dapat bekerja sama dengan baik.
Lalu, apa perbedaan unit testing dan integration testing? Kapan masing-masing pengujian digunakan? Simak penjelasan berikut.
Apa Itu Unit Testing?
Unit testing adalah proses menguji bagian kecil dari program secara terpisah untuk memastikan bagian tersebut menghasilkan output sesuai yang diharapkan.
Bagian yang diuji dapat berupa:
- Function.
- Method.
- Class.
- Modul tertentu.
- Komponen dengan tanggung jawab yang terbatas.
Tujuan unit testing adalah menemukan kesalahan pada bagian kode secara lebih terarah sebelum bagian tersebut digunakan bersama komponen lainnya.
Contoh Unit Testing dengan Python
Misalnya, programmer membuat function untuk menjumlahkan dua angka.
def tambah(a, b):
return a + b
Function tersebut dapat diuji menggunakan assert.
def test_tambah():
assert tambah(2, 3) == 5
Pengujian tersebut memeriksa apakah function tambah() menghasilkan nilai 5 ketika menerima angka 2 dan 3.
Jika hasil yang diperoleh tidak sesuai dengan nilai yang diharapkan, pengujian akan gagal.
Contoh Beberapa Skenario Unit Test
def test_tambah():
assert tambah(2, 3) == 5
assert tambah(0, 5) == 5
assert tambah(-2, 2) == 0
Skenario tersebut menguji beberapa kombinasi input untuk function yang sama.
Unit testing sebaiknya berfokus pada satu unit logika dan menghindari ketergantungan yang tidak diperlukan pada komponen eksternal.
Apa Itu Integration Testing?
Integration testing adalah proses menguji interaksi antara dua atau lebih komponen program untuk memastikan komponen tersebut dapat bekerja sama sesuai kebutuhan.
Komponen yang diuji dapat berupa:
- Function dan database.
- Backend dan API.
- Modul autentikasi dan sistem pengguna.
- Aplikasi dan layanan eksternal.
- Modul transaksi dan sistem penyimpanan data.
Integration testing tidak hanya memeriksa apakah setiap bagian bekerja sendiri, tetapi juga apakah pertukaran data dan komunikasi antarbagian berjalan dengan benar.
Contoh Integration Testing
Misalnya sebuah aplikasi memiliki fitur login dengan alur berikut:
Form Login
↓
Backend
↓
Database
↓
Validasi Data Pengguna
↓
Hasil Login
Unit testing dapat digunakan untuk menguji function validasi password secara terpisah.
Sementara itu, integration testing dapat memeriksa apakah:
- Form mengirim data ke backend.
- Backend terhubung dengan database.
- Data pengguna dapat diambil.
- Password diverifikasi dengan benar.
- Sistem mengembalikan hasil login yang sesuai.
Pengujian tersebut melibatkan beberapa komponen yang saling berinteraksi.
Perbedaan Unit Testing dan Integration Testing
Berikut perbandingan unit testing dan integration testing:
| Aspek | Unit Testing | Integration Testing |
|---|---|---|
| Fokus | Bagian kecil kode | Interaksi beberapa komponen |
| Cakupan | Sempit dan terisolasi | Lebih luas |
| Tujuan | Memastikan unit bekerja benar | Memastikan komponen dapat bekerja sama |
| Kecepatan | Biasanya lebih cepat | Dapat lebih lambat |
| Dependensi | Umumnya diminimalkan atau diisolasi | Dependensi antarkomponen diuji |
| Contoh | Menguji function penjumlahan | Menguji backend yang mengambil data dari database |
| Kesalahan yang ditemukan | Kesalahan logika dalam unit | Kesalahan komunikasi dan integrasi |
Kesimpulan perbedaan: Unit testing menguji bagian program secara terpisah, sedangkan integration testing menguji hubungan dan interaksi antarbagian program.
Perbedaan dari Segi Tujuan
Tujuan Unit Testing
Unit testing bertujuan untuk memastikan sebuah unit kode menjalankan tugasnya secara benar.
Contohnya:
- Function menghitung total menghasilkan nilai yang tepat.
- Method validasi mengembalikan hasil yang benar.
- Modul perhitungan diskon mengikuti aturan yang ditentukan.
Tujuan Integration Testing
Integration testing bertujuan untuk memastikan komponen yang berbeda dapat berkomunikasi dan bekerja sesuai alur yang dirancang.
Contohnya:
- Backend berhasil mengambil data dari database.
- Modul pembayaran dapat mengirim hasil transaksi.
- API mengirim data dengan format yang dapat diproses frontend.
Contoh Unit Testing pada Aplikasi Penjualan
Misalnya terdapat function untuk menghitung total harga barang.
def hitung_total(harga, jumlah):
return harga * jumlah
Unit testing dapat dilakukan seperti berikut:
def test_hitung_total():
assert hitung_total(10000, 3) == 30000
assert hitung_total(5000, 2) == 10000
Pada contoh tersebut, function diuji tanpa menghubungkan aplikasi ke database atau sistem pembayaran.
Apa yang Diperiksa?
- Perkalian harga dan jumlah.
- Input dengan jumlah berbeda.
- Hasil perhitungan sesuai harapan.
Pengujian ini berfokus pada logika perhitungan total.
Contoh Integration Testing pada Aplikasi Penjualan
Aplikasi penjualan biasanya melibatkan beberapa komponen:
Form Penjualan
↓
Validasi Input
↓
Proses Transaksi
↓
Database
↓
Pembaruan Stok
Integration testing dapat memeriksa apakah proses transaksi dapat berjalan secara lengkap.
Contoh skenario:
- Pengguna memilih barang.
- Aplikasi mengambil harga barang dari database.
- Pengguna memasukkan jumlah pembelian.
- Sistem menghitung total transaksi.
- Data transaksi disimpan.
- Stok barang diperbarui.
Pengujian ini dapat menemukan masalah yang tidak terlihat ketika masing-masing function diuji secara terpisah.
Misalnya, function perhitungan total bekerja dengan benar, tetapi data harga dari database ternyata tidak dipetakan ke variabel yang sesuai.
Contoh Integration Testing pada PHP dan MySQL
Pada aplikasi PHP, integration testing dapat digunakan untuk memeriksa interaksi antara kode PHP dan database MySQL.
Contoh alur:
Form Tambah Barang
↓
File tambah.php
↓
Validasi Data
↓
Query INSERT
↓
Database MySQL
Skenario pengujian:
| Skenario | Hasil yang Diharapkan |
|---|---|
| Menambahkan barang dengan data valid | Data tersimpan di database |
| Nama barang kosong | Validasi ditampilkan |
| Harga tidak valid | Data ditolak |
| Koneksi database gagal | Pesan error ditangani |
| Data berhasil disimpan | Hasil penyimpanan ditampilkan sesuai kebutuhan |
Pengujian ini melibatkan lebih dari satu komponen sehingga termasuk dalam cakupan integration testing.
Catatan: Pengujian yang benar-benar menyimpan data ke database sebaiknya menggunakan database pengujian atau data yang telah disiapkan agar tidak merusak data produksi.
Unit Testing Menggunakan Mock dan Stub
Dalam unit testing, dependensi eksternal sering diganti dengan objek pengganti seperti mock atau stub.
Tujuannya adalah membuat unit dapat diuji tanpa harus bergantung langsung pada layanan eksternal.
Apa Itu Mock?
Mock adalah objek pengganti yang dapat digunakan untuk mengatur perilaku dependensi dan memeriksa interaksi yang dilakukan oleh kode.
Apa Itu Stub?
Stub adalah implementasi pengganti yang menyediakan respons tertentu selama pengujian.
Contohnya, function yang biasanya mengambil data dari API dapat diuji menggunakan respons palsu sehingga unit tidak perlu mengakses API sungguhan.
Penggunaan mock dan stub bergantung pada kebutuhan pengujian dan framework yang digunakan.
Kapan Menggunakan Unit Testing?
Unit testing cocok digunakan ketika programmer ingin:
- Menguji function atau method secara terpisah.
- Memeriksa logika bisnis yang kecil.
- Menemukan bug lebih awal.
- Menjalankan pengujian dengan cepat.
- Memastikan perubahan kode tidak merusak logika unit.
- Menguji berbagai kombinasi input dan output.
Contoh bagian yang cocok untuk unit testing:
def hitung_diskon(harga, persen):
return harga * persen / 100
Function tersebut dapat diuji dengan beberapa nilai tanpa harus menjalankan keseluruhan aplikasi.
Kapan Menggunakan Integration Testing?
Integration testing cocok digunakan ketika programmer ingin:
- Memeriksa hubungan antar-modul.
- Menguji komunikasi aplikasi dengan database.
- Memastikan API dan backend bertukar data dengan benar.
- Menguji alur transaksi yang melibatkan beberapa komponen.
- Memastikan konfigurasi dependensi bekerja sesuai kebutuhan.
- Menemukan masalah yang tidak muncul saat unit diuji secara terpisah.
Contoh:
Aplikasi
↓
Service
↓
Repository
↓
Database
Pengujian dapat memeriksa apakah data berhasil mengalir melalui komponen tersebut sesuai rancangan.
Unit Testing dan Integration Testing dalam Pengembangan Website
Pada pengembangan website, kedua jenis pengujian dapat digunakan secara bersamaan.
Unit Testing Frontend
Contoh bagian yang dapat diuji:
- Function validasi form.
- Perhitungan total pada keranjang belanja.
- Komponen tombol.
- Fungsi pemformatan data.
Integration Testing Frontend
Contoh:
- Form mengirim data ke API.
- Komponen menampilkan data yang diterima dari backend.
- Proses login mengubah tampilan aplikasi sesuai respons server.
Unit Testing Backend
Contoh:
- Validasi input.
- Perhitungan biaya.
- Logika diskon.
- Pemeriksaan status transaksi.
Integration Testing Backend
Contoh:
- Backend berkomunikasi dengan database.
- API memproses request dan menghasilkan response.
- Modul transaksi menyimpan data serta memperbarui stok.
Apakah Unit Testing Lebih Baik daripada Integration Testing?
Unit testing dan integration testing memiliki tujuan yang berbeda sehingga tidak dapat diperlakukan sebagai pengganti satu sama lain.
Unit testing membantu memeriksa logika bagian kecil program, sedangkan integration testing membantu memeriksa interaksi antarbagian.
Dalam banyak proyek, keduanya digunakan sebagai bagian dari strategi pengujian yang lebih luas.
Contoh pembagian pengujian:
Unit Testing
↓
Integration Testing
↓
System Testing
↓
Acceptance Testing
Urutan tersebut merupakan ilustrasi umum. Dalam praktiknya, strategi dan urutan pengujian dapat disesuaikan dengan arsitektur aplikasi, metode pengembangan, dan kebutuhan proyek.
Tools untuk Unit Testing dan Integration Testing
Berikut beberapa tools yang dapat digunakan:
| Bahasa / Platform | Tools |
|---|---|
| Python | unittest, pytest |
| PHP | PHPUnit |
| Java | JUnit |
| JavaScript | Jest, Vitest |
| .NET | xUnit, NUnit |
| API | Postman, Newman |
| Web browser | Playwright, Selenium |
Tidak semua tools hanya digunakan untuk satu jenis pengujian. Cakupan penggunaannya bergantung pada konfigurasi dan cara test dibuat.
Contoh Framework pytest
Instalasi:
pip install pytest
File program:
def tambah(a, b):
return a + b
File pengujian:
def test_tambah():
assert tambah(2, 3) == 5
Pengujian dapat dijalankan menggunakan:
pytest
Untuk integration testing, pytest juga dapat digunakan bersama fixture dan konfigurasi dependensi yang sesuai.
Kesalahan yang Sering Terjadi Saat Testing
1. Hanya Menguji Function Secara Terpisah
Unit yang berhasil diuji belum tentu dapat bekerja dengan benar ketika digabungkan dengan komponen lain.
2. Tidak Menguji Integrasi Database
Aplikasi yang berhubungan dengan database perlu diuji pada proses pengambilan, penyimpanan, dan pembaruan data sesuai kebutuhan.
3. Menggunakan Data Produksi Saat Pengujian
Pengujian dengan data produksi dapat menimbulkan risiko perubahan atau kehilangan data. Gunakan lingkungan pengujian yang sesuai.
4. Tidak Memeriksa Format Data
Perbedaan struktur data antara frontend, backend, dan database dapat menyebabkan kesalahan integrasi.
5. Tidak Menjalankan Pengujian Setelah Perubahan
Perubahan pada satu komponen dapat memengaruhi komponen lain. Pengujian ulang perlu dilakukan berdasarkan risiko perubahan tersebut.
Tips Menerapkan Unit dan Integration Testing
Berikut beberapa tips untuk programmer pemula:
- Mulai dengan menguji function sederhana.
- Tentukan input dan output yang diharapkan.
- Pisahkan unit testing dari dependensi eksternal jika diperlukan.
- Gunakan mock atau stub untuk unit yang membutuhkan dependensi.
- Buat integration test untuk alur antar-komponen.
- Gunakan database pengujian untuk test yang melibatkan data.
- Uji kondisi normal dan kondisi error.
- Jalankan test secara rutin setelah perubahan kode.
- Gunakan nama test yang jelas.
- Catat dan analisis hasil pengujian yang gagal.
Kesimpulan
Unit testing dan integration testing sama-sama penting dalam pengembangan software, tetapi memiliki fokus yang berbeda. Unit testing menguji bagian kecil program secara terpisah, sedangkan integration testing memeriksa interaksi antara beberapa komponen.
Unit testing membantu menemukan kesalahan pada logika function atau method, sementara integration testing dapat menemukan masalah komunikasi antara backend, database, API, dan modul lainnya.
Dengan menggabungkan kedua pendekatan secara tepat, programmer dapat menguji program secara lebih terarah dan meningkatkan kepercayaan terhadap perilaku aplikasi.