Apa itu Pengujian Ketahanan Perangkat Lunak (Software Resilience Testing)?
Pengujian ketahanan perangkat lunak (software resilience testing) adalah metode pengujian perangkat lunak yang berfokus pada memastikan bahwa aplikasi dapat bekerja dengan baik dalam kondisi nyata atau kacau. Dengan kata lain, pengujian ini menguji ketahanan aplikasi atau kemampuannya untuk bertahan terhadap faktor-faktor yang menekan atau menantang. Pengujian ketahanan merupakan bagian dari pengujian perangkat lunak non-fungsional, yang juga mencakup pengujian kepatuhan, daya tahan, beban, dan pemulihan. Bentuk pengujian ini terkadang juga disebut sebagai rekayasa ketahanan perangkat lunak (software resilience engineering), pengujian ketahanan aplikasi (application resilience testing), atau chaos engineering.
Karena kegagalan tidak dapat sepenuhnya dihindari, pengujian ketahanan memastikan bahwa perangkat lunak tetap dapat menjalankan fungsi inti dan menghindari kehilangan data bahkan saat berada di bawah tekanan. Mengingat waktu henti (downtime) dapat berdampak buruk bagi keberhasilan suatu organisasi, maka sangat penting untuk meminimalkan gangguan dan mempersiapkan diri menghadapi skenario yang tidak diinginkan. Pengujian ketahanan dapat dianggap sebagai salah satu bagian dari rencana kelangsungan bisnis (business continuity plan).
Cara Kerja Pengujian Ketahanan
Pengujian ketahanan merupakan bagian dari siklus hidup pengembangan perangkat lunak (software development lifecycle – SDLC) dan dimulai dengan memilih aplikasi yang akan diuji. Setelah aplikasi ditentukan, organisasi akan menyiapkan lingkungan uji untuk menjalankan pengujian ketahanan. Secara umum, beberapa langkah dalam melakukan pengujian ketahanan adalah sebagai berikut:
- Menentukan metrik. Pengembang harus memilih metrik yang akan diukur untuk mencerminkan kinerja perangkat lunak. Metrik ini dapat mencakup tingkat input dan output, throughput, waktu pemulihan, latensi, dan hubungan antara metrik-metrik tersebut.
- Mengidentifikasi baseline kinerja. Selanjutnya, perlu dikumpulkan data baseline mengenai beban maksimum yang dapat ditangani perangkat lunak tanpa mengalami masalah kinerja. Ini membantu membedakan variabilitas normal dalam kinerja dan dapat digunakan sebagai pembanding dalam pengujian.
- Memperkenalkan dan mengukur gangguan. Pada tahap ini, sistem sengaja mengalami gangguan untuk menguji ketahanannya. Penguji dapat mengganggu sistem dengan berbagai cara, seperti menghambat komunikasi dengan dependensi eksternal, menyuntikkan input berbahaya, memanipulasi kontrol lalu lintas, membatasi bandwidth, mematikan sistem yang terhubung, menghapus sumber data, atau menghabiskan sumber daya sistem. Setelah skenario pengujian selesai, metrik harus diukur dan dianalisis untuk memahami dampaknya terhadap kinerja.
- Menarik kesimpulan dan merespons hasil. Tim harus menganalisis hasil pengujian untuk menentukan cara memperbaiki perangkat lunak dan menilai praktik tim pengembang. Temuan ini juga dapat digunakan untuk meningkatkan skenario pengujian di masa mendatang.
Pentingnya Pengujian Ketahanan
Pengujian ketahanan membantu meminimalkan kegagalan dan masalah keamanan dalam menghadapi tantangan. Contoh tantangan yang dapat diatasi dengan pengujian ketahanan meliputi pemadaman listrik, kerusakan sistem, downtime, dan bencana alam. Selain itu, pengujian ketahanan dapat membantu mengevaluasi kepatuhan terhadap standar dan praktik terbaik, serta menangani masalah privasi dan skalabilitas.
Pengujian ketahanan sangat penting dalam infrastruktur multi-tier dan multi-lingkungan. Salah satu cara untuk meningkatkan ketahanan adalah dengan memigrasikan perangkat lunak ke cloud guna mengurangi risiko kegagalan sistem internal. Meskipun gangguan masih dapat terjadi di cloud, penyedia layanan umumnya memiliki sistem pemulihan yang canggih.
Perbedaan antara Keandalan dan Ketahanan
Dua istilah yang sering membingungkan dalam konteks perangkat lunak adalah keandalan (reliability) dan ketahanan (resilience). Ketahanan didefinisikan sebagai kemampuan untuk kembali ke kondisi ideal atau pulih dengan cepat setelah mengalami gangguan. Keandalan adalah target yang ingin dicapai oleh pengembang, yaitu sistem yang beroperasi dengan sempurna atau tanpa downtime. Dalam pengujian ketahanan, keandalan adalah hasil yang diharapkan. Ketahanan juga dikenal sebagai recoverability atau kemampuan untuk pulih.