Senin, 07 September 2009

Memahami Konsep Agile pada Rekayasa Perangkat Lunak (Software Engineering)

Kali ini saya akan membahas salah satu konsep proses pengembangan perangkat lunak. Konsep tersebut adalah proses pengembangan perangkat lunak menggunakan pendekatan Agile Process.

Dalam era ekonomi modern seperti sekarang ini, seringkali kita mengalami kesulitan pada saat memprediksi, bagaimana sih sebaiknya bentuk sistem informasi yang diperlukan sesuai kebutuhan saat ini dan juga kebutuhan di masa mendatang. Hal itu terjadi karena kondisi pasar yang sangat cepat berubah, termasuk labilnya perubahan kebutuhan pengguna, dan juga serangan dari kompetitor baru yang datang tanpa peringatan. Pada saat tertentu, kita tidak mudah mendefinisikan keseluruhan requirements sebelum proyek mulai berjalan, sehingga menyebabkan terjadinya requirements yang tidak menggambarkan kebutuhan pengguna sistem informasi yang sesungguhnya, bahkan sering terjadi scope creep (cakupan requirements yang terlalu melebar). Untuk mengatasi hal tersebut, diperlukan suatu cara pendekatan pembangunan perangkat lunak yang mampu segera me-respons gejolak ketidakstabilan requirements bisnis. Salah satu pendekatan yang dimaksud adalah Agile Process.

Istilah Agile sendiri terdiri dari dua pengertian, yaitu: pertama pengertian dari segi filosofi, dan kedua pengertian dari segi pedoman pengembangan perangkat lunak. Dari segi filosofi, agile mempunyai arti antara lain:  mendorong demi terciptanya kepuasan pelanggan; mempercepat delivery perangkat lunak secara bertahap (incremental); tim proyek yang ramping dan mempunyai motifasi yang sangat tinggi; minimasi pekerjaan; serta menyederhanakan (birokrasi) keseluruhan proses pembangunan perangkat lunak. Sedangkan dari segi pedoman pengambangan perangkat lunak, agile mempunyai pengertian, bahwa secara aktif dan berkesinambungan, antara pengembang dengan pelanggan harus senantiasa menjalin kerjasama dan komunikasi dengan baik.

Menyinggung masalah Agile, terdapat suatu istilah yang disebut dengan Agility. Apa sih yang dimaksud Agility itu ? Menurut Ivar Jacobson, agility mengandung pengertian bahwa perubahan (change) merupakan "hati" dan "jiwa" dari perangkat lunak. Maksudnya adalah, bahwa perubahan terhadap requirements pelanggan, silih bergantinya anggota tim, dan perubahan kebutuhan teknologi yang berimplikasi terhadap produk yang dihasilkan merupakan suatu hal yang sangat wajar terjadi. Hampir semua proyek pengambangan perangkat lunak pasti mengalami hal tersebut. Sedangkan menurut Goldman et al, agility merupakan sesuatu yang dinamis, mempunyai kontent yang spesifik, menaggapi perubahan secara agresif, dan beroriantasi pada pertumbuhan.

Dari definisi menurut Ivar Jacobson dan Goldman et al, di atas dapat ditarik kesimpulan bahwa Agility merupakan suatu kemampuan atau "jiwa" yang harus dimiliki oleh tim pengambangan perangkat lunak. Kemampuan tersebut antara lain berupa: kemampuan segera menindaklanjuti terjadinya perubahan secara efektif; kemampuan berkomunikasi antar stakeholders secara efektif; menganggap bahwa pelanggan merupakan pihak yang berada di dalam tim yang sama; kemampuan mengorganisasikan tim (memberikan motivasi) agar mampu meningkatkan performa kinerja tim; secara tepat waktu dan berkesinambungan dapat men-deliver perangkat lunak yang telah dijadwalkan.

