You are on page 1of 27

Pertemuan 3

Key Construction Decisions


Pokok Bahasan
• Choice of Programming Language
• Language Descriptions
• Programming Conventions
• Design in Construction
• Design Challenges
• Desirable Characteristics of a Design
Setelah Anda yakin bahwa landasan yang tepat telah
diletakkan untuk konstruksi, persiapan berubah menjadi
keputusan yang lebih spesifik untuk konstruksi. Membahas
perangkat lunak yang setara dengan cetak biru dan izin
konstruksi. Anda mungkin tidak memiliki banyak kendali atas
persiapan itu, dan jadi fokus dari pembahasan ini adalah menilai
apa yang harus Anda kerjakan pada 18 konstruksi dimulai.
Bahasan ini berfokus pada persiapan yang menjadi tanggung
jawab masing-masing programmer dan pimpinan teknis,
langsung atau tidak langsung akan membahas perangkat lunak
yang setara dengan cara memilih aplikasi program yang sesuai.
Choice of Programming Language
Programmer lebih produktif menggunakan bahasa yang
akrab daripada yang tidak dikenal. Data dari model estimasi
Cocomo menunjukkan bahwa programmer yang bekerja
dalam bahasa yang telah mereka gunakan selama tiga tahun
atau lebih sekitar 30 persen lebih produktif daripada
programmer dengan pengalaman setara yang baru mengenal
48 bahasa (Boehm) . Sebuah studi sebelumnya di IBM
menemukan bahwa programmer yang memiliki pengalaman
luas dengan bahasa pemrograman lebih dari 50 kali lebih
produktif dibandingkan dengan mereka yang memiliki
pengalaman minimal (Walston dan Felix ).
Beberapa bahasa lebih baik dalam mengekspresikan konsep
pemrograman daripada yang lain. Anda dapat menggambar
paralel antara bahasa alami seperti Inggris dan bahasa
pemrograman seperti Java dan C ++. Dalam kasus bahasa alami,
ahli bahasa “Sapir dan Whorf” berhipotesis hubungan antara
kekuatan ekspresif dari bahasa dan kemampuan untuk berpikir
pemikiran tertentu, mengatakan bahwa kemampuan Anda untuk
memikirkan suatu pikiran bergantung pada mengetahui kata-
kata yang mampu mengungkapkan pemikiran itu. Jika Anda tidak
tahu kata-katanya, Anda tidak dapat mengungkapkan pemikiran
itu, dan Anda bahkan mungkin tidak dapat merumuskannya.
Language Descriptions
1. Java
Java adalah bahasa berorientasi objek dengan sintaksis yang
mirip dengan C dan C ++ yang dikembangkan oleh Sun
Microsystems, Inc. Java dirancang untuk berjalan pada
platform apa saja dengan mengonversi kode sumber Java ke
kode byte, yang kemudian dijalankan di setiap platform dalam
lingkungan yang dikenal sebagai mesin virtual. Java digunakan
secara luas untuk pemrograman aplikasi Web.
2. JavaScript
JavaScript adalah bahasa scripting yang ditafsirkan yang
secara longgar terkait dengan Java. Ini digunakan terutama
untuk menambah fungsi sederhana dan aplikasi online ke
halaman web.
3. Perl
Perl adalah bahasa penanganan string yang didasarkan pada C
dan beberapa utilitas Unix, yang dibuat di Jet Propulsion
Laboratories. Perl sering digunakan untuk tugas-tugas
administrasi sistem seperti membuat skrip pembuatan serta
untuk pembuatan laporan dan pemrosesan. “Perl” singkatan dari
Practical Extraction and Report Language.
4. PHP.
PHP adalah bahasa scripting open-source dengan sintaks
sederhana yang mirip dengan Perl, Bourne Shell, JavaScript, dan
C. PHP berjalan pada semua sistem operasi utama untuk
menjalankan fungsi interaktif sisi-server. Itu dapat tertanam
dalam halaman web untuk mengakses dan menyajikan informasi
basis data. Akronim "PHP" awalnya berdir untuk Personal Home
Page, tetapi sekarang singkatan dari PHP: Hypertext Processor.
5. Python.
Python adalah bahasa yang diartikan, interaktif, berorientasi
objek yang berfokus pada pekerjaan dengan string. Ini digunakan
paling umum untuk menulis skrip dan aplikasi Web kecil dan juga
berisi beberapa dukungan untuk membuat program yang lebih
besar. Dapat berjalan di berbagai lingkungan.
6. SQL.
SQL adalah bahasa standar de facto untuk query,
memperbarui, dan mengelola database relasional. SQL adalah
singkatan dari Structured Query Language. Tidak seperti bahasa
lain yang tercantum dalam bagian ini, SQL adalah "bahasa
deklaratif" - yang berarti bahwa tidak mendefinisikan urutan
operasi, melainkan hasil dari beberapa operasional.
Programming Conventions
Dalam perangkat lunak berkualitas tinggi, Anda dapat
melihat hubungan antara integritas konseptual arsitektur dan
implementasi tingkat rendah. Implementasi harus konsisten
dengan arsitektur yang memandu dan konsisten secara
internal. Itulah titik pedoman konstruksi untu8 nama variabel,
nama kelas, nama rutin, konvensi pemformatan, dan komentar
konvensi. Dalam program yang kompleks, pedoman
arsitektural memberi keseimbangan struktural pada program
dan pedoman konstruksi memberikan harmoni tingkat rendah,
artikulasi setiap kelas sebagai bagian yang setia dari desain
yang komprehensif. Setiap program besar membutuhkan
struktur kontrol yang menyatukan detail bahasa
pemrogramannya. Bagian dari keindahan suatu struktur besar
adalah cara bagian-bagiannya yang rinci menonjolkan implikasi
arsitekturnya.
Design in Construction
Desain tidak benar-benar kegiatan konstruksi, tetapi pada
proyek-proyek kecil, banyak kegiatan dianggap sebagai
konstruksi, 17 sering termasuk desain. Pada beberapa proyek
yang lebih besar, arsitektur formal mungkin hanya mengatasi
masalah tingkat sistem dan banyak pekerjaan desain yang
sengaja dibuat untuk pembangunan. Pada proyek-proyek
besar lainnya, desain mungkin dimaksudkan agar cukup rinci
untuk pengkodean menjadi cukup mekanis, tetapi desain
jarang yang lengkap — pemrogram biasanya merancang
bagian dari program, secara resmi atau sebaliknya.
Design Challenges
Ungkapan "desain perangkat lunak" berarti konsepsi,
penemuan, atau rancangan skema untuk mengubah
spesifikasi program komputer menjadi program operasional.
Desain adalah aktivitas yang menghubungkan persyaratan
dengan pengkodean dan debugging. Desain tingkat atas yang
baik menyediakan struktur yang dapat dengan aman memuat
banyak desain tingkat lebih rendah. Desain yang baik berguna
untuk proyek-proyek kecil dan sangat diperlukan pada
proyek-proyek besar. 45
Desain juga ditandai oleh banyak tantangan, yang diuraikan
dalam bagian ini, yaitu:

1. Design is a Wicked Problem


Horst Rittel dan Melvin Webber mendefinisikan masalah
"jahat" sebagai masalah yang hanya dapat didefinisikan
dengan memecahkannya, atau dengan memecahkan
sebagiannya. Paradoks ini menyiratkan, pada dasarnya,
bahwa Anda harus "menyelesaikan" masalah sekali agar
dapat mendefinisikannya dengan jelas dan kemudian
memecahkannya lagi untuk menciptakan solusi yang berhasil.
2. Design is a Sloppy Process
Desain perangkat lunak yang sudah selesai harus terlihat rapi
dan bersih, tetapi proses yang digunakan untuk
mengembangkan desain tidak serapi hasil akhirnya.
Desain ceroboh karena Anda mengambil banyak langkah
salah dan turun ke banyak lorong-lorong yang buta — Anda
membuat banyak kesalahan. Memang, membuat kesalahan
adalah tujuan dari desain 82 — lebih murah untuk membuat
kesalahan daripada memperbaiki desain, membuat kesalahan
yang sama dan harus memperbaiki kode yang lengkap. Desain
juga ceroboh karena sulit untuk mengetahui kapan desain
Anda "cukup bagus." Berapa banyak detail yang cukup?
Berapa banyak desain yang harus dilakukan dengan notasi
desain formal, Karena desain bersifat terbuka.
3. Design is About Trade-Offs and Priorities
Dalam dunia yang ideal, setiap sistem dapat berjalan secara
instan, mengkonsumsi ruang penyimpanan nol,
menggunakan bandwidth jaringan nol, tidak pernah
mengandung kesalahan, dan tidak memerlukan biaya apa
pun untuk dibuat. Di dunia nyata, bagian penting dari
pekerjaan desainer adalah menimbang karakteristik desain
yang bersaing dan mencapai keseimbangan di antara
karakteristik tersebut. Jika tingkat respons yang cepat lebih
penting daripada meminimalkan waktu pengembangan,
seorang desainer akan memilih desain, jika meminimalkan
waktu pengembangan lebih penting, seorang desainer yang
baik akan membuat desain yang berbeda.
4. Design Involves Restrictions
Inti dari desain adalah sebagian untuk menciptakan
kemungkinan dan sebagian untuk membatasi
kemungkinan. Jika orang memiliki waktu, sumber daya, dan
ruang tak terbatas untuk membangun struktur fisik, Anda
akan melihat bangunan luas yang luar biasa dengan satu
kamar untuk setiap sepatu dan ratusan kamar. Inilah cara
perangkat lunak dikembangkan. Kendala dari sumber daya
yang terbatas untuk membangun bangunan memaksa
penyederhanaan dari solusi yang pada akhirnya
meningkatkan solusi. Tujuan dalam desain perangkat lunak
adalah sama.
5. Design is Non-Deterministic
Jika Anda mengirim tiga orang untuk merancang program
yang sama, mereka dapat dengan mudah mengembalikan
dengan tiga desain yang sangat berbeda, yang masing-
masing dapat diterima dengan sempurna. Mungkin ada
lebih dari satu cara untuk menguliti kucing, tetapi biasanya
ada lusinan cara untuk merancang program komputer.
6. Design is a Heuristic Process
Karena desain adalah non-deterministik, teknik desain
cenderung menjadi "heuristik“, "aturan praktis" atau "hal-
hal untuk dicoba yang kadang-kadang berhasil," alih-alih
proses berulang yang dijamin untuk menghasilkan hasil
yang dapat diprediksi. Desain melibatkan coba-coba. Alat
desain atau teknik yang bekerja dengan baik pada satu
pekerjaan atau pada satu aspek aspek pekerjaan mungkin
tidak bekerja dengan baik pada proyek berikutnya. Tidak
ada alat yang tepat untuk semuanya.
7. Design is Emergent
Cara yang rapi untuk meringkas atribut-atribut desain ini
adalah dengan mengatakan bahwa desain itu "muncul" (Bain
dan Shalloway). Desain tidak terbentuk sepenuhnya langsung
dari otak seseorang. Mereka berevolusi dan meningkatkan
melalui desain ulasan, diskusi informal, pengalaman menulis
kode itu sendiri, dan pengalaman merevisi kode itu sendiri.
Hampir semua sistem mengalami beberapa tingkat
perubahan desain selama pengembangan awal mereka, dan
kemudian mereka biasanya berubah ke tingkat yang lebih
besar ketika mereka diperluas ke versi yang lebih baru.
Tingkat perubahan yang menguntungkan atau dapat diterima
tergantung pada sifat perangkat lunak yang sedang dibangun.
Desirable Characteristics of a Design
Desain berkualitas tinggi memiliki beberapa karakteristik
umum. Jika Anda bisa mencapai semua tujuan ini, desain
Anda akan dianggap sangat bagus. Beberapa tujuan
bertentangan dengan tujuan lain, tetapi itulah tantangan
desain, menciptakan trade-off yang bagus dari tujuan yang
bersaing. Beberapa karakteristik kualitas desain adalah
karakteristik program: keandalan, kinerja, dan sebagainya.
Karakteristik internal dari desain. Berikut daftar karakteristik
desain internal:
1. Minimal complexity
Tujuan utama desain haruslah meminimalkan kompleksitas
karena semua alasan yang dijelaskan pada bagian terakhir.
Hindari membuat desain "pintar". Desain cerdik biasanya
sulit dimengerti. Alih-alih membuat desain "sederhana" dan
"mudah dimengerti". Jika desain Anda tidak membiarkan
Anda dengan aman mengabaikan sebagian besar bagian lain
dari program ketika Anda terbenam dalam satu bagian
tertentu, desain itu tidak melakukan tugasnya.
2. Ease of maintenance
Kemudahan pemeliharaan berarti merancang untuk
programmer pemeliharaan. Terus bayangkan pertanyaan yang
akan diajukan oleh seorang programmer pemeliharaan tentang
kode yang Anda tulis. Pikirkan programmer pemeliharaan
sebagai audiens Anda, dan kemudian desain sistem menjadi
cukup jelas
3. Minimal connectedness
Konektivitas minimal berarti merancang sehingga Anda
menahan koneksi di antara bagian program yang berbeda
seminimal mungkin. Gunakan prinsip kohesi yang kuat, kopling
longgar, dan persembunyian informasi untuk merancang kelas
dengan sesedikit mungkin interkoneksi. Koneksi minimal
meminimalkan pekerjaan selama integrasi, pengujian, dan
pemeliharaan.
4. Extensibility
Extensibility berarti Anda dapat meningkatkan sistem tanpa
menyebabkan kekerasan pada struktur yang mendasarinya.
Anda dapat mengubah bagian sistem tanpa memengaruhi
bagian lainnya. Perubahan yang paling mungkin
menyebabkan sistem trauma paling sedikit.

