Software Maintenance, Bagian Penting yang Sering Diabaikan

Software Maintenance adalah bagian dari Software Development Lice Cycle (SDLC). Software maintenance dilakukan diakhir pembuatan software. Bagian ini kadang terabaikan, padahal maintenance adalah hal penting yang harus ada dalam sebuah proyek pembuatan software. Pada Software Enginering Book of Knowledge (SWEBOK) dijelaskan mengenai software maintenance secara rinci, bahkan pada swebok sudah di break down kedalam beberapa sub area. Adapun Breakdwon dari topik Software Maintenance ditunjukan pada Gambar dibawah.

  1. Software Maintenace Fundamental

Software Maintenan fundamental membahas mengenai definisi dari software maintenance dan pentingnya adanya maintenance

1.1. Definisi

Software maintenance adalah aktivitas perubahan atau modifikasi perangkat lunak setelah perangkat lunak digunakan (after the delivery of software).

1.2. Mengapa Butuh Maintenance

  • Memperbaiki kesalahan
  • Meningkatkan desain
  • Peningkatan implementasi
  • Ada interaksi antarmuka dengan perangkat lain (contoh : mengakses API)
  • Ada perubahan perangkat keras, sehingga perangkat lunak perlu menyesuaikan
  • Migrasi perangkat lunak à perangkat lunak sebelumnya diubah

1.3. Evolusi dari Software

Software maintenance pertama kali dikenalkan dan diterapkan pada akhir tahun 1960. Pada software maintenance ada sebuah paradigma bahwa “Software yang besar itu tidak pernah selesai dan akan selalu berlanjut untuk berkembang, Software tumbuh semakin kompleks kecuali jika ada beberapa tindakan yang dilakukan untuk mengurangi kompleksitas

1.5. Kategori dari Perawatan

Terdapat 4 kategori dalam Software Maintenance, yaitu :

A. Corrective Maintenance

Modifikasi reaktif (atau perbaikan) perangkat lunak dilakukan setelah adanya koreksi/masalah yang ditemukan. Digunakan untuk menjaga operasional produk perangkat lunak

B. Adaptive Maintenance

Modifikasi produk perangkat lunak yang dilakukan agar perangkat lunak dapat tetap digunakan dengan lingkungan yang berubah. Contoh : perubahan sistem operasi sehingga perangkat lunak harus menyesuaikan.

C. Perfective Maintenance

Modifikasi perangkat lunak untuk menyediakan perangkat tambahan untuk pengguna, peningkatan dokumentasi program, dan pengkodean ulang untuk meningkatkan kinerja perangkat lunak atau atribut perangkat lunak lainnya. Misalnya : Penambahan Fitur

D. Preventive Maintenance

Modifikasi perangkat lunak untuk mendeteksi dan memperbaiki kesalahan laten dalam perangkat lunak sebelum mereka menjadi kesalahan operasional.

Pengelompokan Kategori Software Maintenance

  • Correction : hanya memperbaiki
  • Enhancement : meningkatkan kinerja, meningkatkan kemampuan (upgrade)

2. Key Issues in Software Maintenance
Tedapat 3 Issue terkait software maintenance, yaitu perawatan secara teknis (technical issues), perawatan manajerial (management issue), Maintenance Cost Estimation, dan Maintenance Measurement.

2.1. Technical Issues
1. Limited Understanding

Software engineer baru harus dengan cepat paham terhadap program/aplikasi yang dibuat oleh developer lain. Sehingga ketika terjadi error atau penambahan fitur dapat langsung memperbaiki.
2. Testing
Melakukan pengujian pada software untuk menemukan bug. Hal tersebut merupakan salah satu kegiatan yang dilakukan pada perawatan software.
3. Impact Analysis
Menganalisa pengaruh yang ditimbulkan ketika ada penambahan fitur. Jangan sampai saat terjadi penambahan fitur, malah membuat program error atau fungsi lain jadi tidak berfungsi.
4. Maintainability
Melakukan perawatan kepada software untuk menjaga agar tidak ada kerusakan yang fatal, serta meng-update fitur nya agar tidak kalah dengan software-software terbaru

