Selasa, 28 Januari 2020

WaterFall Model

Model air terjun (Waterfall Model) adalah pendekatan klasik dalam pengembangan perangkat lunak yang menggambarkan metode pengembangan linier dan berurutan. Ini terdiri dari lima hingga tujuh fase, setiap fase didefinisikan oleh tugas dan tujuan yang berbeda, di mana keseluruhan fase menggambarkan siklus hidup perangkat lunak hingga pengirimannya. Setelah fase selesai, langkah pengembangan selanjutnya mengikuti dan hasil dari fase sebelumnya mengalir ke fase berikutnya.

Pengertian Waterfall Model

Model air terjun (Waterfall Model) adalah metode pertama yang banyak digunakan dalam industri perangkat lunak. model ini merupakan pendekatan tradisional, dan jauh kurang fleksibel daripada metodologi gesit dengan pengembangan dipecah menjadi sprint tunggal, tetapi dapat dilengkapi dengan loop umpan balik dan loopback. Saat ini masih digunakan dalam berbagai versi jika persyaratan dan karakteristik suatu perangkat lunak dapat didefinisikan dengan jelas selama fase konseptual.

Apa Itu Waterfall Model

Penyebutan pertama dari model bertahap kembali ke Winston Royce. Dalam esainya “Mengelola Pengembangan Sistem Perangkat Lunak Besar” ia menggambarkan metode pengembangan untuk proyek perangkat lunak besar, yang dibagi menjadi beberapa fase pada awal tahun 1970. Dia mengkritik pendekatan ini, dan mengusulkan alternatif yang menyerupai prototyping. Royce mengacu pada “Model Tahap-Wise Sembilan Fase” oleh Herbert Benington, yang diterbitkan pada tahun 1956. Sementara Benington membayangkan sembilan fase, Royce mengurangi mereka menjadi tujuh. Istilah “model air terjun” tidak digunakan oleh mereka berdua. Penggunaannya didasarkan pada buku dari tahun 1976, yang terutama membahas tentang persyaratan untuk perangkat lunak.

Bagaimana cara kerja Waterfall Model

Model air terjun Waterfall Model pada dasarnya terdiri dari tujuh fase berturut-turut:
  1. Persyaratan sistem: Tahap pertama berkaitan dengan persyaratan yang tidak terkait dengan produk digital itu sendiri melainkan dengan aspek yang relevan dengan bisnis seperti harga dan ketersediaan. Aspek dokumentasi dan keselamatan juga ditentukan di sini. Secara umum, persyaratan non-fungsional disebutkan di sini.
  2. Persyaratan perangkat lunak: Persyaratan fungsional untuk perangkat lunak didefinisikan pada fase kedua. Pertanyaan tentang apa yang harus dapat dilakukan oleh perangkat lunak dijawab di sini dan diklarifikasi dalam “spesifikasi,” yang juga mencakup hasil tahap pertama.
  3. Analisis persyaratan: Pada fase analisis persyaratan, fungsi-fungsi perangkat lunak dibedah dan disusun sedemikian rupa sehingga elemen-elemen fungsional individu dan unit-unit fungsional dapat dipisahkan satu sama lain. Analisis persyaratan dimaksudkan untuk menguji fungsi untuk kelayakan dan kepentingannya. Hasil dari fase ini adalah spesifikasi yang berisi persyaratan yang perlu dikembangkan.
  4. Desain program: Desain teknis sekarang diimplementasikan dengan bantuan spesifikasi persyaratan ini. Komponen fase ini juga termasuk keputusan tentang arsitektur informasi dan teknologi terapan seperti bahasa pemrograman, perpustakaan kelas, dan urutan program. Hasil desain program biasanya direkam dalam diagram yang menggambarkan perilaku teoritis perangkat lunak.
  5. Implementasi: Selama implementasi, struktur dan alur kerja dilaksanakan dengan mempertimbangkan kondisi dan tujuan kerangka kerja sistemik. Desain perangkat lunak menjadi program yang terkait langsung dengan sistem operasi, satu atau lebih bahasa pemrograman, dan infrastruktur. Hasilnya biasanya berupa perangkat lunak operasional, seringkali sebagai versi beta.
  6. Pengujian: Tahap implementasi diikuti oleh pengujian semua komponen perangkat lunak, modul, dan seluruh sistem. Integrasi ke dalam sistem operasi spesifik juga diperiksa. Jika kesalahan dan konflik terjadi, mereka harus segera diperbaiki. Hal ini dapat menyebabkan peningkatan biaya keseluruhan karena kesalahan yang mungkin dapat dikaitkan dengan fase yang berbeda dan tidak selalu disebabkan pada fase sebelumnya.
  7. Peluncuran: Perangkat lunak diimplementasikan setelah penerimaan oleh klien. Pembaruan dan pemeliharaan mungkin diperlukan sebelum produk memasuki toko atau dikirim ke pelanggan.
