Jumat, 20 Maret 2015

Agile Process Model

1.      Adaptive Software Development
Adaptive software development (ASD) diajukan oleh Jim Highsmith sebagai teknik untuk membangun software dan sistem yang kompleks. Filosofi yang mendasari adaptive software development adalah kolaborasi manusia dan tim yang mengatur diri sendiri. Sistem kerja adaptive software development : collaboration dan learning.

a.                  Collaboration  :           orang-orang yang bermotivasi tinggi bekerja sama, saling melengkapi, rela                                           membantu, kerja keras, terampil di bidangnya,  dan mengkomunikasikan                                                masalah untuk menyelesikannya secara efektif.
b.                Learning          :            tim developer sering merasa mengetahui semua hal tentang proyek,                                                       padahal tidak demikian. Karena itu proses ini membuat   mereka belajar                                                  lebih tentang proyek melalui tiga cara :
-  Fokus grup, klien dan pengguna memberi masukan terhadap                                       perangkat lunak.
-  Formal Technique Reviews, tim ASD lengkap melakukan review.
Postmortems, tim ASD melakukan instrospeksi pada kinerja dan proses.

2.      Dynamic System Development Method
Pada Dynamic System Development Method menyajikan kerangka kerja (framework ) untuk membangun dan memelihara sistem dalam waktu yang terbatas melalui penggunaan prototyping yang incremental dalam lingkungan yang terkondisikan. Metode ini akan membangun software dengan cepat ( 80% dari proyek diserahkan dalam 20% dari waktu total untuk menyerahkan proyek secara utuh ).
Dynamic System Development Method dapat dikombinasikan dengan Extreme Programming menghasilkan kombinasi model proses yang mengikuti Dynamic System Development dan praktek yang sejalan dengan Extremen Programming.
Dynamic System Development Method memiliki beberapa aktifitas, seperti :
a.       Feasibility study    :           Siapkan requirement dan batasan lalu uji apakah sesuai
                                          dengan proses DSDM.
b.      Business Study     :           Susun kebutuhan fungsional dan informasi, tentukan
                                          arsitektur aplikasi dan identifikasi kebutuhan pemeliharaan
                                          untuk aplikasi.
c.       Functional Model Iteration           :           Hasilkan incremental prototype yang
                                                                  memperlihatkan fungsi software ke klien
                                                                  untuk mendapatkan kebutuhan lebih jelas dan
                                                                  konfirmasi.
d.      Design and Build Iteration           :           Cek ulang prototype yang dibangun untuk
                                                                  memastikan bahwa prototype dibangun
                                                                  dengan cara yang memungkinkan fungsi
                                                                  tersebut benar-benar bekerja.
e.       Implementation     :           Menempatkan software pada lingkungan benar sekalipun
                                          belum lengkap atau masih ada perubahan.