Setelah membahas mengenai Agile dan Agility, kemudian apa sih yang dimaksud dengan istilah Agile Process itu ? Agile Process merupakan sekelompok aktifitas pembangunan perangkat lunak secara iteratif yang menekankan pada aktifitas konstruksi (desain dan koding). Agile Process mengeliminasi sebagian besar waktu untuk melakukan perencanaan sistem dan berusaha sebisa mungkin mematuhi jadwal deliver sistem yang telah dijanjikan. Requirements yang dibutuhkan secara langsung di-drive oleh pelanggan itu sendiri, dan apabila terjadi perubahan terhadap requirements tersebut, pengembang dituntut mampu beradaptasi dengan perubahan yang terjadi.

Terus, sifat anggota tim yang bagaimana sih agar pendekatan Agile ini berhasil diterapkan ?. Tim yang agile harus memiliki sifat-sifat sebagai berikut: Pertama, dari segi kompetensi, anggota tim harus mempunyai bakat dan keterampilan yang berhubungan dengan pengembangan perangkat lunak di bidangnya masing-masing, terutama yang berkaitan dengan konstruksi perangkat lunak (desain dan pemrograman). Kedua, dari segi fokus perhatian, anggota tim harus berkonsentrasi pada ketepatan deliver produk yang telah dijanjikan dan dilakukan secara bertahap. Ketiga, dari segi kolaborasi, anggota tim harus mampu saling bekerjasama, baik itu dengan pelanggan maupun dengan manajer bisnis-nya. Keempat, dari segi kemampuan dalam berdiskusi, anggota tim senantiasa mendiskusikan isu-isu yang terjadi (apabila terjadi masalah, sesegera mungkin didiskusikan). Kelima, dari segi kemampuan menyelesaikan masalah, anggota tim harus terbiasa dengan ambiguitas dan mencari solusi yang tepat. Keenam, harus terjalin rasa saling percaya. Ketujuh, dari segi kesadaran keorganisasian, seorang anggota tim harus mampu bekerja dengan giat demi selesainya tugas  sesuai dengan jadwal yang dialokasikan.

Selanjutnya, saya akan membahas mengenai langkah-langkah dalam pengembangan perangkat lunak menggunakan pendekatan Agile. Secara mendasar, aktifitas-aktifitas umum dalam kerangka kerja agile antara lain: komunikasi dengan pelanggan, perencanaan, pemodelan, konstruksi, pengiriman (delivery), dan melakukan evaluasi. Kemudian aktifitas akan berulang, terutama untuk perencanaan deliver berikutnya. Semua aktifitas tersebut di buat seminimal mungkin, lebih memfokuskan dan konsentrasi pada konstruksi serta delivery.

Kemudian, seperti apa saja sih bentuk dari pendekatan Agile ini ? Terdapat banyak model pendekatan yang tergolong dalam Agile Process, namun tidak semua model saya bahas pada tulisan ini, saya hanya menjelaskan dua model yaitu: Extreme Programming (XP), dan Adaptive Software Development (ASD).

1. Extreme Programming (XP)
XP merupakan suatu model yang tergolong dalam pendekatan agile yang diusulkan oleh Kent Back. Menurut penjelasan dia, definisi XP adalah sebagai berikut: "Extreme Programming (XP) is a lightweight, efficient, low-risk, flexible, predictable, scientific, and fun way to develop software". Model ini cenderung menggunakan pendekatan Object-Oriented. Tahapan-tahapan yang harus dilalui antara lain: Planning, Design, Coding, dan Testing.

 XP Process (Pressman, 2005)

Pada saat perencanaan, dimulai dengan membuat semacam "user strories" yang ditempatkan index card. User Story (cerita) merupakan deskripsi fitur-fitur fungsional yang akan disediakan perangkat lunak yang akan dibuat. Dari cerita-cerita yang telah dibuat, pelanggan memberikan semacam nilai (misalnya: prioritas). Kemudian tim XP mengkaji semua cerita tadi dan menentukan rincian biaya serta memperkirakan waktu yang dibutuhkan untuk membangun sistem. Apabila waktu yang dibutuhkan untuk mengimplementasikan cerita tersebut lebih dari tiga minggu, maka tim XP meminta pelanggan memecah cerita tersebut menjadi cakupan yang lebih kecil. Cerita-cerita yang telah dibuat dikelompokkan, sehingga dapat diperkirakan untuk melakukan deliverable increments. Meskipun telah dikelompokkan dan proses pembangunan perangkat lunak telah dimulai, pelanggan masih bisa menambah, merubah, memecah dan menghapus cerita-cerita tersebut, namun tentunya harus sesuai dengan persetujuan bersama.

