Algoritma Boyer Moore dianggap sebagai algoritma pencocokkan string yang
paling efisien. Algoritma ini melakukan pencocokkan pola dari kanan ke kiri tetapi pergeseran tetap dari kiri ke kanan (Charras et al, 2004). Langkah-langkah yang
dilakukan algoritma boyer moore pada saat mencocokkan string adalah (Soleh,
2010/2011) :
1. Algoritma boyer moore mulai mencocokan pattern pada awal teks.
2. Dari kanan ke kiri, algoritma ini mencocokkan karakter per karakter pattern
dengan karakter di teks yang bersesuaian, sampai salah satu kondisi berikut dipenuhi :
i. Karakter di pattern dan di teks yang dibandingkan tidak cocok.
ii. Semua karakter di pattern cocok. Kemudian algoritma akan
memberitahukan penemuan di posisi ini.
3. Algoritma kemudian menggeser pattern dengan memaksimalkan nilai
pergeseran good-suffix dan pergeseran bad-character, lalu mengulangi langkah 2
16
2.5.1 Pergeseran bad-character
Pergeseran bad-character adalah pergeseran yang dilakukan berdasarkan
karakter apa yang menyebabkan tidak cocok dan seberapa jauh karakter tersebut dari karakter paling akhir (Argakusumah dkk, 2014). Setiap karakter pada pattern
diberi nilai sesuai dengan ukuran jauhnya karakter tersebut dari karakter paling kanan
dari pattern dan untuk karakter yang tidak terdapat pada pattern diberi nilai sejumlah
karakter pada pattern (Tania, 2015). Pseudocode untuk pergeseran bad-character
(Argakusumah dkk, 2014) : Procedure prebadChars ( Input P : array[0..n-1] of char Input n : integer
Input/output badChars : array[0..n-1] of integer ) Deklarasi : i : integer Algoritma : for (i := 0 to Asize-1) badChars[i] := m; endfor for(i := 0 to m – 2) badChars[P[i]] := m – i – 1; endfor
2.5.2 Menghitung nilai bad-character
Pada subbab ini, digunakan pattern “senang” sebagai contoh perhitungan bad-character. Tahapan menghitung nilai bad-character dari pattern tersebut yaitu:
1. Lakukan pencacahan dari posisi terakhir pattern sampai ke posisi awal, dimulai dengan nilai pergeseran 0 (dalam pattern ini karakter “g”).
2. Mundur ke posisi sebelumnya, nilai pergeseran sebelumnya ditambah 1, karena karakter ”n” belum pernah ditemukan, maka nilai pergeserannya 1.
3. Mundur ke posisi sebelumnya, nilai pergeseran sebelumnya ditambah 1, karena karakter ”a” belum pernah ditemukan, maka nilai pergeserannya 2.
4. Mundur ke posisi sebelumnya, karena karakter “n” sudah pernah ditemukan maka nilai pergeseran sama dengan karakter “n” yang sebelumnya yaitu 1.
5. Mundur ke posisi sebelumnya, karena karakter “e” belum pernah ditemukan maka nilai pergeserannya adalah 4 (nilai pencacah pada karakter “e” ditambah 2 karena nilai pergeseran “n” pernah ditemukan).
17
6. Mundur ke posisi sebelumnya, nilai pergeseran sebelumnya ditambah 1, karena karakter ”s” belum pernah ditemukan, maka nilai pergeserannya 5.
Catatan : untuk karakter selain “s, e, n, a, g” nilai pergeserannya sebesar panjang pattern, yaitu 6 karakter (sepanjang pattern).
Nilai pergeseran dari bad-character yang sudah didapatkan :
Posisi 1 2 3 4 5 6
Pattern s e n a n g *
Nilai pergeseran bad-character 5 4 1 2 1 0 6
2.5.3 Pergeseran good-suffix
Pergeseran good-suffix adalah pergeseran yang dilakukan berdasarkan posisi ketidakcocokan karakter yang terjadi (Argakusumah dkk, 2014). Nilai pergeseran good-suffix digunakan ketika ketidakcocokan ditemukan berdasarkan karakter pada posisi keberapa yang menyebabkan ketidakcocokan. Nilai dari setiap karakter yang ada pada pattern bergantung terhadap ada atau tidaknya perulangan akhiran dari teks pada pattern. Semakin banyak perulangan, maka akan semakin kecil nilai pergeseran (Tania, 2015).
Untuk menentukan nilai tersebut, hitung lebih dahulu nilai tabel suffix yang bertujuan untuk memberi tanda adanya perulangan akhiran. Dari tabel suffix inilah tabel good-suffix akan didapat. Nilai pada tabel suffix akan memberitahu posisi perulangan sehingga saat proses perhitungan tabel good-suffix dapat diketahui seberapa banyak pergeseran yang akan dilakukan untuk pencocokkan selanjutnya (Tania, 2015). Pseudocode mencari nilai suffix (Argakusumah dkk, 2014) :
Procedure suffixes (
Input P : array[0..n-1] of char Input n : integer
Input/output suff : array[0..n-1] of integer ) Deklarasi : f, g, i : integer Algoritma : suff [n - 1] := n; g := n – 1; for (i := n – 2 downto 0) { if ( i > g and (suff [i + n – 1 - f] < i – g)) suff[i] := suff[i + n – 1 – f ]; else if (i < g)
18 g := i; endif f := i; while (g >= 0 and P[g] = P[g + n – 1 – f]) --g; endwhile suff [i] = f – g; endif endfor
Pseudocode pergeseran good-suffix (Argakusumah dkk, 2014) : Procedure goodsuffix (
Input P : array[0..n-1] of char Input n : integer
Input/output goodsuffixes : array[0..n-1] of integer )
Deklarasi : i, j : integer
suff : array [0..RuangAlpabet] of integer Algoritma : suffixes(x,n,suff); for( i := 0 to m-1) goodsuffixes[i] := n endfor j := 0 for (i := n – 1 downto 0) if (suff[i] = i + 1) for (j := j to n – 2 – i) if (goodsuffixes[j] = n) goodsuffixes[j] := n – 1 – i endif endfor endif endfor for(i = 0 to n – 2) goodsuffixes[n – 1 suff[i]] := n – 1 – i; endfor
Setelah diperoleh nilai bad-character dan good-suffix, algoritma boyer moore akan menggunakan nilai maksimum antara kedua nilai tersebut untuk melakukan pergeseran saat pencocokkan (Tania, 2015). Pseudocode algoritma
boyer moore (Argakusumah dkk, 2014) :
Procedure BoyerMooreSearch ( Input m, n : integer
Input P : array[0..n-1] of char Input T : array[0..m-1] of char
output ketemu : array[0..m-1] of boolean )
Deklarasi : i, j, shift, goodsuffixesshift, badcharactershift : integer goodsuffixes : array[0..255] of integer
19 Algoritma : goodsuffix(n, P, goodsuffixes) prebadChars(n, P, badChars) i := 0 while (i <= m – n) do j := n – 1
while (j >= 0 n and T[i + j] = P[j]) do j := j – 1 endwhile if (j < 0) then ketemu[i] := true; shift := goodsuffixes[0] else badcharactershift := badChars[chartoint(T[i + j])] – n + j + 1 goodsuffixesshift := goodsuffixes[j]
shift := max(badcharactershift, goodsuffixesshift) endif
i := i + shift
endwhile
2.5.4 Menghitung nilai good-suffix
Pada subbab ini, digunakan pattern “senang” sebagai contoh perhitungan good-suffix. Tahapan menghitung nilai good-suffix dari pattern tersebut yaitu :
1. Pencocokkan dimulai dari karakter terakhir yaitu “g”, apabila karakter terakhir pada teks bukan “g” maka geser 1 posisi sehingga nilai pergeserannya 1, berlaku untuk semua pattern yang dicari.
Teks s e n a n x a b c d e f
Pattern s e n a n g
Pergeseran s e n a n g
2. Jika karakter “g” sudah cocok, tetapi karakter sebelumnya bukan “n” maka geser pattern sebanyak 6 karakter sehingga nilai pergeserannya 6, karena teks tersebut bukan “senang”.
Teks s e n a x g a b c d e f
Pattern s e n a n g
Pergeseran s e n a n g
3. Jika karakter “ng” sudah cocok, tetapi karakter sebelumnya bukan “a” maka geser pattern sebanyak 6 karakter sehingga nilai pergeserannya 6, karena teks tersebut bukan “senang”.
20
Pattern s e n a n g
Pergeseran s e n a n g
4. Jika karakter “ang” sudah cocok, tetapi karakter sebelumnya bukan “n” maka geser pattern sebanyak 6 karakter sehingga nilai pergeserannya 6, karena teks tersebut bukan “senang”.
Teks s e x a n g a b c d e f
Pattern s e n a n g
Pergeseran s e n a n g
5. Jika karakter “nang” sudah cocok, tetapi karakter sebelumnya bukan “e” maka geser pattern sebanyak 6 karakter sehingga nilai pergeserannya 6, karena teks tersebut bukan “senang”.
Teks s x n a n g a b c d e f
Pattern s e n a n g
Pergeseran s e n a n g
6. Jika karakter “enang” sudah cocok, tetapi karakter sebelumnya bukan “s” maka geser pattern sebanyak 6 karakter sehingga nilai pergeserannya 6, karena teks tersebut bukan “senang”.
Teks x e n a n g a b c d e f
Pattern s e n a n g
Pergeseran s e n a n g
Nilai pergeseran dari good-suffix yang sudah didapatkan :
Posisi 1 2 3 4 5 6
Pattern s e n a n g
Nilai pergeseran good-suffix 6 6 6 6 6 1
2.5.5 Pencarian dengan algoritma boyer moore
Sebelum melakukan pencarian dengan algoritma boyer moore, harus mencari nilai pergeseran bad-character dan pergeseran good-suffix dari pattern terlebih dahulu. Pattern dan teks yang digunakan adalah :
Pattern (p) : senang
21
Berdasarkan nilai pergeseran bad-character dan good-suffix yang sudah didapatkan pada sub bab 2.5.2 dan sub bab 2.5.4. Tahapan pencocokkan antara pattern dengan teks sebagai berikut :
Posisi 1 2 3 4 5 6
Pattern s e n a n g *
Nilai pergeseran bad-character (bc) 5 4 1 2 1 0 6 Nilai pergeseran good-suffix (gs) 6 6 6 6 6 1
1. Pencocokkan pertama, karakter “i” pada teks tidak cocok dengan karakter “g” pada pattern sehingga nilai pergeseran good-suffix 1, karena ketidakcocokan pada karakter terakhir. Karakter “i” tidak ada pada pattern, maka nilai pergeseran bad-character 6. Karena nilai pergeseran bad-character lebih besar, maka geser pattern sebanyak 6 karakter.
Teks a n a k i t u s e n a n g
Pattern s e n a n g
s e n a n g
2. Pencocokkan selanjutnya, karakter “n” pada teks tidak cocok dengan karakter “g” pada pattern sehingga nilai pergeseran good-suffix 1, karena ketidakcocokan pada karakter terakhir. Karakter “n” ada pada pattern, maka nilai pergeseran bad-character 1. Karena nilai pergeseran sama, maka geser pattern sebanyak 1 karakter.
Teks a n a k i t u s e n a n g
Pattern s e n a n g
s e n a n g
3. Pencocokkan selanjutnya, karakter “a” pada teks tidak cocok dengan karakter “g” pada pattern sehingga nilai pergeseran good-suffix 1, karena ketidakcocokan pada karakter terakhir. Karakter “a” ada pada pattern, maka nilai pergeseran bad-character 2. Karena nilai pergeseran bad-character lebih besar, maka geser pattern sebanyak 2 karakter.
Teks a n a k i t u s e n a n g
22
s e n a n g 4. Pencocokkan selanjutnya, karena karakter pada pattern dan teks cocok, maka pencocokkan dihentikan.
Teks a n a k i t u s e n a n g
Pattern s e n a n g
2.6 Pengujian
2.6.1 Pengujian Black Box
Pengujian ini mengarah kepada persyaratan fungsional perangkat lunak. Pengujian memungkinkan penguji mendapatkan serangkaian kondisi input yang memenuhi persyaratan fungsional suatu program. Pengujian berusaha menemukan kesalahan dengan kategori seperti fungsi yang salah, kesalahan antarmuka, kesalahan struktur data, kesalahan kinerja atau kesalahan inisialisasi. Pengujian black box biasanya dilakukan pada tahap akhir pengujian (Nugroho dkk, 2009).
2.6.2 Pengujian White Box
Pengujian ini adalah metode desain kasus uji yang menggunakan struktur kontrol desain prosedural untuk memperoleh kasus uji. Untuk pengujian pada aplikasi multimedia Gegendingan Bali ini menggunakan jenis pengujian white box basis path testing. Basispathtesting memungkinkan untuk mengukur kompleksitas logis dari rancangan procedural dan bisa digunakan sebagai pedoman untuk menetapkan jalur eksekusi dasar (basis set) (Nugroho dkk, 2009).
Jenis ini menggunakan notasi flow graph yang menggambarkan aliran kontrol logika. Untuk menentukan jalur independen dari graph digunakan nilai kompleksitas siklomatis (ukuran kuantitatif terhadap kompleksitas suatu program (Nugroho dkk, 2009). Ada 3 cara mencari kompleksitas siklomatis :
1. Jumlah region flow graph
2. Kompleksitas siklomatis V(G) untuk flow graph G dihitung V(G) = jumlah edge – jumlah node + 2
3. V(G) = jumlah node predikat pada flow graph + 1
Nilai dari cyclomatic complexity (Aivosto, 2013), sebuah cyclomatic complexity tinggi menunjukan prosedur kompleks yang sulit dipahami, tes dan
23
pengelolaan. Pada tabel 2.6 menjelaskan hubungan nilai cyclomatic complexity dengan risiko dalam prosedur.
Tabel 2. 6 Hubungan cyclomaticcomplexity dengan risiko (Aivosto, 2013)
CC Jenis prosedur Risiko
1-4 prosedur sederhana Rendah
5-10 Prosedur stabil dan terstruktur Rendah
11-20 Prosedur yang lebih kompleks Sedang
21-50 Prosedur yang kompleks dan mengkhawatirkan Tinggi >50 Kesalahan rawan, sangat merepotkan, prosedur tak
teruji
Sangat tinggi
2.6.3 Stress Testing
Pengujian ini dilakukan untuk melawan program pada keadaan abnormal. Pengujian ini mengeksekusi sistem dalam kondisi kuantitas sumber daya yang abnormal (Nugroho dkk, 2009). Pada pengujian ini menggunakan perangkat lunak untuk pengujian web yang bernama webserver stress tool. Pengujian ini akan memastikan bahwa pengguna mengakses web akan merasa nyaman dan tidak terganggu. Jakob Nielsen menyarankan ambang batas kinerja untuk website seperti pada tabel 2.7.
Tabel 2. 7 Tabel ambang batas kinerja untuk website (Paessler) Waktu tunggu pengguna
saat mengakses
Reaksi Pengguna
< 0,1 detik Pengguna merasa bahwa sistem bereaksi seketika < 1,0 detik Pengguna tidak terganggu. Pengguna tidak senang
dengan menunggu, tapi pengguna masih fokus pada halaman web saat ini
< 10 detik Menunggu mendekati 10 detik, penelitian menunjukkan bahwa kemungkinan gangguan pengguna sangat meningkat
> 10 detik Pengguna kemungkinan besar terganggu dari situs yang diakses dan kehilangan minat
24
Pengujian dilakukan dengan metode Click Test, tes ini diuji dengan melakukan klik pada web. Tes ini selesai ketika jumlah klik yang diuji untuk web oleh setiap pengguna terpenuhi. Tes ini cocok untuk menguji urutan halaman web tertentu.
2.6.4 Pengujian Input Data
Pengujian input data ini adalah tindakan untuk menguji edit dan kontrol dalam pemasukan data, misalnya : validasi dan cek digit. Ada beberapa pengujian saat input data seperti pengecekan karakter, pengecekan nilai numerik, pengecekan digit, pengujian batas, pengujian kelogisan, kompatibilitas internal, cek data silang, transaksi ganda dan lain sebagainya (Supriyanto, 2005).
2.6.5 Penilaian Relevansi
Penilaian relevansi dimaksudkan untuk menyatakan dokumen mana yang dinilai sesuai atau tepat dari dokumen-dokumen yang telah ditemukan dari proses temu balik informasi. Ada dua hal penting yang biasanya digunakan sebagai acuan dalam mengukur kemampuan suatu Sistem Temu Balik Informasi (STBI) yaitu perolehan (recall) dan ketepatan (precision/presisi) (Hasugian, 2006).
Perolehan berhubungan dengan kemampuan sistem untuk memanggil dokumen yang relevan sedangkan ketepatan berkaitan dengan kemampuan sistem untuk tidak memanggil dokumen yang tidak relevan. Recall sebenarnya sulit diukur karena jumlah seluruh dokumen yang relevan dalam database sangat besar. Oleh karena itu presisi-lah yang biasanya menjadi salah satu ukuran yang digunakan untuk menilai keefektifan suatu STBI (Hasugian, 2006). Menghitung presisi menggunakan rumus :
� � = � �ℎ ℎ � � � � � � �
Rentang nilai ketepatan yang digunakan adalah 0 sampai 1, dengan toleransi 2 digit dibelakang koma. Ada tiga kelas presisi yaitu : presisi tinggi, sedang dan rendah. Tolak ukur yang digunakan untuk menyatakan kategori tersebut ialah skala interval dengan mencari selisih kemungkinan angka presisi tertinggi (1) dengan kemungkinan angka presisi terendah (0) kemudian dibagi 3 sesuai kategori penilaian, riilnya adalah (1-0) : 3 = 0,33 (Hasugian, 2006).