3.      Scrum Methodology
Pertama kali diperkenalkan oleh Jeff Sutherland pada awal tahun 1990-an dan dikembangkan selanjutnya oleh Schware dan Beedle. Pada dasarnya, scrum merupakan salah satu komponen dari metodologi pengembangan agile mengenai pertemuan harian untuk membahas kemajuan dan XP adalah menekankan metodolgi yang berbeda, sepasang ujian pemrogaman dan pembangunan.
Scrum menguraikan proses untuk mengidentifikasi dan katalogisasi yang perlu dilakukan, memprioritaskan bekerja dan berkomunikasi dengan pelanggan atau wakil pelanggan dan pelaksanaan yang bekerja menggunakan rilis iterative serta memiliki tujuan utama untuk mendapatkan perkiraan berapa lama pembangunan dilaksanakan. XP lebih lanjut tentang pengembang membantu menyelesaikan pekerjaan secepat dan maintainably mungkin.
Scrub memiliki prinsip yaitu            :
-          Ukuran tim yang kecil akan melancarkan komunikasi, mengurangi biaya dan memberdayakan satu sama lain.
-          Proses dapat beradaptasi terhadap perubahan teknis dan bisnis.
-          Proses menghasilkan beberapa software increment.
-          Pembangunan dan orang yang membangun dibagi dalam tim yang kecil.
-          Dokumentasi dan pengujian terus menerus dilakukan setelah software dibangun.
-          Proses scrum mampu menyatakan bahwa produk selesai kapan pun diperlukan.
Scrum memiliki aktifitas yang meliputi :
-          Backlog
Daftar kebutuhan yang jadi prioritas klien dan daftar yang dibuat dapat bertambah.
-          Sprints
Merupakan unit pekerjaan yang diperlukan untuk memenuhi kebutuhan yang ditetapkan dalam backlog sesuai dengan waktu yang ditetapkan dalam time-box ( biasanya 30 hari ). Selama proses ini berlangsung backlog tidak ada penambahan.
-          Scrum Meetings
Pertemuan yang mungkin dilakukan setiap hari untuk evaluasi apa yang dikerjakan, hambatan yang ada dan target penyelesaian untuk bahan meeting selanjutnya.
-          Demo
Penyerahan software increment ke klien, didemontrasikan dan di evaluasi oleh klien.
4.      Crystal
Crystal diperkenalkan oleh Cockburn dan Highsmith.
Karakteristik Crystal :
a.       Secara actual sebuah model proses keluarga memungkinkan maneuver berdasarkan karakteristik permasalahan.
b.      Menyarankan penggunaan workshop refleksi untuk review kebiasaan kerja tim.
c.       Selalu murah dan cepat berkomunikasi secara langsung.
d.      Proyek berkembang sesuai ukuran tim, menjadi lebih atau luas dan metodologi akan menjadi lebih tinggi.
5.      Feature Driven Development
Merupakan model proses praktis untuk keahlian proses software engineering, feature merupakan sebuah fungsi yang berharga dimana dapat dilaksanakan.
Keuntungan dari metode ini :
a.       User dapat menggambarkan dengan mudah bentuk system.
b.      Dapat diorganisasikan atau diatur ke dalam kelompok bisnis yang hirarki.
c.       Desain dan kode lebih mudah diperiksa secara efektif.
d.      Perancangan proyek, penjadwalan dan jalur diarahkan oleh feature.
6.      Agile Modeling
Suatu metodologi yang praktis untuk dokumentasi dan pemodelan system software. Agile adalah kumpulan nilai-nilai, prinsip dan praktek-praktek untuk memodelkan software agar dapat diaplikasikan pada software development proyek secara efektif.
Prinsip Agile Modeling :
a.       Membuat model dengan tujuan
b.      Menggunakan multiple models ( tiap model mewakili aspek yang berbeda dari model lain ).
c.       Travel light ( simpan model-model yang bersifat jangka panjang saja ).
d.      Isi lebih penting dari penampilan ( modeling menyajikan informasi kepada audiens yang tepat ).
e.       Memahami model dan alat yang digunakan untuk membuat software.
f.       Adaptasi secara lokal.
7.      Rational Unified Process
Suatu kerangka kerja proses pengembangan perangkat lunak iteratif yang dibuat oleh Rational Software, suatu divisi dari IBM sejak 2003. Model ini membagi suatu sistem aplikasi menjadi beberapa komponen sistem dan memungkinkan para developer aplikasi untuk menerapkan metode iterative ( analisis, desain, implementasi dan pengujian ) pada tiap komponen. Dengan menggunakan model ini, RUP membagi tahapan pembangunan perangkat lunaknya ke dalam 4 fase sebagai berikut :
a.       Inception               :           Tahap untuk mengidentifikasi sistem yang akan
                                          dikembangkan. Aktivitas yang dilakukan pada tahap ini an-
tara lain mencakup analisis sistem eksisting, perumusan sistem target, penentuan arsitektur global target, identifikasi kebutuhan, perumusan persyaratan kebutuhan pengujian, pemodelan diagram UML dan pembuatan dokumentasi.
b.      Elaboration            :           Tahap untuk melakukan desain secara lengkap berdasarkan
                                          hasil analisis di tahap inception. Aktifitas yang dilakukan
                                          pada tahap ini antara lain mencakup pembuatan desain
                                          arsitektur, desain komponen sistem, desain format data,
                                          desain database, desain antarmuka/ tampilan, desain peta
                                          aliran tampilan, penentuan desain pattern yang digunakan,
                                          pemodelan diagram UML dan pembuatan dokumentasi.
