OPTIMAL PERMASALAHAN KNAPSACK
SKRIPSI
Diajukan Untuk Memenehui Sebagai Per syar atan
Dalam Memper oleh Gelar Sar jana Komputer Pr ogr am Studi
Teknik Infor matika
Oleh :
ADITYO NUGROHO 0734010023
PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS TEKNOLOGI INDUSTRI
DENGAN BRANCH AND BOUND PADA PENENTUAN NILAI
OPTIMAL PERMASALAHAN KNAPSACK
Disusun Oleh :
ADITYO NUGROHO
0734010023
Telah dipertahankan dihadapan dan diterima oleh Tim Penguji Skr ipsi Pr ogram Studi Teknik Infor matika Fakultas Teknologi Industri
Universitas Pembangunan Nasional “VETERAN” J awa Timur
Pada Tanggal : 19 J uli 2012
APLIKASI PERBANDINGAN METODE EXHAUTIVE SEARCH
DENGAN BRANCH AND BOUND PADA PENENTUAN NILAI
OPTIMAL PERMASALAHAN KNAPSACK
Disusun Oleh :
ADITYO NUGROHO
0734010023
Telah disetujui mengikuti Ujian Negara Lisan Gelombang V Tahun Akademik 2012
Menyetujui,
Pembimbing Utama Pembimbing Pendamping
R. R. Ani Dijah Rahajoe, ST, M.Cs Wahyu S.J . Saputra S.Kom. M.Kom NIP. 19730512 200501 2 003 NPT. 386081002951
Mengetahui,
Ketua Program Studi Teknik Infor matika Fakultas Teknologi Industri
Puji syukur kehadirat Allah SWT Yang Maha Mendengar lagi Maha Melihat dan atas segala limpahan rahmat, taufik, serta hidayah-Nya sehingga penulis dapat menyelesaikan karya tulis yang berbentuk skripsi ini dengan judul “ APLIKASI PERBANDINGAN METODE EXHAUTIVE SEARCH DENGAN
BRANCH AND BOUND PADA PENENTUAN NILAI OPTIMAL
PERMASALAHAN KNAPSACK ” sesuai dengan waktu yang telah direncanakan.
Penyusunan skripsi ini adalah merupakan salah satu syarat untuk memperoleh gelar sarjana pada Fakultas Teknologi Industri Jurusan teknik Informatika Universitas Pembangunan Nasional “Veteran” Surabaya Jawa timur. Dengan selesainya karya tulis skripsi ini tidak lepas dari bantuan banyak pihakyang telah memberikan masukan-masukan kepada penulis. Untuk itu penulis berterimakasih kepada :
1. Secara khusus penulis ingin mengucapkan terima kasih kepada Ayahanda yang penulis banggakan dan Ibundaku tercinta Semoga ibu lekas sembuh, dan kakak-kakakku yang telah banyak memberikan dukungan dan pengorbanan baik secara moril maupun materil sehingga penulis dapat menyelesaikan studi dengan baik.
2. Bapak Ir. Sutiyono, MT, selaku Dekan Fakultas Teknologi industri UPN “Veteran” Jawa Timur. Ibu Dr. Ir. Ni Ketut Sari, MT Selaku Ketua Juruan Teknik Informatika UPN “veteran” Jawa Timur.
3. Ibu Rr.Ani Dijah Rahyu,ST, M.Cs. selaku pembimbing I dan Bapak Wahyu Syaifullah Jauharis, S.kom, selaku pembimbing II yang telah banyak mamberikan bimbingan, nasehat dan arahan kepada penulis.
penyempurnaan selanjutnya.
Surabaya, 15 Juli 2012
ABSTRAK ... i
1.7.Sistematika Penulisan ... 4
BAB II TINJ AUAN PUSTAKA ... 6
2.1.Algoritma dan Pemrograman ... 6
2.1.1.Internal Subroutines ... 7
2.1.2.External Subrotisnes ... 8
2.1.3.Pendekatan Top Down... 8
2.2.Permasalahan Knapsack ... 10
2.3.Metode Exhautive Search ... 12
2.4.Algoritma Branch And Bound ... 17
2.5.Pengembangan Sistem ... 20
2.6.Pengujian sistem ... 21
2.7.Flow Map ... 37
2.8.Embarcadero Delphi 2010………37
BAB III ANALISIA PERMASALAHAN ... 41
3.1.Analisa Masalah……… …..41
3.2.Analisa Sistem ... 42
3.3.Algoritma Exhautive Search ... 43
3.4.Algoritma Branch And Bound ... 45
3.5.Diagram Alir Sistem……….47
3.6.Flowchart Exhautive Search……….48
3.7.Flowchart Branch And Bound………..49
BAB IV PERANCANGAN DAN IMPLEMENTASI... 50
4.1.Perancangan sistem ... 50
4.1.1.Perancangan Form Utama ... 50
4.1.2.Perancangan Form Grafik ... 51
4.1.3.Rancangan Diagram Kelas Global ... 52
4.1.4.Rancangan Diagram Kelas Tband Form………..53
4.1.5.Rancangan Diagram Kelas TF_Laporan……… . 55
4.2 . Implementasi Hasil Perancangan ……….56
4.2.1. Prosedur Algoritma Exhautive Search…………..……… . .56
4.2.2. Prosedur Algoritma Branch And Bound……… .58
5.2.Pengujian Dengan Jumlah 19 item (besaran cost 75)………..…64
5.3.Pengujian Dengan Jumlah 22 Item (besaran Cost 75)………... 66
5.4.Pengujian Dengan Jumlah 19 item (besaran cost 100)... .. ...72
5.5.Pengujian Dengan Jumlah 22 item (besaran Cost 100)...74
BAB VI PENUTUP ... 78
6.1.Kesimpulan ... 78
6.2.Saran ... 79
Gambar 2.6 Aktifitas Pengujian Perangkat Lunak………..30
Gambar 2.8 Bottom Up Testing ... 31
Gambar 2.9 Top Down Testing………...32
Gambar 2.10 Sandwich Testing ... 33
Gambar 2.11 Modified Sandwich Testing ... 34
Gambar 2.14 Tampilan awal Delphi ... 39
Gambar 3.5 Diagram Alir Sistem ... 47
Gambar 3.6 flowchart Exhautive Search……….48
Gambar 3.7 Flowchart Brand And Bound……….…………..49
Gambar 4.1 Rancangan Form Utama ... 50
Gambar 4.2 Rancangan Form Grafik ... 51
Gambar 4.3 Rancangan Kelas Global ... 52
Gambar 4.4 Rancangan Kelas Diagram TBandForm (Bagian 1) ... 53
Gambar 4.5 Rancangan Kelas Diagram TBandForm (Bagian 2) ... 54
Gambar 4.6 Rancangan Kelas Diagram TBandForm (Bagian 3) ... 55
Gambar 4.7 Rancangan Kelas Diagram TF_Laporan ... 55
Gambar 5.1 Tampilan Awal Aplikasi ... 62
Gambar 5.3 Hasil Percobaan Pertama Dengan 19 item (Cost 75)……… 64
Gambar 5.4 Hasil Percobaan kedua Dengan 13 Item (Cost 75)…… …………65
Gambar 5.5 Hasil percobaan ketiga Dengan 6 Item (besaran Cost 75) ... 66
Gambar 5.7 Hasil percobaan Pertama Dengan 22 Item (Besaran Cost 75) ... 68
Gambar 5.8 Hasil Percobaan Kedua Dengan 16 Item (Besaran Cost 75) ... 69
Gambar 5.9 Hasil Percobaan Ketiga dengan 9 Item (Besaran Cost 75) ... 70
Gambar 5.10 Hasil Percobaan Keempat 6 Item ... 71
Gambar 5.11 Hasil Percobaan Pertama Dengan 19 Item (Besaran Cost 100) .... 72
Gambar 5.12 Hasil Percobaan Kedua Dengan 10 Item (Besaran Cost 100) ... 73
Permasalahan knapsack merupakan permasalahan yang sering kita hadapi
sehari-hari dengan tanpa kita sadari. Misalnya pada saat bepergian, kita tentu
memerlukan barang-barang yang akan dimasukkan ke dalam tas atau kopor.
Tentunya kita akan berpikir bagaimana memaksimal ruang yang tersedia dalam
koper dengan jumlah barang yang akan kita bawa.Telah banyak metode dan
algorithma yang dikembangkan dalam menyelesaikan permasalahan knapsack,
diantaranya algorithma BFS, algorithma DFS, algorithma brute force, metode
exhautive search, algorithma branch and bound dan sebagainya.
Setiap metode dan algorithma tersebut tentu mempunyai perbedaan
dalam penentuan nilai output atau waktu yang diperlukan dalam proses
komputasinya. Oleh karena itu dalam tugas akhir kali ini, penulis ingin menguji
kinerja metode exhautive search dan algorithma branch and bound dalam
menyelesaikan permasalahan knapsack guna mengetahui kinerja terbaik diantara
kedua metode dan algorithma tersebut.
Kata kunci : permasalahan knapsack, algorithma exhaustive search, algorithma
1.1. Latar Belakang
Dalam dunia usaha, contoh nyata permasalahan knapsack terdapat pada
pengisian barang di dalam kontainer atau box pada perusahaan jasa pengiriman
barang, permasalahan yang dihadapi adalah bagaimana meminimalkan ruang
kosong dalam kontainer sehingga semakin banyak barang yang dapat dimuat ke
dalam kontainer tersebut.
Knapsackadalah suatu masalah bagaimana cara menentukan pemilihan
barang dari sekumpulan barang di mana setiap barang tersebut mempunyai berat
dan profit masing – masing, sehingga dari pemilihan barang tersebut didapatkan
profit yang maksimum.Telah banyak metode dan algorithma yang dikembangkan
dalam menyelesaikan permasalahan knapsack, diantaranya algorithma BFS,
algorithma DFS, algorithma brute force, metode exhautive search, algorithma
branch and bound dan sebagainya.
Setiap metode dan algorithma tersebut tentu mempunyai perbedaan
dalam penentuan nilai output atau waktu yang diperlukan dalam proses
komputasinya. Oleh karena itu dalam tugas akhir kali ini, penulis ingin menguji
kinerja metode exhautive search dan algorithma branch and bound dalam
menyelesaikan permasalahan knapsack guna mengetahui kinerja terbaik diantara
1.2. Perumusan Masalah
Rumusan masalah yang digunakan dalam tugas akhir ini adalah :
a. Bagaimana membuat analisa penyelesaian permasalahan knapsack
menggunakan metode exhautive search dan branch and bound.
b. Bagaimana membuat aplikasi yang dapat menyelesaikan permasalahan
knapsack menggunakan metode exhautive search dan branch and bound.
c. Metode apakah yang paling optimal untuk menyelesaikan permasalahan
knapsack dari dua metode yaitu exhautive search dan branch and bound.
1.3. Batasan Masalah
a. Permasalahan knapsack yang dipergunakan adalah 0-1 Knapsack Decision
Problem, yaitu persoalan untuk menentukan apakah mungkin memasukkan
objek-objek ke dalam knapsack namun tidak melebihi W tetapi total profitnya
paling sedikit sebesar P, Dimana W adalah weigh dan P adalah profit.
b. Permasalahan knapsack yang dipergunakan mempergunakan dua parameter
yaitu cost dan profit..
c. Jumlah item maksimum yang dapat dimasukkan oleh user adalah 25 dan
jumlah minimum adalah tiga item. Sedangkan besarnya cost maksimum
adalah 100 dan minimum adalah sepuluh.
d. Nilai cost dan profit dimasukkan secara manual.
e. Data cost dan profit diambil dari jasa pengiriman barang PT.TIKI JALUR
NUGRAHA EKEKURIR
1.4. Tujuan
Tujuan yang ingin dicapai pada pengerjaan tugas akhir ini adalah:
Membuat aplikasi yang dapat menghasilkan nilai optimal yang dapat dicapai
dalam penyelesaian permasalahan knapsack dengan menggunakan metode
exhautive search dan branch and bound dan Mengetahui nilai optimal yang dapat
dicapai dalam penyelesaian permasalahan knapsack dengan menggunakan metode
exhautive search dan branch and bound serta kecepatan proses komputasinya
1.5. Manfaat
Adapun manfaat yang ingin diperoleh dari pengerjaan tugas akhir ini
adalah dapat memahami cara kerja algorithma exhautive search dan branch and
bound dalam menyelesaikan permasalahan knapsack serta mampu
menerapkannya dalam bentuk aplikasi komputer.
1.6. Metode Penelitian
Adapun metode penelitian yang dipergunakan dalam pengerjaan tugas
akhir ini adalah :
a. Studi Literatur
Mencari referensi dan bahan pustaka tentang teori-teori yang berhubungan
dengan permasalahan yang akan dikerjakan dalam tugas akhir ini.
b. Studi Kasus
Mencari contoh-contoh kasus serupa yang berhubungan dengan permasalahan
dalam tugas akhir ini.
Membuat analisa berdasarkan data-data yang sudah dimiliki, membuat model
matematisnya dan merancang alur penyelesaian berdasarkan metode exhautive
search dan algoritma branch and bound. Perancangan aplikasi dimulai dengan
perancangan antar muka aplikasi, kemudian merancang detail metode
exhautive search dan algoritma branch and bound.
d. Implementasi Program
Mengimplementasikan teknik algoritma yang akan digunakan. Detail
mengenai implementasi program dilakukan sesuai hasil analisis dan
perancangan aplikasi pada tahapan sebelumnya.
e. Pengujian Aplikasi
Pengujian dilakukan pada aplikasi yang telah dibuat. Menguji validitas dan
efektifitas algoritma yang diterapkan pada aplikasi.
1.7. Sistematika Penulisan
Sistematika penulisan tugas akhir ini adalah sebagai berikut :
BAB I PENDAHULUAN
Bab ini berisi latar belakang masalah, identifikasi masalah, maksud
dan tujuan yang ingin dicapai, batasan masalah, metodologi
penelitian yang diterapkan dalam memperoleh dan mengumpulkan
data serta sistematika penulisan.
Membahas berbagai konsep dasar dan teori-teori yang berkaitan
dengan topik masalah yang diambil dan hal-hal yang berguna
dalam proses analisis permasalahan.
BAB III ANALISA PERMASALAHAN
Menganalisa masalah dari model penelitian untuk memperlihatkan
keterkaitan antar variabel yang diteliti serta model matematis untuk
analisisnya.
BAB IV PERANCANGAN DAN IMPLEMENTASI
Membahas perancangan layout form dalam sistem dan
pengimplementasian hasil perancangan sistem yang telah dibuat ke
bentuk aplikasi yang akan dibangun.
BAB V PENGUJ IAN SISTEM
Membahas uji coba aplikasi yang dibuat, untuk mengetahui tingkat
keberhasilan penentuan nilai optimal dan kecepatan komputasinya,
kemudian melakukan evaluasi keberhasilan sistem.
BAB VI PENUTUP
Berisi kesimpulan dan saran yang sudah diperoleh dari hasil
BAB II
TINJ AUAN PUSTAKA
2.1. Algorithma Dan Pemrograman
Pada era tahun 1950 –1960, kecepatan komputer sangat rendah dan
disertai juga dengan keterbatasan dari media penyimpan, sehingga tentunya
berakibat juga dengan keterbatasan dalam penulisan program-program komputer.
Namun di era saat ini, dengan kecepatan komputer yang cukup handal demikian
juga ketersediaan dari media penyimpan yang cukup handal dan besar, serta
didukung juga dengan perkembangan bahasa pemrograman yang ada sehingga
kita dapat dengan mudah membuat suatu program. Permasalahan yang timbul
dalam pembuatan program tersebut adalah bagaimana kita dapat memahaminya,
sehingga apabila terdapat perubahan yang akan dilakukan kita dapat
memperbaikinya secara mudah (Mesran, 2008). Hal ini tentu saja harus kita
perhatikan terutama apabila kita melihat dari biaya yang harus dikeluarkan dalam
pembuatan program tersebut. Istilah Pemrograman Terstruktur (Structured
Programming) mengacu dari suatu kumpulan tehnik yang dikemukan oleh Edsger
Dijkstra . Dengan tehnik ini akan meningkatkan produktifitas programmer,
dengan mengurangi waktu yang dibutuhkan dalam penulisan (write), pengujian
(test), penelusuran kesalahan (debug) dan pemeliharan(maintain) suatu program.
Pada pembahasan berikut ini kita akan melihat bagaimana tehnik ini yang
pendekatan yang dilakukan secara modular, dapat membantu kita dalam
Dalam pemrograman secara modular, suatu program akan dipilah
kedalam sejumlah modul, dimana setiap modul menjalankan fungsinya sendiri.
Tentunya fungsi yang dijalankan oleh setiap modul sangat terbatas sesuai dengan
ruang lingkup yang akan dikerjakan. Dengan adanya sejumlah modul program ini
tentu saja kesalahan yang timbul dapat dikurangi. Setiap program tentu akan
memiliki program utamanya, yang kemudian akan memanggil sejumlah
modul-modul yang ada.
Pemrograman secara modular ini dapat diimplementasikan dengan
penggunaan subroutine, suatu kelompok instruksi yang menjalankan suatu
pengolahan yang sifatnya terbatas seperti pencetakan, pembacaan untuk proses
input atau untuk proses penghitungan. Subroutine dapat dikelompokkan menjadi
internal subroutine dan external subroutine.
2.1.1. Internal Subroutines
Adalah bagian dari suatu program yang digunakan. Dideklarasikan cukup
sekali saja, untuk sejumlah proses yang sama akan dilakukan oleh program
tersebut. Program akan memanggil subroutines tersebut jika diperlukan dan
apabila telah selesai, kontrol selanjutnya dikembalikan ke instruksi berikutnya.
Instruksi yang mengendalikan kontrol transfer ke suatu subroutine umumnya
2.1.2. External Subroutines
Diletakkan secara terpisah dari program yang menggunakan subroutine
tersebut. Subroutine ini dideklarasikan supaya bisa dipakai oleh program yang
lain. Untuk menggunakannya tentu seorang programmer harus mengetahui
dimana ? , apa namanya ?, bagaimana pengiriman datanya ?, bagaimana jawaban
yang akan diperoleh ?. Subroutine ini biasanya digunakan untuk pemrosesan yang
komplek, yang dibutuhkan oleh banyak user.
2.1.3. Pendekatan Top Down
Pemrograman terstruktur mempergunakan Pendekatan Top-Down dalam
perencanaan program. Merupakan pendekatan yang menggambarkan pemecahan
modul kompleks/besar menjadi modul-modul yang lebih sederhana/kecil
Berbentuk Struktur Hirarki. Di dalam pemrograman terstruktur, terdapat 3 bentuk
struktur perintah yang dipergunakan :
a. Sequence Structure
b. Loop Structure
c. Selection Structure
Struktur perintah yang instruksinya dieksekusi berdasarkan urutannya.
Dimulai dari bagian atas dan diakhiri di bagian bawahnya. Digambarkan dengan
bujur sangkar, sebagai simbol untuk : Input dan Output Operasi aritmatika.
Operasi pemindahan data dalam memori komputer. Menggambarkan perulangan
eksekusi dari satu atau lebih instruksi Menggambarkan struktur yang
Algoritma merupakan sekumpulan langkah-langkah untuk menyelesaikan
suatu tugas. Penamaan “Algoritma” diambil dari seorang ahli matematika
bernama Al-Khwarizmi (Mesran, 2008). Sebuah algoritma harus:
a. Jelas, tepat dan tidak membingungkan
b. Memberikan penyelesaian yang tepat
c. Mempunyai akhir
Tujuh langkah dasar dalam pengembangan program :
a. Definisi Masalah
b. Outline Solusi
c. Pengembangan outline ke dalam algoritma
d. Melakukan test terhadap algoritma
e. Memindahkan algoritma ke dalam bahasa pemrograman
f. Menjalankan program pada komputer
g. Dokumentasi dan pemeliharaan program
h. Pada tahap ini memerlukan pemahaman terhadap permasalahan dengan
membaca berulang kali sampai dengan mengerti apa yang dibutuhkan.
Setelah permasalahan didefinisikan, permasalahan dapat di bagi kedalam
tugas tugas atau langkah langkah yang lebih kecil dan menghasilkan outline
solusi. Outline solusi pada langkah kedua dikembangakan menjadi algoritma yaitu
sebuah set langkah yang menggambarkan tugas yang akan dikerjakan dan urutan
pengerjaannya.
Tujuan utama dari melakukan test terhadap algoritma adalah adalah
untuk menemukan kesalahan utama logika sejak awal, sehingga akan lebih mudah
algoritma ini. Setelah ke-empat langkah sebelumnya dilakukan, maka
pencodingan dapat dimulai dengan menggunakan bahasa pemrograman yang
dipilih. Setelah pengcodingan, maka program dapat dijalankan pada komputer.
Jika Program sudah didesain dengan baik, maka akan mengurangi tingkat
kesalahan dalam melakukan testing program. Langkah ini perlu dilakukan
beberapa kali, sehingga program yang dijalankan dapat berfungsi dengan benar.
Dokumentasi melibatkan eksternal dokumentasi (hierarchy chart, algoritma solusi,
dan hasil data test) dan internal dokumentasi (coding program). Pemeliharaan
program meliputi perubahan yang dialami oleh program (perbaikan ataupun
penambahan modul, dan lain-lain).
2.2. Per masalahan Knapsack
Masalah knapsack adalah masalah dalam optimasi kombinatorial, yaitu
mengasumsikan satu set item, masing-masing dengan berat badan dan nilai,
menentukan jumlah dari setiap item untuk memasukkan dalam koleksi sehingga
total berat kurang dari atau sama dengan diberi batasan dan nilai total sebagai
sebesar mungkin (Andonov, 2000). Analoginya adalah masalah yang dihadapi
oleh seseorang yang dibatasi oleh knapsack berukuran tetap dan harus mengisinya
dengan item yang paling berguna.
Masalah sering muncul dalam alokasi sumber daya dengan kendala
keuangan. Masalah serupa juga muncul di combinatorics, teori kompleksitas,
kriptografi dan diterapkan pada matematika.
Misalkan dalam permasalahan berikut ini, kita memiliki n jenis item, 1
berasumsi bahwa semua nilai dan bobot yang non negatif. Untuk
menyederhanakan representasi, kita juga bisa mengasumsikan bahwa item yang
tercantum dalam rangka peningkatan berat benda. Berat maksimum yang kita
dapat membawa dalam tas adalah W.
Perumusan masalah yang paling umum adalah masalah 0-1 knapsack,
yang membatasi jumlah xi salinan setiap jenis item untuk nol atau satu. Model
matematis masalah 0-1 knapsack dapat dirumuskan sebagai :
•
maximize•
subject toMasalah yang dibatasi knapsack berarti membatasi jumlah xi salinan
setiap jenis item untuk sebuah ci nilai maksimum integer. Matematis masalah
dibatasi knapsack dapat dirumuskan sebagai:
•
maximize•
subject toMasalah ruang terbatas berarti tempat tidak ada batas atas jumlah salinan
dari setiap jenis barang. Yang menarik adalah kasus khusus dari masalah dengan
sifat ini : satu set bilangan bulat nonnegatif, apakah setiap subset itu
menambahkan hingga persis W? Atau, jika bobot negatif diperbolehkan dan W
bulat, apakah setiap subset tak kosong menambahkan hingga tepat 0? Kasus
khusus ini disebut masalah jumlah subset. Di bidang kriptografi, masalah
knapsack. Istilah ini sering digunakan untuk merujuk secara khusus untuk
masalah jumlah subset. Jika beberapa knapsack diperbolehkan, dianggap sebagai
masalah ruang packing.
Dalam permasalahan knapsack sendiri terdapat dua jenis, yaitu :
a. 0-1 Knapsack Optimization Problem, yaitu permasalahan dalam menentukan
objek-objek yang dimasukkan ke dalam knapsack namun tidak melebihi W
sehingga memberikan total profit maksimum.
b. 0-1 Knapsack Decision Problem, yaitu persoalan untuk menentukan apakah
mungkin memasukkan objek-objek ke dalam knapsack namun tidak melebihi
W tetapi total profitnya paling sedikit sebesar P.
2.3.Metode Exhautive Search
Metode exhautive search dapat digunakan untuk mengurangi ruang
pencarian. Pengacakan dapat diterapkan untuk meningkatkan runtimes, meskipun
sering hanya ada sedikit manfaat komputasi untuk melakukan hal ini. Pencarian
yang lebih mendalam juga dikenal sebagai algoritma backtracking, meskipun
tidak semua algoritma backtracking yang lengkap, adalah tentang mencoba setiap
cara yang mungkin untuk mencari solusi (Cormen, 2000). Hal ini biasanya
dikombinasikan dengan pemangkasan untuk mengurangi jumlah item untuk
Sebenarnya metode exhautive search sendiri merupakan teknik pencarian
solusi secara brute force untuk masalah-masalah kombinatorik seperti permutasi,
kombinasi, atau himpunan bagian dari sebuah himpunan (Wiki, .
Langkah-langkah metode exhaustive search adalah :
a. Enumerasi (list) setiap solusi yang mungkin dengan cara yang sistematis.
b. Evaluasi setiap kemungkinan solusi satu per satu, simpan solusi terbaik yang
ditemukan sampai sejauh ini (the best solusi found so far).
c. Bila pencarian berakhir, umumkan solusi terbaik (the winner).
Sedangkan pseudocode umum untuk exhaustive search dapat didefinisikan
sebagai berikut :
Meskipun algoritma exhaustive secara teoritis menghasilkan solusi,
namun waktu atau sumberdaya yang dibutuhkan dalam pencarian solusinya sangat
besar. Berikut ini adalah contoh penerapan algorithma exhautive search pada
permasalahan Travelling Salesperson Problem (TSP) : Diberikan n buah kota serta
diketahui jarak antara setiap kota satu sama lain. Temukan perjalanan (tour)
backtrack(solgenerated, depth+1)
}
terpendek yang melalui setiap kota lainnya hanya sekali dan kembali lagi ke kota
asal keberangkatan. Persoalan TSP tidak lain adalah menemukan sirkuit Hamilton
dengan bobot minimum. Algorithmanya adalah :
a. Enumerasikan (list) semua sirkuit Hamilton dari graf lengkap dengan n buah
simpul.
b. Hitung (evaluasi) bobot setiap sirkuit Hamilton yang ditemukan pada langkah
nomor satu.
c. Pilih sirkuit Hamilton yang mempunyai bobot terkecil.
d. Untuk n buah simpul semua rute perjalanan dibangkitkan dengan permutasi
dari n – 1 buah simpul.
e. Permutasi dari n – 1 buah simpul adalah (n-1) !
f. Jika diselesaikan dengan exhaustive search, maka kita harus mengenumerasi
sebanyak (n –1)! buah sirkuit Hamilton, menghitung setiap bobotnya, dan
memilih sirkuit Hamilton dengan bobot terkecil.
Kompleksitas waktu algoritma exhaustive search untuk persoalan TSP
sebanding dengan (n – 1)! dikali dengan waktu untuk menghitung bobot setiap
sirkuit Hamilton. Menghitung bobot setiap sirkuit Hamilton membutuhkan waktu
O(n), sehingga kompleksitas waktu algoritma exhaustive search untuk persoalan
TSP adalah O(n × n!).
Jika diterapkan pada permasalahan knapsack, maka algoritma Exhaustive
Search akan menjadi sangat efisien jika dipadu dengan algoritma runut-balik atau
backtracking. Algoritma Runut-Balik (backtracking) adalah algoritma yang
berbasis pada Depth First Search yang hanya melakukan pencarian ke arah solusi
layak akan dieliminasi secara efektif sehingga waktu yang diperlukan untuk
menyelesaikan masalah akan berkurang.
Berikut ini adalah penyelesaian masalah knapsack dengan menggunakan
algoritma runut-balik. Ketentuan :
a. Simpul melambangkan status setiap elemen. Elemen berstatus 1 jika elemen
tersebut dimasukan ke dalam knapsack. Elemen berstatus 0 jika elemen
tersebut tidak dimasukan. Contoh {1, 0, 1, 0, 0} artinya adalah hanya elemen
ke 1 dan 3 dimasukan ke knapsack.
b. Pohon yang dibentuk adalah pohon biner. Di tiap simpul dengan kedalaman h
terjadi pengujian terhadap elemen ke-h. Cabang ke kanan melambangkan
simpul orang tua dimasukan ke knapsack, dan sebaliknya. Dengan demikian,
status di setiap simpul selalu berubah.
c. Simpul mati artinya adalah jumlah berat sudah melebihi kapasitas.
Langkah-langkah pengerjaannya adalah sebagai berikut :
a. Status awal adalah {0,0,..,0}. Jumlah objek adalah n.
b. Cek elemen pertama.
c. Jika layak dimasukkan, status elemen uji berubah menjadi 1. Jika tidak, status
tetap.
d. Jika simpul hidup, cek di kedalaman selanjutnya.
e. Jika simpul mati, cek di simpul sebelumnya yang masih hidup.
f. Jika sudah mencapai kedalaman n (semua objek sudah diuji), status di simpul
tersebut adalah solusinya.
Algoritma tersebut sangat efisien karena simpul-simpul mati tidak akan
dari algoritma ini adalah bahwa solusi pertama yang dihasilkan adalah solusi yang
pertama kali ditemukan sehingga belum tentu solusi terbaik.
Hal ini dapat diatasi dengan menguji seluruh kemungkinan solusi tanpa
mempertimbangkan perkembangan dari simpul mati. Hal ini merupakan algoritma
Exhaustive Search yang dipadu dengan algoritma runut balik. Dengan ketentuan
yang sama dengan algoritma sebelumnya, langkah-langkah dari algoritma setelah
dimodifikasi :
a. Status awal adalah {0,0,..,0}. Jumlah objek adalah n. Jika jumlah berat semua
objek lebih kecil atau sama dengan kapasitas Knapsack, maka solusi terbaik
adalah {1, 1, 1,...., 1}. Jika tidak, lanjut ke nomor 2.
b. Cek elemen pertama. Jika layak dimasukkan, status elemen uji berubah
menjadi 1. Jika tidak, status tetap.
c. Jika simpul hidup, cek di kedalaman selanjutnya.
d. Jika simpul mati, cek di simpul sebelumnya yang masih hidup.
e. Jika sudah mencapai kedalaman n (semua objek sudah diuji), uji profit di
simpul tersebut.
f. Jika profit di simpul tersebut lebih besar dari profit sementara, jadikan profit
di simpul tersebut sebagai profit sementara. Lanjutkan dengan mengecek
simpul sebelumnya yang masih hidup. Jika semua simpul sudah diuji, profit
sementara terakhir adalah solusi terbaik dari knapsack.
Solusi yang dihasilkan sudah pasti solusi yang terbaik karena semua
kemungkinan sudah diuji. Waktu penyelesaian algorima tersebut pada kasus
kasus rata-rata, jumlah operasi akan berkurang karena adanya simpul mati,
sehingga waktu penyelesaian akan lebih cepat.
Algoritma tersebut masih mungkin lebih diefisienkan lagi dengan
trik-trik tertentu seperti pengurutan objek-objek terlebih dahulu berdasarkan berat dan
lain-lain. Dengan begitu, waktu penyelesaian akan lebih cepat dan solusi terbaik
akan didapat.
2.4.Algorithma Branch And Bound
Algorithma Branch and Bound adalah algoritma umum untuk mencari
solusi optimal dari berbagai masalah optimasi, terutama dalam optimasi diskrit
dan kombinatorial. Ini terdiri dari pencacahan sistematis semua solusi
kandidat, di mana subset besar calon sia-sia dibuang secara massal, dengan
menggunakan batas atas dan bawah estimasi kuantitas yang sedang
dioptimalkan. Metode ini pertama kali diusulkan oleh AH Tanah dan AG Doig
pada tahun 1960 untuk pemrograman diskrit. . Sesuai dengan namanya,
metode ini terdiri dari 2 langkah yaitu :
a. Branch yang artinya membangun semua cabang tree yang mungkin
menuju solusi.
b. Bound yang artinya menghitung node mana yang merupakan active
node (E-node) dan node mana yang merupakan dead node
(D-node) dengan menggunakan syarat batas constraint (kendala).
Untuk kepastian, kita mengasumsikan bahwa tujuannya adalah untuk
mencari nilai minimum dari fungsi f (x), di mana x berkisar atas beberapa set
bahwa seseorang dapat menemukan nilai maksimum dari f (x) dengan mencari
minimum dari g (x) = - f (x). (Sebagai contoh, S bisa menjadi himpunan dari
semua jadwal perjalanan mungkin untuk armada bus, dan f (x) bisa menjadi
pendapatan yang diharapkan untuk jadwal x.)
Sebuah prosedur cabang-dan-terikat membutuhkan dua alat. Yang
pertama adalah prosedur pemisahan yang, diberi satu set S dari calon,
mengembalikan dua atau lebih set yang lebih kecil S_1, S_2, \ ldots yang
mencakup serikat S. Perhatikan bahwa minimum dari f (x) lebih dari S adalah \
min \ {v_1 , v_2, \ ldots \}, di mana setiap vi adalah minimum dari f (x) dalam Si.
Langkah ini disebut bercabang, sejak aplikasi rekursif yang mendefinisikan
sebuah struktur pohon (pohon pencarian) node yang merupakan himpunan bagian
dari S. Alat kedua adalah prosedur yang menghitung batas atas dan bawah untuk
nilai minimum dari f (x) dalam subset tertentu dari S. Langkah ini disebut
bounding.
Ide utama dari algoritma BB adalah: jika batas bawah untuk beberapa
simpul pohon (set calon) adalah lebih besar dari batas atas untuk beberapa node B
yang lain, maka A dapat dengan aman dibuang dari pencarian. Langkah ini
disebut pemangkasan, dan biasanya dilaksanakan dengan mempertahankan
variabel global m (dibagi di antara semua node dari pohon) yang mencatat atas
minimal terikat dilihat antara semua subregional diperiksa sejauh ini. Setiap node
yang batas bawah lebih besar daripada m dapat dibuang.
Rekursi berhenti bila calon saat ini ditetapkan S adalah dikurangi
batas bawah. Either way, setiap elemen dari S akan menjadi minimum dari fungsi
dalam S.
Algoritma Branch and Bound banyak digunakan untuk memecahkan
berbagai macam permasalahan antara lain : persoalan Knapsack 0/1,
Travelling Salesman Problem (TSP), The Queens Problem (Persoalan
N-Ratu), Graph Colouring (Pewarnaan Graf), Sirkuit Hamilton, Integer
Programming, Nonlinear Programming, Quadratic Assignment Problem (QAP),
Maximum Satisfiability Problem (MAX-SAT), dan lain sebagainya. dan lain
sebagainya.pemodelan ruang pencarian Alagoritma Branch and bound
digambarkan pada gambar 2.1
Gambar 2.1. Pemodelan ruang pencarian Algorithma Branch And Bound
2.5.Pengembangan Sistem
Pengembangan sistem (System development) dapat berarti menyusun
suatu sistem yang baru untuk menggantikan sistem yang lama secara keseluruhan
atau memperbaiki sistem yang telah ada. Sistem yang lama perlu diperbaiki atau
diganti disebabkan karena beberapa hal, yaitu sebagai berikut :
a. Adanya permasalahan-permasalahan (Problems) yang timbul di sistem yang
lama. Permasalahan yang timbul dapat berupa : ketidakberesan pada sistem
yang lama dan menyebabkan sistem yang lama tidak dapat beroperasi sesuai
dengan yang diharapkan, pertumbuhan organisasi yang menyebabkan harus
disusunnya sistem yang baru.
b. Untuk meraih kesempatan-kesempatan (Opportunisties)
c. Adanya instruksi-instruksi (Directives)
Karena adanya permasalahan, kesempatan dan instruksi, maka sistem
yang baru perlu dikembangkan untuk memecahkan permasalahan-permasalahan
yang timbul, meraih kesempatan-kesempatan yang ada atau memenuhi
instruksi-instruksi yang diberikan.
Dengan telah dikembangkannya sistem yang baru, maka diharapkan akan
terjadi peningkatan-peningkatan di sistem yang baru. Peningkatan ini
berhubungan dengan kemudahan sistem itu sendiri, diantaranya :
a. Performance (Kinerja), Kinerja dapat diukur dari Throughput dan Response
Time. Throughput adalah jumlah dari pekerjaan yang dapat dilakukan suatu
saat tertentu. Response Time adalah rata-rata waktu yang tertunda diantara dua
b. Information (Informasi), peningkatan terhadap kualitas informasi yang
disajikan.
c. Economy (Ekonomis), peningkatan terhadap manfaat-manfaat atau
keuntungan-keuntungan dan penurunan biaya yang terjadi.
d. Control (Pengendalian), peningkatan terhadap pengendalian untuk mendeteksi
dan memperbaiki kesalahan-kesalahan.
e. Efficiency (Efisisensi), peningkatan terhadap efisiensi operasi.
f. Service (Pelayanan), peningkatan terhadap pelayanan yang diberikan oleh
sistem.
2.6.Pengujian Sistem
Pengembangan sistem perangkat lunak melibatkan sederetan aktivitas
produksi di mana peluang terjadinya kesalahan manusia sangat besar. Kesalahan
dapat mulai terjadi pada permulaan proses di mana sasaran ditetapkan secara tidak
sempurna, kemudian dalam disain dan tahapan pengembangan selanjutnya.
Karena ketidakmampuan manusia untuk melakukan dan berkomunikasi dengan
sempurna, maka pengembangan perangkat lunak harus selalu diiringi dengan
aktivitas jaminan kualitas.
Pengujian perangkat lunak adalah elemen kritis dari jaminan kualitas Perangkat
Lunak, dan mempresentasikan kajian pokok dari spesifikasi, desain, dan
pengkodean. Dengan meningkatnya visibilitas perangkat lunak sebagai suatu
elemen sistem, dan biaya yang muncul akibat kegagalan perangkat lunak, maka
Adalah hal yang wajar jika organisasi pengembangan Perangat Lunak
meningkatkan 30 – 40 % usaha proyek pengembangan Perangkat Lunak pada
tahap pengujian.
2.6.1. Sasaran Pengujian
Sejumlah aturan yang berfungsi sebagai sasaran pengujian:
a. Pengujian adalah proses eksekusi suatu program dengan maksud menemukan
kesalahan.
b. Test-case yang baik adalah test-case yang memiliki probabilitas untuk
menemukan kesalahan yang belum pernah ditemukan sebelumnya.
c. Pengujian yang sukses adalah pengujian yang mengungkap semua kesalahan
yang belum pernah ditemukan sebelumnya.
• Sasaran Pengujian tersebut mengimplikasikan adanya perubahan titik pandang
yang dramatis.
• Sasaran berlawanan dengan pandangan yang biasanya dipegang: bahwa
pengujian yang berhasil adalah adalah pengujian yang tidak ada kesalahan
yang ditemukan.
• Sasaran kita adalah mendisain pengujian yang secara sistematis mengungkap
kelas kesalahan yang berbeda dan melakukannya dengan jumlah waktu dan
usaha minimum.
• Bila pengujian dilakukan secara sukses (sesuai dengan sasaran), maka akan
• Sebagai keuntungan sekunder, pengujian menunjukkan bahwa fungsi
perangkat lunak bekerja sesuai dengan spesifikasi dan bahwa persyaratan
kinerja telah dipenuhi.
• Sebagai tambahan, data yang dikumpulkan pada saat pengujian dilakukan,
memberikan indikasi yang baik mengenai reliabilitas perangkat lunak dan
beberapa menunjukkan kualitas perangkat lunak secara keseluruhan.
Tetapi ada satu hal yang tidak dapat dilakukan oleh pengujian, yaitu: • Pengujian tidak dapat memperlihatkan tidak adanya cacat.
• Pengujian hanya dapat memperlihatkan bahwa ada kesalahan Perangkat
Lunak. •
2.6.2. Pr insip Pengujian
Sebelum mengaplikasikan metode untuk mendisain test-case yang efektif,
perekayasa Perangkat Lunak harus memahami prinsip dasar yang menuntun
pengujian Perangkat Lunak.
Serangkaian prinsip pengujian yang telah diadaptasi untuk digunakan, yaitu :
a. Semua pengujian harus dapat ditelusuri sampai ke persyaratan pelanggan.
• Sebagaimana telah diketahui, sasaran pengujian PL adalah untuk
mengungkap kesalahan.
• Hal ini memenuhi kriteria bahwa cacat yang paling fatal (dari titik
pandang pelanggan) adalah cacat yang menyebabkan program gagal
memenuhi persyaratannya.
• Perencanaan pengujian dapat mulai segera setelah model persyaratan
dilengkapi.
• Definisi detil mengenai test-case dapat dimulai segera setelah model disain
diteguhkan. Dengan demikian semua pengujian dapat direncanakan dan
dirancang sebelum semua kode dibangkitkan.
c. Pengujian harus mulai dari yang kecil dan berkembang ke pengujian yang
besar.
• Pengujian pertama yang direncanakan dan dieksekusi biasanya berfokus
pada modul program individual.
• Selagi pengujian berlangsung maju, pengujian mengubah fokus dalam
usaha menemukan kesalahan pada cluster model yang terintegrasi, dan
akhirnya pada sistem secara keseluruhan.
d. Pengujian yang mendalam tidaklah mungkin.
• Jumlah jalur permutasi untuk program yang berukuran menengahpun
sangat besar. Karena itulah maka tidak mungkin mengeksekusi setiap
kombinasi jalur skema pengujian.
• Tetapi dimungkinkan untuk secara adekuat mencakup logika program dan
memastikan bahwa semua kondisi dalam disain prosedural telah diuji.
• Untuk menjadi paling efektif, pengujian harus dilakukan oleh pihak ketiga
yang independen.
• Yang dimaksudkan dengan kata yang paling efektif adalah pengujian yang
memiliki probabilitas tertinggi di dalam menemukan kesalahan (sasaran
• Perekayasa perangkat lunak yang membuat sistem bukanlah orang yang
paling tepat untuk melakukan semua pengujian bagi perangkat lunak.
Dalam lingkungan yang ideal, perekayasa Perangkat Lunak mendesain suatu
program komputer, sebuah sistem, atau suatu produk dengan “testabilitas” di
dalam pikirannya.
Hal ini memungkinkan individu yang berurusan dengan pengujian mendisain
test-case yang efektif secara lebih mudah.
James Bach menggambarkan testabilitas dengan cara berikut :
Testabilitas Perangkat Lunak secara sederhana adalah seberapa mudah sebuah
program komputer dapat diuji. Karena pengujian sangat sulit, perlu diketahui apa
yang dapat dilakukan untuk membuatnya menjadi mudah. Kadang-kadang
pemrogram bersedia melakukan hal-hal yang yang akan membantu proses
pengujian, dan checklist mengenai masalah-masalah disain yang mungkin,
fitur,dan lain sebagainya, dapat menjadi berguna dalam bernegosiasi dengan
mereka. Ada metrik yang dapat digunakan untuk mengukur testabilitas di dalam
sebagian besar aspeknya.
Testabilitas digunakan untuk melihat melihat seberapa adekuat serangkaian
pengujian tertentu akan mencakup produk.
Checklist berikut ini memberikan serangkaian karakteristik yang membawa
kepada Perangkat Lunak yang dapat diuji.
a. Operabilitas : semakin baik Perangkat Lunak bekerja, semakin efisien
Perangkat Lunak dapat diuji.
• Sistem memiliki beberapa bug (bug menambah analisis dan biaya
• Tidak ada bug yag memblok eksekusi pengajian
• Produk berkembang di dalam tahapan funsgional (memungkinkan
pengembangan dan pengujian secara simultan).
b. Observabilitas : apa yang anda lihat adalah apa yang diuji. • Output yang berbeda dikeluarkan oleh masing-masing input.
• Tahap dan variabel sistem dapat dilihat atau diartikan selama eksekusi.
• Sistem dan variable yang lalu dapat dilihat atau diartikan (misalnya, log
transaksi)
• Semua faktor yang mempengaruhi output dapat dilihat.
• Output yang tidak benar dapat diidentifikasikan sengan mudah.
• Kesalahan internal dideteksi secara otomatis melalui mekanisme
self-testing.
• Kesalahan internal dilaporkan secara otomatis.
• Kode sumber dapat diakses.
c. Kontrolabilitas : semakin baik kita dapat mengontrol PL, semakin banyak
pengujian yang dapat diotomatisasi dan dioptimalkan.
• Semua output yang mungkin dapat dimunculkan melalui beberapa
kombinasi output.
• Semua kode dapat dieksekusi melalui berbagai kombinasi input.
• Keadaan dan variable perangkat lunak dan perangkat keras dapat dikontrol
secara langsung oleh perekayasa pengujian. • Format input dan output konsisten dan terstruktur.
d. Dekomposabilitas : dengan mengontrol ruang lingkup pengujian, kita dapat
dengan lebih cepat mengisolasi masalah dan melakukan pengujian kembali
secara lebih halus.
• Sistem perangkat lunak dibangun dari modul-modul independen.
• Modul-modul perangkat lunak dapat diuji secara independen.
e. Kesederhanaan : semakin sedikit yang diuji, semakin cepat kita dapat
mengujinya.
• Kesederhanaan fungsional (seperti, kumpulan fitur adalah kebutuhan
minimum untuk memenuhi persyaratan)
• Kesederhanaan struktural (seperti, arsitektur dimodularisasi untuk
membatasi penyebaran kesalaha)
• Kesederhanaan kode (seperti, standar pengkodean diadopsi demi
kemudahan inspeksi dan pemeliharaan)
f. Stabilitas : semakin sedikit perubahan, semakin sedikit gangguan dalam
pengujian.
• Perubahan ke Perangkat Lunak tidak sering.
• Perubahan ke Perangkat Lunak terkontrol.
• Perubahan ke Perangkat Lunak memvalidasi pengujian yang sudah ada.
• Kegagalan Perangkat Lunak dapat diperbaiki dengan baik.
g. Kemampuan untuk dapat dipahami : semakin banyak informasi yang kita
miliki, semakin halus pengujian yang akan dilakukan. • Disain dipahami dengan baik
• Ketergantungan di antara komponen internal, eksternal, dan yang dipakai
• Perubahan ke disain dikomunikasikan.
• Dokumentasi teknik dapat diakses dengan cepat.
• Dokumentasi teknis diorganisasikan dengan baik.
• Dokumentasi teknis spesifik dan detil.
• Dokumentasi teknis akurat.
Atribut-atribut yang disusulkan James Bach tersebut dapat digunakan oleh
perekayasa Perangkat Lunak untuk mengembangkan suatu konfigurasi Perangkat
Lunak (yakni program, data, dokumen, dll) yang dapat dipertanggungjawabkan
pada pengujian.
2.6.3. Atr ibut-Atr ibut Pengujian
a. Pengujian yang baik memiliki probabilitas yang tinggi untuk menemukan
kesalahan.
Untuk mencapai hal ini, penguji harus memahami PL dan berusaha
mengembangkan gambaran mental mengenai bagaimana PL dapat gagal. Idealnya
kelas-kelas kegagalan itu diselidiki.
Sebagai contoh, kelas kegagalan potensial pada GUI adalah kegagalan untuk
mengenali posisi mouse yang sesuai. Serangkaian pengujian akan dirancang untuk
menguji mouse untuk memperlihatkan kesalahan di dalam pengenalan posisi
mouse.
b. Pengujian yang baik tidak redundan.
Waktu pengujian dan sumber daya terbatas. Tidak ada manfaatnya melakukan
pengujian dengan tujuan yang sama dengan pengujian lainnya. Setiap pengujian
Sebagai contoh, modul PL Safe-Home didisain untuk mengenali password
pemakai untuk mengaktifkan dan mendeaktifkan sistem. Dalam usaha
mengungkap kesalahan pada input password, penguji mendisain serangkaian
pengujian yang memasukkan serangkaian password. Password yang berlaku dan
tidak berlaku (empat urutan numeris) diinputkan sebagai pengujian yang berbeda.
Tetapi masing-masing password valid/invalid harus memeriksa mode kegagalan
yang berbeda. Sebagai contoh, password invalid 1234 tidak boleh diterima oleh
sistem yang diprogram untuk mengenali 8080 sebagai password yang valid. Bila
1234 diterima, maka kesalahan muncul. Pengujian yang lain, katakanlah 1235,
akan memiliki tujuan yang sama dengan 1234 sehingga redundan. Tetapi input
invalid 8081 atau 8180 memiliki perbedaan yang jelas, yang bersusaha
memperlihatkan bahwa suatu kesalahan akan muncul untuk password yang dekat
tetapi tidak sama dengan password valid.
c. Pengujian yang baik seharusnya jenis terbaik.
Dalam suatu kelompok pengujian yang memiliki tujuan yang serupa, batasan
waktu dan sumber daya dapat menghalangi eksekusi hanya kelompok kecil dari
pengujian tersebut. Pada kasus semacam ini maka pengujian yang memiliki
kemungkinan paling besar untuk mengungkap seluruh kelas kesalahan yang tinggi
yang harus digunakan.
d. Pengujian yang baik tidak boleh terlalu sederhana atau terlalu kompleks.
Meskipun kadang-kadang mungkin untuk menggabungkan serangkaian pengujian
ke dalam satu test-case, secara umum masing-masing test-case harus dieksekusi
Gambar 2.6. Aktifitas Pengujian Perangkat Lunak
Jenis-jenis pengujian perangkat lunak antara lain :
a. Integrated Testing
Fokus deteksi fault pada sekelompok komponen/unit, seperti fungsi, kelas,
packages. Dua atau lebih komponen diintegrasikan dan diuji. Jika tidak ada, maka
komponen lain ditambahkan dan diuji.
langkah-langkah integration testing
• Berdasarkan strategi yang dipilih, pilih komponen yang akan diuji.
Lakukan pengujian unit untuk semua komponen.
• Lakukan persiapan untuk pengujian (pembuatan drivers, stubs)
• Lakukan functional testing: Definisikan test cases yang menguji semua
komponen yang di uji.
• Lakukan structural testing: Definisikan test cases yang menguji semua
komponen yang di uji. • Lakukan performance tests
• Ulangi langkah 1 to 6 sampai keseluruhan sistem diuji.
Tujuan integration testing adalah mengidentifikasi errors dalam konfigurasi
komponen yang ada.
b. Pendekatan Bottom-up testing
Sub sistem pada lapisan terbawah dalam hirarki pemanggilan diuji secara
indivual. Kemudian sub sistem yang diuji adalah sub sistem yang memanggil sub
sistem yang diuji sebelumnya. Dilakukan secara berulang sampai semua sub
sistem di uji. Butuh Test Driver : Rutin yang memanggil sub sistem yang diuji
dan memberikan test case dapat digambarkan seperti gambar 2.8
Gambar 2.8 Bottom Up Testing
c. Top-down testing
• Mengkombinasikan semua sub sistem yang dipanggil oleh sub sistem yang
telah diuji dan melakukan pengujian terhadap sub sistem yang hasil
kombinasi tadi.
• Dilakukan secara berulang sampai semua sub sistem di uji.
• Butuh Test stub :
• Program atau fungsi yang mensimulasikan simulates aktivitas sub
sistem yang ‘hilang’ dengan merespons panggilan sub sistem
pemanggilan dan mengembalikan data simulasi.dapat dilihat pada
gambar 2.9
Gambar 2.9. Top Down Testing
d. Sandwich Testing
• Kombinasi pendekatan top-down strategy dan bottom-up.
• Sistem dipandang memiliki 3 lapis.
• Lapis target
• Lapis di bawah target
• Bagaimana menentukan lapisan target jika ada lebih 3 lapisan ?
• Heuristic: mencoba meminimalisir jumlah stub dan drivers, dapat
dilihat pada gambar 2.10
e. Modified Sandwich Testing
• Test secara paralel:
• Lapisan tengah (middle layer) dengan driver dan stub
• Top layer dengan stub
• Bottom layer dengan driver.dapat dilihat pada gabar 2.11
• Test secara paralel:
• Top layer mengakses middle layer (top layer menggantikan driver)
• Bottom diakses oleh middle layer (bottom layer menggantikan
stub)
Gambar 2.11. Modified Sandwich Testing
f. System Testing
• Dilakukan setelah komponen-komponen diintegrasikan.
• Menjamin bahwa sistem yang lengkap sesuai dengan kebutuhan fungsional
dan non fungsional sistem.
• Pada tahap ini fault yang terjadi pada komponen telah teridentifikasi dan
dikoreksi.
g. Functional Testing
• requirements testing menguji fungsionalitas sistem.
• Pada esensinya sama dengan pengujian Blackbox
• Test cases dirancang dari dokumen analisis kebutuhan (mis. user manual) dan
berfokus pada kebutuhan dan fungsi utama (mis. use cases)
• Pengujian dilakukan dengan memiliki test yang relevan pada pengguna dan
memiliki peluang yang besar untuk menemukan failure.
• Menemukan perbedaan antara goal (kebutuhan non fungsional) yang
ditentukan pada saat pengembangan sistem dengaan yang diimplementasikan
dalam sistem.
• Security testing – menguji keamanan sistem (menemukan security faults).
Menggunakan hacker untuk menguji sistem.
• Timing testing – mengevaluasi waktu tanggap (response times) dan waktu
untuk melakukan sebuah fungsi
• Environmental test – menguji toleransi terhadap lingkungan seperti panas,
kelembaban, gerak
• Quality testing – pengujian keandalan, maintain- ability dan availabilitas
sistem
• Recovery testing – pengujian terhadap tanggapan sistem terhadap adanya
kesalahan atau ketiadaan data.
i. Acceptance Testing
• Tujuan : menunjukkan bahwa sistem sudah siap untuk pemakaian
operasional.
• Pilihan test dibuat oleh client/sponsor
• Banyak test dapat diambil dari integration testing
• Kebanyakan bug dalam perangkat lunak biasanya ditemukan oleh client
setelah sistem digunakan, bukan oleh developer atau testers test
tambahan (Pilot Test atau Field Test)
j. Pilot Testing
• Alpha test:
• Client menggunakan perangkat lunak di tempat pengembang
(development environment).
• Perangkat lunak digunakan dalam setting terkendali, pengembang
selalu siap untuk memperbaiki kesalahan yang terjadi
• Beta test:
• Dilakukan tempat pengguna (lingkungan yang sebenarnya).
• Pengembang tidak ada
• Perangkat lunak digunakan dalam lingkungan yang sebenarnya
(target environment).
k. Installation Testing
• Sistem di install pada target environment dan dievalusi.
• Mengulangi test cases yang dieksekusi selama functional dan performance
testing dalam target environment.
• Beberapa kebutuhan mungkin tidak bisa diuji dalam development
environment sehingga perlu dibuat test cases yang baru.
2.7.Flow Map
Flow Map adalah diagram yang menunjukan aliran data berupa
beredar dalam suatu sistem. Notasi yang digunakan dalam suatu flow map
merupakan penggabungan notasi flow chart program. Hal-hal yang harus
diperhatikan dalam menggambarkan flow map adalah sebagai berikut:
a. Penggambaran flow map dimulai dari atas halaman ke bagian bawah,
yang jelas sesuai dengan yang akan dilakukan dalam sistem
e. Semua sub sistem yang digambarkan, harus mengalami siklus informasi
f. Jika penggambaran suatu siklus informasi terpotong, maka gunakan
penghubung antar bagian.
2.8.Embarcadero Delphi 2010
Delphi merupakan alat bantu pengembangan aplikasi yang berbasis
visual. Perangkat ini merupakan hasil pengembangan dari bahasa pemrograman
pascal yang diciptakan oleh Niklaus Wirth. Pada masa itu, Wirth bermaksud
membuat bahasa pemrograman tingkat tinggi sebagai alat bantu mengajar logika
pemrograman komputer kepada para mahasiswanya.
Bahasa pemrograman pascal ini kemudian dikembangkan oleh Borland
yang merupakan salah satu perusahaan software menjadi sebuah tools dengan
dengan ditemukannya metode pemrograman berorientasi obyek, bahasa
pemrograman pascal berevolusi menjadi object pascal dan dikembangkan oleh
Borland dengan nama Borland Delphi.
Keberhasilan Borland dalam mengembangkan Delphi menjadikan salah
satu bahasa yang populer dan disukai oleh banyak programmer, disamping Visual
Basic yang dikeluar Microsoft di kemudian hari.Lingkungan pengembangan
Delphi yang mudah, intuitif dan memudahkan pemakai, berhasil melampaui
popularitas rivalnya, yaitu Visual Basic, sehingga pernah menyandang predikat
“VB-Killer”.
Karena tuntutan perkembangan teknologi, Borland berganti nama
menjadi Code Gear, tetapi tetap mempergunakan nama Delphi untuk tools yang
berbasis object pascal ini. Tidak lama kemudian Code Gear diakuisisi oleh
Embarcadero dan namanya pun berubah menjadi Embarcadero RAD Studio
dengan tetap mempertahankan Delphi sebagai salah satu tools-nya.
Beberapa kelebihan yang dimiliki oleh Embarcadero Delphi 2010 ini
antara lain :
a. Delphi dibangun dengan menggunakan arsitektur native compiler, sehingga
proses kompilasi instruksi menjadi bahasa mesin menjadi lebih cepat.
b. Semua file yang disertakan saat proses kompilasi, digabungkan menjadi satu
sesuai dengan arsitektur native compiler, sehingga mengurangi
ketergantungan terhadap library ataupun file-file pendukung lainya, sesuai
dengan prinsip build once, runs everywhere
c. Delphi mempunyai kemampuan selective object linking, sehingga apabila
dalam library tersebut yang dipergunakan dalam system, maka secara
otomatis, kompiler tidak akan menyertakan library tersebut dalam proses
kompilasinya. Hal ini berbeda dengan tools lain yang tidak mempunyai
kemampuan seperi itu. Dengan adanya kemampuan tersebut, maka file
eksekusi yang dihasilkan delphi menjadi lebih optimal.
d. Lingkungan pengembangan Delphi sangat intuitif karena semua komponen
yang menjadi alat utama desain visual telah ditampilkan saat pertama kali
langsung dapat diamati oleh user dan dapat digunakan secara langsung.
Gambar 2.14 merupakan tampilan awal bahasa pemrograman Delphi 2010.
Gambar 2.14. Tampilan awal Delphi
Dalam delphi seperti halnya bahasa visual lainnya menyediakan
komponen. Komponen adalah “jantung” bagi pemograman visual. Componen
Palette telah terbagi menjadi berbagai jenis komponen, diantaranya adalah
komponen-komponen tersebut, developer dapat menghemat waktu dalam
3.1. Analisa Masalah
Permasalahan yang dibuat dalam tugas akhir ini adalah membuat aplikasi
untuk menyelesaikan permasalahan knapsack dengan simulasi algoritma
exhaustive search dan algorithma branch and bound, sehingga kita bisa melihat
hasil penentuan nilai optimal dan simulasi yang telah dibuat. Data dari hasil
penelitian dengan algoritma ini beserta pengimplementasiannya akan
dibandingkan diantara kedua algorithma tersebut. Dari perbandingan ini akan
diperoleh kelebihan dan kekurangan dari algoritma ini, dan selanjutnya dari
perbandingan tersebut akan diperoleh kesimpulan.
Dalam tugas akhir ini, pengguna diartikan sebagai orang yang mengakses
dan menggunakan perangkat lunak yang dibuat dalam tugas akhir ini, dalam hal
ini pengguna harus memiliki kemampuan dasar untuk mengoperasikan komputer
dan memiliki kapabilitas dalam menggunakan aplikasi komputer.
3.2. Analisa Sistem
Analisa adalah tahap aktifitas kreatif dimana analis berusaha memahami
permasalahan secara mendalam. Ini adalah proses interative yang terus berjalan
hingga permasalahan dapat dipahami dengan benar. Analisis bertujuan untuk
berdasarkan masukan dari pihak-pihak dan juga pengalaman analis yang
berkepentingan dengan sistem tersebut.
Bahan penelitian dalam tugas akhir ini berasal dari berbagai studi
literatur dari buku-buku teks dan website, yang selanjutnya dipergunakan menjadi
bahan analisis sehingga penulis dapat membuat pemodelan sistem dan merancang
simulasinya.Dalam melakukan analisa, penulis membuat dua jenis analisis, yaitu
analisis kebutuhan non fungsional dan analisis kebutuhan fungsional. Analisis non
fungsional adalah sebuah tahap dimana pengembang perangkat lunak
menganalisis sumber daya yang akan menggunakan perangkat lunak yang
dibangun, sehingga dapat ditentukan kompatibilitas aplikasi yang dibangun
terhadap sumber daya yang ada.
Sedangkan analisis kebutuhan fungsional adalah suatu gambaran dari
informasi yang terjadi pada sistem yang bersangkutan.Dalam analisis kebutuhan
fungsional, dilakukan perancangan aplikasi ini, yang meliputi : algorithma
exhautive search, algorithma branch and bound dan diagram alir sistem.
Sedangkan perangkat keras adalah seluruh komponen atau unsur
peralatan yang digunakan untuk menunjang pembangunan suatu aplikasi, dalam
kasus ini adalah aplikasi kompresi menggunakan kombinasi algoritma LZ77 dan
Huffman. Berikut ini adalah spesifikasi perangkat keras komputer yang
dipergunakan dalam tugas ini adalah :
a. Processor : Intel Multi Core 2,4 Ghz
b. Memory (RAM) : 1024 MBytes
d. Monitor : LCD 14 inch
e. Keyboard dan Mouse
Sedangkan perangkat lunak yang dipergunakan dalam tugas akhir ini
adalah :
a. Sistem Operasi Microsoft Windows 7 Profesional
b. Embarcadero RAD Studio 2010
c. Microsoft Visio Profesional 2010
d. Microsoft Office 2010
3.3. Algorithma Exhaustive Search
Pada algorithma exhaustive search dalam menyelesaikan permasalahan
knapsack akan mencoba menghitung setiap kombinasi susunan kombinasi item.
Untuk sejumlah n item, akan menghasilkan 2^n kombinasi item yang akan
diperiksa. Himpunan kombinasi ini dapat direpresentasikn sebagai sebuah pohon
biner dengan setiap jalur yang dimulai dari root menuju akhir yaitu daun.
Kombinasi juga dapat direpresentasikan sebagai notasi dari angka 0
sampai 2^n. Jadi, sebagai contoh, jika terdapat tiga item, maka kombinasinya
merepresentasikan item 1 dan 2, perkecualian item 3 dapat menjadi nomor 6
(bentuk binernya 110). Jika terdapat 20 sampai 30 item akan menghasilkan
kombinasi milyaran sampai trilyunan yang harus diperiksa oleh komputer dan hal
ini memerlukan waktu yang relatif lama, bergantung pada spesifikasi perangkat
Penjelasan dari algorithma exhaustive search diatas adalah sebagai berikut :
Sistem akan memeriksa apakah cost yang sedang diuji nilainya kurang
dari sama dengan cost yang diijinkan dan nilai profit yang sedang diuji lebih dari
profit yang terbaik, jika dua kondisi yang terpenuhi maka sistem akan melakukan
iterasi penugasan nilai terbaik saat ini dengan nilai yang diperiksa saat ini. Proses
ini akan diulang sampai sejumlah item telah dipenuhi. Kemudian nilai profit
terbaik akan diganti dengan nilai tes profit yang baru. Begitu juga dengan nilai
cost terbaik akan digantikan oleh nilai tes cost yang baru.
Selain itu (jika kondisi item_num > NumItems tidak terpenuhi),
TestSolution[item_num] = True
TestCost = TestCost + Items[item_num].Cost
TestProfit = TestProfit + Items[item_num].Profit
ExhaustiveSearch(item_num + 1)
TestSolution[item_num] = False
TestCost = TestCost - Items[item_num].Cost
TestProfit = TestProfit - Items[item_num].Profit
if item_num<numitems then
nilai cost yang diuji dengan cost item saat ini untuk item yang ditambahkan.
Sedangkan untuk item yang dikeluarkan berlaku sebaliknya.
Proses diatas akan terus berulang secara rekursif sampai kondisi item saat
ini yang sedang diperiksa belum mencapai keseluruhan item yang harus diperiksa.
Jika kondisi tersebut telah terpenuhi, maka sistem akan berhenti melakukan
rekursif.
3.4. Algorithma Branch And Bound
Algorithma branch and bound merupakan algorithma yang secara signifikan
mengurangi jumlah kombinasi yang terbentuk untuk diperiksa. Dengan cara
tersebut akan memangkas pencarian pada tree dengan membatalkan jalur
pencarian yang memberikan nilai buruk. Berikut ini adalah algorithma branch and
bound yang dipergunakan dalam tugas akhir ini :
if (item_num > NumItems) then
Penjelasan dari algorithma branch and bound diatas adalah sebagai berikut :
Sistem akan memeriksa posisi item saat ini belum mencapai jumlah item
maka sistem akan menyimpan deretan solusi terbaik dari nilai uji solusi secara
berulang mulai satu sampai sejumlah item. Kemudian nilai profit terbaik diisi
dengan nilai uji profit dan nilai cost terbaik diisi dengan nilai uji cost.
Selain itu jika nilai uji cost ditambah dengan cost item saat ini belum
mencapai nilai cost yang diijinkan, jumlah jalur pemeriksaan ditambahkan,
kemudian nilai cost uji ditambahkan dengan cost item saat ini dan nilai profit
yang belum ditentukan dikurangkan dengan profit item saat ini.
Karena bekerja secara rekursif maka sub rutin BranchAndBound
dipanggil kembali. Kemudian nilai uji cost dikurangkan dengan nilai cost item
saat ini, begitu juga nilai uji profit dikurangkan dengan nilai item saat ini. Dan,
UnassignedProfit = UnassignedProfit +
Items[item_num].Profit
UnassignedProfit = UnassignedProfit –
Items[item_num].Profit
if (TestProfit + UnassignedProfit > BestProfit) then
ditentukan melebihi nilai profit terbaik, maka sub rutin BranchAndBound
dipanggil kembali.
3.5. Diagr am Alir Sistem
3.6. Flowchart Exhautive Search
3.7. Flowchart Branc And Bound
4.1. Perancangan Sistem
Perancangan antarmuka dibutuhkan untuk mewakili keadaan sebenarnya
dari aplikasi yang akan dibangun. Dan seperti developer visual lainnya,
Embarcadero RAD Studio sudah menyediakan berbagai macam komponen untuk
menghemat waktu pengembangan sesuai dengan kebutuhan developer. Berikut
akan disajikan perancangan antarmuka dari aplikasi yang akan dibangun :
4.1.1. Perancangan Form Utama
Gambar 4.1. Rancangan Form Utama
Rancangan form pada gambar 4.1 terdapat text box untuk menentukan
jumlah item dengan tombol spinner, text box untuk menentukan besaran cost
dengan tombol spinner, text box untuk cost minimal dan maksimal, text box untuk
profit minimal dan maksimal, tombol untuk membangkitkan bilangan acak
bound dan keduanya), string grid untuk menampilkan nilai-nilai knapsack yang
akan dicari nilai optimalnya, scroll box untuk menampilkan susunan kombinasi
nilai optimal metode exhaustive search dan branch and bound, panel untuk
informasi nilai optimal yang telah dicapai dan waktu komputasinya (baik
menggunakan metode exhaustive search dan branch and bound).
Selain itu juga terdapat tombol evaluasi untuk menampilkan form grafik,
tombol info untuk menampilkan informasi pembuat, tombol hitung untuk
menghitung nilai optimal knapsack berdasarkan metode yang dipilih user dan
tombol keluar untuk mengakhiri program.
4.1.2. Perancangan Form Grafik
Gambar 4.2. Rancangan Form Grafik
Rancangan form pada gambar 4.2 terdapat komponen chart sebanyak dua buah,
yaitu menampilkan grafik perbandingan nilai cost optimal yang diperoleh dari dua
metode, perbandingan nilai profit optimal dan tabel nilai BB Search dan
Exhaustive Search, serta tombol OK untuk keluar dari form grafik dan kembali ke
4.1.3. Rancangan Diagr am Kelas Global
Pada rancangan diagram kelas global seperti yang terlihat pada gambar
4.3 dibawah ini menunjukkan terdapat tiga kelas yang dipergunakan dalam
pembuatan aplikasi tugas akhir ini. Modul HitKnapsack dipergunakan untuk
instansiasi dan memanggil obyek dari kelas yang terdapat di modul
U_HitungKnapsack dan modul U_Laporan. Sedangkan modul
U_HitungKnapsack dipergunakan untuk mendeklarasikan dan mendefinisikan
kelas TBandForm dan modul U_Laporan dipergunakan untuk mendeklarasikan
dan mendefinisikan kelas TF_Laporan dapat dilihat pada gambar 4.3
4.1.4. Rancangan Diagr am Kelas Tband For m
Kelas TbandForm adalah kelas yang dirancang untuk menerima input
dari user, membangkitkan bilangan dalam permasalahan knapsack, melakukan
penghitungan nilai optimal dengan menggunakan metode branch and bound dan