Software Arsitektur dan Design: It’s The Decisions You Wish You Could Get Right Early in a Project
Pembahasan mengenai definisi software arsitektur serta software design, sebenarnya telah lama sekali dibicarakan dan diperdebatkan oleh para ahli yang bekerja pada pengembangan perangkat lunak (software developer). Beberapa ahli mengartikan software arsitektur sebagai bagian paling mendasar atau fundamental dari organisasi software yang kita kembangkan. Ada juga ahli yang mengartikan software arsitektur berupa cara bagaimana komponen-komponen software secara high level berinteraksi satu sama lain.
Pada penjelasan diatas kita garis bawahi kata-kata fundamental dan komponen-komponen tingkat tinggi (high Level component). Mengapa hal ini kita pertegas? Ternyata sampai sekarang tidak ada cara yang paling objektif dalam menentukan seberapa fundamental dan setinggi apa level komponen tersebut. Pada kenyataannya, pemahaman mengenai arsitektur yang lebih baik ini merupakan pemahaman bersama para software developer yang expert di dalam merancang sistem.
Ada juga yang mengartikan software arsitektur dari segi fungsinya. Software arsitektur adalah keputusan desain yang harus kita buat di awal project. Hal ini dilakukan dengan tujuan agar sebelum melakukan pembuatan software kita telah memiliki landasan yang kuat dan kokoh untuk pembuatan software yang akan kita kerjakan.
Definisi di atas merupakan salah satu definisi favorit saya tentang software arsitektur seperti definisi dari Ralph Johnson, yang merupakan penulis buku berjudul Design Patterns: Elements of Reusable Object-Oriented Software:
“Software Architecture is the decisions you wish you could get right early in a project”
Pernahkah kita bertanya-tanya bagaimana sistem atau software pada perusahaan skala besar dirancang? Umumnya pada perusahaan besar seperti google atau facebook, sebelum pengembangan modul utama dimulai, biasanya telah diputuskan desain dan software arsitektur yang sesuai yang akan menawarkan atribut kepraktisan dan kualitas yang diinginkan. Oleh karena itu, kita harus selalu memahami berbagai ragam arsitektur yang berbeda, sebelum memilih dan menerapkannya pada aplikasi kita.
Software arsitektur disebut juga sebagai cetak biru untuk suatu sistem. Ini memberikan abstraksi untuk mengelola kompleksitas sistem dan membangun mekanisme komunikasi dan koordinasi antar komponen. Berikut adalah hal-hal yang berkaitan dengan fungsi sebagai cetak biru.
- Cetak biru ini akan mendefinisikan solusi terstruktur untuk memenuhi semua persyaratan teknis dan operasional, sambil mengoptimalkan atribut umum seperti kinerja dan keamanan.
- Cetak biru ini akan melibatkan serangkaian keputusan penting tentang organisasi yang terkait proses software development dan masing-masing keputusan ini dapat berdampak besar pada kualitas, pemeliharaan, kinerja, dan keberhasilan keseluruhan produk akhir.
Memilih arsitektur akan menentukan cara kita menangani kinerja, toleransi kesalahan, skalabilitas, dan keandalan.
Dari penjelasan-penjelasan di atas dapat kita simpulkan bahwa software arsitektur intinya adalah sesuatu yang penting yang harus dipikirkan oleh seorang solution arsitek. Dengan demikian, solution arsitek harus dapat menentukan bagian-bagian mana dari sistem software kita yang penting yang akan memberikan dampak yang serius dari aplikasi kita di kemudian hari. Dari hal-hal penting itu lah kita mulai bergerak dan menjelaskan bagaimana hal-hal yang penting tersebut kita berikan solusi nya.
Relevansi Praktis untuk Team Business dan Pengguna
Sekarang kita sudah jelas tentang apa itu arsitektur perangkat lunak dan apa resikonya jika tidak memiliki atau memiliki tetapi tidak bagus. Saya pikir kita semua setuju bahwa arsitektur perangkat lunak itu penting. Keberadaannya sangat menentukan keberhasilan dari aplikasi yang akan kita buat. Namun, apa untungnya bagi Anda sebagai pengguna perangkat lunak dan pelanggan yang membayar?
Dari sisi pengguna, umumnya kita sebagai pengguna tidak peduli software arsitektur ada atau tidak. Yang pengguna pedulikan dan khawatirkan adalah fungsional dari sistem, performance, dan kehandalannya. Ketiganya memiliki dampak yang signifikan pada pengalaman pengguna dan dapat dengan cepat menyebabkan frustasi jika mereka buruk. Arsitektur yang baik membantu memastikan bahwa solusi dapat diandalkan, bekerja dengan baik, dan memenuhi semua persyaratan fungsional.
Adapun, dari sisi bussines atau yang membeli aplikasi kita dapat dijelaskan seperti berikut. Ketika perusahaan memutuskan untuk membeli, membuat, atau melisensikan solusi perangkat lunak, mereka juga memperhatikan fungsionalitas, kinerja, dan keandalannya. Tapi ada lebih banyak lagi yang mereka inginkan. Mereka juga biasanya mempertimbangkan solusi baru memenuhi:
- Kompatibilitas dan interoperabilitas dengan sistem TI yang ada,
- Keamanan dan perlindungan data,
- Pemeliharaan dan kesesuaian untuk disesuaikan dengan persyaratan baru atau yang berubah (bukti masa depan),
- Dan biaya.
Hal-hal diatas sangat benar terutama jika menyangkut solusi bisnis-kritis, karena mereka dapat membahayakan seluruh bisnis dan kesalahan dapat membuat mereka bangkrut.
Software Design
Disisi lain software design bertanggung jawab atas desain level kode — apa yang dilakukan setiap modul, ruang lingkup class, dan fungsi atau method, tujuan, dll. Ketika digunakan secara strategis, mereka dapat membuat program lebih efisien, memberi mereka metode yang telah disempurnakan oleh yang lain, jadi mereka tidak harus terus-menerus menciptakan kembali sesuatu telah ada dan bagus (don’t reinvent the wheel or don’t repeat yourself).
Dari proses inilah muncul apa yang disebut sebagai software design pattern. Sampai sekarang sudah banyak design pattern yang sudah terbukti dan umum digunakan oleh semua software developer.
Software design pattern telah menjadi objek dari beberapa menjadi kontroversi di dunia pemrograman belakangan ini, sebagian besar karena mereka dianggap ‘penggunaan berlebihan’ yang mengarah ke kode yang bisa lebih sulit untuk dipahami dan dikelola.
Penting untuk dipahami bahwa software design pattern tidak pernah dimaksudkan untuk meretas software kita atau untuk diterapkan secara sembarangan tidak ada solusi untuk semua persoalan. Pada akhirnya, tidak ada pengganti untuk kemampuan problem solving dalam proses pengembangan software.
Faktanya tetap, bagaimanapun, bahwa software design pattern bisa sangat berguna jika digunakan dalam situasi yang tepat dan untuk alasan yang benar. Ketika digunakan secara strategis, mereka dapat membuat programmer jauh lebih efisien dengan memungkinkan mereka untuk menghindari pembuatan hal- hal yang sudah ada, lebih baik menggunakan metode yang telah disempurnakan oleh orang lain. Software design pattern juga menyediakan bahasa umum yang berguna untuk membuat konsep masalah dan solusi yang berulang saat berdiskusi dengan orang lain atau mengelola kode dalam tim yang lebih besar.
Kita tidak akan membahas software design patterns ini lebih dalam karena akan keluar dari topik buku ini. Terdapat banyak sudah buku-buku yang bisa dibaca apabila ingin mengetahui lebih dalam mengenai software design pattern ini. Salah satunya adalah. Design Patterns: Elements of Reusable Object‑Oriented. Yang jelas Software Arsitektur dan Software Design akan bekerja sama dalam menghasilkan software yang baik dan berkualitas.

