Ada overhead yang terkait dengan integrasi berkelanjutan, misalnya, pengaturan, pelatihan ulang, kegiatan penyadaran, penghentian untuk memperbaiki "bug" yang ternyata merupakan masalah data, pemisahan gaya gaya pemrograman yang dipaksakan, dll.
Pada titik apa integrasi berkesinambungan membayar untuk dirinya sendiri?
EDIT: Ini adalah temuan saya
Set-up adalah CruiseControl.Net dengan Nant, membaca dari VSS atau TFS.
Berikut adalah beberapa alasan untuk kegagalan, yang tidak ada hubungannya dengan pengaturan:
Biaya investigasi : Waktu yang dihabiskan untuk menyelidiki apakah lampu merah disebabkan oleh inkonsistensi logis asli dalam kode, kualitas data, atau sumber lain seperti masalah infrastruktur (misalnya, masalah jaringan, pembacaan batas waktu dari kontrol sumber, server pihak ketiga sedang down, dll, dll.)
Biaya politik atas infrastruktur : Saya mempertimbangkan melakukan pemeriksaan "infrastruktur" untuk setiap metode dalam uji coba. Saya tidak punya solusi untuk batas waktu kecuali untuk mengganti membangun server. Pita merah menghalangi dan tidak ada penggantian server.
Biaya perbaikan unit tes : Lampu merah karena masalah kualitas data bisa menjadi indikator dari tes unit yang ditulis dengan buruk. Jadi, tes unit dependen data ditulis ulang untuk mengurangi kemungkinan lampu merah karena data yang buruk. Dalam banyak kasus, data yang diperlukan dimasukkan ke dalam lingkungan pengujian untuk dapat menjalankan tes unitnya secara akurat. Masuk akal untuk mengatakan bahwa dengan membuat data lebih kuat maka tes menjadi lebih kuat jika tergantung pada data ini. Tentu saja, ini berhasil!
Biaya pertanggungan, yaitu, menulis tes unit untuk kode yang sudah ada : Ada masalah cakupan tes unit. Ada ribuan metode yang tidak memiliki tes unit. Jadi, dibutuhkan jumlah hari kerja yang cukup besar untuk menciptakannya. Karena ini akan terlalu sulit untuk menyediakan kasus bisnis, diputuskan bahwa unit test akan digunakan untuk metode publik baru yang akan datang. Mereka yang tidak memiliki unit test disebut 'berpotensi infra merah'. Titik intesting di sini adalah bahwa metode statis adalah titik diperdebatkan dalam bagaimana mungkin untuk secara unik menentukan bagaimana metode statis tertentu gagal.
Biaya rilis yang dipesan lebih dahulu : Skrip Nant hanya sejauh ini. Mereka tidak berguna untuk, katakanlah, CMS dependen build untuk EPiServer, CMS, atau penyebaran database berorientasi UI.
Ini adalah jenis masalah yang terjadi pada server build untuk menjalankan pengujian per jam dan build QA semalam. Saya terhibur bahwa ini tidak perlu sebagai master bangunan dapat melakukan tugas-tugas ini secara manual pada saat rilis, khususnya, dengan band satu orang dan sebuah bangunan kecil. Jadi, langkah tunggal membangun belum membenarkan penggunaan CI dalam pengalaman saya. Bagaimana dengan multistep build yang lebih kompleks? Ini bisa menjadi rasa sakit untuk dibangun, terutama tanpa naskah Nant. Jadi, bahkan setelah membuat satu, ini tidak lebih berhasil. Biaya memperbaiki masalah lampu merah melebihi manfaatnya. Akhirnya, pengembang kehilangan minat dan mempertanyakan validitas lampu merah.
Setelah mencobanya dengan adil, saya percaya bahwa CI itu mahal dan ada banyak pekerjaan yang harus dilakukan alih-alih menyelesaikan pekerjaan. Ini lebih hemat biaya untuk mempekerjakan pengembang berpengalaman yang tidak membuat kekacauan proyek besar daripada memperkenalkan dan memelihara sistem alarm.
Ini adalah kasusnya bahkan jika para pengembang pergi. Tidak masalah jika pengembang yang baik pergi karena proses yang dia ikuti akan memastikan bahwa dia menulis spesifikasi kebutuhan, spesifikasi desain, menempel pada pedoman pengkodean, dan mengomentari kodenya sehingga dapat dibaca. Semua ini ditinjau. Jika ini tidak terjadi maka pemimpin timnya tidak melakukan pekerjaannya, yang harus diambil oleh manajernya dan seterusnya.
Agar CI bekerja, tidak cukup hanya menulis unit test, berupaya mempertahankan cakupan penuh, dan memastikan infrastruktur yang berfungsi untuk sistem yang cukup besar.
Intinya: Orang mungkin mempertanyakan apakah memperbaiki bug sebelum rilis bahkan diinginkan dari perspektif bisnis. CI melibatkan banyak pekerjaan untuk menangkap beberapa bug yang dapat diidentifikasi pelanggan dalam UAT atau perusahaan dapat dibayar untuk memperbaiki sebagai bagian dari perjanjian layanan klien ketika masa garansi berakhir.