c.       Construction         :           Tahap untuk mengimplementasikan hasil desain dan
                                          melakukan pengujian hasil implementasi. Pada tahap awal
                                          construction, ada baiknya dilakukan pemeriksaan ulang hasil
                                          analisis dan desain, terutama desain pada domain perilaku
                                          (diagram sequence) dan domain struktural (diagram class,
                                          component, deployment).  Apabila desain yang dibuat telah
                                          sesuai dengan analisis sistem, maka implementasi dengan
                                          bahasa pemrogramanan tertentu dapat dilakukan. Aktivitas
                                          yang dilakukan pada tahap ini antara lain mencakup
                                          pengujian hasil analisis dan desain (misal menggunakan
                                          Class Responsibility Collaborator untuk kasus pemrograman
                                          berorientasi obyek), pendataan kebutuhan implementasi
                                          lengkap (berpedoman pada identifikasi kebutuhan di tahap
                                          analisis), penentuan coding pattern yang digunakan
                                          , pembuatan program, pengujian, optimasi program,
                                          pendataan berbagai kemungkinan pengembangan /
                                          perbaikan lebih lanjut dan pembuatan dokumentasi.
d.      Transition              :           Tahap untuk menyerahkan sistem aplikasi ke konsumen
                                          (roll-out), yang umumnya mencakup pelaksanaan pelatihan
                                          kepada pengguna dan testing beta aplikasi terhadap
                                          ekspetasi pengguna.
