Rekayasa perangkat lunak merupakan salah satu keilmuan dengan perkembangan yang pesat. Menurut McConnel [McC99], software engineering body of knowledge telah menemukan “kestabilan utama” yang merepresentasikan sekitar 75% pengetahuan yang diperlukan untuk mengembangkan perangkat lunak yang kompleks. Jadi, dapat disimpulkan, bahwa hanya dalam kurun waktu 50 tahun, maka rekayasa perangkat lunak makin mapan.
Salah satu “titik puncak” dalam rekayasa perangkat lunak, adalah pemodelan perangkat lunak. Pemodelan memberikan kemampuan baru kepada pengembang perangkat lunak dengan pendekatan sistematik dan terorganisasi dalam mengembangkan perangkat lunak, berdasarkan prinsip rekayasa. Pemodelan juga menegaskan proses pengambilan-keputusan terkait segenap aspek dalam pengembangan perangkat lunak. Selain itu, pemodelan memperkuat proses komunikasi antar pihak2 yang terkait dalam pemanfaatan perangkat lunak.
Terdapat beberapa prinsip umum yang memandu aktivitas pemodelan perangkat lunak:
1) Fokus pada esensi utama – dalam pemahaman bahwa model perangkat lunak “hanyalah” mengilustrasikan bagian-bagian terpenting (dan kritis) dalam arsitektur perangkat lunak yang dikembangkan. Dalam konteks ini, prinsip “penyederhanaan” adalah isu yang terpenting dalam membuat model essentials dari perangkat lunak. Membuat model, secara kasar dapat dikatakan sebagai membuat penyederhanaan.
2) Menyediakan perspektif – Pemodelan perangkat lunak harus dapat memberikan wawasan yang menyeluruh dari segenap aspek pengembangan perangkat lunak. Wawasan atau perspektif menyeluruh ini, tentu saja, harus sesuai dengan standar aturan tertentu yang diterima komunitas pengembang dan dapat dipahami pengguna perangkat lunak. Pendekatan perspektif ini harus dapat menggambarkan dimensi perangkat lunak.
3) Memungkinkan komunikasi efektif – Model perangkat lunak berisi kosakata, bahasa dan ekspresi semantik dari perangkat lunak. Kesemuanya ini dimaksudkan untuk memperlancar proses komunikasi intern (dalam tim pengembang) dan ekstern (antar tim pengembang dan stakeholders).
Secara teknis dapat dikatakan bahwa model perangkat lunak merupakan abstraksi (atau penyederhanaan) dari setiap komponen yang membangun suatu perangkat lunak. Abstraksi yang ada bukanlah abstraksi tunggal, melainkan merupakan gabungan (atau kumpulan) beberapa abstraksi terkait komponen-komponen perangkat lunak. Sehingga, melalui kumpulan abstraksi ini, pihak-pihak yang terkait mendapatkan wawasan yang lengkap dan dapat memahami perangkat lunak yang akan dibangun. Model yang baik, tentu saja, dapat digunakan berulang-ulang dengan asumsi yang dapat divalidasi terkait hasil akhir yang dikembangkan.
Karakteristik dari model perangkat lunak:
1) Completeness – yakni terkait dengan seberapa lengkap requirements perangkat lunak yang telah digambarkan (dan diverifikasi) pada sebuah model
2) Consistency – yakni terkait dengan keselarasan antar setiap komponen perangkat lunak yang dikembangkan dengan model yang diabstraksi. Konsistensi misalnya dapat dinyatakan dengan tidak adanya konflik pada deskripsi requirements, ataupun pada deskripsi fungsi dari perangkat lunak yang dibangun.
3) Correctness – aspek ini terkait dengan keterunutan (keterlacakan) antara requirements, spesifikasi perancangan hingga pengujian yang menjamin bebas cacat. Model yang baik harus dapat mengekspresikan keterunutan setiap proses pengembangan perangkat lunak.
Biar bagaimanapun juga, sebuah model yang baik, harus dapat menggambarkan “kondisi nyata” dari karakteristik dan perilaku obyek tertentu, sehingga dapat menjelaskan bagaimana nantinya sebuah perangkat lunak itu menjalankan fungsinya. Sehingga dengan demikian, dapat dikatakan bahwa ekspresi elemen utama sebuah model itu adalah entitas. Entitas mewakili artifak yang konkret (seperti misalnya sensor atau prosesor) dan artifak yang abstrak (seperti misalnya modul perangkat lunak dan protokol komunikasi data). Tentu saja, model yang baik, juga dapat menunjukkan relasi antar entitas tersebut. Ekspresi entitas dan relasi entitas ini digambarkan dengan “bahasa” teks dan grafis.
Sintaks, Semantik dan Pragmatisme
Bagi pengembang senior, maka dia pasti sudah menemukan bahwa seringkali model perangkat lunak bisa menipu. Karena memang, model sebagai hasil abstraksi memilki kecenderungan untuk menampilkan informasi yang tidak lengkap (atau tidak utuh). Oleh karena itu, penting untuk menyadari bahwa model yang lengkap (atau utuh) itu adalah gabungan dari beberapa sub-model dan model fungsi khusus dari perangkat lunak yang akan dibangun. Pengalaman menunjukkan bahwa pemeriksaan dan pengambilan keputusan yang hanya didasarkan pada model tunggal, akan membawa masalah baru dalam proses pengembangan perangkat lunak.
Penting bagi seorang pengembang untuk memahami dengan tepat arti dari konstruksi sebuah model perangkat lunak. Usaha ini merupakan pekerjaan yang cukup berat. Bahasa pemodelan biasanya didefinisikan dengan aturan-aturan sintak dan semantik tertentu. Untuk bahasa model tekstual, digunakan konstruksi bahasa formal yang valid (misalnya BNF atau Backus-Naur Form). Untuk bahasa model grafis, sintaks didefinisikan dengan model grafik yang disebut meta-models. Semantik bahasa pemodelan menyatakan arti yang melekat pada entitas dan relasi yang diungkapkan pada gambar model perangkat lunak. Seperti misalnya sebuah diagram sederhana dari dua buah kotak yang terhubung dengan garis lurus, akan terbuka untuk berbagai interpretasi artian. Pengembang harus mengetahui konteks diagram tersebut, seperti misalnya dalam Diagram Object dan Diagram Aktivitas yang dapat membantu penafsiran arti gambar model tersebut.
Secara praktis, maka pengembang harus dapat beradaptasi dengan abstraksi model yang secara mendasar hanya menampilkan informasi yang tidak utuh. Komunikasi yang tepat pada intinya adalah pihak-pihak yang berkomunikasi dapat menangkap makna/arti yang sama dari notasi pada gambar model yang digunakan. Pemahaman akan sintaks yang digunakan, semantik yang digambarkan dan konteks gambar model sangat penting untuk para pengembang dan stakeholders terkait pengembangan perangkat lunak.
Types of Models
Sebuah model, pada dasarnya merupakan agregasi dari beberapa sub-model. Setiap sub-model merupakan deskripsi parsial yang dikhususkan untuk tujuan khusus tertentu; dan dinyatakan oleh satu atau beberapa diagram. Kumpulan sub-model dapat terdiri dari beberapa bahasa pemodelan, atau bahasa pemodelan tunggal seperti misalnya UML.
Sekarang ini, model dibedakan menjadi model informasi, model perilaku dan model struktur.
Model informasi menyatakan data dan informasi yang ada pada perangkat lunak. Model ini merupakan representasi abstrak dari konsep, properties, relasi dan constraint dari entitas data. Model informasi sering digunakan untuk menyatakan konteks formal dari perangkat lunak yang dilihat dari sudut pandang permasalahan yang akan diselesaikan tanpa memikirkan bagaimana model ini diimplementasikan pada perangkat lunak.
Model Perilaku menyatakan fungsi dari perangkat lunak yang akan dikembangkan. Model perilaku biasanya dinyatakan dalam bentuk: state machines, model aliran-kontrol dan model aliran data. State Machines menyatakan perangkat lunak yang terdiri dari kumpulan states (keadaan yang terdefinisi), events dan transisi. Model aliran kontrol menyatakan sebuah sequence of events yang menyebabkan proses dieksekusi atau dihentikan. Model aliran data biasanya menggambarkan perilaku data yang bergerak melalui masuk atau keluar proses penyimpanan data.
Model Struktur mengilustrasikan komposisi logis (atau fisik) dari berbagai komponen dari perangkat lunak. Pemodelan struktural menjelaskan batasan dari perangkat lunak yang diimplementasikan dan lingkungan tempat dimana perangkat lunak akan difungsikan/dijalankan.