2.2. Management Issues
1. Alignment with Organizational Objectives
Sebuah organisasi atau perusahaan yang berkecimpung dibidang IT. Selayaknya memberikan jobdesc kepada pegawainya sesuai dengan role bisnis. Kebutuhan maintener disesuaikan dengan kebutuhan, karena biasanya pekerjaan dilakukan per proyek. Deadline pengerjaan proyek yang terbatas biasanya membuat perusahaan meniadakan maintener.
2. Staffing
Menjadi seorang maintener (orang yang bekerja untuk merawat software) adalah pekerjaan yang kadang dipandang sebelah mata, karena kalah bergengsi dengan developer. Sehingga jika terdapat staff yang dapat bekerja sebagai seorang maintener, sebaiknya diberikan fasilitas, penghasilan yang baik agar tidak berhenti.
3. Process
Proses dalam melakukan perawatan itu tidak sedikit dan cenderung kompleks. Software life cycle process adalah sebuah set aktifitas, metode, latihan, dan transformasi yang orang gunakan untuk mengembangkan dan merawat software dan produk-produk yang terkait. Maintenance juga membutuhkan beberapa aktivitas yang tidak ditemukan di software development (lihat section 3.2 di swebok)
4. Outsourcing
Outsourcing adalah pegawai disebuah perusahaan yang memiliki sedikit kontrol terhadap perusahaan. Bukan merupakan pegawai tetap perusahaan dan biasanya melalui pelantara pihak ketiga. Contoh pekerjaan outsourcing misalnya sebagai penerjemah dari software yang dikerjakan.

2.3. Maintenance Cost Estimation
Cost/Biaya [1]
Biasa perawatan Software, biasanya lebih besar dari biaya development. Software yang relatif “tua” mungkin membutuhkan biaya yang tinggi (karena bahasa pemrogramran “lama”, compilers, dll)

2.4. Software Maintenance Measurement
Maintenance Effort Distribution

Faktor yang Mempengaruhi Maintenance Cost
1. Stabilitas Tim
Biaya pemeliharaan dapat ditekan jika staf yang sama terlibat dalam jangka waktu yang lama
2. Tanggung Jawab Kontraktual
Adakah kontrak yang tertulis dalam perjanjian dengan pengembang software? Insentif pengembangan software melakukan maintenance tertera atau tidak, jika tidak maka lebih murah.
3. Ketrampilan Staff
Semakin berpengalaman dan memiliki domain pengetahuan luas maka dapat menekan biaya maintenance
4. Usia dan Struktur Program
Seiring usia program, strukturnya semakin menurun dan menjadi lebih sulit untuk dipahami dan diubah

3. Maintenance Process
Merupakan proses yang diperlukan untuk melakukan perawatan software. Proses dalam perawatan software sangat banyak sekali, mulai dari menentukan kebutuhan, modifikasi, dan review kesesuaian. Berikut adalah langkah-langkah dari proses perawatan software.

Berdasarkan buku Software Engineering 10th Edition karangan Ian Sommerville perawatan software dimulai dengan menentukan permasalahan dan analisa dari modifikasi. Setelah menganalisa masalah dan menentukan modifikasi yang perlu diubah, langkah selanjutnya adalah melakukan implementasi dari modifikasi tersebut. Implementasi modifikasi diperlukan koordinasi antara analyst dan developer. Langkah terakhir setelah dilakukan implementasi adalah melakukan review dan acceptance test terhadap hasil implementasi.
Proses perawatan software dilakukan secara terus menerus mengikuti kebutuhan. Secara umum cara perawatan dilakukan dengan mengimplementasikan fitur (coding), melukan migrasi dari fitur baru atau penembahan fitur. Kemudian apabila software tersebut sudah tidak dapat mendukung kebutuhan pengguna, misal sebagai akibat bahasa pemrograman yang sudah tidak mendukung fungsi dari program.

Adapun model dari proses perawatan software lainnya adalah sebagai berikut.

  • Quick Fix
  • Spiral
  • Osborne’s
  • Iterative Enhancement
  • Reuse Oriented

Beberapa Aktifitas dalam Maintenance

  • Pemahaman Program
    Kegiatan yang diperlukan untuk mendapatkan pengetahuan umum tentang perangkat lunak, bagaimana cara kerjanya dan bagaimana unit di dalamnya berinteraksi
  • Transisi
    Penyampaian yang terkontrol dan terkoordinasi dengan baik segala hal yang berkaitan dengan perangkat lunak, dari pengembang ke pihak maintainer
  • Penerimaan/ Penolakan permintaan maintenance
    Permintaan maintenance dapat ditolak oleh maintainer dan dialihkan ke pengembang
  • Analisis Dampak
    Melakukan teknik analisis dampak dari perubahan di dalam perangkat lunak
  • Maintenance Service-Level Agreements (SLAs) and maintenance licenses and contracts
    Perjanjian kontrak