Berbagai tim dan pakar bekerja pada tahap ini. Kontraktor, manajemen proyek, dan pengembang senior biasanya terlibat hingga tahap implementasi. Setelah implementasi, pengembang melakukan pekerjaannya, di mana pengujian perangkat lunak sering ditangani secara terpisah, misalnya oleh laboratorium pengujian independen. Ahli pemasaran dan layanan sebagian terlibat dengan peluncurannya. Di perusahaan dan perusahaan besar, metode SDLC yang dimodifikasi dan lebih terstruktur (siklus pengembangan sistem) digunakan, yang didasarkan pada model air terjun. Ada juga versi lain dari model ini yang, misalnya, memperkenalkan elemen berulang dalam bentuk loop untuk mendeteksi dan memperbaiki kesalahan dan bug dalam fase sebelumnya.

Manfaat / Kerugian

Beberapa keuntungan dan kerugian dari model air terjun:

Keuntungan Waterfall Model

  • Karena struktur logis dari model, kesalahan konseptual seringkali dapat dihindari.
  • Model ini mengarah pada dokumentasi teknis yang luas, yang merupakan kelegaan bagi programmer dan pengembang baru dan juga berguna dalam tahap pengujian.
  • Kemajuan proyek dapat dipantau menggunakan tonggak sejarah.
  • Total biaya dapat diperkirakan dengan akurasi relatif jika tidak ada konflik.

Kekurangan Waterfall Model

  • Konflik, bug, dan kesalahan program terkadang menyebabkan kenaikan biaya dan waktu yang cukup lama. Hal yang sama berlaku jika klien tidak puas.
  • Spesifikasi yang awalnya dibuat seringkali sulit untuk dipahami oleh klien karena lebih abstrak daripada apa yang seharusnya dilakukan oleh perangkat lunak. Terutama dalam proyek-proyek outsourcing, ini bisa menjadi kerugian yang menentukan, karena tanggal rilis harus ditunda dan pasar mungkin telah berubah selama waktu ini.
  • Pengiriman perangkat lunak membutuhkan waktu lebih lama karena departemen tidak bekerja secara bersamaan dan setiap fase hanya dapat dimulai ketika fase sebelumnya selesai.

Signifikansi untuk pemrograman

Model air terjun (Waterfall Model) adalah salah satu model proses paling terkenal dalam pengembangan perangkat lunak. Ini telah berhasil digunakan selama beberapa dekade, tetapi sekarang hanya untuk proyek-proyek kecil di mana spesifikasinya jelas. Namun, kelemahan yang disebutkan di atas, juga membuat analis dan pengembang merancang model alternatif yang disebut pengembangan perangkat lunak gesit. Masalah utama dari model air terjun adalah bahwa perubahan dan revisi belum tentu disediakan oleh urutan logis. Umpan balik dari pelanggan, penguji, dan insinyur selama pengembangan sebagian hilang dan integrasi perangkat lunak ke dalam sistem yang ada berlangsung sekaligus. Kelemahan ini dapat dihindari dengan memodifikasi fase proyek, seperti halnya dengan model spiral. Tetapi untuk beberapa tahun sekarang, metode gesit yang menggunakan elemen struktural lainnya jauh lebih populer (misalnya, peran dan sprint dengan Scrum atau prinsip-prinsip pemrograman ekstrim). Sebagai aturan, mereka lebih ekonomis, mengarah pada hasil yang lebih cepat dan lebih transparan bagi pelanggan. Sebagai aturan, mereka lebih ekonomis, mengarah pada hasil lebih cepat dan lebih transparan bagi pelanggan.

