Afrizal Yogi Pratama
Apr 22, 2022
Desain merupakan perencanaan tentang sesuatu yang akan dibangun dengan penggambaran sketsa. Proses desain diperlukan agar kualitas dapat diukur dan dijamin jauh sebelum dilakukan implementasi fisik, sehingga dapat meminimalisir resiko dan dampak dari resiko yang ditimbulkan.
Sebuah perangkat lunak harus didesain dengan beberapa faktor, yaitu:
Adapun beberapa jenis layer desain dalam perangkat lunak adalah sebagai berikut:
Perangkat lunak yang memiliki kualitas desain baik memiliki arsitektur yang:
Adapun tujuan akhir dari desain perangkat lunak adalah sebagai berikut:
Menangkap seberapa jauh sebuah daftar fitur dan kebutuhan dapat dibagi kedalam bagian-bagian yang lebih kecil supaya mempermudah dalam menyelesaikannya satu-persatu.
Perangkat Lunak dibagi ke dalam komponen-komponen kecil yang efisien (fokus pada tugasnya) dan memiliki ketergantungan sekecil mungkin antar satu dengan lainnya.
a. Abstraction
Menata kompleksitas solusi ke dalam berbagai lapisan abstraksi. Contoh:
- Abstraksi Struktural

- Abstraksi Prosedural

b. Modularity
Membagi desain arsitektur perangkat lunak ke dalam komponen-komponen kecil sehingga lebih manageable dengan lokalisasi masalah dan resiko.
c. Information Hiding
Membatasi akses hanya sampai level abstraksi tertinggi yang dapat digunakan oleh modul lain untuk mencegah efek samping yang tidak diinginkan.
d. Functional Independence
Saat modul berfokus pada satu tugas, maka harus meminimalisir interaksi dengan modul lain.
Kelas yang ada pada tahap desain dapat dibedakan menjadi:
a. Kelas Analisis
Kelas hasil turunan dari tahap analisis, dengan melakukan modifikasi dan adaptasi terhadap lingkungan implementasi. Misal : kelas Mahasiswa, pada tahap desain ditambahkan fungsi getSummary() untuk mendapatkan rangkuman keterangan identitas yang akan ditampilkan pada dashboard.
b. Kelas Boundary
Kelas yang terlibat dalam pembangungan antarmuka perangkat lunak. Misal: kelas-kelas form, dsb.
c. Kelas Controller
Kelas yang dibuat untuk mengatur jalannya perangkat lunak. Misal: kelas Main, kelas SessionController, dsb.
Arsitektur perangkat lunak adalah penggambaran secara konseptual terhadap keseluruhan struktur dari perangkat lunak. Pada engineering yang tangible, arsitektur dapat dilakukan dengan penggambaran 2 dimensi maupun 3 dimensi, sefangkan dalam perangkat lunak hal ini berbeda karena tidak memiliki bentuk fisik.
Model yang dapat digunakan dalam representasi arsitektur perangkat lunak antara lain:
a. Design Patterns
Design Patterns adalah polsa-pola desain khusus yang dapat digunakan ulang untuk keperluan tertentu. Tujuan design patterns adalah implementasi cara yang sudah teruji, dan memudahkan komunikasi.
b. Aspects
Aspects adalah fitur yang beririsan dengan fitur-fitur lainnya pada saat desain perangkat lunak. Contoh:
Maka, C beririsan dengan A dan B karena Mahasiswa dan Dosen harus terlebih dahulu tervalidasi sebelum dapat membuka halaman kuliah virtual. C adalah aspect dari desain perangkat lunak tersebut.
Aspects harus diakomodir pada desain perangkat lunak, sehingga dapat diimplementasikan pada fitur-fitur lain yang beririsan. Misalnya dengan membuat modul Session yang bertugas khusus melakukan autentikasi dan validasi untuk seluruh sistem.
Desain dilakukan secara bertahap, mulai dari abstraksi yang paling tinggi hingga kepada detail terkecil.
Desain dilakukan secara iterative, berulang-ulang. Pada setiap iterasi, dilakukan refactoring yaitu optimasi dengan menghilangkan / memperbaiki:
Prinsip terpenting dalam refactoring yaitu perubahan yang dilakukan tidak boleh mempengaruhi berjalannya system secara keseluruhan.