Version Control Menggunakan TortoiseSVN

Kemampuan menggunakan version control merupakan hal yang masih langka ditemukan di kalangan programmer Indonesia. Tidak banyak buku, tutorial ataupun tempat pelatihan yang menyediakan bahan pembelajaran dalam bahasa indonesia. Bahkan di banyak perusahaan software consultant, version control ini masih jarang digunakan.

Padahal kemampuan menggunakan version control adalah kemampuan wajib yang harus dimiliki oleh tim programmer. Di seluruh dunia, ribuan programmer terlibat dalam pengembangan proyek opensouce, kolaborasi dalam skala raksasa seperti ini mustahil dilaksanakan tanpa adanya version control. Akan terjadi bencana dan kekacauan jika kode sumber hanya diletakkan di website, kemudian dibagi ke semua programmer. Jika dua orang programmer bekerja dalam file yang sama, mereka akan saling menimpa pekerjaan temannya, dan jika terjadi kesalahan maka tidak akan mungkin mengembalikan keadaan kode ke keadaan sebelumnya tanpa usaha yang cukup besar.

Version control dapat membantu sebuah tim pengembang perangkat lunak dengan menyediakan akses kepada setiap anggota tim tanpa harus saling menimpa pekerjaan anggota tim yang lain, seperti yang terjadi jika sebuah tim pengembang menggunakan sharing folder. Version control mampu :
  1. Mencatat perubahan code dan pembuat perubahan 
  2. Menyediakan fungsi undo untuk mengembalikan keadaan code ke titik tertentu 
  3. Melihat riwayat perubahan code, dari pertama dibuat hingga keadaan yang sekarang 
  4. Memungkinkan penulisan code secara paralel tanpa ada kejadian anggota tim menimpa pekerjaan anggota tim yang lain.
Jumlah maksimal programmer yang dapat bekerja sama tanpa menggunakan version control adalah satu orang (Endy, 2006). Jika dalam sebuah tim pengembang software terdapat sebuah tim programmer yang lebih dari satu, version control adalah tools yang wajib digunakan.

Penggunaan Version Control
Di bagian sebelumnya sudah dijelaskan apa itu version control, untuk lebih jelasnya bagaimana sekenario version control digunakan, simak cerita berikut :

A dan B terlibat proyek pengembangan sebuah aplikasi untuk menampilkan data berupa text dan gambar dari dalam database. Software ini dikembangkan atas permintaan sebuah stasiun televisi Oke Banged. A dan B berdomisili di tempat yang berbeda dan masing-masing mempunyai kesibukan yang tidak dapat ditinggalkan pada jam kerja. Sehingga mereka mempunyai waktu yang sangat terbatas untuk bertatap muka secara langsung.

B menginstal version control server dan membuat repository untuk program tersebut di rumahnya yang terhubung ke internet 24 jam sehari, 7 hari seminggu. Semua kode program yang dibutuhkan disimpan dalam repository dan dapat diakses oleh mereka berdua

Pengembangan aplikasi ini hanya membutuhkan waktu seminggu, karena ukuran aplikasinya yang tidak terlalu besar dan sederhana. Selama waktu tersebut keduanya silih berganti menambahkan kode ke dalam repository. Mengerjakan bagiannya masing-masing dan melakukan test terhadap setiap fungsi yang ditambahkan.

Setelah waktu yang ditentukan habis, B menginstal aplikasi di stasiun televisi Oke Banged. Semua kode program terbaru diambil dari repository dan dimasukkan ke dalam laptop untuk selanjutnya dibawa ke tempat presentasi. Setelah tiba di kantor stasiun televisi Oke Banged, kode program tersebut mengalami error serius ketika dikompilasi!! B tidak panik, dengan tenang segera melakukan koneksi ke internet menggunakan CDMA modem. Kemudian mengakses repository server dan melihat catatan perubahan kode program. Ternyata A menambahkan satu bonus fitur baru untuk melihat gambar dalam tampilan thumbnail yang dikerjakan semalam,pasti ini penyebabnya, karena hari sebelumnya B sudah memastikan bahwa semua fungsi program berjalan dengan baik dan siap untuk diimplementasikan.

Untungnya A tidak lupa untuk memberikan penanda (tag) terhadap perubahan yang dilakukanya semalam. Dengan cepat B mengambil kode program sesuai kondisi sebelum perubahan yang dibuat oleh A semalam (undo). Kali ini program berjalan dengan lancar tanpa ada satupun error. Berkat digunakanya Version Control dengan disiplin bencana yang ada di depan mata dapat dihindari.

Berdasarkan cerita diatas, jelas bahwa penggunaan Version Control dalam pengembangan software yang dilakukan oleh sebuah tim programmer sangat penting, bahkan sudah wajib hukumnya. Version control akan melakukan pencatatan setiap perubahan kode program. Dengan begitu, banyak sekali manfaat yang dapat diambil dan masalah yang dapat dihindari. Masih banyak lagi fitur-fitur version control yang akan kita bahas dalam bagian-bagian selanjutnya.

untuk download TortoiseSVN silahkan klik link ini :
http://tortoisesvn.net/downloads.html 

Permasalahan file sharing
Misalnya ada dua programmer Ifnu dan Dhiku, sedang bekerja di sebuah file yang sama. Mari kita lihat apa yang terjadi bila kita tidak menggunakan version control, tetapi mengandalkan mekanisme file sharing. Mekanisme file sharing ini menyimpan file dalam sebuah repository yang terletak di sebuah komputer yang salah satu foldernya dishare, atau di FTP server, atau yang paling primitif, source code diletakkan di dalam USB Flashdisk.
Ketika akan mulai bekerja, Ifnu dan Dhiku akan mengambil file yang sama dari dalam repository.