Model-Model WaterFall

1. Linear Sequential Model/ Waterfall Model
Model ini adalah model klasik yang bersifat sistematis, berurutan dalam membangun software. Berikut ini ada dua gambaran dari waterfall model. Sekalipun keduanya menggunakan nama-nama fase yang berbeda, namun sama dalam intinya.
Fase-fase dalam Waterfall Model menurut referensi Pressman:
Fase-fase dalam Waterfall Model menurut referensi Sommerville :


  1. Requirements analysis and definition: Mengumpulkan kebutuhan secara lengkap kemudian kemudian dianalisis dan didefinisikan kebutuhan yang harus dipenuhi oleh program yang akan dibangun. Fase ini harus dikerjakan secara lengkap untuk bisa menghasilkan desain yang lengkap.
  2. System and software design: Desain dikerjakan setelah kebutuhan selesai dikumpulkan secara lengkap.
  3. Implementation and unit testing: desain program diterjemahkan ke dalam kode-kode dengan menggunakan bahasa pemrograman yang sudah ditentukan. Program yang dibangun langsung diuji baik secara unit.
  4. Integration and system testing: Penyatuan unit-unit program kemudian diuji secara keseluruhan (system testing).
  5. Operation and maintenance: mengoperasikan program dilingkungannya dan melakukan pemeliharaan, seperti penyesuaian atau perubahan karena adaptasi dengan situasi sebenarnya.
Kekurangan yang utama dari model ini adalah kesulitan dalam mengakomodasi perubahan setelah proses dijalani. Fase sebelumnya harus lengkap dan selesai sebelum mengerjakan fase berikutnya.

Masalah dengan waterfall :
  1. Perubahan sulit dilakukan karena sifatnya yang kaku.
  2. Karena sifat kakunya, model ini cocok ketika kebutuhan dikumpulkan secara lengkap sehingga perubahan bisa ditekan sekecil mungkin. Tapi pada kenyataannya jarang sekali konsumen/pengguna yang bisa memberikan kebutuhan secara lengkap, perubahan kebutuhan adalah sesuatu yang wajar terjadi.
  3. Waterfall pada umumnya digunakan untuk rekayasa sistem yang besar dimana proyek dikerjakan di beberapa tempat berbeda, dan dibagi menjadi beberapa bagian sub-proyek.
Evolutionary Software Process Models
Bersifat iteratif/ mengandung perulangan. Hasil proses berupa produk yang makin lama makin lengkap sampai versi terlengkap dihasilkan sebagai produk akhir dari proses.
Dua model dalam evolutionary software process model adalah:
1. Incremental Model (Original: Mills)
  1. Kombinasikan element-element dari waterfall dengan sifat iterasi/perulangan.
  2. Eement-element dalam waterfall dikerjakan dengan hasil berupa produk dengan spesifikasi tertentu, kemudian proses dimulai dari fase pertama hingga akhir dan menghasilkan produk dengan spesifikasi yang lebih lengkap dari yang sebelumnya. Demikian seterusnya hingga semua spesifikasi memenuhi kebutuhan yang ditetapkan oleh pengguna.
  3. Produk hasil increment pertama biasanya produk inti (core product), yaitu produk yang memenuhi kebutuhan dasar. Produk tersebut digunakan oleh pengguna atau menjalani review/pengecekan detil. Hasil review tersebut menjadi bekal untuk pembangunan pada increment berikutnya. Hal ini terus dikerjakan sampai produk yang komplit dihasilkan.
  4. Model ini cocok jika jumlah anggota tim pengembang/pembangun PL tidak cukup.
  5. Mampu mengakomodasi perubahan secara fleksibel.
  6. Produk yang dihasilkan pada increment pertama bukanlah prototype, tapi produk yang sudah bisa berfungsi dengan spesifikasi dasar.
Masalah dengan Incremental model:
  1. Cocok untuk proyek berukuran kecil (tidak lebih dari 200.000 baris coding).
  2. Mungkin terjadi kesulitan untuk memetakan kebutuhan pengguna ke dalam rencana spesifikasi masing-masing hasil increment.
2. Spiral Model (Original: Boehm)
 
