Dalam dunia rekayasa perangkat lunak (RPL), kita terbiasa membayangkan proses pengembangan sebagai serangkaian tahap linear---dari perencanaan hingga pemeliharaan. Namun, paradigma ini mulai tergeser. Dunia perangkat lunak tidak lagi hanya tentang merancang sistem, tetapi juga merancang sistem yang mampu merancang ulang dirinya sendiri. Inilah inti dari sistem self-adaptive---perangkat lunak yang mampu mengelola perubahan pada dirinya saat dijalankan, bukan hanya saat dikembangkan.
Artikel yang ditulis oleh Jesper Andersson dan koleganya, berjudul Software Engineering Processes for Self-Adaptive Systems, merupakan karya fundamental yang memetakan bagaimana proses rekayasa perangkat lunak perlu direkonseptualisasi agar mampu mendukung pembangunan sistem-sistem adaptif. Dalam konteks sistem yang sadar akan konteks, kritikal terhadap misi, atau berskala ultra besar, pendekatan tradisional terbukti tidak lagi memadai.
Mengapa Kita Membutuhkan Sistem yang Bisa Berubah Sendiri?
Tradisionalnya, perubahan pada perangkat lunak dilakukan oleh pengembang setelah produk dirilis. Namun, sistem modern yang beroperasi dalam lingkungan dinamis---seperti sistem kendaraan otonom, layanan cloud, dan sistem keamanan cerdas---tidak bisa menunggu intervensi manusia. Mereka harus bisa beradaptasi sendiri secara real-time, seiring dengan berubahnya konteks, tujuan, atau kondisi teknis.
Artikel ini menyebutkan bahwa waktu perubahan (time-of-change) tidak lagi terbatas pada development time atau deployment time, tetapi meluas hingga ke run-time---saat sistem sedang beroperasi. Inilah yang mengaburkan batas antara pengembangan dan eksekusi, dan menuntut proses rekayasa yang berbeda sama sekali.
Blurring the Boundary: Ketika Pengembangan dan Operasi Menyatu
Salah satu kontribusi penting dari artikel ini adalah gagasan bahwa tanggung jawab yang dulunya dipegang manusia---seperti pemeliharaan, validasi, atau pemilihan alternatif desain---kini bisa berpindah ke sistem itu sendiri. Misalnya, sebuah sistem self-adaptive dapat memonitor dirinya, mendeteksi masalah performa, dan mengalihkan permintaan ke layanan lain tanpa campur tangan manusia.
Konsep ini memiliki implikasi besar terhadap proses rekayasa perangkat lunak. Kita tidak lagi bisa mengandalkan model klasik seperti waterfall atau bahkan agile sekalipun, jika sistem yang kita bangun harus terus berevolusi selama berjalan. Kita butuh model baru yang bisa menangani dua hal sekaligus: aktivitas rekayasa di luar sistem (off-line), dan aktivitas rekayasa di dalam sistem itu sendiri saat berjalan (on-line).
Rekayasa Proses Rekayasa: Gunakan SPEM sebagai Kerangka
Untuk mendukung kebutuhan ini, para penulis menggunakan SPEM (Software and Systems Process Engineering Meta-Model) sebagai alat bantu. Dengan SPEM, mereka memetakan proses-proses rekayasa yang dilakukan off-line dan on-line, lengkap dengan dependensi antaraktivitas.