1 / 46

LinguSQL & Studi Kasus Aplikasi Transaksi Saham

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

khoi
Télécharger la présentation

LinguSQL & Studi Kasus Aplikasi Transaksi Saham

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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.

  3. Tujuan : • Pengenalan LinguSQL sebagai tool pengembangan aplikasi perangkat lunak • Pengenalan prosedur dasar pengembangan komponen perangkat lunak dengan LinguSQL

  4. Daftar Isi • Overview LinguSQL • Development Process • Demo

  5. LinguSQL

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

  7. 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++

  8. 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

  9. Contoh Tampilan LinguSQL

  10. Demo 1 :Aplikasi LinguSQL

  11. Gambaran Besar

  12. Cara Kerja LinguSQL

  13. Metodologi Pengembangan

  14. 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

  15. 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

  16. 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.

  17. 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

  18. 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.

  19. 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

  20. 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; |} Struktur Data :

  21. 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 Struktur Class

  22. 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; } Struktur Validation

  23. LinguSQL Demo :Aplikasi Transaksi Saham

  24. 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.

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

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

  27. Identifikasi Data Prosedur Transaksi : • Broker pembeli dan penjual memberikan penawaran jual/belisaham • Sistem mencocokkan permintaan dan penawaran saham yang cocok • Sistem mencatatkan transaksi yang terjadi • Penyelesaian (pembayaran) transaksi

  28. Identifikasi Data (2) Representasi Data dalam Lingu : # 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;|} # 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; |} |}

  29. 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

  30. 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; }

  31. 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.

  32. 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();

  33. Demo :Verifikasi Skrip LinguHOL

  34. Bagaimana Verifikasi Mencegah Kesalahan ? Algoritma “filter invalid broker” yang benar : 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`;

  35. Demo :Verifikasi Prosedur yang Benar

  36. Bagaimana Verifikasi Mencegah Kesalahan ? Algoritma “filter invalid broker”yang salah : 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`;

  37. Demo :Verifikasi Prosedur yang Salah

  38. 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

  39. 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.

  40. 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; }

  41. Demo :Validasi Skrip Lingu

  42. 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

  43. Demo :Transformasi Skrip Lingu

  44. 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

  45. Terima Kasih Kritik & Saran : - rwenang@ui.edu - ade@cs.ui.ac.id

More Related