Proses digambarkan sebagai spiral. Setiap loop mewakili satu fase dari software process. Loop paling dalam berfokus pada kelayakan dari sistem, loop selanjutnya tentang definisi dari kebutuhan, loop berikutnya berkaitan dengan desain sistem dan seterusnya. Setiap Loop dibagi menjadi beberapa sektor :
  1. Objective settings (menentukan tujuan): menentukan tujuan dari fase yang ditentukan. Batasan-batasan pada proses dan produk sudah diketahui. Perencanaan sudah disiapkan. Resiko dari proyek sudah diketahui. Alternatif strategi sudah disiapkan berdasarkan resiko-resiko yang diketahui, dan sudah direncanakan.
  2. Risk assessment and reduction (Penanganan dan pengurangan resiko): setiap resiko dianalisis secara detil pada sektor ini. Langkah-langkah penanganan dilakukan, misalnya membuat prototype untuk mengetahui ketidakcocokan kebutuhan.
  3. Development and Validation (Pembangunan dan pengujian): Setelah evaluasi resiko, maka model pengembangan sistem dipilih. Misalnya jika resiko user interface dominan, maka membuat prototype User Interface. Jika bagian keamanan yang bermasalah, maka menggunakan model formal dengan perhitungan matematis, dan jika masalahnya adalah integrasi sistem model waterfall lebih cocok.
  4. Planning: Proyek dievaluasi atau ditinjau-ulang dan diputuskan untuk terus ke fase loop selanjutnya atau tidak. Jika melanjutkan ke fase berikutnya rencana untuk loop selanjutnya.
Pembagian sektor tidak bisa saja dikembangkan seperti pada pembagian sektor berikut pada model variasi spiral di bawah ini:
  1. Customer communication: membangun komunikasi yang baik dengan pengguna/customer.
  2. Planning: mendefinisikan sesumber, batas waktu, informasi-informasi lain seputar proyek.
  3. Risk analysis: identifikasi resiko managemen dan teknis.
  4. Engineering: pembangunan contoh-contoh aplikasi, misalnya prototype
  5. Construction and release: pembangunan, test, install dan support.
  6. Customer evaluation: mendapatkan feedback dari pengguna beradasarkan evaluasi PL pada fase engineering dan fase instalasi.

Pada model spiral, resiko sangat dipertimbangkan. Resiko adalah sesuatu yang mungkin mengakibatkan kesalahan. Model spiral merupakan pendekatan yang realistik untuk PL berskala besar. Pengguna dan pembangun bisa memahami dengan baik software yang dibangun karena setiap kemajuan yang dicapai selama proses dapat diamati dengan baik. Namun demikian, waktu yang cukup panjang mungkin bukan pilihan bagi pengguna, karena waktu yang lama sama dengan biaya yang lebih besar.
RAD (Rapid Application Development)
RAD adalah model proses pembangunan PL yang incremental. RAD menekankan pada siklus pembangunan yang pendek/singkat. RAD mengadopsi model waterfall dan pembangunan dalam waktu singkat dicapai dengan menerapkan component based construction. Waktu yang singkat adalah batasan yang penting untuk model ini. Jika kebutuhan lengkap dan jelas maka waktu yang dibutuhkan untuk menyelesaikan secara komplit software yang dibuat adalah misalnya 60 sampai 90 hari.

Kelemahan dalam model ini:
  1. Tidak cocok untuk proyek skala besar.
  2. Proyek bisa gagal karena waktu yang disepakati tidak dipenuhi.
  3. Sistem yang tidak bisa dimodularisasi tidak cocok untuk model ini.
  4. Resiko teknis yang tinggi juga kurang cocok untuk model ini.

