Integration Hell……….
Masalah integrasi selalu jadi problem. Menggabungkan hasil pekerjaan para developer pada saat akhir selalu menjadi permasalahan. Developer mengerjakan masing2 pekerjaannya di lingkungannya sendiri. Masing2 hidup dalam isolasi. Ketika akan di integrasikan timbul masalah2 yg muncul. Tidak semua service dapat dijalankan, database yg tidak di update (local update). That’s work ini my pc but not yours. Loh kemaren kan bisa skarang kok gak lagi. Atau malah saling menyalahkan satu sama lain. Hal itu sering terjadi. Malah sudah jadi tradisi.
Continous Integration menyelesaikan penyakit2 tersebut. Hal tersebut tidak tergantung tools tetapi lebih kepada disiplin. Buku Continuous Integration: Improving Software Quality and Reducing Risk (Addison-Wesley 2007) menjelaskan bagaimana mengintegrasikan pekerjaan dengan automatis. Web site dari buku tersebut ada di Integrate Button. Silahkan di explore.
Automatisasi build merupakan hal yang sangat2 penting. Kita tidak boleh hanya bergantung kepada IDE saja. Tetapi proses build tersebut harus dapat kita kendalikan.
Integrasi tidak hanya dilakukan pada level source code saja tetapi juga pada level database dan resource2 lain seperti configurasi. Semua developer harus mendapatkan update yang sama. Sehingga tidak ada permasalahan di akhir.
Sudah tentu peranan unit test dan integration test menjadi sangat penting. Merupakan jantung Continous Integration. Kita tidak perlu takut dalam melakukan perubahan atau refactoring karena ada unit test yang akan memberitahukan apakah kita berada dalam jalan yang benar atau tidak.
Penyakit lain yang muncul pada developer2 adalah seringkali terjadi error pada saat checkout dari SVN. Hal tersebut disebabkan oleh hal2 yang sepele. Seperti partial commit (commit yg tidak lengkap) atau bahkan yang paling extreme adalah mengkomit file yang error ke server. Sehingga produktifitas dari developer berkurang hanya karena mencari penyebab error tersebut. Efek lain adalah developer menjadi takut untuk mengupdate dari SVN server karena takut terjadi error sehingga mengakibatkan integration hell di akhir.
Team City menyediakan fitur yang sangat bagus yaitu pre-commit testing. Sehingga jika test gagal maka file tidak akan jadi di commit ke server. Great…. Nice feature. Sehingga developer akan aman mengupdate dari SVN. Tidak ada pertikaan lagi. Perdamaian telah tercipta
Tetapi untuk mencapai perdamaian yang disebutkan tadi perlu usaha dalam menerapkan disiplin tersebut kepada masing2 developer. Perlu juga adanya konvensi sehingga tidak terjadi perbedaan style pada development. Ada tempat dimana perbedaan itu bagus. Tetapi tidak di semua bidang.