Rekayasa perangkat lunak diarahkan oleh serangkaian prinsip inti yang membantu dalam menerapkan proses perangkat lunak yang bermakna dan metode rekayasa perangkat lunak yang efektif. Pada tahapan proses, prinsip-prinsip inti ini membentuk dasar filosofis yang memandu tim pengembang perangkat lunak dalam menyusun kerangka kerja dan melakukan berbagai kegiatan, mengarahkan alur proses, serta menghasilkan beragam produk kerja dalam rekayasa perangkat lunak. Pada tingkat praktik, prinsip-prinsip inti ini menetapkan sekumpulan nilai dan aturan yang berfungsi sebagai pedoman saat menganalisis masalah, merancang solusi, mengimplementasikan dan menguji solusi, serta akhirnya mengaplikasikan perangkat lunak kepada pengguna komunitas.
Dalam pembahasan sebelumnya, saya mengidentifikasi sekelompok prinsip umum yang mencakup proses dan praktik rekayasa perangkat lunak: (1) memberikan nilai kepada pengguna akhir, (2) menjaga kesederhanaan, (3) mempertahankan visi proyek dan produk, (4) menyadari bahwa orang lain akan menggunakan dan memahami hasil yang Anda hasilkan, (5) memiliki pandangan terbuka terhadap masa depan, (6) merencanakan untuk penggunaan ulang di masa depan, dan (7) berpikir! Meskipun prinsip-prinsip umum ini memiliki kepentingan penting, kadang-kadang sulit untuk menerjemahkannya menjadi praktik sehari-hari dalam rekayasa perangkat lunak. Pada subbagian berikutnya, saya akan menjelaskan secara lebih rinci prinsip-prinsip inti yang mengarahkan proses dan praktik tersebut.
1.1 Principles That Guide Process
Di bagian sebelumnya saya menjelaskan mengenai pentingnya proses perangkat lunak dan menguraikan berbagai model proses yang telah diajukan untuk rekayasa perangkat lunak. Apakah itu model linier atau iteratif, preskriptif atau adaptif, semua model tersebut dapat diidentifikasi dengan menggunakan kerangka kerja proses yang bersifat umum dan berlaku untuk semua model tersebut. Prinsip inti berikut ini dapat diterapkan pada kerangka kerja tersebut, dan secara meluas, pada setiap proses perangkat lunak.
Principle 1. Be agile. Tidak peduli apakah Anda memilih model proses yang preskriptif atau adaptif, prinsip dasar dalam pengembangan adaptif harus mengarahkan pendekatan Anda. Setiap tindakan yang Anda lakukan harus fokus pada efisiensi—pastikan pendekatan teknis Anda sesederhana mungkin, pertahankan produk kerja Anda seefisien mungkin, dan buat keputusan secara lokal jika memungkinkan.
Principle 2. Focus on quality at every step. Pada setiap aktivitas proses, tindakan, dan tugas, perhatian utama harus diberikan pada standar kualitas dari produk kerja yang dihasilkan.
Principle 3. Be ready to adapt. Proses bukanlah pengalaman yang bersifat keagamaan, dan prinsip-prinsip kaku tidak relevan di dalamnya. Jika diperlukan, Anda harus menyesuaikan pendekatan Anda dengan mempertimbangkan kendala yang muncul dari masalah yang dihadapi, orang-orang yang terlibat, dan karakteristik proyek itu sendiri.
Principle 4. Build an effective team. Meskipun proses dan praktik rekayasa perangkat lunak memiliki peran penting, fokus utamanya adalah pada manusia. Anda perlu membentuk tim yang memiliki kemandirian, saling mempercayai, dan saling menghormati satu sama lain.
Principle 5. Establish mechanisms for communication and coordination. Kegagalan proyek terjadi ketika informasi penting terlewat atau tidak terkoordinasi dengan baik oleh para pemangku kepentingan, yang berakibat pada kegagalan dalam menciptakan produk akhir yang sukses. Hal ini merupakan masalah manajemen yang harus ditangani secara serius.
Principle 6. Manage change. Pendekatannya dapat bervariasi antara formal dan informal, namun penting untuk menetapkan mekanisme yang mengelola bagaimana perubahan diminta, dievaluasi, disetujui, dan diimplementasikan.
Principle 7. Assess risk. Saat mengembangkan perangkat lunak, ada banyak kemungkinan hal yang bisa berjalan tidak sesuai rencana. Oleh karena itu, penting bagi Anda untuk memiliki rencana darurat yang dapat diandalkan.
Principle 8. Create work products that provide value for others. Buatlah hanya produk kerja yang memberikan nilai bagi aktivitas, tindakan, atau tugas dalam proses lainnya. Setiap produk kerja yang dihasilkan dalam praktik rekayasa perangkat lunak akan disampaikan kepada orang lain. Daftar fungsi dan fitur yang dibutuhkan akan diteruskan kepada tim pengembang untuk perancangan, desain akan diteruskan kepada tim pengkodean, dan seterusnya. Pastikan produk kerja menyampaikan informasi yang diperlukan secara jelas dan tanpa keambiguan.
Pembahasan selanjutnya akan berfokus kepada masalah manajemen proyek dan proses, dengan mempertimbangkan secara rinci berbagai aspek dari setiap prinsip yang terkait.
1.2 Principles That Guide Practice
Praktik rekayasa perangkat lunak bertujuan utama untuk menghasilkan perangkat lunak yang berfungsi dengan baik, berkualitas tinggi, dan disampaikan tepat waktu, dengan memenuhi kebutuhan semua pemangku kepentingan. Untuk mencapai tujuan ini, penting untuk mengadopsi sekumpulan prinsip inti yang akan membimbing pekerjaan teknis Anda. Prinsip-prinsip ini tetap relevan, tidak peduli metode analisis dan desain yang Anda gunakan, teknik konstruksi (seperti bahasa pemrograman atau alat otomatis) yang Anda pilih, atau pendekatan verifikasi dan validasi yang Anda terapkan. Berikut adalah sekelompok prinsip inti yang menjadi dasar praktik rekayasa perangkat lunak:
Principle 1. Divide and conquer. Dalam konteks yang lebih teknis, penting untuk menekankan pemisahan perhatian (SoC) dalam analisis dan desain. Dengan memecah masalah besar menjadi kumpulan elemen atau masalah yang lebih kecil, memudahkan penyelesaian masalah secara efektif. Idealnya, setiap masalah harus memberikan fungsi yang berbeda yang dapat dikembangkan dan, dalam beberapa kasus, divalidasi secara terpisah dari masalah lainnya.
Principle 2. Understand the use of abstraction. Pada dasarnya, abstraksi adalah upaya untuk menyederhanakan elemen-elemen kompleks dari suatu sistem menjadi frase yang dapat mengkomunikasikan makna. Ketika menggunakan abstraksi pada spreadsheet, diasumsikan bahwa Anda memiliki pemahaman tentang apa itu spreadsheet, struktur umum konten yang ada di dalamnya, dan fungsi-fungsi khas yang dapat digunakan. Dalam praktik rekayasa perangkat lunak, berbagai tingkat abstraksi digunakan, masing-masing memiliki makna yang harus disampaikan. Dalam analisis dan desain, tim perangkat lunak biasanya memulai dengan model yang mewakili tingkat abstraksi yang tinggi (seperti spreadsheet) dan secara bertahap mengembangkan model tersebut menjadi tingkat abstraksi yang lebih rendah (seperti kolom atau fungsi SUM).
Dalam tulisannya, Joel Spolsky mengemukakan bahwa "semua abstraksi yang kompleks, hingga tingkat tertentu, memiliki kebocoran." Tujuan dari abstraksi adalah untuk menghilangkan kebutuhan untuk mengkomunikasikan detail secara langsung. Namun, terkadang efek negatif yang timbul dari detail-detail ini tetap terlihat. Tanpa pemahaman terhadap detail-detail tersebut, sulit untuk mendiagnosis penyebab masalah dengan mudah.
Principle 3. Strive for consistency. Apakah Anda sedang melakukan pembuatan model persyaratan, pengembangan desain perangkat lunak, pembuatan kode sumber, atau pembuatan kasus pengujian, prinsip konsistensi menunjukkan bahwa konsistensi dalam konteks yang sudah dikenal dapat mempermudah penggunaan perangkat lunak. Sebagai contoh, dalam merancang antarmuka pengguna untuk WebApp, konsistensi dalam penempatan opsi menu, penggunaan skema warna yang konsisten, dan penggunaan ikon yang dapat dikenali secara konsisten semuanya berkontribusi untuk menciptakan antarmuka yang ergonomis.
Principle 4. Focus on the transfer of information. Perangkat lunak melibatkan transfer informasi yang beragam, mulai dari database ke pengguna akhir, dari sistem lama ke WebApp, dari pengguna akhir ke antarmuka pengguna grafis (GUI), dari sistem operasi ke aplikasi, dan dari satu komponen perangkat lunak ke komponen perangkat lunak lainnya. Daftar ini praktis tak terbatas. Dalam setiap situasi tersebut, aliran informasi melintasi antarmuka, dan sebagai hasilnya, terdapat risiko kesalahan, penghilangan, atau ambiguitas. Oleh karena itu, penting untuk memberikan perhatian khusus pada analisis, desain, konstruksi, dan pengujian antarmuka.
Principle 5. Build software that exhibits effective modularity. Prinsip pemisahan perhatian (Prinsip 1) menetapkan landasan filosofis dalam pengembangan perangkat lunak. Modularitas, sebagai mekanisme yang digunakan, mampu mewujudkan filosofi tersebut. Setiap sistem yang kompleks dapat dipecah menjadi modul atau komponen, namun dalam praktik rekayasa perangkat lunak yang baik, lebih banyak hal yang diperlukan. Modularitas harus efektif, artinya setiap modul harus secara eksklusif berfokus pada satu aspek sistem yang terbatas dengan baik. Modul tersebut harus kohesif dalam fungsi dan/atau membatasi konten yang diwakilinya. Selain itu, modul harus saling terhubung dengan cara yang sederhana, sehingga setiap modul menunjukkan ketergantungan rendah terhadap modul lainnya, sumber data, dan aspek lingkungan lainnya.
Principle 6. Look for patterns. Saran dari Brad Appleton adalah sebagai berikut:
Maksud dari pola dalam komunitas perangkat lunak adalah untuk menghasilkan sebuah koleksi literatur yang membantu pengembang perangkat lunak dalam menyelesaikan masalah yang sering dihadapi dalam pengembangan perangkat lunak. Pola-pola tersebut membantu dalam menciptakan bahasa yang sama guna mengkomunikasikan wawasan dan pengalaman terkait masalah dan solusinya. Dengan mengkodekan secara formal solusi-solusi tersebut beserta hubungannya, kita dapat berhasil menangkap kumpulan pengetahuan yang mendefinisikan pemahaman kita terhadap arsitektur yang baik yang memenuhi kebutuhan pengguna.
Principle 7. When possible, represent the problem and its solution from a number of different perspectives. Dengan melihat masalah dan solusinya dari berbagai perspektif, kita memiliki peluang untuk mendapatkan wawasan yang lebih luas dan mengungkap kesalahan serta kelalaian yang mungkin terjadi. Sebagai contoh, model persyaratan dapat diwakili dengan sudut pandang yang berfokus pada data, fungsi, atau perilaku. Setiap sudut pandang tersebut memberikan perspektif yang berbeda mengenai masalah dan persyaratan yang terkait.
Principle 8. Remember that someone will maintain the software. Secara keseluruhan, perangkat lunak akan mengalami perbaikan ketika kesalahan terdeteksi, penyesuaian saat lingkungan berubah, dan peningkatan saat pemangku kepentingan menginginkan fitur tambahan. Aktivitas pemeliharaan ini dapat lebih mudah dilakukan jika praktik rekayasa perangkat lunak yang kuat diterapkan secara konsisten dalam seluruh proses perangkat lunak.
Prinsip-prinsip yang telah disajikan di sini tidaklah mencakup semua hal yang diperlukan untuk mengembangkan perangkat lunak berkualitas tinggi. Namun, prinsip-prinsip ini membentuk dasar bagi setiap metode rekayasa perangkat lunak yang dibahas dalam situs ini.
Source: Pressman, Roger S. 2010. Software engineering : A Practitioner’s Approach (7th. Edition). New York: McGraw-Hill Higher Education.
Comments
Post a Comment