8.      Lean Software Development
Suatu proses engineering yang digunakan untuk mengembangkan dan menghasilkan suatu software berkualitas tinggi yang telah terjamin kehandalannya sehingga tidak terjadi kegagalan dalam penggunaan software tersebut. Lean software development ini berpedoman pada pemahaman lapangan dan kesesuaian pelaksanaan prinsip  lean disepanjang seluruh proses pengembangan software. Slogan yang dipakai yaitu berpikir besar, bertindak kecil, gagal cepat, belajar cepat. Lean dapat mereduksi waktu pengembangan software karena waktu pengembangan software dapat direduksi dengan cara mengurangi error pengerjaan software yaitu menggunakan tujuh prinsip Lean, yaitu: Eliminate Waste, Amplifying Learning, Decide As Late As Possible, Deliver As Fast As Possible, Empower The Team, Built Integrity, See The Whole.
Prinsip Lean Software Development :
a.       Eliminate waste (Mengeliminasi Ketidak Effisienan)
Dalam software development, waste adalah sesuatu yang tidak  mempengaruhi kualitas koding, mengurangi waktu dan usaha dalam menghasilkan koding, atau sesuatu yang tidak memberikan nilai bisnis kepada customer. Dengan kata lain, aktifitas apapun itu yang tidak “ pay for itself” dalam mengurangi usaha dimanapun didalam system. Tools: Seeing Waste, Value Stream Mapping.
b.      Amplify learning (Mengamplifikasi pembelajaran)
Untuk para programmer, mengembangkan sebuah sistem yang memberikan nilai bisnis, mereka harus belajar banyak hal. Diantaranya berupa teknikal, seperti kelebihan dan kekurangan pada beberapa pendekatan yang akan dilakukan pada remote communication dalam .NET (contoh: remoting, COM+,web services,dll).
Dan lainnya adalah kebutuhan terkait, sepertyi memahami apa yang pengguna bisnis benar-benar butuhkan dan apa yang pengembang pikirkan untuk kebutuhan pengguna.
Tools: Feedback, Iterations, Synchronization, Set-based Development.
c.         Decide as late as possible (Menentukan keterlambatan sebagai hal yang mungkin)
Gagasan itu adalah menunggu sampai apa yang disebut dengan istilah “the last responsible moment” untuk membuat sebuah keputusan. Dimana, jika tim tidak membuat keputusan, keputusan akan dibuat untuk mereka. Manfaatnya adalah untuk menghindari atau menunda biaya perubahan, yang tidak jelas, yang dapat terjadi jika belum pernah membatasi pilihan.
Tools: Options Thinking, The Last Responsible Moment, Making Decisions.
d.      Deliver as fast as possible (Mengantarkan Secara cepat sebagai hal yang mungkin)
Merupakan hal dasar dari development berulang.  Kebutuhan berubah sebagai sebuah persentase dari  kebutuhan original yang meningkatkan non linear sebagai jumlah waktu yang meningkat. Secara umum proyek dengan waktu 9-12 bulan memiliki kira-kira 25%  perubahan kebutuhan. Dimana tiap bulannya perubahan kebutuhan dalam rata-rata hanya 1-2persen. Dan hal ini lebih mudah di setujui.
Tools: Pull Systems, Queuing Theory, Cost of Delay.
e.        Empower the team (Memberdayakan team)
Menguatkan tim. Kualitas sebuah tim perangkat lunak(faktor manusia) merupakan unsur yang paling penting dalam keberhasil dalam  menghasilkan sebuah  software.
Tools: Self Determination, Motivation, Leadership, Expertise.
f.       Build integrity in (Membangun integritas)
Membangun integritas.  Integritas terbagi antara integritas perceived dan integritas konseptual. Integritas perceived adalah pengalaman pelanggan perangkat lunak dalam menggunakan software yang dibuat. Integritas konseptual adalah ukuran seberapa baiknya arsitektur dan komponen sistem yang mengalir bersama-sama mengenai  integritas  perceived. Pengujian, satuan dan integrasi, merupakan bagian utama dari integritas.
Tools: Perceived Integrity, Conceptual Integrity, Refactoring, Testing.
g.      See the whole (Melihat secara kesatuan/keseluruhan.)
Pemikiran sistem sudah ada untuk sementara waktu, tapi respon khas untuk memecahkan masalah adalah untuk memprosesnya menjadi bagian-bagian penyusunnya dan mengoptimalkan setiap bagian individu. Ini adalah suboptimisasi, yang mengarah ke “tragedy of the commons.”
Tools: Measurements, Contracts.
Kelebihan :
  • Mengeliminasi Ketidak Effisienan membantu mempercepat proses, menghemat sumberdaya dan efisiensi
  • Membantu memberikan produk lebih awal
  • Kekuatan tim membantu dalam membuat keputusan antara tim dan memotivasi tim
  • Proyek sangat bergantung pada tim yang saling bekerjasama dan berkomitmen pada proyek
  • Customer harus mengetahui apa yang mereka butuhkan dan tidak bisa mengubah setelah mereka membuat sebuah keputusan
  • Kita membutuhkan sebuah tim yang kemampuannya saling melengkapi

 Sumber : 

Rabu, 25 Februari 2015

Rekayasa Perangkat Lunak

Pengertian
Menurut Wikipedia :  Satu bidang profesi yang mendalami cara-cara pengembangan perangkat lunak termasuk pembuatan, pemeliharaan, manajemen organisasi pengembangan perangkat lunak dan manajemen kualitas.
Menurut IEEE Computer Society :   Sebagai penerapan suatu pendekatan yang sistematis,
                        disiplin dan terkuantifikasi atas pengembangan, pengguna-
                        an dan pemeliharaan perangkat lunak, serta studi atas
                        pendekatan-pendekatan ini, yaitu penerapan pendekatan
                        engineering atas perangkat lunak.
Kesimpulan :              Pengubahan perangkat lunak itu sendiri guna mengembangkan, memelihara dan membangun kembali dengan menggunakan prinsip rekayasa untuk menghasilkan perangkat lunak yang dapat bekerja lebih efisien dan efektif untuk pengguna.

