Apa Itu Non-Functional Testing?
Non-Functional Testing adalah jenis software testing yang berfokus pada aspek non-fungsional dari sebuah aplikasi, seperti performa, usability, keandalan (reliability), dan keamanan. Tes ini bertujuan untuk memastikan kesiapan sistem terhadap parameter non-fungsional yang tidak diuji dalam functional testing.
Contoh sederhana dari non-functional testing adalah menguji berapa banyak pengguna yang bisa masuk secara bersamaan ke dalam aplikasi. Meskipun sering kali kurang mendapat perhatian dibanding functional testing, pengujian ini sangat penting untuk kepuasan pengguna dan keberhasilan produk di dunia nyata.
Tujuan Non-Functional Testing
- Meningkatkan usability, efisiensi, kemudahan perawatan, dan portabilitas produk.
- Mengurangi risiko produksi dan biaya terkait aspek non-fungsional.
- Mengoptimalkan cara instalasi, konfigurasi, eksekusi, serta pemantauan produk.
- Mengumpulkan metrik dan data untuk riset dan pengembangan.
- Memahami lebih dalam perilaku produk serta teknologi yang digunakan.
Karakteristik Non-Functional Testing
- Harus terukur (measurable), bukan sekadar subjektif seperti “baik” atau “lebih baik”.
- Angka pasti sering kali tidak diketahui di awal proses pengembangan.
- Penting untuk memprioritaskan kebutuhan pengujian.
- Harus mengidentifikasi atribut kualitas dengan benar dalam software engineering.
Kategori Utama dalam Software Testing
Secara umum, ada tiga kategori utama dalam pengujian perangkat lunak:
- Functional Testing
- Non-Functional Testing
- Maintenance Testing
Setiap kategori memiliki berbagai jenis testing yang lebih spesifik, tergantung pada kebutuhan proyek. Tidak semua jenis testing cocok untuk semua proyek, sehingga pemilihan metode harus disesuaikan dengan skala dan kompleksitas aplikasi yang diuji.
Jenis-Jenis Non-Functional Testing
Berikut adalah jenis Non-Functional Testing yang paling umum digunakan:
✔ Performance Testing – Mengukur kinerja sistem di berbagai kondisi.
✔ Load Testing – Menguji performa sistem di bawah beban pengguna tertentu.
✔ Failover Testing – Memeriksa apakah sistem dapat berpindah ke cadangan saat terjadi kegagalan.
✔ Compatibility Testing – Menguji kompatibilitas dengan berbagai perangkat, OS, atau browser.
✔ Usability Testing – Menilai kemudahan penggunaan oleh pengguna akhir.
✔ Stress Testing – Menguji batas maksimal sistem sebelum mengalami kegagalan.
✔ Maintainability Testing – Menguji seberapa mudah sistem bisa diperbaiki dan diperbarui.
✔ Scalability Testing – Mengukur sejauh mana sistem bisa menangani peningkatan jumlah pengguna.
✔ Volume Testing – Menguji performa saat menangani data dalam jumlah besar.
✔ Security Testing – Menguji ketahanan sistem terhadap ancaman keamanan.
✔ Disaster Recovery Testing – Menguji kesiapan sistem dalam menghadapi bencana atau kegagalan besar.
✔ Compliance Testing – Memeriksa apakah sistem memenuhi standar atau regulasi industri.
✔ Portability Testing – Menguji kemudahan sistem dalam berpindah antar lingkungan.
✔ Efficiency Testing – Mengukur penggunaan sumber daya sistem.
✔ Reliability Testing – Menguji keandalan sistem dalam jangka waktu lama.
✔ Baseline Testing – Membandingkan performa sistem sebelum dan sesudah perubahan.
✔ Endurance Testing – Menguji stabilitas sistem dalam jangka waktu lama.
✔ Documentation Testing – Mengevaluasi kelengkapan dokumentasi sistem.
✔ Recovery Testing – Menguji kecepatan pemulihan sistem setelah kegagalan.
✔ Internationalization Testing – Menguji apakah sistem mendukung berbagai bahasa dan budaya.
Berikut adalah contoh tabel Test Cases untuk Non-Functional Testing:
No | Test Case Scenario | Testing Type | Description | Expected Result | Tools Used |
---|---|---|---|---|---|
1 | Respons waktu aplikasi di bawah beban normal | Performance Testing | Mengukur waktu respons aplikasi saat 500 pengguna aktif mengakses halaman utama. | Waktu respons ≤ 2 detik, tanpa error. | JMeter, LoadRunner |
2 | Aplikasi di bawah beban puncak | Load Testing | Simulasi 1000 pengguna mengakses fitur checkout bersamaan. | CPU & memory usage ≤ 80%, waktu respons ≤ 4 detik, error rate < 1%. | Gatling, Apache Bench |
3 | Sistem saat melebihi kapasitas maksimum | Stress Testing | Memaksa aplikasi dengan 2000 pengguna melebihi batas server. | Sistem tetap stabil atau melakukan graceful degradation (tidak crash total). | BlazeMeter, StressNG |
4 | Keamanan dari serangan SQL Injection | Security Testing | Uji input field login dengan kode SQL malicious. | Sistem memblokir input berbahaya dan menampilkan pesan error umum. | OWASP ZAP, Burp Suite |
5 | Kemudahan penggunaan antarmuka | Usability Testing | Evaluasi user experience melalui 50 partisipan. | ≥90% partisipan menyelesaikan tugas dalam ≤3 menit tanpa bantuan. | SurveyMonkey, Hotjar |
6 | Kompatibilitas di browser berbeda | Compatibility Testing | Uji tampilan dan fungsi di Chrome, Firefox, Safari, dan Edge. | Konsistensi tampilan & fungsi di semua browser (deviasi < 5%). | Selenium, BrowserStack |
7 | Sistem berjalan terus-menerus selama 48 jam | Reliability Testing | Monitor performa aplikasi tanpa restart dengan beban normal. | Tidak ada crash, memory leak, atau downtime. Error rate < 0.5%. | Prometheus, New Relic |
8 | Penambahan server saat traffic meningkat | Scalability Testing | Tambahkan node server saat traffic naik 200%. | Sistem otomatis menambah sumber daya, waktu respons tetap stabil (±10%). | Kubernetes, AWS Auto Scaling |
9 | Perbaikan bug dalam waktu 2 jam | Maintainability Testing | Modifikasi kode untuk memperbaiki bug kritis. | Tim developer menyelesaikan perbaikan dalam ≤2 jam dengan downtime minimal. | JIRA, Git |
10 | Pemulihan data setelah crash database | Recovery Testing | Simulasikan crash database dan pulihkan dari backup. | Data terpulihkan 100% dalam ≤1 jam, aplikasi kembali normal. | Veeam, AWS Backup |
11 | Kepatuhan terhadap GDPR | Compliance Testing | Audit sistem untuk memastikan kepatuhan privasi data. | Semua data pribadi dienkripsi, hak akses terbatas, dan audit trail tercatat. | GDPR Checklist, Qualys |
Kesimpulan
Non-Functional Testing sangat penting dalam pengujian perangkat lunak karena memastikan bahwa sistem tidak hanya bekerja secara fungsional, tetapi juga siap digunakan dalam kondisi nyata. Pengujian ini membantu meningkatkan keandalan, keamanan, dan pengalaman pengguna, sehingga mengurangi risiko kegagalan saat produk sudah dirilis.