PT. Neuronworks Indonesia

2023-10-20 04:10:52, Ristek ALPRA,


Principle of Software Engineering

1. KISS (Keep It Simple, Stupid)

Ok, kita mulai dari prinsip yang paling simple: KISS (Keep It Simple, Stupid / Keep It Stupid Simple / Keep It Simple, Silly / Keep It Simple and Straightforward Keep It Small and Simple).

Dari namanya, kita pasti sudah bisa menebak maksudnya. Yup, prinsip ini mengajarkan kita agar jangan terlalu berfikir kompleks untuk masalah yang sederhana. Gunakan solusi yang sederhana untuk masalah yang sederhana. Contoh: Kita tidak perlu menggunakan microservices architecture untuk kebutuhan landing page sederhana.

Contoh lain dalam kode:

  • NOT - KISS WAY

image

  • KISS WAY

image


 

 

2. DRY (Don't Repeat Yourself)

 

Don’t Repeat Yourself. Jangan membuat kode yang sama secara berulang-ulang di berbagai tempat. Ini akan membuat kode sulit untuk di- maintain. Cukup membuat satu fungsi di satu tempat lalu panggil/gunakan fungsi tersebut secara berulang-ulang. DRY juga berlaku di level yang lebih tinggi, contoh pada class dan package. Jangan membuat membuat class yang sama fungsinya jika sudah ada class lain. Gunakan class tersebut atau inherit jika diperlukan modifikasi.

Kebalikan dari prinsip DRY adalah WET (Write Everything Twice). Dengan WET, kode yang sama ditulis berulang-ulang.

Contoh Implementasi:

  • NOT DRY ~ WET image
  • DRY image

 

3. YAGNI (You Aren't Gonna Need It)

 

You Ain’t (Aren’t) Gonna Need It = Kamu tidak akan membutuhkannya.

Prinsip ini mengajarkan agar kita menulis kode hanya yang diperlukan, jangan berfikir terlalu panjang sehingga memasukan fungsi-fungsi yang tidak akan kita perlukan. Contoh sebagai programmer, kita diminta untuk membuat sebuah prototype aplikasi online store. Kita berfikir akan membuatnya dengan teknologi Flutter untuk mobile app nya, backend nya dengan Spring Boot dengan arsitektur microservices. DB nya menggunakan MongoDB dan Redis sebagai cache nya. Tapi ternyata setelah kita buat, product manager kita hanya meng-capture view-nya untuk ditampilkan di slide presentasi.

YAGNI sejalan dengan KISS yaitu kita jangan berfikir terlalu jauh dan kompleks. Berfikir ke depan bagus, tapi harus ada batasnya. Karena dalam pengerjaan project ada batas-batas yang harus kita ikuti, contoh timeline, budget, dsb.

image


 

4. SOLID

 

SOLID Principles adalah salah satu prinsip “standar” yang bisa diterapkan pada kode program yang kita buat. Apabila kita menerapkan prinsip SOLID, maka kode yang kita buat akan menjadi jauh lebih baik; lebih mudah di-maintain, flexible, reusable, extendable. Dengan kata lain, kode kita menjadi lebih “pro”.

SOLID dipopulerkan oleh Uncle Bob (Robert C. Martin), meskipun beberapa item di dalamnya sudah pernah dipopulerkan sebelumnya oleh orang lain. Uncle Bob adalah penulis buku “Clean Code: A Handbook of Agile Software Craftsmanship”. Ini adalah salah satu buku yang saya rekomendasikan kepada setiap programmer untuk dibaca.

“Writing clean code is what you must do in order to call yourself a professional. There is no reasonable excuse for doing anything less than your best.” Robert C. Martin

image

1. SRP (Single Responsibility Principle)

Definisi: “A class should have one and only one reason to change (single responsibility)” Dalam satu class, hanya boleh diisi dengan satu tanggung jawab. Jangan memasukan kode yang beraneka ragam ke dalam satu class. Contoh: Jika class tersebut bertanggung jawab untuk me-manage tabel “users”, maka tidak boleh dibebani lagi dengan tabel “orders” misalnya, atau dengan menambahkan perhitungan diskon akhir tahun. Perhitungan diskon harus dipisahkan ke class tersendiri. Manajemen tabel “orders” pun harus dipisah ke class tersendiri.

Mengapa hal ini penting?

  • Saat menulis class atau function yang didedikasikan untuk satu fungsi, akan lebih mudah untuk memahami, memelihara, dan memodifikasi kode Anda.
  • Jika Anda ingin mengubah fungsionalitas sistem, akan mudah mencari bagian code yang harus diubah.
  • Membuat kode lebih terorganisir dan mudah dibaca. Ini juga membuat penggunaan kembali kode menjadi lebih mudah.

Conton Implementasi :

  • Tanpa SRP

image

  • Dengan SRP

image


 

2. OCP (Open Closed Principle)

 

Definisi: “Entities (classes, modules, functions etc.) should be open for extension but closed for modifications”.

Class/function harus dapat di-extend fungsinya tanpa merubah kode di dalamnya. Hmm terdengar tricky, tapi dalam programming hal itu bisa dilakukan.

image

Ide ini difasilitasi oleh Open/Closed Principle. function, class, dan modul kita harus dirancang sedemikian rupa sehingga terbuka untuk perluasan, namun tertutup untuk modifikasi.

  • Open for Extension: Fungsi baru dapat ditambahkan ke dalam class dan modul tanpa merusak kode yang ada. Komposisi dan warisan dapat digunakan untuk mencapai hal ini.
  • Closed for Modification: Sebaiknya jangan membuat perubahan yang merusak fungsionalitas saat ini, karena hal ini memerlukan refactoring dari kode yang sudah ada dan menulis beberapa pengujian untuk memastikan perubahan tersebut berfungsi.

Contoh Implementasi:

  • Contoh yang belum menggunakan OCP:

image

  • Contoh yang salah:

image image image

  • Contoh yang benar:

image image image image image image image


 

3. LSP (Liskov Substitution Principle)

 

Definisi: “Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it”. Class harus bisa di-switch dengan class turunannya tanpa menyebabkan kesalahan logic ataupun teknis.

image

Contoh Implementasi :

image image image image image


 

4. ISP (Interface Segregation Principle)

 

Clients should not be forced to depend upon interfaces that they do not use.”

Interface dibuat sesuai dengan kebutuhan klien, dan tidak boleh memaksa untuk mengimplementasi semua function. Karena, mungkin beberapa function tidak dibutuhkan oleh class tersebut.

image

 

Contoh :

 

image


 

5. DIP (Dependency Inversion/Injention Principle)

 

Definisi: “Clients should not be forced to depend upon interfaces that they do not use.” A. “High level modules should not depend upon low level modules. both should depend upon abstractions.” B. “Abstractions should not depend upon details. Details should depend upon abstractions.”

Mirip-mirip SRP, tapi ini berlaku ntuk interface. Interface juga tidak boleh memiliki terlalu banyak function sehingga memaksa client class nya untuk mengimplementasi semua function. Karena, mungkin beberapa function tidak dibutuhkan oleh class tersebut.

image

 

Contoh :

 

image image image image image image