BAB IV PEMBANGUNAN PERANGKAT LUNAK
Pada bab ini akan dibahas analisis, perancangan, implementasi dan pengujian perangkat lunak yang dibangun untuk menguji analisis yang telah dilakukan pada bab sebelumnya. Metode yang digunakan dalam pembangunan perangkat lunak ini mengadopsi metode Rational Unified Process (RUP).
4.1 Deskripsi Umum Perangkat Lunak Gambaran umum perangkat lunak yang akan dibangun ditunjukkan pada Gambar IV-1. User Interface akan menerima masukan dari user berupa query temporal, yang kemudian dikirimkan ke Query Processor. Query Processor akan memproses query temporal tersebut sampai menghasilkan query relasional untuk dapat mengakses relasi bitemporal yang disimpan dalam RDBMS. Untuk jenis query tertentu hasil retrieval dari RDBMS ada yang langsung berupa hasil yang diinginkan, namun juga ada yang masih berupa relasi valid-time untuk masukan aggregation tree. Relasi hasil baik dari aggregation tree maupun dari RDBMS akan dikirimkan ke User Interface sehingga dapat ditampilkan kepada user. Jika terdapat kesalahan pada query masukan maka Query Processor akan mengirimkan pesan kesalahan ke User Interface untuk disampaikan ke user. Begitu pula jika terjadi error dalam pengaksesan basis data, pesan kesalahan dari RDBMS akan dikirimkan ke User Interface untuk disampaikan ke user.
User
Gambar IV-1 Gambaran umum perangkat lunak
Perangkat lunak yang akan dibangun diberi nama BitemporalAggregator. Spesifikasi kebutuhan perangkat lunak BitemporalAggregator adalah sebagai berikut:
IV-1
IV-2
1. BitemporalAggregator dapat membuka serta menutup koneksi dengan server basis data (RDBMS) yang digunakan untuk menyimpan relasi bitemporal dalam model Snodgrass’. 2. BitemporalAggregator menerima masukan dari user berupa query retrieval (SELECT) temporal terhadap relasi bitemporal yang telah disimpan dalam RDBMS. 3. BitemporalAggregator melakukan konversi sintaks query temporal yang diterima menjadi query relasional dan menampilkan hasil konversi tersebut kepada user, atau menampilkan pesan kesalahan jika ada kesalahan sintaks. 4. BitemporalAggregator mengirimkan query relasional hasil konversi ke RDBMS tempat relasi bitemporal disimpan untuk dieksekusi. 5. BitemporalAggregator menerima hasil eksekusi query dari RDBMS, kemudian memproses hasil eksekusi query relasional tersebut. 6. Jika query masukan termasuk jenis query yang membutuhkan pemrosesan agregasi menggunakan qggregation tree, maka BitemporalAggregator akan membangun tree dari hasil ekseskusi query relasional kemudian melakukan penghitungan agregasi dari tree tersebut. 7. BitemporalAggregator menampilkan relasi hasil akhir eksekusi query, serta dapat juga menampilkan relasi sumber (relasi bitemporal) dalam model Snodgrass’. 8. BitemporalAggregator dapat menyimpan aggregation tree dalam sebuah file teks.
4.2 Analisis dan Perancangan Perangkat Lunak Pada bagian ini akan dijelaskan analisis dan perancangan perangkat lunak yang menggunakan pemodelan use case.
4.2.1 Model Use Case Pemodelan behavior perangkat lunak BitemporalAggregator dalam bentuk diagram use case ditunjukkan pada Gambar IV-2.
Open connection
Close connection
User
RDBMS Execute query
Save tree
Gambar IV-2 Diagram Use Case
IV-3
4.2.1.1 Deskripsi actor Seperti dapat dilihat pada Gambar IV-2, pada diagram use case terdapat dua actor yaitu User dan RDBMS. Penjelasan masing-masing actor dapat dilihat pada Tabel IV-1. Tabel IV-1 Tabel deskripsi actor
No 1 2
Nama actor User
Deskripsi actor Actor yang menggunakan sistem secara langsung, melakukan input query terhadap relasi bitemporal untuk mendapatkan hasil. Actor yang merupakan sebuah RDBMS tempat penyimpanan relasi bitemporal dengan model Snodgrass’.
RDBMS
4.2.1.2 Deskripsi use case Seperti dapat dilihat pada Gambar IV-2, pada diagram use case terdapat tiga use case. Penjelasan singkat masing-masing use case dapat dilihat pada Tabel IV-2. Tabel IV-2 Tabel penjelasan use case
No 1
Nama use case Open connection
2
Close connection
3
Execute query
4
Save tree
Penjelasan use case Deskripsi : Proses pembukaan koneksi ke server basis data Aktor : User, RDBMS Prekondisi : Koneksi belum terbuka Inisiasi : User memilih pilihan open connection Final State : Koneksi sistem dengan server basis data terbuka Deskripsi : Proses penutupan koneksi ke server basis data Aktor : User, RDBMS Prekondisi : Koneksi telah terbuka Inisiasi : User memilih pilihan close connection Final State : Koneksi sistem dengan server basis data tertutup Deskripsi : Proses mengeksekusi query masukan sampai didapatkan hasil akhir Aktor : User, RDBMS Prekondisi : Koneksi telah terbuka Inisiasi : User menuliskan query termporal kemudian memilih pilihan execute query Final State : Didapatkan hasil query sesuai dengan yang diharapkan dan ditampilkan pada User Deskripsi : Proses menyimpan aggregation tree dalam file teks Aktor : User Prekondisi : Aggregation tree telah dibangun Inisiasi : User memilih pilihan save tree Final State : Aggregation tree tersimpan pada sebuah file teks
4.2.1.3 Skenario Use Case Skenario sebuah use case menggambarkan urutan interaksi use case tersebut dengan actor yang terkait dengannya. Berikut ini adalah skenario untuk masing-masing use case. Untuk use case Open connection, skenarionya ditunjukkan pada Tabel IV-3. Tabel IV-3 Tabel skenario use case Open connection
No 1 2 3
Aksi actor
Reaksi sistem
Skenario normal User memilih pilihan open connection Sistem meminta parameter koneksi User memasukkan parameter koneksi
IV-4
No 4
Aksi actor
5 6
RDBMS membuka koneksi dengan sistem
1 2 3 4 5 6
Reaksi sistem Sistem menerima parameter kemudian melakukan koneksi ke server basis data
Sistem menampilkan pesan koneksi berhasil dibuka Skenario alternatif User memilih pilihan open connection Sistem meminta parameter koneksi User memasukkan parameter koneksi Sistem menerima parameter kemudian melakukan koneksi ke server basis data RDBMS gagal membuka koneksi dengan sistem karena kesalahan parameter Sistem menampilkan pesan koneksi gagal dibuka
Untuk use case Close connection, skenarionya ditunjukkan pada Tabel IV-4. Tabel IV-4 Tabel skenario use case Close connection
No 1 3 4 5
Aksi actor
Reaksi sistem Skenario normal User memilih pilihan close connection Sistem menutup koneksi ke server basis data RDBMS menutup koneksi dengan sistem Sistem menampilkan pesan koneksi telah ditutup
Untuk use case Execute query, skenarionya ditunjukkan pada Tabel IV-5. Tabel IV-5 Tabel skenario use case Execute query
No
Aksi actor
Reaksi sistem Skenario normal
1 2 3 4
User menuliskan query temporal User memilih pilihan execute query Sistem melakukan validasi query Sistem melakukan konversi query temporal menjadi query relasional Sistem mengirimkan query relasional ke RDBMS Sistem menampilkan query relasional
5 6 7 8 9 10 11 1 2 3 4
RDBMS mengeksekusi query relasional RDBMS mengirimkan hasil query ke sistem Sistem memproses hasil dari RDBMS Sistem membangun aggregation tree Sistem menampilkan hasil query Skenario alternatif User menuliskan query temporal User memilih pilihan execute query Sistem melakukan validasi query Sistem menampilkan pesan query tidak valid
Untuk use case Save tree, skenarionya ditunjukkan pada Tabel IV-6.
IV-5
Tabel IV-6 Tabel skenario use case Save tree
No
Aksi actor
Reaksi sistem Skenario normal
1 2
User menekan tombol save tree.
3
User memasukkan nama dan lokasi penyimpanan file teks.
Sistem meminta nama dan lokasi penyimpanan file teks.
4
Sistem menyimpan teks aggregation tree ke dalam file teks yang telah dispesifikkan Sistem menampilkan pesan status penyimpanan aggregation tree.
7
4.2.2 Realisasi Use Case Setelah diagram use case disusun, langkah selanjutnya adalah merealisasikan use case dalam bentuk diagram sequence untuk memodelkan interaksi sistem dan kemudian dilanjutkan dengan perancangan kelas dengan membangun diagram kelas. 4.2.2.1 Diagram Sequence Pemodelan interaksi sistem perangkat lunak BitemporalAggregator dapat ditampilkan dalam bentuk diagram sequence untuk setiap skenario normal use case. User Interface
DB Connection
User
RDBMS 1: open database
2: MessageAskParameter 3: input parameter 4: connect() 5: connect database 6: ConnectionStatus 7: ConnectionStatus 8: ConnectionStatus
Gambar IV-3 Diagram sequence untuk use case Open connection
Diagram sequence untuk use case Open connection ditunjukkan pada Gambar IV-3. Penjelasan interaksi sistem yang diperlihatkan pada diagram sequence use case Open connection adalah sebagai berikut: 1. User memilih pilihan open database connection pada User Interface. 2. User interface meminta masukan parameter koneksi basis data kepada User. 3. User memasukkan parameter koneksi basis data. 4. User Interface mengirimkan parameter koneksi dan pesan untuk membuka koneksi basis data ke DBConnection 5. DBConnection membuka koneksi dengan basis data (RDBMS). 6. RDBMS mengirimkan status koneksi ke DBConnection.
IV-6
7. DBConnection mengirimkan status koneksi ke User Interface 8. User Interface menampilkan pesan status koneksi kepada User. User Interface
DB Connection
User
RDBMS 1: close database 2: disconnect() 3: disconnect database 4: ConnectionStatus 5: ConnectionStatus
6: MessageShowStatus
Gambar IV-4 Diagram sequence untuk use case Close connection
Diagram sequence untuk use case Open connection ditunjukkan pada Gambar IV-4. Penjelasan interaksi sistem yang diperlihatkan pada diagram sequence use case Close connection adalah sebagai berikut: 1. User memilih pilihan close database connection pada User Interface. 2. User interface mengirimkan pesan ke DBConnection untuk menutup koneksi ke basis data. 3. DBConnection menutup koneksi dengan basis data (RDBMS). 4. RDBMS mengirimkan status koneksi ke DBConnection. 5. DBConnection mengirimkan status koneksi ke User Interface. 6. User Interface menampilkan pesan status koneksi kepada User. User Interface
Query Processor
Query Validator
Query Converter
Aggregation Tree
DB Connection
User
RDBMS 1: input query 2: execute query 3: InputQuery() 4: execute()
5: validate() 6: ValidStatus 7: convert() 8: RelationalQuery
9: RelationalQuery 10: RelationalQuery 11: fetch() 12: fetch 13: Result 14: RawResult 15: computeAggregate() 16: Result 17: Result 18: Result
Gambar IV-5 Diagram sequence untuk use case Execute query
Diagram sequence untuk use case Execute query ditunjukkan pada Gambar IV-5. Penjelasan interaksi sistem yang diperlihatkan pada diagram sequence tersebut adalah sebagai berikut:
IV-7
1. User memasukkan query temporal di tempat yang disediakan pada User Interface. 2. User menekan tombol execute query. 3. User Interface mengirim query temporal ke Query Processor. 4. User Interface mengirimkan pesan untuk memproses query ke Query Processor. 5. Query Processor mengirimkan query masukan ke Query Validator untuk divalidasi. 6. Query Validator melakukan validasi query kemudian mengirimkan status validasi ke Query Processor. 7. Query Processor mengirimkan query ke Query Converter untuk dikonversi menjadi query relasional. 8. Query Converter melakukan konversi query kemudian mengirimkan query relasional hasil konversi ke Query Processor. 9. Query Processor mengirimkan query relasional ke User Interface untuk ditampilkan. 10. User Interface menampilkan query relasional kepada User. 11. Query Processor mengirimkan query relasional ke DB Connection untuk dieksekusi. 12. DBConnection mengirimkan query relasional ke RDBMS untuk dieksekusi. 13. RDBMS mengeksekusi query relasional, kemudian mengirimkan hasilnya ke Query Processor. 14. DBConnection mengirimkan hasil mentah query dari RDBMS untuk diproses lebih lanjut ke Query Processor. 15. Query Processor mengirimkan hasil dari RDBMS tersebut ke Aggregation Tree. 16. Aggregation Tree akan melakukan perhitungan agregasi kemudian mengirimkan hasilnya ke Query Processor. 17. Query Processor akan mengirimkan hasil akhir query ke User Interface. 18. User Interface menampilkan hasil akhir query kepada User. User Interface
Aggregation Tree
User 1: save tree
2: MessageAskFileName 3: FileName 4: printTree() 5: Tree
6: saveTree() 7: MessageShowStatus
Gambar IV-6 Diagram sequence untuk use case Save tree
Diagram sequence untuk use case Save Tree ditunjukkan pada Gambar IV-6. Penjelasan interaksi sistem yang diperlihatkan pada diagram sequence tersebut adalah sebagai berikut:
IV-8
1. User menekan tombol save tree. 2. User Interface meminta nama dan lokasi penyimpanan file teks. 3. User memasukkan nama dan lokasi penyimpanan file teks. 4. User Interface mengirimkan pesan untuk mencetak aggregation tree ke Aggregation Tree. 5. Aggregation Tree mengirimkan aggregation tree dalam bentuk teks ke User Interface 6. User Interface menyimpan teks aggregation tree ke dalam file teks yang telah dispesifikkan sebelumnya. 7. User Interface menampilkan pesan status penyimpanan aggregation tree. 4.2.2.2 Perancangan Kelas Dari spesifikasi kebutuhan perangkat lunak, pemodelan behavior perangkat lunak menggunakan diagram use case, serta pemodelan interaksi sistem menggunakan diagram sequence, dapat didefinisikan kelas-kelas yang akan diimplementasikan dalam bentuk diagram kelas. Diagram kelas untuk BitemporalAggregate dapat dilihat pada Gambar IV-7. Khusus untuk Aggregation Tree, perancangan kelas menjadi lebih detil dengan menambahkan kelas TNode, GList dan Gnode untuk mendukung struktur pohon dari aggregation tree. Query Processor
UserInterface 0..1
- TemporalQuery : String - RelationalQuery : String - QueryResult : Table
0..1
QueryValidator 0..1
- TemporalQuery : String - RelationalQuery : String - QueryResult : Table
0..1
- Status : boolean - Query : String + validate () : boolean
+ inputQuery () : void + execute () : Table
+ showMessage () : void + showResult () : void + saveTree () : void
0..1
0..1
0..1
0..1 QueryConverter
0..1 DBConnection
0..1
- Status : boolean - Parameter : String - FetchResult : Table
AggregationTree
+ connect () : void + disconnect () : void + fetch () : String 1..1
1..1
1..1
-
StartTime EndTime AggValue LeftChild RightChild G-List
: : : : : :
Date Date int TNode TNode GList
+ aggregate () : int + isLeafNode () : boolean + isOverlap () : boolean
+ + + + +
TNode 0..2
+ convert () : String
0..1
1..1
- TemporalQuery : String - RelationalQuery : String
InputRelation OutputRelation Root Function GroupBy Weighted
: : : : : :
Table Table TNode int boolean boolean
buildTree () : void insert () : void computeAggregate () : void compute () : void printTree () : void 1..1 GNode - GroupValue : String : int - AggValue : GNode - Next
GList 1..1
0..1
- First : GNode
1..1
Gambar IV-7 Diagram Kelas
1..1
0..1
IV-9
Dari diagram kelas, terlihat bahwa kelas yang didefinisikan untuk pembangunan perangkat lunak BitemporalAggregator berjumlah sembilan kelas. Berikut ini penjelasan singkat masing-masing kelas: 1. Kelas UserInterface merepresentasikan antarmuka grafis dari perangkat lunak yang merupakan sarana interaksi user dengan sistem. 2. Kelas DBConnection merepresentasikan penghubung antara sistem dengan RDBMS tempat menyimpan relasi bitemporal. 3. Kelas QueryProcessor merepresentasikan pemroses query sehingga mendapatkan hasil akhir yang diharapkan. 4. Kelas QueryValidator merepresentasikan pemeriksa validitas query temporal masukan user 5. Kelas QueryConverter merepresentasikan pembentuk query relasional dari query temporal. 6. Kelas AggregationTree merepresentasikan aggregation tree yang digunakan untuk memproses fungsi agregasi yang membutuhkan penanganan dimensi waktu. 7. Kelas TNode merepresentasikan simpul T-node dari aggregation tree. 8. Kelas GList merepresentasikan linked list G-list dari sebuah T-node pada aggregation tree yang telah dimodifikasi untuk penanganan klausa GROUP BY. 9. Kelas GNode merepresentasikan simpul (elemen) dari G-list. Dari kelas-kelas yang telah disebutkan di atas, kelas AggregationTree merupakan kelas yang paling penting karena di dalamnya terdapat method penghitungan agregasi yang menjadi inti analisis dari tugas akhir ini. Oleh karena itu, pada bab ini hanya akan dibahas deskripsi dari kelas AggregationTree saja. 4.2.2.3 Deskripsi Kelas AggregationTree Seperti dapat dilihat pada Gambar IV-7, kelas AggregationTree memiliki enam atribut dan lima method. Penjelasan untuk masing-masing atribut dapat dilihat pada Tabel IV-7 Tabel IV-7 Penjelasan atribut kelas AggregationTree
No 1
Nama atribut InputRelation
Tipe Data Table
2
OutputRelation
Table
3
Root
TNode
4 5
Function GroupBy
Integer Boolean
6
Weighted
Boolean
Keterangan Relasi masukan yang berbentuk relasi valid time yang terdiri dari atribut GROUP BY (jika ada), atribut yang akan diagregasi, valid time start, dan valid time end Relasi hasil penghitungan agregasi menggunakan aggregation tree yang terdiri dari atribut GROUP BY (jika ada), atribut hasil fungsi agregasi, valid time start, dan valid time end Sebuah TNode yang merupakan akar dari aggregation tree Nilai integer kode fungsi agregasi Nilai boolean penanda apakah query dengan GROUP BY atau tidak Nilai boolean penanda apakah query dengan WEIGHTED atau tidak
IV-10
Sedangkan penjelasan untuk method dari kelas AggregationTree yang merupakan method yang digunakan dalam pembangunan pohon dan proses penghitungan agregasi adalah sebagai berikut: 1. Method buildTree. Algoritma dari method ini dapat dilihat pada Algoritma IV-1. Method ini merupakan prosedur pembangunan pohon di mana setiap tuple pada InputRelation di-insert ke dalam pohon. procedure buildTree() { // iterate for each InputRelation's row for each (InputRelation.Row) { insert(Row); } } Algoritma IV-1 Algoritma method buildTree
2. Method insert. Method ini merupakan prosedur insert sebuah tuple pada InputRelation ke dalam pohon. Hal pertama yang dilakukan dalam method ini adalah mencari simpul daun pada pohon di mana timestamp simpul tersebut mengandung (overlap) start time dari tuple. Pencarian dimulai dari akar sampai ke daun, namun jika sebelum sampai simpul daun sudah ditemukan simpul yang memiliki timestamp sama persis dengan timestamp tuple (di mana start time dan end time keduanya sama), pencarian dihentikan. Pada kondisi ini proses insert tidak perlu menambahkan simpul baru namun hanya perlu melakukan proses adjust nilai agregasi pada simpul. Setelah sampai pada simpul daun, langkah selanjutnya adalah memeriksa apakah simpul daun tersebut memiliki timestamp sama persis dengan timestamp tuple. Jika kondisi tersebut dipenuhi, maka proses insert ini juga tidak perlu menambahkan simpul baru namun hanya perlu melakukan proses adjust nilai agregasi pada simpul. Jika tidak, maka perlu menambahkan simpul anak baru pada simpul daun yang ditemukan tadi, di mana timestamp kedua simpul anak baru merupakan hasil pembagian timestamp simpul sesuai dengan timestamp tuple. Setelah proses penambahan simpul anak dilakukan, langkah selanjutnya adalah adjust nilai agregasi simpul yang overlap dengan timestamp tuple. Proses adjust nilai agregasi ini berbeda untuk query yang mengandung klausa GROUP BY dan yang tidak mengandung klausa tersebut. Untuk query yang tidak mengandung klausa GROUP BY, proses adjust hanya dilakukan terhadap nilai AggValue dari simpul. Sedangkan untuk query yang mengandung GROUP BY, proses adjust dilakukan terhadap nilai AggValue dari GNode pada GList simpul yang memiliki nilai GValue sama dengan nilai atribut GROUP BY pada tuple. Algoritma dari method insert ini dapat dilihat pada Algoritma IV-2.
IV-11
procedure insert(Row) { // start search from root node Temp = Root; // search leaf node which overlaps Row.StartTime while (Temp.isLeafNode() == false) { if (Temp.TimeStamp == Row.TimeStamp)) { if (NOT GroupBy) { // adjust Temp.AggValue; } else { // adjust Temp.GList; } // stop searching; break; } else if (Temp.LeftChild.isOverlap(Row.StartTime)) { // searching continues to Left Child Temp = Temp.LeftChild; } else { // searching continues to Right Child Temp = Temp.RightChild; } }
}
// leaf node's found if (Temp.isLeafNode() == true) { if (Temp.StartTime < Row.StartTime) { // add Temp children if (Temp.EndTime > Row.EndTime) { // go to Right Child Temp = Temp.RightChild; // add Temp children } } else if (Temp.StartTime == Row.StartTime) { if (Temp.EndTime > Row.EndTime) { // add Temp children // go to Left Child Temp = Temp.getLeftChild(); } } if (NOT GroupBy) { // adjust Temp.AggValue; } else { // adjust Temp.GList; } } Algoritma IV-2 Algoritma method insert
3. Method computeAggregate. Algoritma dari method ini dapat dilihat pada Algoritma IV-3. Method ini merupakan prosedur inisialisasi penghitungan agregasi pohon (method compute). Penghitungan agregasi pada method compute merupakan prosedur rekursif yang dimulai dari simpul akar (Root). Nilai
IV-12
dari initValue (nilai inisialisasi) tergantung pada jenis fungsi agregasi. Untuk fungsi COUNT nilai tersebut diisi dengan 0, untuk fungsi MAX diisi dengan nilai integer minimum, sedangkan fungsi lainnya diisi dengan nilai integer maksimum. Untuk query yang mengandung klausa GROUP BY, tambahan sebuah argumen yaitu Group yang merupakan nilai dari atribut GROUP BY. Prosedur computeGroup akan diterapkan untuk seluruh nilai distinct dari atribut GROUP BY pada relasi masukan. procedure computeAggregate() { if (NOT GroupBy) { // start from root node compute(Root, initValue); } else { // compute aggregate GROUP BY // iterate for each group for each (InputRelation.Group) { // start from root node compute(Root, initValue); } } } Algoritma IV-3 Algoritma method computeAggregate
4. Method compute. Method ini merupakan prosedur penghitungan agregasi pohon. Prosedur ini merupakan prosedur rekursif, di mana prosesnya dimulai dari akar pohon (Root). Basis dari prosedur rekursif compute adalah Node yang berupa simpul daun, yaitu bila fungsi isLeafNode terhadap Node menghasilkan nilai true. Sedangkan rekurens prosedur tersebut adalah pemanggilan prosedur untuk LeftChild dan NodeChild dari Node. Value merupakan nilai agregasi yang dihitung dengan fungsi aggregate. Fungsi ini mengembalikan nilai agregasi sesuai dengan jenis fungsi agregasi (Function) yang diterapkan pada nilai State dan nilai AggValue dari Node. Ketika mencapai basis, jika nilai Value tidak sama dengan initValue, maka akan ditambahkan sebuah tuple pada relasi hasil dengan nilai agregasi diisi dengan Value, start time diisi dengan StartTime dari Node (Node.StartTime), dan end time diisi dengan EndTime dari Node
(Node.EndTime). Untuk query yang mengandung klausa GROUP BY, perbedaan dengan query tanpa GROUP BY terletak pada fungsi di aggregateGroup di mana masukannya ditambah satu yaitu nilai Group dan pada penambahan tuple baru pada relasi hasil di mana ada tambahan satu atibut GROUP BY. Selebihnya, pemrosesannya sama saja dengan query tanpa GROUP BY. Algoritma dari method compute dapat dilihat pada Algoritma IV-4.
IV-13
procedure compute(Node, State) { // compute aggregate value if (NOT GroupBy) { Value = Node.aggregate(Function, State); } else { // compute group Value = Node.aggregateGroup(Group, Function, State); } // basis = leaf node if (Node.isLeafNode() == true) { if (Value != initValue) { // add new row to Output Relation if (NOT GroupBy) { OutputRelation.add(Value, Node.StartTime, Node.EndTime); } else { // group by OutputRelation.add(Group, Value, Node.StartTime, Node.EndTime); } } } // rekurens else { // compute left child compute(Node.LeftChild, Value); // compute right child compute(Node.RightChild, Value); } } Algoritma IV-4 Algoritma method compute
4.2.3 Rancangan Antarmuka Untuk memudahkan interaksi antara user dan sistem, diperlukan suatu antarmuka grafis. Rancangan antarmuka layar utama untuk perangkat BitemporalAggregator dapat dilihat pada Gambar IV-8.
IV-14
Gambar IV-8 Rancangan antarmuka layar utama
Keterangan masing-masing item dari rancangan layar utama dapat dilihat pada Tabel IV-8. Tabel IV-8 Tabel keterangan item pada rancangan layar utama
No 1
Menu File
2
Menu Help
3
Tombol Execute
4
Tombol Clear
6
Tombol Save Tree
7
Text area Temporal Query Text area Relational Query Panel Result Relation Panel Source Relation
8 9 10
Item
Keterangan Menu yang terdiri dari submenu Open Database (untuk membuka koneksi basis data), Close Database (untuk menutup koneksi basis data), dan Exit (untuk menutup aplikasi). Menu yang terdiri dari submenu Help (untuk menampilkan sintaks query temporal yang diperlukan) dan About (untuk menampilkan informasi mengenai aplikasi) Tombol untuk mengeksekusi query temporal yang terdapat pada text area Temporal Query Tombol untuk mengosongkan text area Temporal Query dan Relational Query Tombol untuk menyimpan representasi aggregation tree yang telah dibangun dalam sebuah file teks Text area untuk user menuliskan query retrieval temporal khususnya yang mengandung fungsi agregasi Text area untuk menampilkan query relasional hasil konversi query temporal masukan user. Panel untuk menampilkan hasil akhir query Panel untuk menampilkan relasi sumber
Ketika submenu Open Database dari menu File dipilih oleh user, maka akan muncul layar Open Database seperti pada Gambar IV-9. Layar ini digunakan untuk menerima input dari user berupa parameter koneksi ke server basis data.
IV-15
Gambar IV-9 Rancangan layar Open Database
Keterangan masing-masing item dari rancangan layar utama dapat dilihat pada Tabel IV-9. Tabel IV-9 Tabel keterangan item pada layar Open Database
No 1 2
Item Text field URL Text field Driver
3 4
Text field User name Text field Password
5 6
Tombol Connect Tombol Cancel
Keterangan Textfield untuk user menuliskan URL server basis data Textfield untuk user menuliskan Driver yang digunakan aplikasi untuk membuka koneksi basis data Textfield untuk user menuliskan username account basis data Textfield untuk user menuliskan password dari account yang dimiliki username pada text field User name Tombol untuk membuka koneksi ke server basis data Tombol untuk membatalkan pembukaan koneksi
4.3 Implementasi Perangkat Lunak Pada bagian ini akan dijelaskan implementasi perangkat lunak BitemporalAggregator berdasarkan hasil perancangan pada bagian sebelumnya.
4.3.1 Batasan Implementasi Batasan implementasi dari perangkat lunak BitemporalAggregator adalah: 1. Validasi query pada BitemporalAggregator hanya terhadap sintaks query. 2. Format waktu yang digunakan adalah close-ended time interval. 3. Jenis granularitas yang digunakan adalah single database wide granularity dengan chronon sebesar satu hari. 4. BitemporalAggregator menggunakan representasi waktu YYYY-MM-DD di mana YYYY merupakan empat digit tahun (year), MM merupakan dua digit bulan (month), dan DD merupakan dua digit tanggal (day of month). 5. BitemporalAggregator merepresentasikan UC pada dimensi transaction time dan now pada dimensi valid time dengan nilai ‘2999-12-31’.
4.3.2 Lingkungan Implementasi Perangkat keras yang digunakan pada implementasi BitemporalAggregator adalah: 1. Processor : AMD AthlonTM 64 X2 Dual Core Processor 3800+ 2.00 GHz 2. Memory
: 512 MB
IV-16
3. Harddisk
: 120 GB
Sedangkan perangkat lunak yang digunakan adalah: 1. Sistem Operasi
: Windows VistaTM Ultimate
2. RDBMS
: PostgreSQL 8.2.3
3. Tools
: Java Standard Development Kit jdk-1.6.0 dan NetBeans IDE 5.5
4. Driver
: Java Database Connectivity postgresql-8.2-506.jdbc4
4.3.3 Implementasi Perangkat Lunak Setiap kelas hasil perancangan yang telah didefinisikan pada subbab 4.2.2.2 diimplementasikan pada satu atau lebih file Java. Beberapa kelas yang memiliki kedekatan fungsionalitas disatukan dalam sebuah package. Daftar file hasil implementasi dapat dilihat pada Tabel IV-10. Tabel IV-10 Daftar file hasil implementasi
No 1 2 3
Main.java UserInterface.java QueryProcessor.java
Kelas Perancangan UserInterface QueryProcessor
4
QueryConverter.java
QueryConverter
5
QueryValidator.java
QueryValidator
6
DBConnection.java
DBConnection
7
AggregationTree.java
8
TNode.java
TNode
9
GList.java
GList
10
GNode.java
File
AggregationTree
GNode
Keterangan File kelas Main untuk menjalankan program File layar utama File kelas QueryProcessor yang menerima query masukan kemudian memprosesnya hingga diperoleh hasil akhirnya File kelas QueryConverter yang menerima query temporal kemudian memetakannya menjadi query relasional File kelas QueryValidator untuk melakukan validasi sebelum query diproses lebih lanjut File kelas DBConnection untuk menghubungkan program dengan RDBMS File kelas AggregationTree yang mengimplementasi konsep aggregation tree yang telah dimodifikasi untuk pemrosesan agregasi File kelas TNode yang merupakan simpul pada aggregation tree File kelas GList yang merupakan list tambahan pada simpul aggregation tree untuk memproses GROUP BY query File kelas GNode yang merupakan simpul pada Glist
4.3.4 Implementasi Antarmuka Implementasi antarmuka Bitemporal disesuaikan dengan rancangan antarmuka yang telah dijelaskan pada subbab 4.2.2.3. emperlihatkan hasil screenshot implementasi layar Open Database, sedangkan memperlihatkan hasil screenshot implementasi layar Utama.
IV-17
Gambar IV-10 Layar Utama BitemporalAggregator
Gambar IV-11 Layar Open Database BitemporalAggregator
IV-18
4.4 Pengujian Pada bagian ini akan dibahas pengujian hasil analisis pemrosesan fungsi agregasi menggunakan perangkat lunak yang telah dibangun.
4.4.1 Tujuan Pengujian Tujuan dari pengujian ini adalah: 1. Menguji kebenaran analisis pemrosesan fungsi agregasi pada relasi bitemporal untuk semua jenis query. 2. Menguji penanganan kesalahan sintaks query oleh BitemporalAggregator.
4.4.2 Lingkungan Pengujian Perangkat keras yang digunakan untuk pengujian adalah: 1. Processor : AMD AthlonTM 64 X2 Dual Core Processor 3800+ 2.00 GHz 2. Memory
: 512 MB
3. Harddisk
: 120 GB
Sedangkan perangkat lunak yang digunakan adalah: 1. Sistem Operasi
: Windows VistaTM Ultimate
2. RDBMS
: PostgreSQL 8.2.3
3. Tools
: Java Standard Development Kit jdk-1.6.0
4. Driver
: Java Database Connectivity postgresql-8.2-506.jdbc4
4.4.3 Prosedur Pengujian Prosedur pengujian yang akan dilakukan adalah sebagai berikut: 1. Menjalankan service PostgreSQL jika belum aktif. 2. Menjalankan perangkat lunak BitemporalAggregator. 3. Membuka koneksi dengan RDBMS dengan memilih menu Open Database kemudian memasukkan parameter koneksi dan menekan tombol Connect. 4. Melakukan pengujian untuk masing-masing jenis pengujian: a. Pengujian kebenaran analisis: i. Menuliskan query temporal pada text area Temporal untuk berbagai macam kasus uji. ii. Menekan tombol Execute untuk mengeksekusi query. iii. Memeriksa hasil konversi query temporal menjadi query relasional yang muncul pada text area Relational Query apakah sesuai harapan. iv. Memeriksa aggregation tree yang dibangun apakah sesuai harapan dengan cara menekan tombol Save Tree untuk menyimpan terlebih dahulu aggregation tree ke dalam sebuah file teks sehingga dapat dilihat. v. Memeriksa hasil query yang muncul pada panel Result Relation dengan menelusuri relasi sumber yang ditampilkan pada panel Source Relation apakah sesuai harapan.
IV-19
b. Pengujian pesan kesalahan: i. Menuliskan query temporal pada text area Temporal untuk berbagai macam query yang mengandung kesalahan sintaks. ii. Menekan tombol Execute untuk mengeksekusi query. iii. Memeriksa apakah muncul pesan kesalahan.
4.4.4 Kasus Uji Kasus uji untuk masing-masing jenis pengujian dapat dilihat pada Lampiran C. Penjelasan dari masing-masing kasus uji tersebut adalah sebagai berikut: 1. Untuk pengujian kebenaran hasil analisis, kasus ujinya adalah semua jenis query retrieval yang masing-masing mengandung fungsi agregasi yang terdefinisi. Klausa GROUP BY dan keyword WEIGHTED juga menjadi parameter pengujian. 2. Untuk pengujian pesan kesalahan, kasus ujinya adalah jenis-jenis kesalahan sintaks query yang ditangani oleh BitemporalAggregator.
4.4.5 Data Uji Data uji untuk semua jenis pengujian adalah sebuah relasi bitemporal Salary yang disimpan dalam RDBMS dalam model representasi Snodgrass’. Skema relasi Salary adalah: Salary (Name, Department, Salary, Ts, Te, Vs, Ve)
4.4.6 Hasil Pengujian Hasil pengujian untuk masing-masing pengujian dapat dilihat pada Lampiran D. Kesimpulan yang dapat ditarik dari hasil pengujian ini adalah: 1. Untuk setiap jenis query yang diujikan, pengujian kebenaran analisis hasilnya sesuai dengan yang diharapkan. 2. Untuk setiap jenis kesalahan query yang diujikan, pengujian pesan kesalahan hasilnya sesuai dengan yang diharapkan.