Tujuan Rekayasa Perangkat Lunak
Tujuan rekayasa perangkat lunak yaitu :
1.      Memperoleh biaya produksi perangkat lunak yang rendah.
2.      Menghasilkan perangkat lunak yang kinerjanya tinggi, andal dan tepat waktu.
3.      Menghasilkan perangkat lunak yang dapat bekerja pada berbagai jenis platform.
4.      Menghasilkan perangkat lunak yang biaya perawatannya rendah.

Kriteria dalam Merekayasa Perangkat Lunak
1.      Maintainability :          Dapat terus dirawat dan dipelihara.
2.      Dependability :            Dapat mengikuti perkembangan teknologi.
3.      Robust :                       Dapat mengikuti keinginan pengguna.
4.      Usability :                    Dapat memenuhi kebutuhan yang diinginkan.
5.      Efektif dan efisien dalam menggunakan energi dan penggunaannya.

Ruang Lingkup Rekayasa Perangkat Lunak
1.      Software requirements berhubungan dengan spesifikasi kebutuhan dan persyaratan perangkat lunak.
2.      Software desain mencakup proses penampilan aristektur, komponen, antarmuka, dan karakteristik lain dari perangkat lunak.
3.      Software construction berhubungan dengan detail pengembangan perangkat lunak, termasuk algoritma, pengkodean, pengujian dan pencarian kesalahan.
4.      Software testing meliputi pengujian pada keseluruhan perilaku perangkat lunak.
5.      Software maintenance mencakup upaya-upaya perawatan ketika perangkat lunak telah dioperasikan.
6.      Software configuration management berhubungan dengan usaha perubahan konfigurasi perangkat lunak untuk memenuhi kebutuhan tertentu.
7.      Software engineering management berkaitan dengan pengelolaan dan pengukuran RPL, termasuk perencanaan proyek perangkat lunak.
8.      Software engineering tools and methods mencakup kajian teoritis tentang alat bantu dan metode RPL.