Keuntungan dari model XP antara lain adalah: Pertama, dapat merepresentasikan situasi nyata yang sering terjadi, sehingga sistem yang akan dibuat mendukung sebagian besar operasional pengguna. Kedua, memudahkan pengguna memahami dan memberikan masukan terhadap cerita tersebut. Ketiga, dapat merepresentasikan fitur-fitur fungsional secara bertahap (incremental).

Sedangkan kekurangan dari model XP antara lain adalah: Pertama, cerita-cerita yang menunjukkan requirements tersebut kemungkinan besar tidak lengkap. Kedua, user strories lebih fokus kepada kebutuhan fungsional dari pada fokus kepada kebutuhan non fungsional. Ketiga, hubungan antara arsitektur sistem dengan user strories tidak jelas, sehingga perancangan arsitektur juga lebih sulit.


2. Adaptive Software Development (ASD)
ASD merupakan suatu model yang tergolong dalam pendekatan agile yang diusulkan oleh Jim Highsmith. ASD menekankan pada pengorganisasian tim secara mandiri, kolaborasi antar-perseorangan, dan terus belajar, baik secara individu maupun secara tim. ASD menggunakan tools yang disebut "time-boxing" - yaitu berupa aktifitas yang menentukan jangka waktu tertentu yang dialokasikan untuk menyelesaikan berbagai macam tugas. Apabila waktu yang ditentukan tersebut selesai, maka pembangunan sistem akan pindah ke tugas berikutnya, dengan harapan bahwa sebagian besar dari critical work telah berhasil diselesaikan sebelum waktu keseluruhan tugas berakhir. Terdapat tiga tahapan pada model ASD, yaitu: Speculation, Collaboration, dan Learning.


Adaptive Software Development (Pressman, 2005)

Pada tahap Speculation, proyek dimulai dan adaptive cycle planning diselenggarakan. Pada tahapan ini, didefinisikan visi dan misi pengguna terhadap sistem yang akan dibuat, selanjutnya mendefinisikan project constraints, misalnya: waktu deliver. dan selanjutnya mendefinisikan satu set dari requirements yang akan dikerjakan dalam suatu cycle. Pada tahap Collaboration, pada tahap ini diorganisasikan tim kerja untuk membangun sistem. Direkomendasikan menggunakan model Joint Application Development (JAD). Pada tahap Learning, terdapat tiga aktifitas yaitu: pelanggan atau end-user menyediakan feedback terhadap hasil incremental delivery, tim ASD melakukan review terhadap komponen perangkat lunak untuk memperbaiki dan meningkatkan kualitas perangkat lunak yang sedang dibuat.

22 komentar:

  1. terimakasih...

    saya dapat tugas membuat presentasi tentang "adaptive software development" saya bingung, karna informasi yang didapatkan sangat sedikit..

    tapi ini sangat membantu, akan tetapi apakah masih bisa ditambahkan mengenai "adaptive software development" ini???

    BalasHapus
  2. maaf mau tanya klo contoh dari studi kasus agile process ini apa ya?
    f4dil_brian@yahoo.co.id

    BalasHapus
  3. mau tanya contoh kasus agile proses juga
    dhozhu_ts@yahoo.com

    BalasHapus
  4. Terimakasih.. tulisannya sangat menginspirasi..
    My blog

    BalasHapus
  5. terima kasih informasinya sangat bermanfaat
    My blog

    BalasHapus
  6. Nice post thank you Thiay

    BalasHapus