Menurut Pigoski berpendapat bahwa pemeliharaan perangkat lunak, yaitu suatu aktivitas keseluruhan yang dilakukan dalam menyediakan dukungan yang murah dan efektif terhadap sistem perangkat lunak. Aktivitas dapa berupa pre-delivery dan post-delivery.
Aktivitas pre-delivery berupa perencanaan untuk operasi post-delivery, supportabilitas dan penentuan logistik.
Sedangkan aktivitas post-delivery berupa modifikasi perangkat lunak, pelatihan dan mengoperasikan help desk.
Aktivitas pemeliharaan sistem ini dimulai sejak sistem perangkat lunak telah diserahkan ke pasaran dan digunakan oleh konsumen atau klien dan meliputi segala aktivitas yang menjaga operasional sistem dan kesesuaian sistem dengan kebutuhan pengguna.
Kategori Pemeliharaan Perangkat Lunak
Pemeliharaan perangkat lunak terbagi menjadi beberapa kategori menurut Lientz dan Swanson, yaitu pemeliharaan adaptif, korektif dan perfektif. Berikut penjelasan dari ketiga komponen kategori pemeliharaan perangkat lunak :
- Pemeliharaan Adaptif meliputi segala perubahan yang diperlukan sebagai konsekuensi dari perubahan lingkungan di mana sistem beroperasi, seperti perubahan sistem operasi, perangkat keras, DBMS, jaringan komputer ataupun lain sebagainya.
- Pemeliharaan Korektif mencakup segala perubahan yang dilakukan dalam menghilangkan kerusakan aktual ataupun celah pada sistem perangkat lunak.
- Pemeliharaan Perpektif meliputi segala perubahan yang berawal dari permintaan pengguna.
Kategori pemeliharaan perangkat lunak menurut IEEE terbagi ke dalam empat kategori, yaitu sebagai berikut :
- Pemeliharaan Korektif adalah perubahan reaktif pada perangkat lunak yang dilakukan setelah penggunaan perangkat lunak oleh konsumen dalam memperbaiki kerusakan yang ditemukan.
- Pemeliharaan Adaptif adalah perubahan pada perangkat lunak yang dilakukan setelah penggunaan perangkat lunak oleh klien atau konsumen supaya perangkat lunak tersebut dapat digunakan pada lingkungan yang berubah.
- Pemeliharaan perfektif adalah perubahan pada perangkat lunak yang dilakukan setelah penggunaan perangkat lunak oleh klien atau konsumen guna meningkatkan kinerja dan optimalitas perangkat lunak.
- Pemeliharaan Emergensi adalah pemeliharaan korektif yang tidak dijadwalkan untuk menjaga operasional sistem.
Permasalahan Pemeliharaan Perangkat Lunak
Pemeliharaan suatu sistem umumnya merupakan aktivitas yang menghasbiskan biaya. Hal ini dikarenakan menambahkan fungsionalitas sistem yang sedang beroperasi jauh lebih mahal dibandingkan dengan menambahkan fungsionalitas sistem ketika tahap pengembangan.
Faktor yang membedakan antara pengembangan dengan pemeliharaan yang berakibat pada mahalnya biaya pemeliharaan adalah :
- Stabilitas Sistem, Setelah sistem dipasarkan, umumnya tim pengembang dibubarkan dan setiap anggota bekerja pada proyek yang baru. Tim yang kemudian bertanggung jawab terhadap pemeliharaan tidak memiliki pemahaman yang menyeluruh mengenai peragkat lunak yang bersangkutan sehingga perlu waktu dan usaha tambahan dalam memahami perangkat lunak tersebut.
- Tanggung Jawab Kontraktual, Kontrak untuk pemeliharaan perangkat lunak umumnya terpisah dari kontrak untuk pengembangan perangkat lunak.
- Keahlian Staff, Staf pemeliharaan kerap kali kurang berpengalaman dan tidak terbiasa dengan domain aplikasi. Proses pemeliharaan perangkat lunak seringkali dianggap sebagai proses yang tidak memerlukan skill yang tinggi dibanding dengan pengembangan perangkat lunak yang memerlukan skill yang tinggi, hal ini menyebabkan staff bagian pemeliharaan seeringkali adalah staff dengan level junior.
- Usia dan Struktur Program, seiring dengan usia program, struktur dari program juga ikut berubah sehingga semakin sulit untuk dimengerti dan diubah. Beberapa komponen perangkat lunak tidak dikembangkan dengan teknik RPL modern, sehingga tidak pernah dikelola dengan baik dan kemungkinan dokumentasi sistem bisa saja hilang atau inkosisten sehingga sukar untuk dipahami.
Model Pemeliharaan Perangkat Lunak
Quick-Fix Model
Pendekatan tipikal guna pemeliharaan perangkat lunak adalah dengan mengubah kode atau skrip program terlebih dahulu, kemudian membuat perubahan yang dibutuhkan pada dokumentasi program. Melalui pendekatan ini disebut pendekatan quick-fix model. Idealnya setelah skrip diubah, maka dokumentasi terkait perancangan, kebutuhan, analisis, pengujian dan hal-hal lain yang terkait dengan perangkat lunak tersebut harus diubah juga dengan menyesuaikan dedngan perubahan pada skrip program. Akan tetapi realitanya di lapangan menunjukkan bahwa perubahan pada skrip program kadang tidak didokumentasikan disebabkan oleh waktu dan biaya sehingga tim pemelihara tidak sempat untuk merubah dokumentasi program.
Iterative-Enhacement Model
Model siklus hidup evolutionary menawarkan pendekatan alternatif guna pemeliharaan perangkat lunak. Model ini menyaakan bahwa kebutuhan sistem tidak dapat dikumpulkan dan dipahami pada tahap awal, sehingga sistem dibangun dengan memperbaiki kebutuhan dari rancangan bangunan sistem sebelumnya berdasarkan timbal balik dari pengguna. Kelebihan dari mode ini adalah dokumentasi dari sistem senantiasa berubah seiring dengan perubahan pada skrip program.
Full-Reuse Model
Model ini memandang pemeliharaan sebagai suatu kasus dari pengembangan perangkat lunak berorientasi guna ulang atau daur ulang. Full-reuse diawali dengan analisis kebutuhan, rancangan, kode dan pengujian dari sisem versi sebelumnya yang telah ada. Model ini mendukung evolusi sistem untuk memudahkan modifikasi kedepannya. Model Full-reuse cocok untuk digunakan pada pengembangan sistem-sistem yang berkaitan. Model ini mengumpulkan komponen-komponen yag reusable pada level abstraksi yang berbeda-beda dan menjadikan pengembangan sistem ke depannya menjadi lebih hemat.
Proses Pemeliharaan Perangkat Lunak
Ada beberapa model proses pemeliharaan perangkat lunak. Model-model ini mengorganisasikan pemeliharaan perangkat lunak menjadi serangkaian aktivitas terkait dan menentukan urutan dari masing-masing aktivitas.
Proses Pemeliharaan Versi IEEE-12 19
Standar IEE mengorganisasikan proses pemeliharaan menjadi tujuh tahap Pada tiap tahap, standar IEE menetapkan input dan output pada tiap tahap, mengelompokan dan mengkaitkan aktivitas-aktivitas, mendukung proses-proses , kontrol dan sekumpulan metrik.
- Identifikasi, klasifikasi dan penentuan prioritas modifikasi. Pada tahap ini, permintaan perubahan yang diajukan oleh konsumen, pengguna, programmer atau manajer ditetapkan sebagai kategori pemeliharaan dan menetapkan prioritas. Tahap ini juga meliputi aktivitas dalam menentukan apakah permintaan tersebut disetujui atau tidak dan menetapkan ke dalam jadwal pengimplimentasiannya.
- Analisis. Pada tahap ini meliputi perencanaan awal untuk perancangan, implimentasi, pengujian dan pemasaran. Tahap ini terdiri dari dua level, analisis feasibilitas yang menentukan solusi alternatif beserta efek dan biaya solusi tersebut dan juga analisis detail yang menentukan kebutuhan untuk memodifikasi, strategi pengujian dan membangun rencana pengimplimentasian.
- Perancangan. Modifikasi sistem dirancang pada tahap ini. Kegiatan ini menggunakan keseluruhan dokumentasi sistem dan proyek, basidata dan perangkat lunak yang ada, dan output dari tajap analisis. Kegiatan ini meliputi identifikasi modul yang terpengaruh, modifikasi dokumentasi modul perangkat lunak, pembangunan kasus uji untuk rancangan yang baru dan identifikasi pengujian regresi.
- Implementasi. Tahap ini mencakup aktivitas coding dan unit testing, integrasi modul yang telah dimodifikasi, integration dan regression testing, analisis resiko, dan kajian. Tahap ini juga mencakup kajian kesiapan pengujian untuk menetapkan kesiapan untuk pengujian sistem dan regresi
- Regression/system testing. Pada tahap ini keseluruhan sistem diuji untuk memastikan kesesuaian dengan kebutuhan awal dan juga modifikasi kebutuhan tersebut. Selain pengujian fungsional dan antarmuka, tahap ini juga mencakup pengujian regresi untuk memvalidasi tidak ada kerusakan baru yang muncul
- Acceptance testing. Pengujian ini fokus pada sistem yang telahterintegrasi sepenuhnya dan melibatkan pengguna, konsumen, atau pihak ketiga yang dirancang oleh konsumen. Pengujian ini mencakup pengujian fungsional, interoperabilitas, dan regresi
- Delivery. Pada tahap ini, sistem dirilis untuk diinstal dan dioperasikan. Aktivitas ini mencakup pemberitahuan kepada pengguna, melakukan instalasi dan pelatihan, serta menyiapkan backup dari perangkat lunak versi sebelumnya