Fase-fase di atas menggambarkan proses dalam model RAD. Sistem dibagi-bagi menjadi beberapa modul dan dikerjakan dalam waktu yang hampir bersamaan dalam batasan waktu yang sudah ditentukan.
  1. Business modelling: menjawab pertanyaan-pertanyaan: informasi apa yang mengendalikan proses bisnis? Informasi apa yang dihasilkan? Siapa yang menghasilkan informasi? Kemana informasi itu diberikan? Siapa yang mengolah informasi? ==> kebutuhan dari sistem.
  2. Data modelling: aliran informasi yang sudah didefinisikan, disusun menjadi sekumpulan objek data. Ditentukan karakteristik/atribut dan hubungan antar objek-objek tersebut ==> analisis kebutuhan dan data.
  3. Process Modelling: objek data yang sudah didefinisikan diubah menjadi aliran informasi yang diperlukan untukmenjalankan fungsi-fungsi bisnis.
  4. Application Generation: RAD menggunakan component program yang sudah ada atau membuat component yang bisa digunakan lagi, selama diperlukan.
  5. Testing and Turnover: karena menggunakan component yang sudah ada, maka kebanyakan component sudah melalui uji atau testing. Namun component baru dan interface harus tetap diuji.
Prototyping Model
Kadang-kadang klien hanya memberikan beberapa kebutuhan umum software tanpa detil input, proses atau detil output. Di lain waktu mungkin dimana tim pembangun (developer) tidak yakin terhadap efisiensi dari algoritma yang digunakan, tingkat adaptasi terhadap sistem operasi atau rancangan form user interface. Ketika situasi seperti ini terjadi model prototyping sangat membantu proses pembangunan software. Proses pada model prototyping yang digambarkan pada gambar 1, bisa dijelaskan sebagai berikut:
  • Pengumpulan kebutuhan: developer dan klien bertemu dan menentukan tujuan umum, kebutuhan yang diketahui dan gambaran bagian-bagian yang akan dibutuhkan berikutnya. Detil kebutuhan mungkin tidak dibicarakan disini, pada awal pengumpulan kebutuhan
  • Perancangan : perancangan dilakukan cepat dan rancangan mewakili semua aspek software yang diketahui, dan rancangan ini menjadi dasar pembuatan prototype.
  • Evaluasi prototype: klien mengevaluasi prototype yang dibuat dan digunakan untuk memperjelas kebutuhan software.
  • Perulangan ketiga proses ini terus berlangsung hingga semua kebutuhan terpenuhi. Prototype-prototype dibuat untuk memuaskan kebutuhan klien dan untuk memahami kebutuhan klien lebih baik.
Prototype yang dibuat dapat dimanfaatkan kembali untuk membangun software lebih cepat, namun tidak semua prototype bisa dimanfaatkan. Sekalipun prototype memudahkan komunikasi antar developer dan klien, membuat klien mendapat gambaran awal dari prototype , membantu mendapatkan kebutuhan detil lebih baik namun demikian prototype juga menimbulkan masalah:
  1. dalam membuat prototype banyak hal yang diabaikan seperti efisiensi, kualitas, kemudahan dipelihara/dikembangkan, dan kecocokan dengan lingkungan yang sebenarnya. Jika klien merasa cocok dengan prototype yang disajikan dan berkeras terhadap produk tersebut, maka developer harus kerja keras untuk mewujudkan produk tersebut menjadi lebih baik, sesuai kualitas yang seharusnya.
  2. developer biasanya melakukan kompromi dalam beberapa hal karena harus membuat prototype dalam waktu singkat. Mungkin sistem operasi yang tidak sesuai, bahasa pemrograman yang berbeda, atau algoritma yang lebih sederhana.
Agar model ini bisa berjalan dengan baik, perlu disepakati bersama oleh klien dan developer bahwa prototype yang dibangun merupakan alat untuk mendefinisikan kebutuhan software.
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqj6D9SPo-H0JrqcFBc6AIquAi3wQGNc7irUnccFVQVszjOifgaKcIJC8cwh4tpyWbxhAvcdtXnGbdhPwY4rVC8HFaj4AdnclrToWdhS3iDo0JJJDoeQjzoxY6HU3jk28_MnodUr4qNBM/s320/7.jpg
Component-based Development Model
Component-based development sangat berkaitan dengan teknologi berorientasi objek. Pada pemrograman berorientasi objek, banyak class yang dibangun dan menjadi komponen dalam suatu software. Class-class tersebut bersifat reusable artinya bisa digunakan kembali. Model ini bersifat iteratif atau berulang-ulang
prosesnya.
Secara umum proses yang terjadi dalam model ini adalah:
  1. Identifikasi class-class yang akan digunakan kembali dengan menguji class tersebut dengan data yang akan dimanipulasi dengan aplikasi/software dan algoritma yang baru.
  2. Class yang dibuat pada proyek sebelumnya disimpan dalam class library, sehingga bisa langsung diambil dari library yang sudah ada. Jika ternyata ada kebutuhan class baru, maka class baru dibuat dengan metode berorientasi objek.
  3. Bangun software dengan class-class yang sudah ditentukan atau class baru yang dibuat, integrasikan.

