Pada bagian ini, kita akan membahas perancangan desain yang merupakan kelanjutan terstruktur dari tahap analisis terstruktur. Perancangan perangkat lunak menjadi inti dari proses rekayasa perangkat lunak dan merupakan langkah pertama dari tiga langkah teknis yang diperlukan dalam membangun dan menguji perangkat lunak, yaitu perancangan, penulisan kode, dan pengujian.
Definisi Perancangan perangkat lunak dapat dijelaskan sebagai berikut:
- Proses mendefinisikan model atau rancangan perangkat lunak menggunakan teknik dan prinsip tertentu sehingga model atau rancangan tersebut dapat diimplementasikan menjadi perangkat lunak.
- Proses merancang arsitektur perangkat lunak, komponen, modul, antarmuka, pendekatan pengujian, serta data yang diperlukan untuk memenuhi kebutuhan yang telah ditetapkan sebelumnya.
- Proses bertahap di mana semua kebutuhan diartikan menjadi suatu rencana yang akan digunakan sebagai panduan dalam membangun perangkat lunak.
Tujuan dari perancangan oleh seorang desainer sistem adalah:
- Mendekomposisi sistem (perangkat lunak) menjadi komponen-komponennya, termasuk data, antarmuka, prosedur, dan arsitektur.
- Menentukan hubungan antara komponen-komponen tersebut.
- Menentukan mekanisme komunikasi antara komponen-komponen. Sebagai ilustrasi, dalam gambar berikutnya yang menunjukkan mekanisme dan hubungan antara komponen-komponen perangkat lunak, seperti hubungan antara antarmuka pengguna dengan prosedur/script untuk meminta data yang diinginkan oleh pengguna, serta bagaimana prosedur tersebut mengakses tabel data untuk menampilkan informasi sesuai dengan permintaan pengguna di antarmuka pengguna.
- Menentukan antarmuka antara komponen-komponen.
- Menjelaskan fungsionalitas masing-masing komponen.
Prinsip-Prinsip Perancangan
Perancangan perangkat lunak merupakan suatu model dan proses. Proses perancangan adalah serangkaian langkah yang memungkinkan seorang desainer untuk menggambarkan semua aspek dari perangkat lunak yang sedang dibangun. Model perancangan hampir mirip dengan rencana arsitektur untuk sebuah rumah, di mana dimulai dengan memberikan gambaran keseluruhan tentang apa yang akan dibangun (misalnya, pandangan tiga dimensi dari rumah yang akan dibangun). Setelah itu, langkah-langkah yang memberikan panduan bagi pembangunan setiap detail dari rumah, seperti tata letak ruangan, tata letak pipa, dan lainnya, akan disaring. Model perancangan perangkat lunak pun memiliki fungsi serupa, memberikan berbagai pandangan yang berbeda terhadap program komputer.
Davis mengemukakan beberapa prinsip yang perlu diketahui oleh desainer untuk mengendalikan proses perancangan, yaitu:
- Perancangan harus dapat dilacak kembali sampai pada model analisis.
- Perancangan tidak boleh berulang, artinya rancangan yang sudah ada sebelumnya dapat digunakan kembali (komponen yang dapat digunakan ulang).
- Perancangan harus dapat diperbaiki atau diubah tanpa mengganggu keseluruhan sistem.
- Kualitas perancangan harus dievaluasi pada saat perancangan dilakukan, bukan setelah sistem selesai dan siap diimplementasikan.
- Perancangan harus memiliki beberapa alternatif pendekatan desain.
- Perancangan harus mengungkapkan keseragaman dan integrasi.
- Perancangan harus meminimalkan kesenjangan pengetahuan antara perangkat lunak dan masalah yang ada di dunia nyata. Dalam arti lain, perancangan perangkat lunak harus mencerminkan struktur domain permasalahan.
- Perancangan bukanlah proses pengkodean, dan pengkodean bukanlah perancangan.
- Perancangan harus dianalisis untuk mengurangi kesalahan-kesalahan konseptual. Desainer harus berfokus pada hal-hal penting seperti elemen-elemen konseptual (ketidakjelasan, inkonsistensi).
Jika prinsip-prinsip perancangan di atas diterapkan dengan baik, seorang desainer akan mampu menciptakan perancangan yang mengungkapkan faktor-faktor kualitas eksternal dan internal Faktor-faktor eksternal adalah karakteristik perangkat lunak yang dapat diamati oleh pengguna (seperti kecepatan, keandalan, akurasi, dan kemudahan penggunaan). Sedangkan faktor internal lebih berkaitan dengan perancangan yang berkualitas tinggi dan aspek teknis dari perangkat lunak, yang sangat penting bagi insinyur perangkat lunak. Untuk mencapai kualitas faktor internal, seorang desainer harus memahami konsep-konsep dalam perancangan perangkat lunak.
Konsep-Konsep Perancangan
Pada dasarnya, konsep perancangan memberikan kerangka kerja atau panduan untuk menciptakan perangkat lunak yang berfungsi dengan baik. Terdapat beberapa konsep perancangan yang diusulkan oleh Pressman [PRE01] dan penting bagi seorang desainer untuk memahaminya guna mencapai perancangan berkualitas tinggi:
- Abstraksi Abstraksi adalah cara untuk mengelola kompleksitas sistem dengan menekankan pada karakteristik yang penting dan menyembunyikan detail implementasi. Terdapat tiga mekanisme dasar abstraksi: a. Abstraksi Prosedural: Urutan instruksi dengan nama yang menggambarkan fungsi tertentu. b. Abstraksi Data: Kumpulan data dengan nama yang menggambarkan objek data. c. Abstraksi Kontrol: Mekanisme pengendalian program.
- Dekomposisi Dekomposisi adalah mekanisme untuk mewakili detail fungsionalitas. Ini membantu desainer mengungkapkan detail tingkat rendah saat perancangan berlangsung. Dekomposisi membagi perancangan secara top-down, menyaring tingkat detail dari prosedural.
- Modularitas Modularitas adalah mekanisme membagi perangkat lunak menjadi elemen-elemen kecil yang dapat dipanggil secara terpisah, yang disebut modul. Modularitas penting dalam perancangan karena: a. Memisahkan fungsionalitas dalam perangkat lunak. b. Mengurangi kompleksitas sistem. c. Meningkatkan skalabilitas untuk pengembangan oleh berbagai pihak. Modularitas perangkat lunak ditentukan oleh coupling dan cohesion: a. Coupling: Tingkat ketergantungan antar modul. b. Cohesion: Tingkat keterkaitan fungsional dalam modul. Modul yang baik memiliki cohesion tinggi dan coupling rendah.
- Arsitektur Perangkat Lunak Arsitektur perangkat lunak adalah struktur hirarki komponen program (modul), cara interaksi komponen, dan struktur data yang digunakan.
- Hirarki Kontrol Hirarki kontrol mencerminkan organisasi komponen program (modul) dan mengimplikasikan hirarki kontrol. Ini juga menunjukkan visibilitas dan konektivitas antar komponen.
- Partisi Struktural Partisi struktural membagi cabang-cabang dari hirarki modul menjadi fungsi program. Partisi horizontal menghasilkan perangkat lunak yang lebih mudah diuji, diperluas, dan dipelihara.
- Struktur Data Struktur data merepresentasikan hubungan logis antara elemen data serta menentukan organisasi, metode akses, tingkat asosiativitas, dan alternatif pemrosesan.
- Prosedur Perangkat Lunak Prosedur perangkat lunak berfokus pada detail pemrosesan setiap modul, termasuk event, keputusan, operasi, dan struktur data.
- Penyembunyian Informasi Penyembunyian informasi adalah mekanisme untuk melindungi informasi dalam modul sehingga hanya modul yang berkepentingan yang dapat mengaksesnya.
Pemahaman terhadap konsep-konsep perancangan ini sangat penting bagi desainer untuk:
- Mengelola kompleksitas sistem perangkat lunak.
- Memudahkan pengaturan dan representasi sistem perangkat lunak yang rumit.
- Mengoptimalkan efisiensi dan efektivitas dalam pengembangan dan pemeliharaan perangkat lunak.
- Memisahkan tugas dan fungsionalitas dalam perangkat lunak, sehingga memudahkan pengembangan tim.
- Menyediakan struktur yang terorganisir dan terstruktur untuk perangkat lunak, sehingga meminimalkan kemungkinan kesalahan dan kesalahan desain.
- Meningkatkan skalabilitas perangkat lunak, memungkinkan pengembangan lebih lanjut oleh berbagai tim atau individu.
- Meningkatkan kemampuan untuk melakukan pengujian dan validasi perangkat lunak.
- Membantu dalam pengelolaan kompleksitas dan perubahan yang mungkin terjadi dalam perangkat lunak seiring waktu.
- Memastikan bahwa perangkat lunak memiliki struktur yang logis dan terorganisir, sehingga memudahkan pemahaman dan kolaborasi di antara tim pengembang.
- Menghasilkan perangkat lunak yang berkualitas tinggi dan dapat diandalkan, sesuai dengan kebutuhan dan tujuan yang telah ditetapkan.
Secara keseluruhan, pemahaman dan penerapan konsep-konsep perancangan ini membantu para desainer perangkat lunak dalam menciptakan solusi yang lebih terstruktur, efisien, dan handal, sehingga mendukung kesuksesan proyek perangkat lunak secara keseluruhan.