Kata kunci: Verifikasi, Metode Formal, Component Software, Software Engineering, Component-based Development. 1. Pendahuluan
Metode formal (formal method) telah dikenal sejak lama dan telah digunakan sebagai salah satu alat bantu dalam ilmu komputer untuk menghasilkan produk yang lebih baik, baik produk berupa perangkat lunak (software) maupun perangkat keras (hardware). Penerapan teknik verifikasi dengan metode formal dalam produksi perangkat keras secara komersial telah berhasil dengan baik, sebagaimana yang telah dilakukan oleh AMD, Intel, IBM dan beberapa perusahaan besar lainnya. [5] menjelaskan beberapa contoh keberhasilan penerapan teknik verifikasi dengan metode formal dalam bidang perangkat keras. Permasalahan baru yang muncul kemudian adalah bagaimana cara untuk menerapkan teknik verifikasi dengan metode formal pada pengembangan perangkat lunak. Tidak seperti proses produksi perangkat keras, pada proses pengembangan perangkat lunak tidak terdapat sebuah standar yang diterima dan digunakan oleh semua pihak secara luas. Terdapat banyak paradigma pemograman yang digunakan, variasi bahasa pemograman yang dikuasai dan metodologi yang digunakan dalam pengembangan perangkat lunak tersebut. Banyaknya variasi dari faktor-faktor penentu dalam proses pengembangan perangkat lunak menjadikan para ahli dalam metode formal tidak dapat merumuskan sebuah mekanisme yang dapat menjadi standar dalam melakukan verifikasi terhadap perangkat lunak tersebut. Paper ini akan membahas mengenai upayaupaya yang telah dilakukan oleh para peneliti di bidang metode formal dalam menyusun sebuah mekanisme yang dapat memudahkan penerapan teknik verifikasi dengan metode formal dalam bidang pengembangan perangkat lunak secara komersial, masalah-masalah yang ditemukan dalam upaya penerapan teknik verifikasi dengan metode formal, hasil yang telah berhasil diperoleh, dan langkah-langkah yang dapat ditempuh di masa yang akan datang.
yang dihadapi oleh klien, analisis terhadap proses bisnis klien, dan kemudian mengajukan sebuah solusi yang dapat mengatasi persoalan tersebut. Design Pada tahapan ini, para pengembang sistem akan melakukan pemetaan dari hasil analisis menjadi sebuah rancangan sebagai landasan dalam proses implementasi. Implementation Dalam tahapan ini, para pengembang perangkat lunak akan membuat program dengan mengacu kepada hasil perancangan yang telah dibuat. Testing Tahapan ini berguna untuk memeriksa apakah perangkat lunak tersebut telah memenuhi semua persyaratan (requirement) yang telah ditentukan, dan apakah perangkat lunak tersebut telah bebas dari semua bugs (kesalahan) yang dapat mengganggu kinerja sistem. Diantara tahapan-tahapan diatas, tahapan testing merupakan tahapan yang seringkali memakan waktu pengembangan yang cukup lama, dikarenakan jumlah kemungkinan masukan yang dapat ditangani oleh perangkat lunak tersebut, sehingga memperbesar kemungkinan munculnya kesalahan program. Berbagai macam metodologi telah menyusun berbagai macam metode pengujian terhadap perangkat lunak yang dihasilkan, namun tidak pernah ada satu metode yang dapat menjamin bahwa perangkat lunak tersebut tidak memiliki kesalahan (bug) sama sekali. Oleh sebab itu, keberadaan metode formal dalam perangkat lunak dianggap sebagai solusi untuk menghindari terjadinya kesalahan dalam sebuah perangkat lunak.
1. Framework of modelling system, dimana bahasa yang digunakan akan dideskripsikan; 2. Bahasa spesifikasi untuk membantu pembuatan deskripsi terhadap properti sistem yang akan diverifikasi; 3. Metode verifikasi untuk melakukan pemeriksaan terhadap deskripsi sebuah sistem, apakah telah memenuhi spesifikasi yang telah ditentukan. Dalam [5] terdapat penjelasan mengenai pendekatan lain yang digunakan dalam mengklasifikasikan metode formal berdasarkan kebutuhan penguasaan terhadap teknik matematika dan theorem prover. Berdasarkan kedua kriteria tersebut, metode formal dapat diklasifikasikan menjadi 2 (dua) kelas: Light-weight Metode formal yang termasuk dalam kelas ini adalah metode formal yang tidak membutuhkan tingkat penguasaan yang tinggi mengenai pengetahuan matematis dan theorem prover. Salah satu contohnya adalah automated consistency checker, yang salah satu fiturnya dapat melakukan pemeriksaan terhadap sintaks dan kesalahan tipe dari sebuah spesifikasi. Heavy-duty Metode formal yang tergolong dalam kelas ini mengharuskan penggunanya memiliki pengetahuan matematis tentang metode formal yang kuat dan memiliki skill yang baik tentang theorem prover. Anggota dari klasifikasi ini adalah mechanical theorem prover, contohnya adalah PVS dan ACL2. Penjelasan mengenai beberapa paradigma yang dapat digunakan dalam membangun sebuah spesifikasi perangkat lunak dijelaskan dalam [10]. Dalam [6] dijelaskan mengenai kriteriakriteria yang menyusun klasifikasi dari metode verifikasi. Klasifikasi yang terjadi dalam metode formal menunjukkan banyaknya pendekatan yang dapat digunakan dalam melakukan sebuah teknik verifikasi. Setiap pengguna dapat memilih teknik verifikasi yang sesuai dengan kemampuan (skill) matematis dan paradigma pemograman yang dikuasai. Sebagai contoh, seorang yang tidak memiliki latar belakang yang kuat mengenai theorem prover dapat memilih teknik verifikasi yang bersifat otomatis, sehingga tidak perlu membuang waktu dalam mempelajari lebih lanjut mengenai theorem prover.
4. Component-based Technology
Paradigma component-software pertama kali diusulkan pada konferensi NATO di Garmisch pada tahun 1968 tentang ide untuk perangkat lunak yang dapat dibuat secara massal. Sejak saat itu sudah terdapat banyak definisi mengenai komponan dalam perangkat lunak, namun saat ini definisi dalam [9] adalah yang paling banyak digunakan: Komponen dalam perangkat lunak adalah sebuah unit yang dikomposisikan dengan interface dan ketergantungan antara komponen telah dispesifikasikan dalam contract secara eksplisit. Masing-masing komponen dapat dikembangkan secara independen dan komposis antar komponen dapat dilakukan oleh pihak lain. Saat ini, telah banyak alat (tools) yang dapat digunakan oleh pengembang sebuah perangkat lunak untuk menggunakan paradigma ini, antara lain yang sangat terkenal saat ini adalah teknologi .NET dari Microsoft, teknologi JavaBeans yang merupakan bagian dari J2EE(Java 2 Enterprise Edition) dari Sun Microsystems , CORBA yang merupakan keluaran dari OMG, dan XML sebagai format standar yang digunakan dalam paradigma ini. Paradigma ini dapat memudahkan penyusunan spesifikasi dari sebuah perangkat lunak, dikarenakan pembuatan spesifikasi dapat dilakukan untuk setiap komponen saja. Cara ini akan menurunkan kompleksitas dari proses verifikasi, sehingga dapat berjalan lebih cepat. [4] membahas mengenai pendekatanpendekatan yang telah dikembangkan dalam paradigma ini dan melakukan klasifikasi terhadap pendekatan-pendekatan tersebut dan membahas secara singkat mengenai teknikteknik verifikasi yang telah dikembangkan khusus untuk perangkat lunak yang dikembangkan dengan menggunakan paradigma component-software ini. Pada saat ini, perangkat lunak yang dikembangkan dengan menggunakan paradigma ini masih terbatas pada domain tertentu, seperti pada embedded system dan critical system.
perangkat lunak yang dikembangkan dengan menggunakan paradigma pemograman berbasiskan komponen (component based development).
Kerangka kerja yang berbasiskan UNITY juga diajukan dalam [1]. Formalisasi dalam kerangka kerja ini termasuk dalam kategori light-weight dengan penerapan menggunakan PLP.
Daftar Pustaka
[1] Ade Azurat and I.S.W.B. Prasetya. Some Agreements on Component Software Verification. [2] Ade Azurat and I.S.W.B. Prasetya. A survey on embedding programming logics in a theorem prover. Technical Report UU-CS-2002-007, Institute of Information and Computing Sciences Untrecht University, P.O.Box 80.089 3508 TB Utrecht, The Netherlands, January 2002. [3] Mike Barnett and Wolfram Schulte. Spying on Component: A Runtime Verification Technique. Technical report, Microsoft Research, 2001. [4] Gerd Beneken, Ulrike Hammerschall, Manfred Broy, and et.al. Componentware State of the Art 2003. Technical report, Institut fr Informatik, Technische Universitt Mnchen, Boltzmannstr. 3, 85748 Garching, Germany, September 2003. [5] Constance Heitmeyer. On the Need of Practical Formal Methods. Technical report, Naval Research Laboratory, Washington, DC, 20375, USA. [6] Michael Huth and Mark Ryan. Logic in Computer Science : Modelling and Reasoning about Systems. Cambridge University Press, 2004. [7] A.Azurat, I.S.W.B. Prasetya, T.E.J. Vos and S.D. Swierstra. A UNITY-based Framework towards Component Based Systems. [8] Sagar Chaki, Edmund Clarke, Alex Groce, Somesh Jha and Helmut Veith. Modular Verification of Software Components in C. Technical report, NLR-ONR. [9] Clement Szyperski, Dominik Gruntz, and Stephan Murer. Component Software : Beyond Object-Oriented Programming. AddisonWesley, 2nd edition, 2003. [10] Axel van Lamsweerde. Formal Specification: a Roadmap. The Future of Software Engineering, ACM Press, 2000.
Kesimpulan
Dari penjelasan pada bagian-bagian sebelummya, maka dapat diambil kesimpulan sebagai berikut: 1. Penerapan metode formal dalam proses pengembangan perangkat lunak dapat dikatakan masih jauh dari kata memuaskan. 2. Sebuah teknik verifikasi dengan menggunakan metode formal tidak mudah untuk dikuasai. 3. Penerapan metode formal dapat dilakukan dengan baik untuk sejumlah kasus dengan domain yang telah didefinisikan dan khusus. 4. Paradigma pemograman yang berbasiskan komponen dapat lebih memudahkan dalam penerapan metode formal. Sedangkan untuk saran pengembangan lebih lanjut yang dapat penulis berikan adalah: 1. Penggunaan notasi yang lebih humanreadable 2. Tools yang lebih mudah digunakan oleh orang awam. 3. Pengembangan sebuah metodologi standar untuk menerapkan teknik verifikasi terhadap perangkat lunak.