Materi Rekayasa Perangkat Lunak :
Secara garis besar ada 6 materi, yaitu :
1.      Pengenalan rekayasa perangkat lunak :
Di dalam materi pengenalan rekayasa perangkat lunak yang pertama dipelajari adalah materi secara umum yaitu pengertian berdasarkan kesepakatan serta beberapa tokoh, definisi secara umum, sejarah, perkembangan, tokoh-tokohnya. Di dalam materi ini juga di jelaskan tentang perangkat lunak secara umum, mulai dari karakteristik suatu perangkat lunak, tujuan pembuatan dari beberapa sisi baik itu dari sisi pengguna, dari sisi sponsor atau pihak yang mendanai ataupun dari sisi pengembang.
2.      Konsep dasar rekayasa perangkat lunak :
Konsep Dasar Rekayasa Perangkat Lunak. Didalam materi ini di jelaskan tentang konsep-konsep dasar dalam mengembangkan suatu perangkat lunak.  Dijelaskan juga tentang rekayasa perangkat lunak di dalam dunia praktis atau lapangan. Di dalam materi ini juga di jelaskan tentang siklus suatu rekayasa perangkat lunak mulai dari pra produksi, pengembangan, pasca produksi hingga rekayasa atau yang biasa kita lakukan dalam software adalah patch (menutupi kekurangan).  Di sini juga dijelaskan mengenai tingkatan perangkat lunak, jenis-jenis perangkat lunak dan perkembangan perusahaan perangkat lunak.
3.      Metode pengembangan perangkat lunak :
Metodologi pengembangan perangkat lunak atau disebut juga model proses atau paradigma rekayasa perangkat lunak adalah suatu strategi pengembangan yang memadukan proses, metode, dan perangkat (tools). Didalam materi ini di jelaskan mengenai metode-metode pengembangan perangkat lunak yang pernah di pakai dan sering di pergunakan di dalam mengembangkan software diantaranya metode sekuensial linier, prototype, RAD, Fouth Generation Techniques (4GT) , spiral, metode Proses Perangkat Lunak Evolusioner (pertambahan, spiral, konkruen), dan metode formal.
4.      Analisi resiko :
Di dalam materi ini di jelaskan mengenai resiko-resiko yang akan di hadapi dalam pengembangan suatu perangkat lunak. Di sini dijelaskan semua mengenai jenis-jenis resiko kemudian bagaimana menanganinya atau memanagement suatu resiko. Dan Bagaimana suatu resiko itu dapat di manfaatkan sebagai referensi di dalam pengembangan perangkat lunak dan selanjutnya.
5.      Persiapan project perangkat lunak :
Persiapan Project Perangkat Lunak, di dalam materi ini menjelaskan apa saja yang perlu di siapkan di dalam mengembangkan suatu project perangkat lunak. materi ini menjelaskan tentang manajemen proyek suatu pengembangan perangkat lunak berdasarkan tahap-tahap pengembangan yang baik, mulai dari Initiating(proyek sedang dalam proses untuk dipilih/disetujui, disponsori, didanai, dan diluncurkan. Planning (perencanaan adalah proses yang berulang dan menggambarkan proses bagaimana proyek akan dilaksanakan hingga selesai), Executing (setelah proyek direncanakan, tim proyek memulai pekerjaannya), Controlling (selama tim proyek mengerjakan tugasnya, project manager mengontrolnya) dan yang terakhir adalah Closing (setelah proyek diselesaikan project manager akan menutup proyek software).
6.      Analisis desain :
Di dalam materi ini di jelaskan tentang sistem informasi, fase-fase analisis desain, maintenance sistem, case tools, metodologi alternatif.
7.      Testing dan implementasi :
Di jelaskan secara umum karakterisk strategi pengujian perangkat lunak, tahapan-tahapan proses pengujian, dijelaskan pula faktor-faktor apa saja yang di perlukan didalam pengujian suatu perangkat lunak. Kemudian pengimplementasian kepada user seperti apa dan bagaimana suatu rekayasa dianggap berhasil atau gagal.

Macam-macam Perangkat Lunak
Macam-macam perangkat lunak, antara lain :
1.      Perangkat Lunak Sistem :
Software yang mengelola perangkat keras dan perangkat lunak yang digunakan komputer.
Ex : DOS, Macintosh, Windows, dll.
2.      Perangkat Lunak Bahasa Pemrogaman :
Software yang berfungsi untuk membantu melakukan pembuatan program aplikasi komputer.
Ex : Visual basic, C++, dll.
3.      Perangkat Lunak Aplikasi :
Software yang berfungsi untuk membantu melakukan berbagai tugas perkantoran/ aktivitas sehari-hari.
Ex : Pengolah kata, Pengolah gambar, Lembar sebar, dll.

Contoh Perangkat Lunak

Model air terjun ( waterfall ) :
Biasa juga disebut siklus hidup perangkat lunak. Mengambil kegiatan dasar seperti spesifikasi, pengembangan, validasi, dan evolusi serta mempresentasikannya sebagai fase-fase proses yang berbeda seperti spesifikasi persyaratan, perancangan peraangkat lunak, implementasi, pengujian dan seterusnya.
Masalah dengan model waterfall :
1.      Terjadinya pembagian proyek menjadi tahap-tahap yang tidak fleksibel, karena komitmen harus dilakukan pada tahap awal proses.
2.      Hal ini mengakibatkan sulitnya untuk merespon perubahan kebutuhan pengguna ( user ).
3.      Model air terjun harus digunakan hanya ketika persyaratan dipahami dengan baik.
Kekurangan model waterfall :
1.      Pengguna hanya mendapatkan deskripsi yang panjang, rinci dan “agak membosankan” untuk dibaca.
2.      Alur linier, proses lambat
3.      Pengguna baru melihat produk setelah akhir tahapan.
4.      Personil tidak bekerja optimal, karena ada waktu tunggu sebuah tahapan selelsai.
Kelebihan model waterfall :
1.      Lebih disiplin.
2.      Dorongan bahwa dokumentasi selalu tersedia untuk tiap tahapan ( dokumen lengkap ).
3.      Dorongan bahwa setiap produk yang dihasilkan selalu dicek, maintenance mudah karena dokumen lengkap.

sumber :