Yogi.AY
PortfolioBlogServiceProductAbout meContact
Afrizal Yogi PratamaContact

afrizalyogi@aycorp.id

Yogi.AY
PortfolioBlogServiceProductAbout me

with by Afrizal Yogi Pratama

Back

System Design

Afrizal Yogi

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.


Konsep Desain Perangkat Lunak

Sebuah perangkat lunak harus didesain dengan beberapa faktor, yaitu:

  • Firmness: Terhindar dari bugs dan error yang dapat mengganggu jalannya perangkat lunak.
  • Commodity: Sesuai dengan keperluan dan kebutuhan.
  • Delight: Nyaman digunakan oleh pengguna perangkat lunak.

Layer Desain Perangkat Lunak

Adapun beberapa jenis layer desain dalam perangkat lunak adalah sebagai berikut:

  • Desain Data: Translasi ERD & Data Dictionary ke dalam konteks lingkungan implementasi.
  • Desain Arsitektur: Rancang bangun dari perangkat lunak, relasi dan posisi antar bagian utama dari perangkat lunak dengan memanfaatkan “design patterns”.
  • Desain Antarmuka: Merancang metode interaksi antar komponen perangkat lunak dan terhadap pengguna.
  • Desain Komponen: Desain detail masing-masing prosedur di dalam komponen.

Mengukur Kualitas Desain Perangkat Lunak

Perangkat lunak yang memiliki kualitas desain baik memiliki arsitektur yang:

  • Dibuat berdasarkan template dan design patterns yang telah teruji.
  • Berisi komponen yang memiliki karakteristik desain yang baik.
  • Dapat diimplementasikan secara bertahap.
  • Desain perangkat lunak bersifat modular.
  • Desain perangkat lunak berisi representasi yang jelas dari data, arsitektur, antarmuka, komponen.
  • Desain perangkat lunak memiliki struktur data yang pantas untuk setiap kelas.
  • Desain perangkat lunak memiliki komponen yang functionally independent.
  • Desain perangkat lunak memiliki antarmuka yang simpel.
  • Desain perangkat lunak dilakukan dengan metode yang jelas dan telah terbukti.
  • Desain perangkat lunak menggunakan representasi yang dapat dimengerti bersama.

Tujuan Akhir Desain Perangkat Lunak

Adapun tujuan akhir dari desain perangkat lunak adalah sebagai berikut:

  • Desain harus mengimplementasikan semua spesifikasi kebutuhan tertulis, dan juga memenuhi harapan tak tertulis dari pengguna.
  • Desain harus terdokumentasi dan mudah dibaca serta dimengerti oleh yang berkepentingan.
  • Desain harus dapat menggambarkan keseluruhan dari perangkat lunak.

Konsep Utama Desain Perangkat Lunak

1. Separation of Concerns

Menangkap seberapa jauh sebuah daftar fitur dan kebutuhan dapat dibagi kedalam bagian-bagian yang lebih kecil supaya mempermudah dalam menyelesaikannya satu-persatu.


2. OO Design Concepts

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

Image

- Abstraksi Prosedural

Image

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.


3. Design Classes

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.


4. Architecture

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:

  • Structural Models: Komponen-komponen apa saja yang ada pada perangkat lunak.
  • Framework Models: Kerangka & patterns apa yang digunakan.
  • Dynamic Models: Bagaimana perangkat lunak bereaksi pada setiap use case.
  • Process Models: Proses teknis dari berjalannya perangkat lunak.
  • Functional Models: Hirarki secara fungsional dari komponen perangkat lunak.


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:

  • Fitur A: Mahasiswa dapat membuka halaman kuliah virtual yang dia ikuti.
  • Fitur B: Dosen dapat membuka halaman kuliah virtual yang dia ampu.
  • Fitur C: Pengguna yang membuka halaman kuliah harus tervalidasi terdaftar pada Mata Kuliah tersebut.

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.


5. Refinement

Desain dilakukan secara bertahap, mulai dari abstraksi yang paling tinggi hingga kepada detail terkecil.


6. Refactoring

Desain dilakukan secara iterative, berulang-ulang. Pada setiap iterasi, dilakukan refactoring yaitu optimasi dengan menghilangkan / memperbaiki:

  • Redundansi
  • Elemen desain tak terpakai
  • Algoritma yang tidak efisien/tidak perlu
  • Struktur Data yang badly designed
  • Faktor lain yang dapat diperbaiki

Prinsip terpenting dalam refactoring yaitu perubahan yang dilakukan tidak boleh mempengaruhi berjalannya system secara keseluruhan.