• Tidak ada hasil yang ditemukan

BAGAIMANA KARAKTERISASI DESAIN PERANGKAT LUNAK YANG BAIK?

Dalam dokumen Perangkat Lunak - Digital Library Univ STEKOM (Halaman 186-189)

DESAIN SOFTRWARE

5.2 BAGAIMANA KARAKTERISASI DESAIN PERANGKAT LUNAK YANG BAIK?

Menghasilkan karakterisasi yang akurat dari desain perangkat lunak yang baik yang akan bertahan di berbagai domain masalah tentu tidak mudah. Faktanya, definisi desain perangkat lunak yang "baik" dapat bervariasi tergantung pada aplikasi persis yang sedang dirancang. Misalnya, "ukuran memori yang digunakan oleh suatu program" mungkin menjadi masalah penting untuk Mengkarakterisasi solusi yang baik untuk pengembangan perangkat lunak yang disematkan—karena aplikasi yang disematkan sering kali diperlukan untuk bekerja di bawah ukuran memori yang sangat terbatas karena pertimbangan biaya, ruang, atau konsumsi daya. Untuk aplikasi yang disematkan, faktor-faktor seperti pemahaman desain mungkin tidak diperhatikan saat menilai kebaikan desain. Jadi untuk aplikasi yang disematkan, seseorang dapat mengorbankan pemahaman desain untuk mencapai kekompakan kode.

Demikian pula, biasanya tidak benar bahwa kriteria yang sangat penting untuk beberapa aplikasi, hampir sepenuhnya diabaikan untuk aplikasi lain. Oleh karena itu jelas bahwa kriteria yang digunakan untuk menilai solusi desain dapat sangat bervariasi di berbagai jenis aplikasi.

Tidak hanya kriteria yang digunakan untuk menilai solusi desain tergantung pada aplikasi yang tepat yang sedang dirancang, tetapi untuk membuat masalah menjadi lebih buruk, tidak ada kesepakatan umum antara insinyur perangkat lunak dan peneliti tentang kriteria yang tepat

untuk digunakan untuk menilai desain bahkan untuk tujuan tertentu. kategori aplikasi.

Namun, sebagian besar peneliti dan insinyur perangkat lunak menyetujui beberapa karakteristik yang diinginkan yang harus dimiliki oleh setiap desain perangkat lunak yang baik untuk aplikasi umum. Karakteristik ini tercantum di bawah ini:

Kebenaran: Desain yang baik pertama-tama harus benar. Artinya, ia harus mengimplementasikan semua fungsi sistem dengan benar.

Dapat dimengerti: Desain yang baik harus mudah dimengerti. Kecuali solusi desain mudah dimengerti, akan sulit untuk menerapkan dan memeliharanya.

Efisiensi: Sebuah solusi desain yang baik harus secara memadai mengatasi masalah sumber daya, waktu, dan optimasi biaya.

Pemeliharaan: Desain yang baik harus mudah diubah. Ini adalah persyaratan penting, karena permintaan perubahan biasanya terus datang dari pelanggan bahkan setelah rilis produk.

Pemahaman Desain: Perhatian Utama

Saat melakukan desain untuk masalah tertentu, asumsikan bahwa kita telah sampai pada sejumlah besar solusi desain dan perlu memilih yang terbaik. Jelas semua desain yang salah harus dibuang terlebih dahulu. Dari solusi desain yang benar, bagaimana kita bisa mengidentifikasi yang terbaik? Mengingat bahwa kita hanya memilih dari solusi desain yang benar, pemahaman solusi desain mungkin merupakan masalah yang paling penting untuk dipertimbangkan saat menilai kebaikan desain.

Ingat kembali dari diskusi kita di Bab 1 bahwa desain yang baik seharusnya membantu mengatasi keterbatasan kognitif manusia yang muncul karena keterbatasan memori jangka pendek. Masalah besar menguasai pikiran manusia, dan desain yang buruk akan memperburuk masalah. Kecuali solusi desain mudah dimengerti, itu bisa menyebabkan implementasi memiliki sejumlah besar cacat dan pada saat yang sama sangat mendorong biaya pengembangan. Oleh karena itu, solusi desain yang baik harus sederhana dan mudah dimengerti. Sebuah desain yang mudah dipahami juga mudah untuk dikembangkan dan dipelihara. Sebuah desain yang kompleks akan menyebabkan sangat meningkatkan biaya siklus hidup. Kecuali sebuah desain mudah dimengerti, itu akan membutuhkan upaya yang luar biasa untuk mengimplementasikan, menguji, men-debug, dan memeliharanya. Sekitar 60 persen dari total upaya dalam siklus hidup produk tipikal dihabiskan untuk pemeliharaan. Jika perangkat lunak tidak mudah dipahami, tidak hanya akan menyebabkan peningkatan biaya pengembangan, upaya yang diperlukan untuk memelihara produk juga akan meningkat berlipat ganda. Selain itu, solusi desain yang sulit dipahami akan menghasilkan program yang penuh dengan bug dan tidak dapat diandalkan. Ingat kembali bahwa kita telah membahas di Bab 1 bahwa pemahaman solusi desain dapat ditingkatkan melalui aplikasi cerdas dari prinsip- prinsip abstraksi dan dekomposisi.

Desain yang dapat dimengerti adalah modular dan berlapis

Bagaimana pemahaman dari dua desain yang berbeda dapat dibandingkan, sehingga kita dapat memilih yang lebih baik? Untuk dapat membandingkan pemahaman dua solusi desain, setidaknya kita harus memiliki pemahaman tentang fitur umum yang harus dimiliki oleh desain yang mudah dipahami. Solusi desain harus memiliki karakteristik berikut agar mudah dipahami:

• Ini harus menetapkan nama yang konsisten dan bermakna untuk berbagai komponen desain.

• Itu harus menggunakan prinsip-prinsip dekomposisi dan abstraksi dalam ukuran yang baik untuk menyederhanakan desain.

Konsep penting di balik prinsip abstraksi dan prinsip dekomposisi di Bab 1. Namun, bagaimana prinsip abstraksi dan dekomposisi digunakan dalam mencapai solusi desain?

Kedua prinsip ini dimanfaatkan oleh metodologi desain untuk membuat desain modular dan berlapis. (Meskipun ada juga beberapa bentuk lain di mana prinsip abstraksi dan dekomposisi dapat digunakan dalam solusi desain, kita akan membahasnya nanti). Sekarang kita dapat mendefinisikan karakteristik desain yang mudah dipahami sebagai berikut: Solusi desain dapat dimengerti, jika bersifat modular dan modul disusun dalam lapisan yang berbeda. Solusi desain harus modular dan berlapis agar dapat dimengerti. Konsep modularitas dan pelapisan modul:

Modularitas

Desain modular adalah dekomposisi masalah yang efektif. Ini adalah karakteristik dasar dari setiap solusi desain yang baik. Desain modular, dengan kata sederhana, menyiratkan bahwa masalah telah didekomposisi menjadi satu set modul yang hanya memiliki interaksi terbatas satu sama lain. Dekomposisi masalah ke dalam modul memfasilitasi pengambilan keuntungan dari prinsip membagi dan menaklukkan. Jika modul yang berbeda tidak memiliki interaksi atau sedikit interaksi satu sama lain, maka setiap modul dapat dipahami secara terpisah. Ini sangat mengurangi kompleksitas yang dirasakan dari solusi desain. Untuk memahami mengapa demikian, ingatlah bahwa mungkin sangat sulit untuk mematahkan seikat tongkat yang telah diikat menjadi satu, tetapi sangat mudah untuk mematahkan tongkat satu per satu.

Gambar 5.2 Dua solusi desain untuk masalah yang sama

Tidak sulit untuk menyatakan bahwa modularitas merupakan karakteristik penting dari solusi desain yang baik. Tetapi, bahkan dengan ini, bagaimana kita dapat membandingkan modularitas dari dua solusi desain alternatif? Dari pemeriksaan struktur modul, paling tidak mungkin untuk secara intuitif membentuk ide desain mana yang lebih modular Misalnya, pertimbangkan dua solusi desain alternatif untuk masalah yang direpresentasikan pada Gambar 5.2, di mana modul M1 , M2 dll telah digambar sebagai persegi panjang. Pemanggilan modul oleh modul lain telah ditunjukkan sebagai panah. Dapat dengan mudah dilihat bahwa solusi desain Gambar 5.2(a) akan lebih mudah dipahami karena interaksi antar modul yang berbeda rendah. Tapi, bisakah kita mengukur modularitas solusi desain secara kuantitatif?

Kecuali kita dapat mengukur secara kuantitatif modularitas solusi desain, akan sulit untuk mengatakan solusi desain mana yang lebih modular daripada yang lain. Sayangnya, tidak ada metrik kuantitatif yang tersedia untuk secara langsung mengukur modularitas desain. Namun,

kita dapat secara kuantitatif mengkarakterisasi modularitas solusi desain berdasarkan kohesi dan kopling yang ada dalam desain.

Solusi desain dikatakan sangat modular, jika modul yang berbeda dalam solusi memiliki kohesi tinggi dan sambungan antar-modulnya rendah. Sebuah desain perangkat lunak dengan kohesi tinggi dan kopling rendah antara modul adalah dekomposisi masalah efektif yang kita bahas di Bab 1. Desain seperti itu akan mengarah pada peningkatan produktivitas selama pengembangan program dengan menurunkan kompleksitas masalah yang dirasakan.

Berdasarkan klasifikasi ini, kita akan dapat dengan mudah menilai kohesi dan kopling yang ada dalam solusi desain. Dari pengetahuan tentang kohesi dan kopling dalam desain, kita dapat membentuk pendapat kita sendiri tentang modularitas solusi desain. Kita dapat mendefinisikan konsep kohesi dan kopling dan berbagai kelas kohesi. Sekarang mari kita bahas karakteristik penting lainnya dari solusi desain yang baik—desain berlapis.

Desain berlapis

Sebuah desain berlapis adalah salah satu di mana ketika hubungan panggilan antara modul yang berbeda direpresentasikan secara grafis, itu akan menghasilkan diagram seperti pohon dengan layering yang jelas. Dalam solusi desain berlapis, modul disusun dalam hierarki lapisan. Sebuah modul hanya dapat menjalankan fungsi dari modul-modul di lapisan tepat di bawahnya. Modul lapisan yang lebih tinggi dapat dianggap serupa dengan manajer yang memanggil (memesan) modul lapisan bawah untuk menyelesaikan tugas tertentu. Desain berlapis dapat dianggap menerapkan abstraksi kontrol, karena modul di lapisan bawah tidak mengetahui (tentang cara memanggil) modul lapisan yang lebih tinggi.

Sebuah desain berlapis dapat membuat solusi desain mudah dimengerti, karena untuk memahami cara kerja modul, seseorang harus memahami bagaimana modul lapisan bawah langsung bekerja tanpa harus khawatir tentang fungsi modul lapisan atas. Ketika kegagalan terdeteksi saat menjalankan modul, jelas bahwa modul di bawahnya mungkin bisa menjadi sumber kesalahan. Ini sangat menyederhanakan debugging karena seseorang hanya perlu berkonsentrasi pada beberapa modul untuk mendeteksi kesalahan.

Dalam dokumen Perangkat Lunak - Digital Library Univ STEKOM (Halaman 186-189)