IV-1
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:
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.
User Open connection Close connection Execute query RDBMS Save tree
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 Nama actor Deskripsi actor
1 User Actor yang menggunakan sistem secara langsung, melakukan input query
terhadap relasi bitemporal untuk mendapatkan hasil.
2 RDBMS Actor yang merupakan sebuah RDBMS tempat penyimpanan relasi
bitemporal dengan model Snodgrass’. 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 Nama use case Penjelasan use case
1 Open connection 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
2 Close connection 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
3 Execute query 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
4 Save tree 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 Aksi actor Reaksi sistem
Skenario normal 1 User memilih pilihan open connection
2 Sistem meminta parameter koneksi 3 User memasukkan parameter koneksi
No Aksi actor Reaksi sistem
4 Sistem menerima parameter kemudian melakukan koneksi ke server basis data 5 RDBMS membuka koneksi dengan sistem
6 Sistem menampilkan pesan koneksi berhasil dibuka
Skenario alternatif 1 User memilih pilihan open connection
2 Sistem meminta parameter koneksi 3 User memasukkan parameter koneksi
4 Sistem menerima parameter kemudian melakukan koneksi ke server basis data 5 RDBMS gagal membuka koneksi dengan
sistem karena kesalahan parameter
6 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 Aksi actor Reaksi sistem
Skenario normal 1 User memilih pilihan close connection
3 Sistem menutup koneksi ke server basis data 4 RDBMS menutup koneksi dengan sistem
5 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 User menuliskan query temporal
2 User memilih pilihan execute query
3 Sistem melakukan validasi query
4 Sistem melakukan konversi query temporal menjadi query relasional
5 Sistem mengirimkan query relasional ke
RDBMS
6 Sistem menampilkan query relasional
7 RDBMS mengeksekusi query relasional 8 RDBMS mengirimkan hasil query ke
sistem
9 Sistem memproses hasil dari RDBMS 10 Sistem membangun aggregation tree
11 Sistem menampilkan hasil query
Skenario alternatif 1 User menuliskan query temporal
2 User memilih pilihan execute query
3 Sistem melakukan validasi query
4 Sistem menampilkan pesan query tidak valid
Tabel IV-6 Tabel skenario use case Save tree
No Aksi actor Reaksi sistem
Skenario normal 1 User menekan tombol save tree.
2 Sistem meminta nama dan lokasi penyimpanan
file teks.
3 User memasukkan nama dan lokasi penyimpanan file teks.
4 Sistem menyimpan teks aggregation tree ke
dalam file teks yang telah dispesifikkan
7 Sistem menampilkan pesan status penyimpanan
aggregation tree.
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.
8: ConnectionStatus 7: ConnectionStatus 6: ConnectionStatus 5: connect database 4: connect() 3: input parameter 2: MessageAskParameter 1: open database
User Interface DB Connection
User RDBMS 8: ConnectionStatus 7: ConnectionStatus 6: ConnectionStatus 5: connect database 4: connect() 3: input parameter 2: MessageAskParameter 1: open database
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.
7. DBConnection mengirimkan status koneksi ke User Interface 8. User Interface menampilkan pesan status koneksi kepada User.
1: close database 2: disconnect() 3: disconnect database 4: ConnectionStatus 5: ConnectionStatus 6: MessageShowStatus User RDBMS
User Interface DB Connection
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.
10: RelationalQuery 9: RelationalQuery 14: RawResult 13: Result 12: fetch 18: Result 17: Result 1: input query 2: execute query 3: InputQuery() 4: execute() 5: validate() 7: convert() 8: RelationalQuery 6: ValidStatus 11: fetch() 15: computeAggregate() 16: Result
User Interface Query Processor Query Validator Query Converter Aggregation Tree DB Connection
User RDBMS 10: RelationalQuery 9: RelationalQuery 14: RawResult 13: Result 12: fetch 18: Result 17: Result 1: input query 2: execute query 3: InputQuery() 4: execute() 5: validate() 7: convert() 8: RelationalQuery 6: ValidStatus 11: fetch() 15: computeAggregate() 16: 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:
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.
6: saveTree() 5: Tree 4: printTree() 3: FileName 2: MessageAskFileName 7: MessageShowStatus 1: save tree User
User Interface Aggregation Tree
6: saveTree() 5: Tree 4: printTree() 3: FileName 2: MessageAskFileName 7: MessageShowStatus 1: save tree
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:
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.
0..1 0..1 0..1 0..1 0..1 0..1 0..1 0..1 0..1 0..1 1..1 1..1 1..1 0..2 1..1 0..1 1..1 1..1 1..1 0..1 0..1 1..1 UserInterface -TemporalQuery RelationalQuery QueryResult : String : String : Table + + + showMessage () showResult () saveTree () : void : void : void DBConnection -Status Parameter FetchResult : boolean : String : T able + + + connect () disconnect () fetch () : void : void : String QueryConverter -TemporalQuery RelationalQuery : String : String + convert () : String Query Processor -TemporalQuery RelationalQuery QueryResult : String : String : Table + + inputQuery () execute () : void : T able QueryValidator -Status Query : boolean : String + validate () : boolean AggregationTree -InputRelation OutputRelation Root Function GroupBy Weighted : T able : T able : T Node : int : boolean : boolean + + + + + buildT ree () insert () computeAggregate () compute () printTree () : void : void : void : void : void T Node -StartTime EndT ime AggValue LeftChild RightChild G-List : Date : Date : int : T Node : T Node : GList + + + aggregate () isLeafNode () isOverlap () : int : boolean : boolean GList - First : GNode GNode -GroupValue AggValue Next : String : int : GNode
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 Nama atribut Tipe Data Keterangan
1 InputRelation Table 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
2 OutputRelation Table 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
3 Root TNode Sebuah TNode yang merupakan akar dari
aggregation tree
4 Function Integer Nilai integer kode fungsi agregasi
5 GroupBy Boolean Nilai boolean penanda apakah query dengan
GROUP BY atau tidak
6 Weighted Boolean Nilai boolean penanda apakah query dengan
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.
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
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.
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.
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 Item Keterangan
1 Menu File Menu yang terdiri dari submenu Open Database (untuk membuka koneksi basis data), Close Database (untuk menutup koneksi basis data), dan Exit (untuk menutup aplikasi). 2 Menu Help Menu yang terdiri dari submenu Help (untuk menampilkan
sintaks query temporal yang diperlukan) dan About (untuk menampilkan informasi mengenai aplikasi)
3 Tombol Execute Tombol untuk mengeksekusi query temporal yang terdapat
pada text area Temporal Query
4 Tombol Clear Tombol untuk mengosongkan text area Temporal Query dan
Relational Query
6 Tombol Save Tree Tombol untuk menyimpan representasi aggregation tree yang telah dibangun dalam sebuah file teks
7 Text area Temporal Query
Text area untuk user menuliskan query retrieval temporal
khususnya yang mengandung fungsi agregasi 8 Text area Relational
Query
Text area untuk menampilkan query relasional hasil konversi query temporal masukan user.
9 Panel Result Relation Panel untuk menampilkan hasil akhir query 10 Panel Source Relation 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.
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 Item Keterangan
1 Text field URL Textfield untuk user menuliskan URL server basis data
2 Text field Driver Textfield untuk user menuliskan Driver yang digunakan aplikasi
untuk membuka koneksi basis data
3 Text field User name Textfield untuk user menuliskan username account basis data
4 Text field Password Textfield untuk user menuliskan password dari account yang
dimiliki username pada text field User name
5 Tombol Connect Tombol untuk membuka koneksi ke server basis data 6 Tombol Cancel 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
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 File Kelas
Perancangan
Keterangan
1 Main.java - File kelas Main untuk menjalankan program
2 UserInterface.java UserInterface File layar utama
3 QueryProcessor.java QueryProcessor File kelas QueryProcessor yang menerima query masukan kemudian memprosesnya
hingga diperoleh hasil akhirnya
4 QueryConverter.java QueryConverter File kelas QueryConverter yang menerima query temporal kemudian memetakannya
menjadi query relasional
5 QueryValidator.java QueryValidator File kelas QueryValidator untuk melakukan
validasi sebelum query diproses lebih lanjut 6 DBConnection.java DBConnection File kelas DBConnection untuk
menghubungkan program dengan RDBMS 7 AggregationTree.java AggregationTree File kelas AggregationTree yang
mengimplementasi konsep aggregation tree yang telah dimodifikasi untuk pemrosesan agregasi
8 TNode.java TNode File kelas TNode yang merupakan simpul pada aggregation tree
9 GList.java GList File kelas GList yang merupakan list tambahan
pada simpul aggregation tree untuk memproses GROUP BY query
10 GNode.java GNode 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.
Gambar IV-10 Layar Utama BitemporalAggregator
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.
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.