• Tidak ada hasil yang ditemukan

BAB IV PEMBANGUNAN PERANGKAT LUNAK

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAB IV PEMBANGUNAN PERANGKAT LUNAK"

Copied!
19
0
0

Teks penuh

(1)

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:

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

User Open connection Close connection Execute query RDBMS Save tree

(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 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

(4)

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

(5)

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.

(6)

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:

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

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:

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

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

(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 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

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

(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

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

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

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

(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 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

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

(17)

Gambar IV-10 Layar Utama BitemporalAggregator

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

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

Gambar

Gambar IV-1 Gambaran umum perangkat lunak
Gambar IV-2 Diagram Use Case
Tabel IV-1 Tabel deskripsi actor
Tabel IV-4 Tabel skenario use case Close connection
+7

Referensi

Dokumen terkait

Mengetahui apakah senyawa golongan antrakuinon yang terdapat pada ekstrak etanol daun pacar air yang terdeteksi pada uji KLT yang memiliki aktivitas antibakteri terhadap

Menimbang : Bahwa dalam rangka mendayagunakan potensi sumber daya yang ada di UPN “Veteran” umum memperoleh pemasukan tambahan pendapatan di luar kewajiban keuangan

Rincian Kewenangan klinik untuk Radiografer dalam menjalankan prosedur tindakan kefarmasian di Rumah Sakit Umum Mitra Sehat diajukan dalam rangka peningkatan kualitas pelayanan

Dengan demikian, dapat dikatakan bahwa siswa di SMA Negeri Kecamatan Tangerang Kota Tangerang memiliki kebutuhan yang tinggi akan layanan online self-help dengan menampilkan

Vokasi D3 S1 Kelas Internasional Ja lur Ma suk Jalur Undang an Jalur Ujian Tulis SNMPTN PPKB PPKB Talent Scouting SIMAK-UI SBMPTN SIMAK KKI - UI...

SCA yang tidak secara fisik menangani produk UTZ: SCA ini harus mematuhi persyaratan yang berlaku dari Standar Rantai pengawasan (ChoC), walaupun bukan sebagai

 Wacana lengkap, unsur bahasa bervariasi dan menggunakan ungkapan yang menarik  Idea relevan, huraian jelas dan matang.. Baik 20-25  Menepati tema