Tahap pengujian dalam integrasi berkelanjutan dan pengiriman berkelanjutan
Ketiga tim CI/CD harus menggabungkan pengujian ke dalam siklus hidup pengembangan perangkat lunak di berbagai tahap alur CI/CD. Secara keseluruhan, pengujian harus dimulai sedini mungkin. Piramida pengujian berikut merupakan konsep yang disampaikan oleh Mike Cohn dalam Succeeding with Agile. Piramida ini menunjukkan berbagai pengujian perangkat lunak berdasarkan biaya dan kecepatannya.
Piramida pengujian CI/CD
Pengujian unit berada di bagian bawah piramida. Pengujian tersebut merupakan yang paling cepat dijalankan dan yang paling murah. Oleh karena itu, pengujian unit harus menjadi bagian terbesar dari strategi pengujian Anda. Baiknya adalah sekitar 70 persen. Pengujian unit harus memiliki cakupan kode yang hampir lengkap karena bug yang teridentifikasi fase ini dapat diperbaiki dengan cepat dan murah.
Pengujian layanan, komponen, dan integrasi dalam piramida berada di atas pengujian unit. Pengujian ini memerlukan lingkungan yang terperinci, sehingga keperluan infrastrukturnya lebih mahal dan lebih lambat untuk dijalankan. Pengujian performa dan kepatuhan berada pada tingkat di atasnya. Pengujian ini memerlukan lingkungan berkualitas produksi dan lebih mahal lagi. Pengujian UI dan penerimaan pengguna berada di bagian puncak piramida dan juga memerlukan lingkungan berkualitas produksi.
Semua pengujian ini adalah bagian dari strategi lengkap untuk menjamin kualitas perangkat lunak. Namun, demi kecepatan pengembangan, fokusnya adalah pada jumlah pengujian dan cakupan di separuh bagian bahwa piramida.
Bagian berikut membahas tahapan CI/CD.
Menyiapkan sumber
Di awal proyek, penting untuk menyiapkan sumber untuk tempat menyimpan kode mentah serta perubahan konfigurasi dan skema. Di tahap sumber, pilih repositori kode sumber seperti yang di-host di GitHub atau AWS CodeCommit.
Menyiapkan dan menjalankan pembangunan
Otomatisasi pembangunan sangat penting untuk proses CI. Saat menyiapkan otomatisasi pembangunan, tugas pertama adalah memilih alat pembangunan yang tepat. Ada banyak alat pembangunan, di antaranya:
-
Ant, Maven, dan Gradle untuk Java
-
Make untuk C/C++
-
Grunt untuk JavaScript
-
Rake untuk Ruby
Alat pembangunan terbaik akan bergantung pada bahasa pemrograman proyek dan set keterampilan tim Anda. Setelah memilih alat pembangunan, semua dependensi harus ditentukan dengan jelas dalam skrip pembangunan, bersama dengan langkah pembangunan. Cara ini juga merupakan praktik terbaik untuk membuat versi artefak pembangunan akhir, sehingga lebih mudah di-deploy dan mengetahui masalah yang ada.
Membangun
Di tahap pembangunan, alat pembangunan akan menjadikan setiap perubahan ke repositori kode sumber sebagai input, membangun perangkat lunak, dan menjalankan jenis pengujian berikut:
Pengujian Unit – Menguji bagian kode tertentu untuk memastikan kode berfungsi sebagaimana mestinya. Pengujian unit dilakukan oleh developer perangkat lunak selama tahap pengembangan. Di tahap ini, analisis kode statis, analisis aliran data, cakupan kode, dan proses verifikasi perangkat lunak lainnya dapat diterapkan.
Analisis Kode Statis – Pengujian ini dilakukan tanpa benar-benar mengeksekusi aplikasi setelah pembangunan dan pengujian unit. Analisis ini dapat membantu menemukan kesalahan pengodean dan celah keamanan, serta mampu memastikan kesesuaian dengan pedoman pengodean.
Penahapan
Di fase penahapan, lingkungan penuh dibuat dan mirip dengan lingkungan produksi sebenarnya. Pengujian yang dilakukan:
Pengujian integrasi – Memverifikasi antarmuka antarkomponen terhadap desain perangkat lunak. Pengujian integrasi merupakan proses berulang serta memfasilitasi pembangunan antarmuka dan integritas sistem yang tangguh.
Pengujian komponen – Menguji pesan yang muncul di antara berbagai komponen dan hasilnya. Tujuan utama dari pengujian ini adalah idempotensi dalam pengujian komponen. Pengujian bisa mencakup data dalam volume yang sangat besar, atau situasi edge dan input abnormal.
Pengujian sistem – Menguji sistem end-to-end dan memverifikasi apakah perangkat lunak memenuhi persyaratan bisnis. Pengujian ini bisa mencakup pengujian antarmuka pengguna (UI), API, logika backend, dan status akhir.
Pengujian performa – Menentukan kemampuan respons dan stabilitas sistem saat dijalankan pada beban kerja tertentu. Pengujian performa juga digunakan untuk menyelidiki, mengukur, memvalidasi, atau memverifikasi atribut kualitas sistem lainnya, seperti skalabilitas, keandalan, dan penggunaan sumber daya. Jenis pengujian performa bisa mencakup uji beban, uji tekanan, dan uji lonjakan. Pengujian performa digunakan untuk pembandingan terhadap kriteria yang telah ditetapkan.
Pengujian kepatuhan – Memeriksa apakah perubahan kode sesuai dengan persyaratan spesifikasi dan/atau peraturan nonfungsional. Pengujian ini menentukan apakah Anda mengimplementasikan dan memenuhi standar yang ditetapkan.
Pengujian penerimaan pengguna – Memvalidasi alur bisnis end-to-end. Pengujian ini dilakukan oleh pengguna akhir dalam lingkungan penahapan dan mengonfirmasi apakah sistem sudah memenuhi spesifikasi persyaratan. Biasanya, di tahap ini pelanggan menerapkan metode pengujian alfa dan beta.
Produksi
Setelah melewati pengujian sebelumnya, fase penahapan diulang di lingkungan produksi. Di fase ini, Pengujian canary akhir dapat diselesaikan dengan men-deploy kode baru pada sebuah subset server kecil atau bahkan satu server, atau satu Wilayah AWS sebelum men-deploy kode ke seluruh lingkungan produksi. Informasi terkait cara men-deploy ke produksi dengan aman tercantum di bagian Metode deployment.
Bagian berikutnya membahas pembangunan alur untuk menggabungkan tahapan dan pengujian ini.