4. Techniques of Maintenance

4.1. Program Comprehension

  • Programmer menghabiskan banyak waktu untuk membaca dan memahami program yang akan diubah
  • Dokumentasi yang jelas dan ringkas dapat membantu dalam pemahaman program

4.2. Reverse Engineering

  • Menganalisis perangkat lunak untuk mengidentifikasi komponen perangkat lunak dan hubungan di dalamnya untuk membuat representasi perangkat lunak dalam bentuk lain atau pada tingkat abstraksi yang lebih tinggi
  • Reverse engineering bersifat pasif. Tidak mengubah perangkat lunak ataupun menghasilkan perangkat lunak baru.
  • Contoh reverse engineering : re-dokumentasi

4.3. Reengineering [1]

  • Reengineering didefinisikan sebagai pemeriksaan dan perubahan perangkat lunak dengan menyusun kembali atau menuliskan kembali sebagian atau seluruh bagian dari perangkat lunak, tanpa mengubah fungsionalitasnya
  • Biasanya digunakan bukan untuk meningkatkan kinerja perangkat lunak, namun mengganti perangkat lunak yang “menua”.
  • Sistem mungkin distrukturisasi dan didokumentasikan ulang

Reengineering [2] : Keuntungan
1. Mengurangi risiko
Ada risiko tinggi dalam pengembangan perangkat lunak baru. Mungkin ada masalah pengembangan, masalah staf dan masalah spesifikasi.
2. Biaya yang dikurangi
Biaya reengineering seringkali jauh lebih rendah daripada biaya pengembangan perangkat lunak baru

Reengineering [3]

4.4. Migration [1]

  • Dilakukan jika terjadi perubahan environment yang menjalankan perangkat lunak
  • Maintainer perlu mengetahui aktivitas dalam proses migrasi : migration requirements, migration tools, convertion of product and data, execution, verification and supports

Migration [2] : Additional Activities
1. Notification of intent
Pernyataan berisi alasan lingkungan lama tidak lagi didukung, diikuti dengan deskripsi lingkungan yang baru dan tanggal ketersediaannya
2. Parallel Operations
Menyediakan lingkungan lama dan baru agar migrasi berjalan mulus
3. Notification of Completion
Saat migrasi selesai, informasi harus disampaikan ke seluruh pihak yang terkait
4. Post operation review
Penilaian setelah parallel operations dan dampak perubahan menjadi lingkungan baru
5. Data Archival
Menyimpan data dari perangkat lunak lama

4.5. Retirement

  • Setelah perangkat lunak mencapai akhir kegunaan, maka harus dipensiunkan.
  • Analisis harus dilakukan untuk membantu dalam membuat keputusan retirement dari sebuah software.
  • Analisis ini harus dimasukkan dalam dokumen retirement planning, yang mencakup persyaratan retirement, dampak, penggantian, jadwal, dan effort.

5. Software Maintenance Tools

1.Program Slicers
Dapat memilih program yang terkena pengaruh perubahan
2. Static Analyzers
Memberikan general view/ pandangan umum dan ringkasan dari isi program
3. Dynamic Analyzers
Membantu melacak jalur eksekusi dari program
4. Data Flow Analyzers
Membantu melacak aliran data
5. Cross References
Menghasilkan indeks komponen program
6. Dependency Analyzers
membantu menganalisis dan memahami hubungan timbal balik antar komponen suatu program.

Referensi

[1] Pressman, Roger S, Software Engineering : A Practitioner’s Approach 5th Edition, Mc Graw Hill, 2001
[2] Ian Sommerville, Software Engineering 10th Edition, Addison-Wesley, 2015
[3] P. Bourque and R.E. Fairley, eds., Guide to the Software Engineering Body of Knowledge Version 3.0, IEEE Computer Society, 2014

Posted in Artikel and tagged , , , , , , , , , .

Leave a Reply

Your email address will not be published. Required fields are marked *