Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

LinguSQL & Studi Kasus Aplikasi Transaksi Saham Rikky Wenang P. Fakultas Ilmu Komputer UI R.3208

Presentasi serupa


Presentasi berjudul: "LinguSQL & Studi Kasus Aplikasi Transaksi Saham Rikky Wenang P. Fakultas Ilmu Komputer UI R.3208"— Transcript presentasi:

1 LinguSQL & Studi Kasus Aplikasi Transaksi Saham Rikky Wenang P. Fakultas Ilmu Komputer UI R.3208

2

3 1999, Lockheed Martin engineering team used English units of measurement while the agency's team used the more conventional metric system for a key spacecraft operation.They lost a $125 million Mars orbiter. Doesn’t mean that the engineers are stupid, just to show that the smallest mistake costs a lot.

4 Tujuan :  Pengenalan LinguSQL sebagai tool pengembangan aplikasi perangkat lunak  Pengenalan prosedur dasar pengembangan komponen perangkat lunak dengan LinguSQL

5 Daftar Isi Overview LinguSQL Development Process Demo

6 LinguSQL

7 Latar Belakang LinguSQL merupakan tool hasil riset fakultas ilmu komputer universitas indonesia. Konsep bahasa dikembangkan sejak tahun 2003, pengembangan sejak tahun Masih dalam tahap pengembangan, terbuka untuk saran dan kritik.

8 Apa itu LinguSQL ? Tool pengembangan komponen yang mengintegrasikan proses pengujian :  Whitebox Pengujian alur algoritma di dalam sebuah perangkat lunak, mis. formal method, model checking.  Blackbox Pengujian karakteristik input/output, mis. unit testing,skenario. Spesifik untuk aplikasi database Menggunakan bahasa abstrak Lingu untuk scripting  Tidak executable, harus diubah menjadi bahasa konkrit lain misal Java, C++

9 Karakteristik LinguSQL Komplemen proses pengembangan sistem populer => (SDLC, waterfall,RUP) Berfokus pada komponen kritis yang memerlukan pengujian secara intensif  Butuh sumber daya waktu dan manusia lebih. Hasil akhir yang diharapkan :  Komponen terverifikasi secara formal  Komponen yang telah tervalidasi dengan berbagai macam input

10 Contoh Tampilan LinguSQL

11 Demo 1 : Aplikasi LinguSQL

12 Gambaran Besar

13 Cara Kerja LinguSQL

14 Metodologi Pengembangan

15 Proses Pengembangan 4 proses pengembangan komponen dengan LinguSQL :  Identifikasi kebutuhan data dan fungsi  Verifikasi spesifikasi komponen secara formal  Validasi input/output komponen  Transformasi ke bahasa konkrit

16 Proses 1 : Identifikasi kebutuhan data dan fungsi Identifikasi kebutuhan data dan fungsi  Analogi dengan analisa kebutuhan dan desain sistem pada metodologi konvensional  Berfokus kepada data dan fungsi yang sangat kritis untuk aplikasi tersebut. Mis. proses transaksi pada bursa saham, proses kliring pada sistem perbankan, dll.  Hasil akhir adalah struktur data dan algoritma fungsi dengan bahasa Lingu

17 Proses 2 : Proses Verifikasi Proses verifikasi membutuhkan spesifikasi formal untuk tiap prosedur yang akan diuji. Spesifikasi disusun berdasarkan prosedur yang ada beserta prekondisi dan postkondisi yang diharapkan. Prosedur + Spesifikasi => LinguHOL script Spesifikasi dibuktikan kebenarannya dengan bantuan HOL theorem prover  Kasus tertentu membutuhkan bantuan manusia untuk melakukan pembuktian.

18 Proses 3 : Proses Validasi Proses validasi melakukan pengujian prosedur secara blackbox.  memeriksa output yang dihasilkan jika diberi input dengan jangkauan tertentu Spesifikasi harus didefinisikan untuk memeriksa hasil output prosedur Validasi dilakukan terhadap database dengan data yang digenerate secara otomatis.  Salah satu fitur LinguSQL adalah data generator

