Pengembangan sistem adalah penyusunan suatu sistem yang baru atau penggantian secara keseluruhan atau sebagian berdasarkan sistem yang sudah berjalan dengan suatu sistem yan lebih baik secara sistematik.
## Alasan, Tujuan dan Prinsip
Beberapa alasan mengapa suatu sistem perlu dikembangkan sbb:
- Sistem lama mengalami permasalahan, hal ini biasanya karena beberapa hal sbb:
- Sistem berjalan lambat, atau muncul pesan error secara acak.
- Sistem tidak dapat memenuhi harapan pengguna atau ogranisasi. Ada output yang diharapkan, tetapi tidak dapat dihasilkan oleh sistem. Atau ada input yang ingin dimasukkan, tetapi tidak tersedia pada sistem yang ada.
- Sistem tidak berjalan pada device atau OS terbaru. Perkembangan IT yang cepat, menyebabkan banyak sistem yang menjadi usang karena hal ini.
- Adanya kebijakan baru. Tentu saja sistem yang ada harus mendukung dan menyesuaikan dengan kebijakan tersebut, baik kebijakan pemerintah maupun kebijakan organisasi.
- Menciptakan inovasi dan peluang untuk masa mendatang. Seringkali sistem dibuat sebagai lompatan besar yang menjadi inovasi dan direncakan dan diharapkan meraih peluang pasar di masa mendatang.
Tujuan pengembangan sistem adalah manfaat yang dapat dirasakan oleh pengguna bilamana sistem tersebut digunakan, yaitu sbb:
- Kinerja semakin meningkat dengan semakin cepatnya respon sumber daya dan semakin besarnya volume permintaan layanan.
- Informasi yang dihasilkan semakin berkualitas.
- Efisiensi biaya, karena kinerja sumber daya semakin meningkat.
- Pengendalian melalui monitoring dan evaluasi menjadi lebih mudah dan cepat dilakukan
Prinsip dalam pengembangan sistem adalah prinsip-prinsip yang dapat digunakan oleh tim pengembang saat mengembangkan suatu sistem informasi, adalah sbb:
- Melibatkan pengguna.
- Sistem merupakan suatu pemecahan terhadap masalah yang ada.
- Ada tahapan dan timeline yang jelas.
- Mendokumentasi setiap kegiatan dengan baik.
- Menerapkan standar, baik standar pekerjaan, output, tampilan, framework dll.
- Mengatur dan mengendalikan _project_.
- Menanamkan nilai bahwa sistem adalah investasi kepada setiap anggota tim.
- Jangan takut untuk menolak atau merevisi cakupan pekerjaan.
- Menggunakan algorithm _devide and conquer_, yaitu:
- _Devide_: Membagi suatu masalah menjadi beberapa sub-masalah sejenis
- _Conquer_: Memecahkan setiap sub-masalah
- _Combine_: Gabungkan hasil pemecahan masalah tersebut
- Rancang sistem agar dapat tumbuh dan berubah
## Tahapan Pengembangan Sistem
Tahapan pengembangan sistem mengikuti alur SDLC (_System Development Life Cycle_), yaitu:
- _Planning_, termasuk perencanaan dan kapasitas yang dibutuhkan (biaya, pembentukan Tim (SDM), peralatan, tempat, *timeline*, dll)
- _Analisys_ atau ada yang menyebut tahap _Requirements_, yaitu tahapan tim pengembang melakukan analisis kebutuhan (_user_requirments analisys_) dan bersepakat dengan pengguna apa-apa saja yang harus dipenuhi dari hasil pengembangan sistem tersebut.
- _Design and prototyping_. Pada tahap ini perangkat lunak mulai dirancang. Biasanya aspek aksesbilitas (tampilan dan alur *UI/UX*) menjadi perhatian utama, sehingga dapat dipakai oleh berbagai kalangan, termauk juga yang peyandang disabilitas
- _Implementation_ atau ada yang menyebut tahap _Development_, pada tahapan ini mulai penyusunan program (*coding* dan *debugging*)
- _Testing_, yaitu tahap ujicoba, dengan melakukan pengujian untuk mengevaluasi apakah sistem memenuhi *requirements* yang sudah disepakai pada tahap 2.
- _Deployment_, yaitu tahap siap pakai sehingga dapat diterapkan oleh pengguna, serta menyediakan dokumentasi _user manual_.
- _Operations and maintenance_, yaitu tahapan pengawasan dan perawatan.
Disini siklus biasanya tidak pernah selesai, akan selalu ada penambahan fitur dan perbaikan *bug* yang menunggu.
## Pendekatan Pengembangan Sistem
Pendekatan pengambangan sistem adalah cara pandang pengembang dalam merancang sebuah sistem untuk memenuhi kebutuhan pemakai (_user_). Secara garis besar terdiri dari dua, yaitu klasik dan terstruktur. Selain itu juga ada beberapa pendekatan lain yang dapat dibandingkan.
### Klasik vs Terstruktur
Pendekatan klasik ini disebut juga pendekatan tradisional. Meskipun mengikuti tahapan siklus pengembangan (SDLC), pendakatan ini tidak menggunakan alat-alat dan teknik yang memadai. Sehingga cocok untuk sistem yang tingkat kerumitannya rendah.
Permasalahan yang dapat ditimbulkan adalah sbb:
- Pengembangan perangkat lunak menjadi sulit, karena tidak terarah.
- Perawatan sistem menjadi mahal, karena dokumentasi tidak lengkap.
- Kemungkinan terjadi kesalahan besar, karena tidak meyediakan cara untuk menguji sistem.
- Keberhasilan dan penerapan sistem menjadi kurang terjamin, karena pendekatan ini tidak melibatkan user sebagai pengguna.
Beebeda dengan klasik, pendekatan terstruktur selain mengikuti tahapan diklus pengembangan (LCD), pendekatan ini menggunakan alat-alat dan teknik yang memadai, sehingga cocok untuk sistem yang tingkat kerumitannya tinggi.
### _Bottom-Up_ vs _Top-Down_
Pendekatan _bottom-up_ dimulai dari analisis ketersediaan data atau biasa disebut _data analysis_. Kemudian dilakukan perumusan informasi yang dapat disajikan berdasarkan ketersediaan data.
Permasalahan yang sering timbul pada pendekatan ini adalah informasi yang disajikan tidak dapat dimanfaatkan, karena tidak sesuai dengan kebutuhan pengguna.
Berbeda dengan _bottom-up_, pendekatan _top-down_ dimulai dari penggalian dan perumusan informasi apa saja yang dibutuhkan oleh pengguna, kemudian turun hingga data apa saja yang diperlukan untuk memenuhi kebutuhan tersebut. Dengan kata lain, cara ini dimulai dari perumusan output dan diakhiri dengan penentuan input.
Permasalahan yang mungkin timbul dari pendekatan ini adalah kesulitan menyajikan informasi yang diinginkan pengguna karena ternyata input atau data yang dibutuhkan tidak tersedia, akibatnya dibutuhkan proses pengumpulan data.
### Total vs Modular
Pendekatan total adalah pengembangan dimana sistem dirancang secara serentak menyeluruh dalam satu kesatuan yang utuh. Untuk sistem yang sederhana pendekatan ini sangat cocok, terutama untuk programmer tunggal. Namun permasalahan yang timbul adalah sistem sulit dikembangkan.
Berbeda dengan pendekatan di atas, modular atau bisa juga disebut pendekatan dekomposisi dilakukan dengan memecah sistem yang rumit menjadi bagian-bagian yang disebut modul-modul yang lebih kecil dan sederhana. Modul-modul itu kemudian dirangkai menjadi satu kesatuan sistem yang utuh.
Permasalahan yang mungkin timbul adalah perancangan disain yang lebih rumit diawal, karena harus disediakan antar-muka antara sistem utama dengan modul dan terdokumentasi dengan baik.
## Metode Pengembangan
Metode pengembangan sistem adalah kesatuan metode, cara yang sistematik untuk mengembangkan suatu sistem informasi dengan menerapkan prosedur, konsep, aturan yang berlaku di dalamnya.
Pada tahan disain dan analisis, metodologi yang biasa dipakai adalah sbb:
### Metodologi Pemecahan Fungsional
Metodologi ini memberi penekanan pada pemecahan sistem ke dalam subsistem-subsistem yang lebih kecil, sehingga lebih mudah untuk difahami, dikembangkan dan diterapkan. Contoh:
- HIPO, _Hierarchy of Input Plus Output_
- SR, _Stepwise Refinement_ atau ISR, _Iterative Stepwise Refinement_
- _Information Hiding_
### Metodologi Beriontasi Data
Metodologi ini memberi penekanan pada karakteristik data yang akan diproses. Jenis-jenisnya sbb:
#### _Data-Flow Oriented_
Metodologi ini menekankan pada arus data antar dan hubungan antar fungsinya di dalam modul-modul sistem. Contoh:
- SADT, _Structured and Analisys Design Techniques_
- _Composite Design_
- SSAD, _Structured System and Analisys Design_
#### _Data-Structured Oriented_
Metodologi ini menenkankan pada struktur dari input output sistem. Struktur ini kemudian menjadi dasar dari pengembangan sistem keseluruhan. Contoh:
- JSD, _Jackson System Development_
- W/O, _Warnier / Orr_
### _Prescriptive Methodologies_
Metodologi ini sering dipakai oleh _software house_ dan perusahaan-perusahaan perangkat lunak komersial.
## Alat Pengembangan Sistem
Alat bantu pengembangan sistem dapat berupa kode, gambar, atau bagan sbb:
- HIPO _diagram_, digunakan pada metodologi HIPO
- FD (_Data Flow Diagram_), digunakan pada metodologi SSAD
- _Strucrure Chart_, digunakan pada metodologi SSAD
- SADT _diagram_, digunakan pada metodologi SADT
- Warnierr/Orr _diagram_, digunakan pada metologi Warnierr /Orr
- Jackson's _diagram_, digunakan pada metodologi JSD
- Kode terstuktur (_pseudocode_)
- Bagan Alir Sistem (_system flowchart_)
- Bagan Alir Program (_program flowchart_)
- Bagan Alir Dokumen (_document flowchart_)
- Bagan Alir Proses (_process flowchart_)
- Bagan Organisasi (_organization chart_)
- Kamus Data (_data dictionary_)
- Tabel Keputusam (_decision table_)