Pengujian Beban - 10 Saran untuk Meningkatkan Kinerja
Orang sering menyamakan pengujian beban dengan pengujian kinerja. Pengujian beban dipandang sebagai cara menjawab pertanyaan "Seberapa cepat sistem merespons?" Pandangan ini kemudian cenderung berarti bahwa pengujian beban dipandang sebagai akhir dari kegiatan proyek. Hanya pada akhir pengembangan kita akan memiliki implementasi akhir untuk pengujian kinerja dan oleh karena itu kita hanya dapat mengonfirmasi bahwa kinerjanya cukup cepat di dunia nyata dan transisi dengan lancar ke layanan langsung.
Pendekatan yang salah! Ini sangat berisiko dan melewatkan banyak manfaat dari memulai pengujian beban lebih awal dan menerapkannya di seluruh proyek. Dengan pendekatan ini apakah sistem berlayar melalui pengujian beban dan transisi dengan lancar ke layanan? Sesekali ya. Tetapi lebih sering sistem mulai gagal ketika beban mulai diterapkan, bahkan dengan sedikit peningkatan volume .. Untuk pertama kalinya ada tuntutan bersamaan pada sistem dan arbitrase atas sumber daya diperlukan. Jalan melalui kode yang tidak pernah dieksekusi dipicu, muncul situasi yang tidak ada yang benar-benar memikirkan. Transaksi gagal. Sistem crash. Setelah masalah ini diperbaiki dan lebih banyak beban diterapkan dalam tes, kami kemudian menghadapi masalah seperti kelelahan sumber daya, buffer overflows, timeout, dan perilaku yang tidak konsisten.
Banyak contoh produk yang gagal saat pengujian beban dimulai dan, setelah banyak upaya, stres dan pengeluaran, telah ditangguhkan. Lebih buruk lagi adalah mereka yang melewatkan pengujian beban sama sekali dan gagal secara dramatis selama operasi langsung. Pengembang portal internet baru-baru ini menghentikan pengembangan layanan baru, yang telah menyelesaikan pengembangan fungsional, ketika pengujian beban mengungkapkan masalah struktural mendasar dan pengkodean yang tidak efisien yang menyebabkan sistem berkinerja buruk dan tidak stabil.
Jadi apa yang harus Anda lakukan untuk menghindari risiko ini? Kita semua tahu lebih baik untuk menemukan kesalahan lebih awal ketika biayanya jauh lebih murah untuk diperbaiki namun pengujian beban masih dibiarkan hingga selambat mungkin. Jenis kesalahan yang ditemukan sering membutuhkan perubahan arsitektur dan penulisan ulang besar yang pada saat itu sangat mahal untuk diimplementasikan. Jawabannya adalah Anda harus mulai lebih awal. Berbagai bentuk pengujian beban harus diterapkan berulang kali di seluruh proyek untuk mengidentifikasi masalah sejak awal dan untuk memastikan bahwa sistem tidak keluar jalur.
Ini adalah perpanjangan alami dari praktik pengembangan yang dipimpin tes. Pengembangan yang dipimpin tes, di mana tes otomatis ditulis terlebih dahulu dan kode harus lulus tes ini saat dikembangkan, menawarkan manfaat besar. Namun, dalam bentuknya saat ini, fokus pengujian ini adalah pada fungsionalitas. Seiring berevolusi status fungsional perangkat lunak selalu dikenal dan karenanya dapat dikelola, kesalahan fungsional dihambat sejak awal menghindari perbaikan biaya tinggi, risiko fungsional sangat berkurang. Tidak demikian risikonya. Jika suatu proyek melakukan pengujian beban awal dan terus menerus, proyek itu akan mendapatkan pengurangan risiko yang jauh lebih luas dan komprehensif. Untuk menjadikan ini efektif:
1. Pelajari sistem dan lakukan analisis risiko untuk membantu memesan ancaman terhadap sistem, ini akan membantu Anda memprioritaskan kegiatan pengujian beban.
2. Kumpulkan data untuk memungkinkan perbandingan efisiensi bangunan yang berbeda. Ini memungkinkan pemantauan tren jangka panjang, "Apakah sistem menggunakan lebih banyak waktu prosesor untuk melakukan pekerjaan yang sama?" Data ini dapat digunakan untuk memprediksi kebutuhan sumber daya pada berbagai tingkat permintaan dan mendukung prediksi skalabilitas.
3. Jalankan tes yang bertujuan untuk menilai perilaku sistem dan untuk memicu kesalahan saat memuat. Gunakan beban kerja yang mensimulasikan pola permintaan yang diharapkan untuk mengamati perilaku agregat sistem. Gunakan beban kerja ekstrem yang ditargetkan khusus untuk menyelidiki kerentanan sistem.
4. Masukkan spektrum penuh uji beban ke dalam rangkaian uji. Ini berarti pengujian kinerja dengan beban kerja khusus dan periode sibuk; stress testing untuk memeriksa baik lonjakan permintaan atipikal dan dampak kelelahan sumber daya; pengujian daya tahan yang menggunakan periode operasi dan uji operasi kumulatif; pengujian reliabilitas yang menjalankan banyak transaksi dan kemudian memeriksa apakah transaksi sesekali gagal; pengujian konkurensi dari dua pengguna yang bekerja pada akun yang sama pada saat yang sama.
5. Merancang kegiatan pengukuran seperti ilmuwan akan merancang eksperimen, merancang mereka untuk menyediakan data yang dapat dianalisis. Contoh sistem di bawah beban kerja kondisi mapan yang berbeda untuk menyediakan beberapa set data untuk mendukung interpolasi. Memilih beban kerja untuk memungkinkan estimasi biaya sumber daya untuk setiap jenis transaksi.
6. Targetkan middleware terlebih dahulu dengan aktivitas generik dan kembangkan suite saat fungsionalitas dikembangkan. Mulai awal dan kemudian uji setiap rilis tambahan sistem, pertama dengan suite sebelumnya dan kemudian dengan suite yang dimodifikasi yang membahas fungsi baru.
7. Investasikan waktu dan sumber daya untuk bekerja pada skala yang representatif. Mungkin test bed tidak bisa skala penuh tetapi seharusnya tidak dua kali lipat lebih kecil dari sistem yang dimaksudkan. Jadilah cerdas dan inovatif untuk menggunakan sumber daya secara efektif untuk menyediakan tempat uji skala yang sesuai. Biaya yang akan dikeluarkan jika hal ini tidak dilakukan akan jauh melebihi biaya penyediaan test bed.
8. Jangan menunda; uji kenaikan sesegera mungkin. Jangan lewatkan satu atau Anda akan melewatkan semuanya. Bandingkan pengukuran dan perilaku dengan yang sebelumnya, apakah lebih baik atau lebih buruk?
9. Berikan beban latar belakang untuk pengujian fungsional. Fitur yang berfungsi offload mungkin gagal ketika sistem memiliki hal-hal lain untuk dipikirkan.
10. Pertimbangkan kejadian sesekali seperti kegagalan server dan konfigurasi ulang sistem. Apakah ini perlu diuji di bawah beban?
Sebagai kesimpulan, Anda perlu memasukkan pengujian beban selama proses pengembangan. Meninggalkan pengujian muatan hingga final run in to live service adalah resep bencana. Jika ini menjadi praktik umum maka lebih banyak aplikasi dan sistem yang berfungsi akan dikirimkan tepat waktu dan sesuai anggaran.
Pendekatan yang salah! Ini sangat berisiko dan melewatkan banyak manfaat dari memulai pengujian beban lebih awal dan menerapkannya di seluruh proyek. Dengan pendekatan ini apakah sistem berlayar melalui pengujian beban dan transisi dengan lancar ke layanan? Sesekali ya. Tetapi lebih sering sistem mulai gagal ketika beban mulai diterapkan, bahkan dengan sedikit peningkatan volume .. Untuk pertama kalinya ada tuntutan bersamaan pada sistem dan arbitrase atas sumber daya diperlukan. Jalan melalui kode yang tidak pernah dieksekusi dipicu, muncul situasi yang tidak ada yang benar-benar memikirkan. Transaksi gagal. Sistem crash. Setelah masalah ini diperbaiki dan lebih banyak beban diterapkan dalam tes, kami kemudian menghadapi masalah seperti kelelahan sumber daya, buffer overflows, timeout, dan perilaku yang tidak konsisten.
Banyak contoh produk yang gagal saat pengujian beban dimulai dan, setelah banyak upaya, stres dan pengeluaran, telah ditangguhkan. Lebih buruk lagi adalah mereka yang melewatkan pengujian beban sama sekali dan gagal secara dramatis selama operasi langsung. Pengembang portal internet baru-baru ini menghentikan pengembangan layanan baru, yang telah menyelesaikan pengembangan fungsional, ketika pengujian beban mengungkapkan masalah struktural mendasar dan pengkodean yang tidak efisien yang menyebabkan sistem berkinerja buruk dan tidak stabil.
Jadi apa yang harus Anda lakukan untuk menghindari risiko ini? Kita semua tahu lebih baik untuk menemukan kesalahan lebih awal ketika biayanya jauh lebih murah untuk diperbaiki namun pengujian beban masih dibiarkan hingga selambat mungkin. Jenis kesalahan yang ditemukan sering membutuhkan perubahan arsitektur dan penulisan ulang besar yang pada saat itu sangat mahal untuk diimplementasikan. Jawabannya adalah Anda harus mulai lebih awal. Berbagai bentuk pengujian beban harus diterapkan berulang kali di seluruh proyek untuk mengidentifikasi masalah sejak awal dan untuk memastikan bahwa sistem tidak keluar jalur.
Ini adalah perpanjangan alami dari praktik pengembangan yang dipimpin tes. Pengembangan yang dipimpin tes, di mana tes otomatis ditulis terlebih dahulu dan kode harus lulus tes ini saat dikembangkan, menawarkan manfaat besar. Namun, dalam bentuknya saat ini, fokus pengujian ini adalah pada fungsionalitas. Seiring berevolusi status fungsional perangkat lunak selalu dikenal dan karenanya dapat dikelola, kesalahan fungsional dihambat sejak awal menghindari perbaikan biaya tinggi, risiko fungsional sangat berkurang. Tidak demikian risikonya. Jika suatu proyek melakukan pengujian beban awal dan terus menerus, proyek itu akan mendapatkan pengurangan risiko yang jauh lebih luas dan komprehensif. Untuk menjadikan ini efektif:
1. Pelajari sistem dan lakukan analisis risiko untuk membantu memesan ancaman terhadap sistem, ini akan membantu Anda memprioritaskan kegiatan pengujian beban.
2. Kumpulkan data untuk memungkinkan perbandingan efisiensi bangunan yang berbeda. Ini memungkinkan pemantauan tren jangka panjang, "Apakah sistem menggunakan lebih banyak waktu prosesor untuk melakukan pekerjaan yang sama?" Data ini dapat digunakan untuk memprediksi kebutuhan sumber daya pada berbagai tingkat permintaan dan mendukung prediksi skalabilitas.
3. Jalankan tes yang bertujuan untuk menilai perilaku sistem dan untuk memicu kesalahan saat memuat. Gunakan beban kerja yang mensimulasikan pola permintaan yang diharapkan untuk mengamati perilaku agregat sistem. Gunakan beban kerja ekstrem yang ditargetkan khusus untuk menyelidiki kerentanan sistem.
4. Masukkan spektrum penuh uji beban ke dalam rangkaian uji. Ini berarti pengujian kinerja dengan beban kerja khusus dan periode sibuk; stress testing untuk memeriksa baik lonjakan permintaan atipikal dan dampak kelelahan sumber daya; pengujian daya tahan yang menggunakan periode operasi dan uji operasi kumulatif; pengujian reliabilitas yang menjalankan banyak transaksi dan kemudian memeriksa apakah transaksi sesekali gagal; pengujian konkurensi dari dua pengguna yang bekerja pada akun yang sama pada saat yang sama.
5. Merancang kegiatan pengukuran seperti ilmuwan akan merancang eksperimen, merancang mereka untuk menyediakan data yang dapat dianalisis. Contoh sistem di bawah beban kerja kondisi mapan yang berbeda untuk menyediakan beberapa set data untuk mendukung interpolasi. Memilih beban kerja untuk memungkinkan estimasi biaya sumber daya untuk setiap jenis transaksi.
6. Targetkan middleware terlebih dahulu dengan aktivitas generik dan kembangkan suite saat fungsionalitas dikembangkan. Mulai awal dan kemudian uji setiap rilis tambahan sistem, pertama dengan suite sebelumnya dan kemudian dengan suite yang dimodifikasi yang membahas fungsi baru.
7. Investasikan waktu dan sumber daya untuk bekerja pada skala yang representatif. Mungkin test bed tidak bisa skala penuh tetapi seharusnya tidak dua kali lipat lebih kecil dari sistem yang dimaksudkan. Jadilah cerdas dan inovatif untuk menggunakan sumber daya secara efektif untuk menyediakan tempat uji skala yang sesuai. Biaya yang akan dikeluarkan jika hal ini tidak dilakukan akan jauh melebihi biaya penyediaan test bed.
8. Jangan menunda; uji kenaikan sesegera mungkin. Jangan lewatkan satu atau Anda akan melewatkan semuanya. Bandingkan pengukuran dan perilaku dengan yang sebelumnya, apakah lebih baik atau lebih buruk?
9. Berikan beban latar belakang untuk pengujian fungsional. Fitur yang berfungsi offload mungkin gagal ketika sistem memiliki hal-hal lain untuk dipikirkan.
10. Pertimbangkan kejadian sesekali seperti kegagalan server dan konfigurasi ulang sistem. Apakah ini perlu diuji di bawah beban?
Sebagai kesimpulan, Anda perlu memasukkan pengujian beban selama proses pengembangan. Meninggalkan pengujian muatan hingga final run in to live service adalah resep bencana. Jika ini menjadi praktik umum maka lebih banyak aplikasi dan sistem yang berfungsi akan dikirimkan tepat waktu dan sesuai anggaran.
Komentar
Posting Komentar