Penggunaan kembali komponen software yang sudah ada menguntungkan dari segi:
  1. Siklus waktu pengembangan software, karena mampu mengurangi waktu 70%
  2. Biaya produksi berkurang sampai 84% arena pembangunan komponen berkurang

Pembangunan software dengan menggunakan komponen yang sudah tersedia dapat menggunakan komponen COTS (Commercial off-the-shelf) – yang bisa didapatkan dengan membeli atau komponen yang sudah dibangun sebelumnya secara internal.

Component-Based Software Engineering (CBSE) adalah proses yang menekankan perancangan dan pembangunan software dengan menggunakan komponen software yang sudah ada. CBSE terdiri dari dua bagian yang terjadi secara paralel yaitu software engineering (component-based development) dan domain engineering seperti yang digambarkan pada Gambar di bawah:
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxypXQCw8gXefSHiEbzLvFjeYLS6GSmWyRSlqAcfFHXrcc6wCQf811j_dSe3ly7XjZ47kmKuhbjXqNBZze4XfelLX9eV5CsUrXfBTVrwreAISEP5lqllw0QUQ3Egal5ZFoBSTCDOyvmGM/s640/8.jpg

  1. Domain engineering menciptakan model domain bagi aplikasi yang akan digunakan untuk menganalisis kebutuhan pengguna. Identifikasi, pembangunan, pengelompokan dan pengalokasikan komponen-komponen software supaya bisa digunakan pada sistem yang ada dan yang akan datang.
  2. Software engineering (component-based development) melakukan analisis terhadap domain model yang sudah ditetapkan kemudian menentukan spesifikasi dan merancang berdasarkan model struktur dan spesifikasi sistem, kemudian melakukan pembangunan software dengan menggunakan komponen-komponen yang sudah ditetapkan berdasarkan analisis dan rancangan yang dihasilkan sebelumnya hingga akhirnya menghasilkan software.

Extreme Programming (XP) Model
Model proses ini diciptakan dan dikembangkan oleh Kent Beck. Model ini adalah model proses yang terbaru dalam dunia rekayasa perangkat lunak dan mencoba menjawab kesulitan dalam pengembangan software yang rumit dan sulit dalam implementasi.
Menurut Kent Beck XP adalah : “A lightweight, efficient, low-risk, flexible,predictable, scientific and fun way to develop software”. Suatu model yang menekankan pada:
  • Keterlibatan user secara langsung.
  • Pengujian.
  • Pay-as-you-go design.

Adapun empat nilai penting dari XP
  1. Communication/Komunikasi: komunikasi antara developer dan klien sering menjadi masalah. Karena itu komunikasi dalam XP dibangun dengan melakukan pemrograman berpasangan (pair programming). Developer didampingi oleh pihak klien dalam melakukan coding dan unit testing sehingga klien bisa terlibat langsung dalam pemrograman sambil berkomunikasi dengan developer. Selain itu perkiraan beban tugas juga diperhitungkan.
  2. Simplicity/Kesederhanaan: Menekankan pada kesederhanaan dalam pengkodean: “What is the simplest thing that could possibly work?” Lebih baik melakukan hal yang sederhana dan mengembangkannya besok jika diperlukan. Komunikasi yang lebih banyak mempermudah, dan rancangan yang sederhana mengurangi penjelasan.
  3. Feedback /Masukan/Tanggapan: Setiap feed back ditanggapi dengan melakukan tes, unit test atau system integration dan jangan menunda karena biaya akan membengkak (uang, tenaga, waktu).
  4. Courage / Berani: Banyak ide baru dan berani mencobanya, berani mengerjakan kembali dan setiap kali kesalahan ditemukan, langsung diperbaiki.

WaterFall Model

Model air terjun (Waterfall Model) adalah pendekatan klasik dalam pengembangan perangkat lunak yang menggambarkan metode pengembangan lini...