Mungkin teman-teman developer sering bertanya dalam hati “Apakah saya perlu belajar system design?” atau mungkin “Apa sih system design itu?”, dan jawaban atasan pertanyaan-pertanyaan tersebut menurut saya developer perlu untuk belajar atau mengerti tentang system design.
Karena seperti yang kita ketahui bersama dalam dua dekade terakhir, sudah ada banyak perkembangan dalam aplikasi website berskala besar. Perkembangan ini sudah mengubah cara berpikir kita tentang pembuatan aplikasi. Semua aplikasi dan service yang kita gunakan sehari-hari, seperti Facebook, Instagram, dan Twitter, adalah sistem yang scalable. Dimana jutaan orang di dunia mengakses sistem tersebut secara bersamaan, jadi sistem-sistem tersebut perlu didesain untuk bisa menangani traffic data dalam jumlah besar. Di sinilah peran system design diperlukan.
Sebagai software developer, teman-teman akan semakin mengerti dan memahami konsep system design dan cara pengaplikasiannya. Terlebih, jika dalam masa awal karir teman-teman sudah mulai mempelajari tentang system design, tentu hal tersebut akan membuat teman-teman bisa menghadapi masalah terkait system design dengan lebih percaya diri dan bisa mengaplikasikannya dalam pekerjaan sehari-hari.
Baiklah langsung saja, mari kita mulai ulas terkait system design di bawah ini.
Pengertian System Design
Berarti desain sistem (dalam bahasa Indonesia), system design adalah proses mendefinisikan elemen sistem seperti architecture (arsitektur), module (modul) dan component (komponen), interface (antarmuka) yang berbeda dari komponen tersebut dan data yang melewati sistem itu.
Desain sistem ini dimaksudkan untuk memenuhi kebutuhan dan persyaratan khusus dari bisnis, digital agency, atau organisasi melalui rekayasa sistem yang koheren dan berjalan dengan baik.
Pendekatan sistemik diperlukan untuk sistem yang koheren dan berjalan dengan baik.
Pendekatan bottom-up atau top-down seringkali diperlukan untuk memperhitungkan semua variabel terkait dari sistem.
Terkait proses dan cara kerjanya sendiri, biasanya seorang system designer (desainer) menggunakan bahasa pemodelan (modelling) untuk mengekspresikan informasi dan pengetahuan dalam struktur sistem yang didefinisikan oleh seperangkat rules atau aturan dan definisi yang konsisten.
Desain tersebut dapat didefinisikan dalam bahasa pemodelan grafis (graphical modelling language) atau tekstual (textual modelling language).
Apa itu System Design?
Jadi, apa itu sebenarnya yang dimaksud dengan system design ini?
Desain sistem adalah fase yang menjembatani kesenjangan antara domain masalah dan sistem yang ada dengan cara yang dapat dikelola.
Fase ini seringkali berfokus pada domain solusinya, yaitu bagaimana cara penerapannya.
Ini adalah fase di mana dokumen Software Requirements Specification (SRS) diubah menjadi format yang dapat diimplementasikan dan memutuskan bagaimana sistem akan beroperasi.
Pada tahapan atau fase system design ini, aktivitas system atau software development yang kompleks dibagi menjadi beberapa sub aktivitas yang lebih kecil, yang saling berkoordinasi untuk mencapai tujuan utama pengembangan sistem.
Prinsip System Design
Setelah kita mengetahui apa itu system design kita akan membahas mengenai prinsip-prinsip dasar apa saja yang dapat digunakan ketika membuat system design yang baik dan benar.
Dalam PMBOK (Project Management Body of Knowledge) dan dalam Project Quality Management area, mengidentifikasi beberapa karakteristik dari yang namanya “Good” Software. Pembahasan berikut ini tentang prinsip-prinsip desain yang baik sebagai titik awal teman-teman untuk memahami bagaimana merancang perangkat lunak berkualitas tinggi.
-
Object Responsibility
Salah satu prinsip paling mendasar dari desain berorientasi objek adalah gagasan tentang tanggung jawab objek, yaitu objek harus bertanggung jawab untuk melakukan pemrosesan sistem. -
Separation of Responsibilities or Separation of Concerns
Pemisahan tanggung jawab, adalah prinsip desain yang diterapkan pada sekelompok class daripada setiap class secara individual. Ide dasar pemisahan tanggung jawab adalah untuk memisahkan class ke dalam paket atau pengelompokan berdasarkan fokus utama dari pemrosesan tanggung jawab. Pemisahan tanggung jawab adalah prinsip dasar di balik desain multilayer.
Dalam desain multilayer, ada class user interface, class business logic, dan class akses data. Setiap lapisan memiliki fokus atau bidang tanggung jawab tertentu.
Class yang memiliki fokus atau perhatian yang sama dikelompokkan bersama dalam satu lapisan. Prinsip desain ini memungkinkan fleksibilitas dalam penyebaran sistem karena lapisan yang berbeda, yaitu, pengelompokan class, dapat ditempatkan di komputer yang berbeda atau di lokasi yang berbeda. -
Protection from Variations
Bahwa bagian-bagian dari sistem yang tidak mungkin berubah harus dipisahkan (atau dilindungi) dari yang akan berubah. Saat Anda merancang sistem, Anda harus mencoba mengisolasi bagian-bagian yang akan berubah dari yang lebih stabil.
Perlindungan dari variasi adalah prinsip yang mempengaruhi pola desain multilayer. Desainer dapat menggabungkan semua logika antarmuka pengguna dan logika bisnis bersama di class yang sama.
-
Indirection
Adalah prinsip memisahkan dua class atau komponen sistem lainnya dengan menempatkan class menengah di antara mereka untuk berfungsi sebagai link.
Dengan kata lain, instruksi tidak langsung dari A ke B; mereka dikirim melalui C terlebih dahulu. Atau dalam terminologi pesan, jangan mengirim pesan dari A ke B. Biarkan A mengirim pesan ke C dan kemudian membiarkan C meneruskannya ke B.
-
Coupling
Adalah ukuran kualitatif seberapa dekat class dalam diagram class design dihubungkan. Cara sederhana untuk memikirkan tentang coupling adalah dengan jumlah hubungan asosiasi dan hubungan seluruh/bagian pada diagram class design. Sebelumnya, teman-teman belajar tentang visibilitas navigasi, yang mengukur apa yang dapat dihubungkan dan diakses oleh suatu class.
-
Cohesion
Mengacu pada konsistensi method dalam satu class dan merupakan ukuran kualitatif dari fokus atau kesatuan tujuan. Tidak seperti coupling, class harus sangat kohesif agar dirancang dengan baik.
Class dengan kohesi rendah memiliki beberapa efek negatif. Pertama, mereka sulit dipertahankan. Karena mereka melakukan banyak method yang berbeda, mereka cenderung terlalu sensitif terhadap perubahan dalam sistem. Kedua, sulit untuk menggunakan kembali class seperti itu karena mereka memiliki banyak method yang berbeda dan seringkali tidak terkait.
Jenis System Design
Sekarang kita sudah mengetahui apa arti serta prinsip dari system design.
Selanjutnya dalam subbagian ini kita akan membahas apa saja jenis-jenis dari system design.
System design berfokus pada mendefinisikan kebutuhan pelanggan dan fungsionalitas yang diperlukan di awal siklus pengembangan, mendokumentasikan persyaratan, kemudian melanjutkan dengan sintesis desain dan validasi sistem sambil mempertimbangkan masalah keseluruhan.
Adapun beberapa jenis system design yang harus kalian ketahui adalah sebagai berikut.
-
Logical Design
Jenis design ini adalah representasi abstrak dari aliran data, input, dan output dari sistem. Logical design menjelaskan sumber, tujuan, penyimpanan data, dan aliran data semua dalam proses yang memenuhi kebutuhan user (pengguna).
Desain logis dari suatu sistem akan disiapkan sambil menjaga tingkat detail yang secara virtual (virtually) memberi tahu aliran informasi (baca pengertian informasi disini) dan keluar dari sistem dalam pikiran. Di dalamnya, aliran data (data flow) dan diagram ER (Entity Relation) digunakan, masing-masing.
-
Physical Design
Dalam jenis desain ini, proses input dan output aktual dari sistem terkait dengan desain fisik. Adapun kriteria utama jenis system design physical design yaitu adalah mengelola bagaimana data diverifikasi, diproses, dan ditampilkan sebagai hasilnya.
Ini pada dasarnya berkisar pada desain interface (antarmuka), process design (desain proses), dan user data design (desain data pengguna).
-
Architectural Design
Disebut juga desain tingkat tinggi (high level design) yang menekankan pada desain arsitektur sistem. Desain arsitektur ini adalah desain yang menjelaskan sifat dan akar dari sistem.
-
Detailed Design
Jenis terakhir yang dapat dijelaskan disini yaitu adalah detailed design atau desain rinci. Detailed design ini merupakan tipe system design yang mengikuti desain arsitektur dan berfokus atau menekankan pengembangan setiap module (modul).
Kesimpulan
Jadi, berdasarkan penjelasan dan pembahasan di atas, dapat disimpulkan bahwa system design adalah proses mendefinisikan elemen sistem seperti modul, arsitektur, komponen dan antarmuka mereka dan data untuk sistem berdasarkan persyaratan yang ditentukan bisnis, organisasi, digital agency, atau perusahaan. Perancangan sistem yang baik dengan mengorganisasikan modul-modul program sedemikian rupa sehingga mudah untuk dikembangkan dan diubah.
PT Suitmedia Kreasi Indonesia selalu siap membantu perancangan sistem bisnis yang optimal. Suitmedia Digital Agency yang berlokasi di Jakarta dapat melakukan transformasi digital melalui strategi, pengembangan produk, web dan mobile development serta komunikasi kreatif.
Demikian artikel yang dapat kami bagikan kali ini. Semoga dapat bermanfaat dan juga dapat menambah wawasan dan pengetahuan kita semua terutama dalam bidang teknologi khususnya teman-teman developer sekalian.
Penulis: Renandika Galih (Senior Software Engineer)
Editor: Jessica Patricia (Content Marketing)