5. Reusability
Dapat digunakan kembali berarti merancang sistem sehingga
Anda dapat menggunakan kembali bagian-bagiannya di 265
sistem lainnya.
6. High fan-in
Penggemar tinggi mengacu pada memiliki jumlah kelas yang
tinggi yang menggunakan kelas yang diberikan. Fan-in yang
tinggi menyiratkan bahwa suatu sistem telah dirancang untuk
memanfaatkan kelas utilitas dengan baik di tingkat yang lebih
rendah dalam sistem.

7. Low-to-medium fan-ou
Fan-out rendah ke sedang berarti memiliki kelas tertentu
menggunakan sejumlah class rendah lainnya. Penggemar
tinggi (lebih dari sekitar tujuh) menunjukkan bahwa class
menggunakan sejumlah besar kelas lain dan karenanya
mungkin terlalu rumit. Peneliti telah menemukan bahwa
prinsip low fan out bermanfaat jika Anda
mempertimbangkan jumlah rutinitas yang dipanggil dari
dalam rutinitas atau dari dalam kelasnya.
7. Portability
Portabilitas berarti merancang sistem sehingga Anda dapat
dengan mudah memindahkannya ke lingkungan lain.

8. Leanness
Leanness berarti merancang sistem sehingga tidak memiliki
bagian tambahan (Wirth, McConnell). Voltaire mengatakan
bahwa sebuah buku selesai bukan ketika tidak ada lagi yang
bisa ditambahkan tetapi ketika tidak ada lagi yang bisa diambil.
Dalam perangkat lunak, ini benar terutama karena kode
tambahan harus dikembangkan, ditinjau, diuji, dan
dipertimbangkan ketika kode lain dimodifikasi. Versi perangkat
lunak masa depan harus tetap kompatibel dengan kode
tambahan.
9. Stratification
Desain bertingkat berarti mencoba menjaga tingkat
dekomposisi agar dapat dikelompokkan sehingga Anda dapat
melihat sistem pada setiap tingkat tunggal dan mendapatkan
tampilan yang konsisten. Rancang sistem sehingga Anda dapat
melihatnya di satu level tanpa beralih ke level lainnya.
10. Standard techniques
Semakin sistem mengandalkan potongan-potongan eksotis,
semakin menakutkan bagi seseorang yang mencoba
memahaminya pertama kali. Cobalah untuk memberi
seluruh sistem perasaan yang familiar dengan menggunakan
pendekatan standar yang umum.

You might also like