Apa itu System Testing?
System testing, juga dikenal dengan istilah system-level testing atau system integration testing, adalah proses pengujian di mana tim quality assurance (QA) mengevaluasi bagaimana berbagai komponen aplikasi berinteraksi satu sama lain dalam sistem atau aplikasi yang sudah terintegrasi penuh.
System testing bertujuan untuk memverifikasi apakah aplikasi dapat menjalankan tugas-tugasnya sesuai dengan yang direncanakan. Ini adalah jenis pengujian black box testing yang berfokus pada fungsionalitas aplikasi, bukan pada cara kerja internal sistem, yang menjadi perhatian white box testing.
Contoh system testing adalah memastikan bahwa setiap jenis input pengguna menghasilkan output yang diinginkan di seluruh aplikasi. System testing merupakan level ketiga dalam proses pengembangan perangkat lunak, biasanya dilakukan sebelum acceptance testing dan setelah integration testing.
Pentingnya System Testing
System testing sangat penting untuk sistem yang saling terhubung, karena adanya cacat dalam sistem atau perangkat lunak dapat menyebabkan komplikasi yang besar bagi konsumen. Sebagai contoh, pada tahun 2014, Nissan harus menarik lebih dari 1 juta mobil akibat cacat pada sensor detektor airbag.
Melalui system testing, tim QA dapat memastikan bahwa setiap test case sesuai dengan persyaratan aplikasi yang paling penting dan user stories yang telah ditetapkan.
Berikut adalah manfaat utama dari system testing:
- Memperbaiki kualitas produk. Proses system testing yang komprehensif akan meningkatkan kualitas produk. Karena sistem yang terintegrasi diuji melalui berbagai set tes dalam siklus pengembangan produk, ini memberikan gambaran apakah produk dapat berjalan dengan baik di berbagai platform dan lingkungan.
- Pengurangan kesalahan. Beberapa kesalahan pasti terjadi selama pengembangan sistem yang kompleks. System testing memverifikasi kode dan fungsionalitas sistem sesuai dengan persyaratannya, sehingga kesalahan yang tidak terdeteksi selama integration testing dan unit testing dapat ditemukan pada tahap system testing.
- Penghematan biaya. Memperbaiki cacat sistem yang terdeteksi di tahap akhir siklus proyek bisa memakan waktu lebih lama. Melakukan system testing secara tepat waktu dan terus-menerus tidak hanya mengurangi biaya yang tak terduga dan penundaan proyek, tetapi juga memberi pengelola proyek kontrol yang lebih baik terhadap anggaran.
- Keamanan. Produk yang sudah diuji dengan baik lebih dapat diandalkan. Uji system testing memastikan bahwa sistem yang diuji tidak mengandung potensi kerentanannya yang bisa membahayakan data dan pengguna dari ancaman potensial.
- Kepuasan pelanggan. System testing memberikan gambaran stabilitas produk di setiap tahap pengembangan. Ini membangun kepercayaan pelanggan dan meningkatkan pengalaman pengguna secara keseluruhan.
- Pemeliharaan kode lebih mudah. System testing dapat mengidentifikasi masalah kode selama pengembangan perangkat lunak. Memperbaiki kode yang sudah masuk ke lingkungan produksi lebih sulit dibandingkan memodifikasinya selama proses pengembangan.
- Performa perangkat lunak. Uji berbasis performa dapat membantu memahami perubahan dalam kinerja dan perilaku sistem, seperti konsumsi memori, pemanfaatan CPU, dan latensi. Tes ini memberi peringatan jika kinerja sistem menurun signifikan, memungkinkan pengembang untuk mengambil tindakan proaktif.
Jenis-jenis System Testing
Dalam system testing, tim QA mengevaluasi apakah aplikasi memenuhi semua persyaratan teknis, bisnis, dan fungsional. Untuk mencapai ini, tim QA menggunakan berbagai teknik pengujian perangkat lunak yang menentukan cakupan pengujian keseluruhan aplikasi dan membantu menemukan cacat kritis yang menghambat fungsionalitas utama aplikasi sebelum dirilis.
Berikut adalah beberapa jenis teknik system testing yang umum:
- Performance testing. Performance testing mengukur kecepatan, waktu muat rata-rata, stabilitas, keandalan, dan waktu respon puncak sistem di berbagai kondisi. Ini biasanya dilakukan bersamaan dengan stress testing dan dapat melibatkan alat pengujian perangkat keras dan perangkat lunak.
- Usability testing. Ini adalah pengujian untuk mengevaluasi apakah suatu sistem mudah digunakan dan fungsional untuk pengguna akhir. Metode yang digunakan termasuk tingkat kesalahan pengguna, tingkat keberhasilan tugas, waktu yang diperlukan untuk menyelesaikan tugas, dan kepuasan pengguna.
- Load testing. Pengujian ini bertujuan untuk mengetahui bagaimana kinerja sistem atau perangkat lunak saat menerima beban ekstrem dalam skenario nyata dan skenario uji. Metrik seperti throughput, jumlah pengguna, dan latensi diukur selama pengujian ini.
- Regression testing. Juga dikenal dengan istilah sanity testing, bertujuan untuk memastikan bahwa semua perubahan yang diperkenalkan ke aplikasi atau kode selama system testing atau pembaruan kode terbaru tidak menyebabkan bug atau masalah baru. Regression testing bertanggung jawab untuk memeriksa fungsionalitas fitur-fitur yang ada pada sistem atau perangkat lunak.
- Migration testing. Pengujian ini dilakukan untuk memastikan migrasi sistem legacy ke sistem baru berjalan dengan lancar tanpa gangguan, kehilangan data, atau downtime.
- Scalability testing. Ini mengukur kemampuan aplikasi atau sistem untuk mengatasi peningkatan atau penurunan skala untuk memenuhi kebutuhan pengguna yang berubah.
- Functionality testing. Pengujian ini dilakukan untuk memvalidasi fungsionalitas sistem terhadap persyaratan fungsional dan bisnisnya.
- Recovery testing. Pengujian ini adalah jenis pengujian non-fungsional yang memastikan bahwa sistem dapat pulih dari kesalahan, kerusakan, atau kegagalan tertentu.
Fase-fase dalam System Testing
System testing memeriksa setiap komponen dari aplikasi untuk memastikan semuanya bekerja sebagai satu kesatuan yang utuh. Tim QA biasanya melakukan system testing setelah memeriksa setiap modul dengan pengujian fungsional atau user story dan kemudian setiap komponen melalui integration testing.
Jika build perangkat lunak mencapai hasil yang diinginkan dalam system testing, maka akan dilakukan pemeriksaan akhir melalui acceptance testing sebelum perangkat lunak masuk ke produksi dan digunakan oleh pengguna. Tim pengembang aplikasi mencatat semua cacat dan menentukan jenis serta jumlah cacat yang dapat diterima.
System testing biasanya melalui beberapa tahap berikut:
- Test environment. Pada tahap awal ini, server pengujian disiapkan untuk membuat lingkungan pengujian yang memungkinkan penguji menjalankan serangkaian test case dan skrip pengujian yang sudah ditentukan sebelumnya.
- Test case. Tahap ini menghasilkan test case untuk proses pengujian.
- Test data. Pada tahap ini, data yang akan diuji dibuat.
- Test case execution. Setelah test case dan test data dibuat, test case dijalankan.
- Reporting of defects. Pada tahap ini, cacat dalam sistem diidentifikasi.
- Regression testing. Ini dilakukan untuk melihat apakah ada masalah baru yang muncul akibat proses tahap sebelumnya.
- Defect logging. Semua cacat yang teridentifikasi diperbaiki pada tahap ini.
- Retest. Pengujian diulang jika pengujian sebelumnya tidak berhasil.
Alat untuk System Testing
Berbagai alat komersial dan Open Source membantu tim QA untuk melakukan dan meninjau hasil system testing. Alat-alat ini dapat membuat, mengelola, dan mengotomatiskan tes atau test case, dan sering kali juga menawarkan fitur tambahan di luar system testing, seperti manajemen persyaratan.
Beberapa alat system testing komersial termasuk Squish dari Froglogic dan SpiraTest dari Inflectra, sedangkan alat open source mencakup Robotium dan SoapUI dari SmartBear.
Namun, tidak semua penguji perangkat lunak memiliki akses ke semua sumber daya pengujian yang tersedia. Misalnya, seorang penguji yang bekerja di perusahaan besar kemungkinan memiliki akses ke pengujian otomatis yang mahal, yang mungkin tidak tersedia di organisasi yang lebih kecil.