19 Proses 4 : Proses Transformasi Proses transformasi mengubah skrip Lingu menjadi bahasa konkrit, mis. Java. Fitur transformasi bersifat modular  Lingu memiliki portabilitas yang luas  Dapat dikembangkan untuk bahasa-bahasa pemrograman konkrit lainnya Transformasi menghasilkan komponen yang merupakan bagian dari sistem informasi yang lebih besar.

20 type RegistrationTable = Record {| ID :: String; Name :: String; Sex :: Integer; Category :: Integer; StudyProgramme :: String; |} type SETdb = Dbase {|SubmitTab :: Table AnswerFormTable; MasterTab :: Table RegistrationTable; HealthyAFormTab :: Table AnswerFormTable; SolutionsTab :: Table SolutionTable; PassTab :: Table RegistrationTable; |} class SETutility (d::SETdb) { method filterUnknown() :: () ids, okids :: Table {| ID :: String; |}; do { ids := findAll s<-d.SubmitTab where T found s.ID,s.Name; insertAll i<-ids,r<-d.MasterTab where i.ID==r.ID to okids; delete ids where ids.ID in okids.ID; insertAll s<-d.submitTab, i <-ids where s.ID==i.ID to d.UnknownAFormTab; } validation fairness (sex::String) :: Bool { result0 :: RegistrationTable; do { call evaluate(); result0 := d.PassTab; call changeSex(sex); call evaluate(); } return result0 == Passtab; pre T; post return == T; } Contoh Kode Lingu : SET

21 Struktur Data : Record = Struktur data representasi dari tabel data type RegistrationTable = Record {| ID :: String; Name :: String; Sex :: Integer; Category :: Integer; StudyProgramme :: String; |} DBase = representasi dari database yang memiliki tabel- tabel data type SETdb = Dbase {| SubmitTab :: Table AnswerFormTable; MasterTab :: Table RegistrationTable; HealthyAFormTab :: Table AnswerFormTable; SolutionsTab :: Table SolutionTable; PassTab :: Table RegistrationTable; |}

22 Struktur Class class SETutility (d::SETdb) { method filterUnknown() :: () ids, okids :: Table {| ID :: String; |}; do { ids := findAll s<-d.SubmitTab where T found s.ID,s.Name; insertAll i<-ids,r<-d.MasterTab where i.ID==r.ID to okids; delete ids where ids.ID in okids.ID; insertAll s<-d.submitTab, i <-ids where s.ID==i.ID to d.UnknownAFormTab; } Memiliki method dengan parameter dan return value Memiliki operator database native, mis. Findall, insertall, delete, dsb. Seluruh parameter dalam class merupakan pass-by-value

23 Struktur Validation Definisi metode pengujian blackbox Menggunakan method yang telah didefinisikan sebelumnya Memiliki spesifikasi prekondisi dan postkondisi validation fairness (sex::String) :: Bool { result0 :: RegistrationTable; do { call evaluate(); result0 := d.PassTab; call changeSex(sex); call evaluate(); } return result0 == Passtab; pre T; post return == T; }

24 LinguSQL Demo : Aplikasi Transaksi Saham

25 Studi Kasus Aplikasi Transaksi Saham  LinguSQL akan menggunakan sebuah studi kasus sederhana dari sistem transaksi saham yang berdasarkan prosedur nyata.  Sistem ini mensimulasikan aktifitas transaksi saham dari pembelian, penjualan, dan finalisasi transaksi yang terjadi pada pasar saham Indonesia.

26 Studi Kasus (2) Prosedur Transaksi : 1. Broker pembeli dan penjual memberikan penawaran jual/beli saham 2. Sistem mencocokkan permintaan dan penawaran yang cocok 3. Sistem mencatatkan transaksi yang terjadi 4. Penyelesaian (pembayaran) transaksi

27 Pengembangan dengan LinguSQL Proses 1: Identifikasi Kebutuhan  Identifikasi objek dari skenario penggunaan sistem.  Identifikasi prosedur kritis yang perlu dilakukan oleh komponen program.

28 Identifikasi Data Prosedur Transaksi : 1. Broker pembeli dan penjual memberikan penawaran jual/beli saham 2. Sistem mencocokkan permintaan dan penawaran saham yang cocok 3. Sistem mencatatkan transaksi yang terjadi 4. Penyelesaian (pembayaran) transaksi

29 Identifikasi Data (2) Representasi Data dalam Lingu : # Data Saham type StockListTable = Record {| Id :: Integer; Stock_Name :: String; Stock_Volume :: Integer; Current_Price :: Integer; Update_Timestamp :: String; |} # Data Broker type BrokerListTable = Record {| Id :: Integer; Broker_Name :: String; Trading_Limit :: Integer; |} |} # Data Penawaran Transaksi type TransactionTable = Record {|Id :: Integer; Timestamp :: String; Broker_Id :: Integer; Stock_Id :: Integer; Amount :: Integer; Price :: Integer;|} # Data Transaksi Final Saham type FinalTransactionTable = Record {|Timestamp :: String; Buy_Id :: Integer ; Sell_Id :: Integer ; Buyer_Broker_Id :: String; Seller_Broker_Id :: String; Stock_Id :: Integer; Amount :: Integer; Price :: Integer;|}

30 Identifikasi Prosedur Fungsi Utama => Pemetaan transaksi  Mencocokan permintaan pembelian dan penjualan dengan harga yang sesuai. Fungsi Pendukung => memastikan operasi sesuai aturan transaksi saham.  Pemeriksaan kevalidan permintaan  Pemeriksaan trading limit  Pemeriksaan kevalidan broker saham

31 Identifikasi Prosedur (2) method filterInvalidBrokerTransaction () :: () ok_ids,ids :: Table {| Id :: Integer; |}; do { // Ambil seluruh ID dari order pembelian saham ids := findAll d<-database.BuyTransactionTab where T found d.Id; // Ambil seluruh ID order pembelian yang memiliki ID broker yang valid ok_ids := findAll d<-database.BuyTransactionTab, b<-database.BrokerTab where d.Broker_Id == b.Id found d.Id; // Hapus ID order pembelian yang terdapat di tabel ok_ids, // sisanya adalah ID order yang tidak memiliki ID broker yang valid delete ids where ids.Id in ok_ids.Id; // Masukkan data order yang tersisa ke tabel transaksi invalid insertAll d<-database.BuyTransactionTab, i<-ids where d.Id == ids.Id to database.InvalidTransactionTab; }

32 Proses 2 : Verifikasi Prosedur Verifikasi pada LinguSQL menggunakan bantuan HOL theorem prover Membutuhkan spesifikasi tambahan untuk tiap-tiap prosedur  Prekondisi : kondisi yang harus dipenuhi sebelum prosedur  Postkondisi : kondisi yang harus dipenuhi setelah prosedur Skrip Lingu harus diubah menjadi skrip LinguHOL untuk melakukan verifikasi.

33 Skrip LinguHOL val filterInvalidBrokerTransaction_def = Define `filterInvalidBrokerTransaction ( REF ( BrokerTab : BrokerListTable set), REF ( BuyTransactionTab : TransactionTable set), REF ( InvalidTransactionTab : TransactionTable set) ) = pre (empty InvalidTransactionTab /\ ~(empty BrokerTab) /\ ~(empty BuyTransactionTab) ) post ( ALLof InvalidTransactionTab (satisfy r. ALLof BrokerTab(satisfy q. ~(r.Broker_Id = q.Id)))) do /{ let badids = select BuyTransactionTab I (only r. ALLof BrokerTab(satisfy t. ~(t.Id = r.Broker_Id))) in insert badids InvalidTransactionTab I ALL /} return void`; (*----- the verification -----*) reduce defs filterInvalidBrokerTransaction_def ; L0min_vcg.autoverify MY_TAC ; L0min_vcg.VCs; L0min_vcg.conclude();

34 Demo : Verifikasi Skrip LinguHOL

35 Bagaimana Verifikasi Mencegah Kesalahan ? pre (empty InvalidTransactionTab /\ ~(empty BrokerTab) /\ ~(empty BuyTransactionTab) ) post ( ALLof InvalidTransactionTab (satisfy r. ALLof BrokerTab(satisfy q. ~(r.Broker_Id = q.Id)))) Algoritma “filter invalid broker” yang benar : do /{ let badids = select BuyTransactionTab I (only r. ALLof BrokerTab(satisfy t. ~(t.Id = r.Broker_Id))) in insert badids InvalidTransactionTab I ALL /} return void`;

36 Demo : Verifikasi Prosedur yang Benar

37 Bagaimana Verifikasi Mencegah Kesalahan ? pre (empty InvalidTransactionTab /\ ~(empty BrokerTab) /\ ~(empty BuyTransactionTab) ) post ( ALLof InvalidTransactionTab (satisfy r. ALLof BrokerTab(satisfy q. ~(r.Broker_Id = q.Id)))) Algoritma “filter invalid broker” yang salah : do /{ let badids = select BuyTransactionTab I (only r. ALLof BrokerTab(satisfy t. (t.Id = r.Broker_Id))) in insert badids InvalidTransactionTab I ALL /} return void`;

38 Demo : Verifikasi Prosedur yang Salah

39 Bagaimana Verifikasi Mencegah Kesalahan ? Pembuktian spesifikasi dengan menggunakan formal method :  Hoare Triple {P} C {Q}  Mengidentifikasikan kesalahan logika Pitfall verifikasi :  Verifikasi => proses berdasarkan asumsi  Analisa kebutuhan yang benar => Spesifikasi yang benar

40 Proses 3 : Validasi Prosedur Proses validasi melakukan pengujian terhadap output sebuah prosedur sesuai dengan inputnya. Pengujian lebih berfokus ke output state database setelah dilakukan prosedur. Pengujian dilakukan dengan bantuan data generator untuk melakukan populasi data sesuai spesifikasi.

41 Skrip Validasi validation checkInvalidBrokerFilter() :: Bool { temp_trans :: TransactionTable; temp_broker :: BrokerListTable; isNotInInvalid, isInValid :: Bool; isNotInInvalid2, isInValid2 :: Bool; do { temp_trans.Id := 10; temp_trans.Broker_id := 1; temp_trans.Stock_id := 5; temp_trans.Amount := 10; temp_trans.Price := 100; temp_broker.Id := 1; temp_broker.Trading_Limit := 1000; insertAll x<-temp_trans where T to database.BuyTransactionTab; insertAll y<-temp_broker where T to database.BrokerTab; call filterInvalidBrokerTransaction(); isNotInInvalid := find a<-database.InvalidTransactionTab where a.Id == temp_trans.Id found F otherwise T; isInValid := find a<-database.BuyTransactionTab where a.Id == temp_trans.Id found T otherwise F; } return isNotInInvalid /\ IsInValid; pre T; post T; }

42 Demo : Validasi Skrip Lingu

43 Proses 4 : Transformasi Kode Jika verifikasi dan validasi sukses, kode Lingu diubah ke bahasa konkrit untuk implementasi. Aspek portabilitas meminimalkan masalah migrasi aplikasi dari satu bahasa ke bahasa lain di masa depan. LinguSQL saat ini mampu melakukan transformasi Lingu ke Java.  Menggunakan Atribute Grammar  Hasil java bisa di-compile namun belum bisa dijalankan secara independen

44 Demo : Transformasi Skrip Lingu

45 Penutup LinguSQL sebagai tool pengembangan aplikasi database yang menekankan kepada pengujian secara formal dan blackbox. LinguSQL adalah teknologi komplemen bukan substitusi dari bahasa konkrit. Hasil akhir yang diharapkan adalah komponen kode yang :  Terverifikasi secara formal  Tervalidasi dengan jangkauan input tertentu

46 Terima Kasih Kritik & Saran : - -


Download ppt "LinguSQL & Studi Kasus Aplikasi Transaksi Saham Rikky Wenang P. Fakultas Ilmu Komputer UI R.3208"

Presentasi serupa


Iklan oleh Google