LABORATORIUM FORMAL METHODS IN SOFTWARE ENGINEERING (FMSE) FAKULTAS ILMU KOMPUTER UNIVERSITAS INDONESIA
Tutorial SPL in ABS FMSE Training – A New Approach in Modeling Requirement Changes
8 Januari 2016
Daftar Isi 1.
Membuat SPL di ABS ............................................................................................................................. 2
Core Module ..................................................................................................................................... 2
Feature Model................................................................................................................................... 3
Delta Modeling.................................................................................................................................. 4
ProductConfiguration........................................................................................................................ 5
Product Selection .............................................................................................................................. 6
2.
Menjalankan SPL di ABS ........................................................................................................................ 6
Menjalankan Base Product ............................................................................................................... 6
Menjalankan Varian ProdukMenggunakan Delta ............................................................................. 7
1
1. Membuat SPL di ABS Untuk membuat SPL di ABS terdapat 5 langkah yang perlu dilakukan:
Core Module Langkah pertama yang diperlukan adalah membuat base product yang nantinya produk-produk lain dibuat dengan memodifikasi base product menggunakan delta. Pada tutorial kali ini, akan digunakan kembali module Account yang telah ada pada tutorial sebelumnya. Seluruh source code pada tutorial ini dapat Anda download pada http://fmse.cs.ui.ac.id/?open=event/abs/2016-material kemudian download FullAccountABS.zip Silakan pahami source code dengan mengikuti langkah-langkah pada tutorial ini. module Account; export *; import Customer,CorpIndvCustomerImpl from CustomerIF; interface Int Int Int }
Account { getAid(); deposit(Int x); withdraw(Int x);
class AccountImpl(Int aid, Int balance, Customer owner) implements Account { // Core Product Int getAid() { return aid; } Int deposit(Int x) { balance = balance + x; return balance;} Int withdraw(Int y) { if (balance - y >= 0) { balance = balance - y; } return balance; } } { Customer c = new local CorpIndvCustomerImpl(17); Account a = new AccountImpl(1,1,c); Fut
dep = a!deposit(100); Fut withd = a!withdraw(10); await dep? & withd?; Int deposit = dep.get; Int withdraw = withd.get; Int net = deposit+withdraw; }
2
Feature Model Feature model dari Account dapat Anda lihat pada FeatureModel.abs. Adapun bentuk diagramnya dapat dilihat pada gambar berikut.
Gambar lingkaran di atas persegi menandakan bahwa fitur tersebut optional. Sementara kotak yang diwarnai menandakan parameter dan batasan dari fitur. Untuk fitur Type, gambar menyatakan bahwa fitur yang dapat dipilih hanya satu yaitu Check atau Save. Grup dari fitur dapat dibedakan menjadi inclusive (group allof) atau alternative (group oneof) .Dalam sebuah grup terdapa tcomma-separated list dari deklarasi fitur. Setiap deklarasi fitur dapat berupa optional (opt) dan memiliki batasan (ifin:), exclusions (exclude:) atau requires terhadap fitur lain (require:). Representasi teks dari gambar tersebut dapat dilihat di bawah ini. root Account { group allof { Type { Group oneof { Check {ifin: Type.i == 0;}, Save {ifin: Type.i> 0; exclude: Overdraft;} } Inti; }, opt Fee {Int amount in [0..5];}, opt Overdraft } }
Manfaat utama dari feature model terasa saat mendefinisikan produk baru. Feature model akan mencegah terealisasikannya produk baru yang menyalahi feature model.
3
Delta Modeling Pada ABS, produk-produk baru dalam SPL direalisasikan dengan mengaplikasikan delta ke coreproduct. Delta pada ABS dapat menambah, menghapus atau memodifikasi class dan interface. Modifikasi yang diizinkan antara lain:
Menambah dan menghapus field/variabel Menambah, menghapus dan memodifikasi method Menambah interfaceyang diimplementasi
Contoh dari delta dapat dilihat pada DFee.abs Delta DFee (Int fee); // Implements feature Fee uses Account; modifies class AccountImpl { modifies Int deposit(Int x) { Intresult = x; if (x>=fee) result = original(x-fee); return result; }
Pada contoh di atas terdapat method original. Method ini memanggil versi asli dari method yang dimodifikasi (dalam hal ini method deposit). Untuk memodifikasi nilai dari field atau variabel, cara yang dapat dilakukan adalah menghapusnya terlebih dahulu lalu kemudian menambahkan kembali dengan nilai yang berbeda. Contohnya seperti ilustrasi berikut dengan delta DSave pada file DSave.abs. deltaDSave (Int i); usesAccount; modifiesclass AccountImpl { removesIntinterest; addsIntinterest = i; }
Delta ini memodifikasi nilai interest pada classAccountImpl dengan cara yang telah disebutkan sebelumnya seperti pada gambar berikut ini.
4
ProductConfiguration Contoh product configuration pada AccountABS dapat dilihat pada AccountPL.abs Productline Accounts; featuresFee, Overdraft, Check, Save, Type; delta DType(Type.i) when Type; delta DFee(Fee.amount) when Fee; delta DOverdraft after Dcheck when Overdraft; delta DSave(Type.i) after DType when Save; delta Dcheck after Dtype when Check;
Padaproduct configuration terdapat tigabagian yang penting yaitu: Application condition (klausa when) yang menandakanfitur yang direalisasikan oleh delta
dan memicu aplikasi dari delta. Parameter delta yang mengikuti atribut fitur. Urutan aplikasi delta (klausa after) untukmenjaga agar tidak terjadi konflik antar delta.
5
Product Selection Langkah terakhir adalah product selection yang contohnya terdapat di bawah ini. Dapat Anda lihat pada Products.abs // basic product product CheckingAccount (Type{i=0},Check); // Account with Fee and parameter product AccountWithFee (Type{i=0},Check,Fee{amount=1}); // Account with overdraft product AccountWithOverdraft (Type{i=0},Check,Overdraft); // should be refused product SavingAccountWithOverdraft (Type{i=1},Save,Overdraft);
Untuk membuat produk cukup menuliskan fitur-fitur yang direalisasikan di dalamnya dan menyatakan nilai pada delta/fitur yang membutuhkan parameter.
2. Menjalankan SPL di ABS Ada duajenislangkah yang dapatdilakukanuntukmenjalankan SPL di ABS
Menjalankan Base Product Eclipse Menu RunRun Configurations…Pilih ABS Java BackendNew_configuration Untuk ABS Project pilih Nama Project yang ingin dijalankan (contoh Test)Untuk ABS Product pilihUntuk Run Target pilih AccountPilih draw sequence diagram jika ingin melihat sequence diagram ApplyRun
6
Menjalankan Varian ProdukMenggunakan Delta Caranya hamper serupa dengan menjalankan core product namun pada pilihan ABS Product, pilihlah sesuai dengan produk yang diinginkan.Untukselanjutnya, akan dijalankan produk AccountWithFee.
7
Perbedaan dengan core product dapat dilihat saat proses debugging, nilai deposit menjadi 99 berbeda dengan core product yang menghasilkan 100. Hal ini terjadi karena delta mengubah method deposit.
8