Setelah itu Ifnu dan Dhiku mulai bekerja di folder lokal masing-masing. Misalnya, dalam folder repository terdapat sebuah file MainPanel.java. Ifnu dan Diku sama-sama melakukan perubahan terhadap file MainPanel.java.

Kebetulan Ifnu selesai lebih dulu. Kemudian dia segera menyimpan perubahan di repository

Tidak lama kemudian Dhiku selesai bekerja dengan MainPanel.java, dan mengirimkan perubahan yang sudah dilakukanya ke dalam repository.

Tanpa adanya aplikasi Version Control yang baik, perubahan yang dibuat oleh Dhiku akan menimpa perubahan yang telah disimpan Ifnu sebelumnya. Hal ini bisa menyebabkan pertumpahan darah dalam tim. Bayangkan pertempuran yang mungkin terjadi jika jumlah programmer tak hanya dua, melainkan seratus epatpuluh sembilan orang!!.

Permasalahan File sharing ini dapat diselesaikan dengan dua pendekatan yaitu Model Lock-Edit-Unlock, dan Model Checkout-Edit-Merge.
  1. Lock-edit-unlock
  2. Model lock-edit-unlock adalah model yang dipilih oleh Microsoft untuk mengembangkan version controlnya yaitu Visual Source Save. Dengan skenario yang sama, kita akan melihat bagaimana model ini mengatasi masalah file sharing :
    Ifnu lebih dahulu terkoneksi ke internet, dan ingin bekerja di file MainPanel.java. Dia langsung saja mengambil file MainPanel.java dari repository. Secara otomatis Visual Source Safe akan mengunci file MainPanel.java.
    Tidak lama kemudian Dhiku konek ke internet, dan ingin bekerja dengan file MainPanel.java juga. Dia berusaha untuk mengambil file tersebut dari repository. Tentu saja, usaha Dhiku mengambil file MainPanel.java dari repository gagal karena Ifnu memegang lock terhadap file MainPanel.java. Setelah Ifnu
    Tidak lama kemudian Dhiku konek ke internet, dan ingin bekerja dengan file MainPanel.java juga. Dia berusaha untuk mengambil file tersebut dari repository. Tentu saja, usaha Dhiku mengambil file MainPanel.java dari repository gagal karena Ifnu memegang lock terhadap file MainPanel.java. Setelah Ifnu
    Dhiku mencoba lagi untuk mengambil file MainPanel.java dari repository, kali ini usahanya berhasil karena Ifnu sudah melepaskan locknya.


    Model ini sangat kaku dan melibatkan proses lock-unlock yang kompleks, sehingga akan muncul masalah-masalah dibawah ini.
    • Bagaimana kalau Ifnu membutuhkan waktu setengah hari untuk bekerja dengan file MainPanel.java? Apakah Dhiku akan duduk menganggur menunggu Ifnu selesai bekerja dengan file MainPanel.java?
    • Bagaimana kalau Ifnu bekerja dengan file MainPanel.java seharian penuh?, kemudian tanpa rasa bersalah pulang ke rumah bersiul-siul tanpa melepaskan locknya?
    • Bagaimana jika sebenarnya Ifnu dan Dhiku ingin bekerja dengan file MainPanel.java di bagian yang berbeda? Ifnu ingin menambahkan method showSplash() dan Dhiku hanya ingin memperbaiki code System.exit(0) menjadi System.exit(1) di bagian yang berbeda, apakah mereka berdua saling menunggu?

    Ini memang kelemahan dari model lock-edit-unlock. Dengan model ini proses management kode sumber menjadi kaku dan tidak scalable. Model ini sulit mengakomodasikan jumlah programmer yang banyak dan mereka saling bekerja di bagian yang sama. Semakin banyak orang yang bekerja dalam satu tim, mekanisme lock-unlock akan sering terjadi. Sementara orang lain sedang bekerja dengan file yang kita butuhkan terpaksa kita mengajak rekan yang lainya untuk segera membuka sesi baru game login ke Facebook, lebih parah lagi mulai sibuk membuka-buka situs Joobstreet.com atau Linkedin.com

  3. Checkout-edit-merge
  4. Model inilah yang digunakan oleh Subversion, model ini tidak menyaratkan adanya siklus lock-unlock (walaupun metode lock-unlock juga bisa dilaksanakan oleh Subversion), sehingga kasus rebutan file tidak lagi terjadi. Subversion dapat mengakomodasi tim dengan jumlah programmer sangat besar tanpa harus saling menunggu penggunaan resource.
    Mari sekali lagi kita saksikan aksi Ifnu dan Dhiku dalam bekerja sama mengedit file MainPanel.java. Kali ini tidak akan jadi masalah siapa yang akan melakukan proses checkout terlebih dahulu, karena tidak ada lagi mekanisme locking.
    Ifnu selesai lebih dahulu bekerja dengan MainPanel.java dan segera melakukan commit untuk menyimpan perubahan dalam file MainPanel.java ke repository.
    Tak lama kemudian Dhiku juga selesai dengan pekerjaanya dan akan berusaha untuk melakukan commit ke repository. Namun commit yang dilakukan Dhiku akan mengalami error “Out-of-date”. Error ini disebabkan nilai version repository lebih besar dari nilai version folder lokal Dhiku.
    Untuk mengatasi hal ini Dhiku harus melakukan Update terhadap folder lokalnya agar nilai version folder lokal sama dengan nilai version repository.

Komentar