PENGUJIAN PERANGKAT LUNAK DENGAN METODE PENCARIAN BERBASIS ALGORITMA
GENETIKA
Skripsi
Oleh Macia Hauna 1113091000065
PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS SAINS DAN TEKNOLOGI
UNIVERISTAS ISLAM NEGERI SYARIF HIDAYATULLAH JAKARTA
2017
Skripsi
Sebagai Salah Satu Syarat Untuk Memperoleh Gelar Sarjana Komputer (S.Kom)
Oleh Macia Hauna 1113091000065
PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS SAINS DAN TEKNOLOGI
UNIVERISTAS ISLAM NEGERI SYARIF HIDAYATULLAH JAKARTA
2017
ii
iv
PERNYATAAN ORISINALITAS Dengan ini saya menyatakan bahwa:
1. Skripsi ini merupakan hasil karya asli saya yang diajukan untuk memenuhi salah satu persyaratan memperoleh gelar Strata 1 di UIN Syarif Hidayatullah Jakarta.
2. Semua sumber yang saya gunakan dalam penulisan ini telah saya cantumkan sesuai dengan ketentuan yang berlaku di UIN Syarif Hidayatullah Jakarta.
3. Apabila di kemudian hari terbukti karya ini bukan hasil karya asli saya atau merupakan hasil jiplakan karya orang lain, maka saya bersedia menerima sanksi yang berlaku di UIN Syarif Hidayatullah Jakarta.
Jakarta, November 2017
Macia Hauna
v tangan di bawah ini:
Nama : Macia Hauna NIM : 1113091000065 Program Studi : Teknik Informatika Fakultas : Sains dan Teknologi Jenis Karya : Skripsi
demi pengembangan ilmu pengetahuan, menyetujui untuk memberikan kepada Universitas Islam Negeri Syarif Hidayatullah Jakarya Hak Bebas Royalti Noneksklusif (Non-exclesusive Royalty Free Right) atas karya ilmiah saya yang berjudul:
PENGUJIAN PERANGKAT LUNAK DENGAN METODE PENCARIAN BERBASIS ALGORITMA GENETIKA
beserta perangkat yang ada (jika diperlukan). Dengan Hak Bebas Royalti Noneksklusif ini Universitas Islam Negeri Syarif Hidayatullah Jakarta berhak menyimpan, mengalihmedia/ formatkan, mengelola dalam bentuk pangkalan data (database), merawat, dan mempublikasikan tugas akhir saya selama tetap mencantumkan nama saya sebagai penulis/ pencipta dan sebagai pemilik Hak Cipta. Demikian pernayataan ini saya buat dengan sebenarnya.
Jakarta, November 2017 Macia Hauna
(………)
vi
KATA PENGANTAR
Assalamu’alaikum Warahmatullah Wabarakatu.
Puji syukur penulis panjatkan kepada Allah SWT karena rahmat dan karunianya penulis dapat menyelesaikan penelitian hingga akhir penulisan skripsi. Proses penyelesaian skripsi ini tidak lepas dari berbagai bantuan, dukungan, saran dan kritik yang telah penulis dapatkan, oleh karena itu pada kesempatan ini penulis ingin mengucapkan terima kasih kepada:
1. Kedua orang tua penulis, bapak dan ibu atas segala doa, kasih sayang dukungan, pengertian dan nasehat yang tidak pernah lelah diberikan kepada penulis. Terima kasih sebanyak-banyaknya hingga saat ini penulis dapat menyelesaikan skripsi ini;
2. Kepada kakak penulis, Kacaca dan kepada keenam adik penulis, Savana, Fidau, Sacci, Runa, Dokhma dan Elena, yang selalu menyemangati dan menghibur penulis;
3. Bapak Dr. Agus Salim, M.Si., selaku Dekan Fakultas Sains dan Teknologi UIN Syarif Hdayatullah Jakarta;
4. Ibu Arini, MT., selaku ketua Program Studi Teknik Informatika, serta Bapak Feri Fahrianto, M.Sc. selaku sekretaris Program Studi Informatika;
5. Bapak Rizal Broer Bahaweres M.Kom., selaku Dosen Pembimbing I dan Ibu Siti Ummi Masruroh, M.Sc., selaku Dosen Pembimbing II yang telah membimbing, meluangkan waktu, memotivasi, memberi kritik dan saran yang membangun dari awal hingga penulis dapat menyelesaikan skripsi;
6. Seluruh Dosen, Staf Karyawan Fakultas Sains dan Teknologi, khusunya Program Studi Teknik Informatika yang telah memberikan bantuan dan kerjasama dari awal perkuliahan hingga sekarang.
7. Kepada sahabat-sahabat penulis, Resisca Audia Deyani, sahabat sepembimbingan dan senasib dari awal semester satu, yang selalu saling mendukung dan memberi semangat. Sahila Diniswara sahabat dari satu
vii
Tami, Rais dan Anto, penulis ucapkan terima kasih yang sebanyak- banyaknya atas kerja sama, susah-senang dan juga kenang-kenangan yang berharga dari awal masa perkuliahan hingga akhir.
Penulis mohon maaf atas segala kekurangan dan apabila ada salah kata bagi semua pihak. Penulis menyadari bahwa penulisan skripsi ini masih jauh dari kesempurnaan, namun penulis berharap skripsi ini dapat memberikan manfaat bagi penulis, pembaca, dan perkembangan ilmu pengetahuan khususnya di bidang Teknik Informatika.
Jakarta, November 2017
Macia Hauna
viii Nama : Macia Hauna
Program Studi : Teknik Informatika
Judul : Pengujian Perangkat Lunak Dengan Metode Pencarian Berbasis Algoritma Genetika
ABSTRAK
Tahap terkecil pengujian atau unit testing merupakan tahap awal pengujian setelah coding selesai dibangun. Pada tahap ini dibutuhkan sekumpulan test data untuk membentuk test case untuk pengujian. Proses perancangan sekumpulan data untuk pengujian disebut dengan test data generation. Menurut Mahadik & Thakore proses test data generation secara manual menghabiskan waktu sekitar 50% dari total waktu pembangunan perangkat lunak. Berdasarkan penelitian yang dilakukan menggunakan metode pencarian berbasis algoritm genetika dapat menghasilkan test case yang lebih optimal dengan waktu pengujian yang lebih efisien. Tujuan dari penelitian ini adalah melakukan pengujian secara otomatis menggunakan metode pencarian berbasis algoritma genetika. Menggunakan metode pencarian berbasis algoritma genetika menghasilkan 14 test case dalam waktu 30s atau 0.5 menit untuk kode program sebanyak 89 line of code. Berdasarkan parameter pengujian code coverage keberhasil pengujian adalah 78% dan parameter mutant analysis adalah 70%. Berdasarkan nilai akurasi dari kinerja mesin pencari maka didapatkan nilai akurasi sebesar 63%.
Kata kunci : metode pencarian, test data generation, test cases algoritma genetika
Jumlah Pustaka : 34 (Tahun 2011-2017)
Jumlah halaman : VI BAB + xvii halaman + 62 halaman + 14 lampiran
ix ABSTRACT
The smallest phase of testing or unit testing is the initial stage of testing after coding completed. At this stage it takes a set of test data to form a test case for testing. The process of designing a set of data for testing is called test data generation. According to MAhadik & Thakore manually generating test data is time consuming, it takes around 50% time of the total software life-cycle. Based on research conducted search based software testing using genetic algorithm can generate more optimal test cases with a more efficient testing time. The purpose of this research is to perform test data generation automatically using search based testing-genetic algorithm yields 14 test cases in 30s or 0.5 minutes for the program’s source code of 89 line of code. Based on coverage code parameter the testing result is 78% and the mutant analysis parameter is 70%. The value of the accuracy of search engine for performance testing the accuracy is 63%.
Keyword : search-based testing, test data generation, test cases, genetic algorithm
Reference : 34 (Year 2011-2017)
Pages : VI chapter + xvii pages + 62 pages + 14 attachments
x
DAFTAR ISI
LEMBAR PERSETUJUAN ... Error! Bookmark not defined.
LEMBAR PENGESAHAN ... Error! Bookmark not defined.
PERNYATAAN ORISINALITAS ... iv
PERNYATAAN PERSETUJUAN PUBLIKASI SKRIPSI ... v
KATA PENGANTAR... vi
ABSTRAK... viii
ABSTRACT ... ix
DAFTAR ISI ... x
DAFTAR GAMBAR ... xii
DAFTAR TABEL ... xiii
DAFTAR GRAFIK ... xiv
DAFTAR ISTILAH ... xv
DAFTAR LAMPIRAN ... xvi
BAB I PENDAHULUAN ... 1
1.1. Latar Belakang ... 1
1.2. Rumusan Masalah ... 5
1.3. Batasan Masalah ... 6
1.4. Tujuan Penelitian ... 6
1.5. Manfaat Penelitian ... 7
1.6. Metode Penelitian ... 7
1.7. Sistematika Penulisan ... 8
BAB II TINJAUAN PUSTAKA DAN LANDASAN TEORI ... 10
Pengujian Perangkat Lunak ... 10
2.1.1 Definisi Pengujian Perangkat Lunak ... 10
2.2. Unit Testing ... 11
2.1.1. Path Testing ... 11
2.3. Search Based Software Testing ... 12
2.4. Test data Generation... 14
2.5. Definisi Test data, Test cases dan Test Suites ... 15
2.6. EvoSuite ... 15
2.6.1. EvoSuite Test Suite Generation ... 16
xi
2.8.1. PIT Mutation Testing ... 19
2.9. CodePro AnalytiX ... 20
2.10. Framework JUnit ... 20
2.11. Triangle Program ... 21
2.12. Tinjauan Pustaka ... 22
BAB III METODOLOGI PENELITIAN ... 26
3.1. Kerangka Berfikir ... 26
3.2. Metode Pengumpulan Data ... 27
3.3. Metode Simulasi (Nomor 11-15 pada Gambar 3.1) ... 27
BAB IV ANALISA DAN IMPLEMENTASI SIMULASI ... 30
4.1. Analisa Source code ... 30
4.2. Pengujian Manual Menggunakan Framework JUnit ... 32
4.3. Pengujian Otomatis Menggunakan CodePro AnalytiX ... 33
4.4. Pengujian Otomatis Metode Pencarian Berbasis Algoritma Genetika ... 34
4.4.1. Code Pre-Processing ... 35
4.4.2. Proses Test Data Generation ... 39
4.4.3. Menghasilkan Test Case Menggunakan EvoSuite ... 45
4.4.4. Menghitung Nilai Precision dan Recall... 48
BAB V HASIL DAN PEMBAHASAN ... 49
5.1 Hasil Pengujian Manual dengan Framework JUnit ... 49
5.2 Hasil Pengujian Otomatis dengan CodePro AnalytiX ... 50
5.3 Hasil Pengujian SBST Menggunakan EvoSuite ... 52
5.4 Hasil Akhir Percobaan ... 54
BAB VI KESIMPULAN DAN SARAN... 58
6.1 Kesimpulan ... 58
6.2 Saran ... 59
DAFTAR PUSTAKA ... 60
LAMPIRAN ... 63
xii
DAFTAR GAMBAR
Gambar 1. 1 Level Pengujian ... 1
Gambar 1. 2 Grafik Biaya dan Tahap Pengujian ... 2
Gambar 1. 3 Interaksi Antara Metode Pencarian dan Pengujian ... 3
Gambar 1. 4 Grafik Publikasi SBST ... 3
Gambar 1. 5 Laporan Hasil Kinerja EvoSuite ... 4
Gambar 2. 1 V Model Siklus Pengujian ... 10
Gambar 2. 2 Siklus Unit testing ... 11
Gambar 2. 3 (a) struktur dasar if-then-else (b) struktur dasar loop ... 12
Gambar 2. 4 Test Data Generator Model ... 14
Gambar 2. 5 Cara Kerja EvoSuite... 17
Gambar 2. 6 Pseudocode Algoritma Genetika EvoSuite ... 17
Gambar 2. 7 Gambar Segitiga ... 21
Gambar 3. 1 Metodologi Penelitian ... 26
Gambar 4. 1 Arsitektur Pengujian Manual ... 32
Gambar 4. 2 Hasil Menjalankan Test Case Manual ... 32
Gambar 4. 3 Arsitektur Pengujian Otomatis ... 33
Gambar 4. 4 Hasil Menjalankan Test Case Otomatis ... 34
Gambar 4. 5 Arsitektur Pengujian Otomatis Dengan Metode Pencarian Berbasis Algoritma Genetika ... 34
Gambar 4. 6 Flowgraph Triangle ... 38
Gambar 4. 7 Tampilan EvoSuite Pada Eclipse ... 46
Gambar 4. 8 Proses Test Data Generation EvoSuite ... 47
Gambar 4. 9 Hasil Test cases Otomatis SBST ... 47
Gambar 4. 10 Hasil Menjalankan Test Case SBST ... 48
Gambar 5. 1 (a) Source Code Triangle (b) Test Case Manual ... 49
Gambar 5. 2 Hasil Mutant Analysis Test Case JUnit ... 50
Gambar 5. 3 (a) Source Code Triangle (b) Test Case Otomatis ... 51
Gambar 5. 4 Hasil Mutant Analysis Test Case Otomatis ... 52
Gambar 5. 5 (a) Source Code Triangle (b) Test Case Otomatis SBST ... 53
Gambar 5. 6 Hasil Mutant Analysis Test Case SBST ... 54
xiii
Tabel 2. 2 Klasifikasi EvoSuite ... 15
Tabel 2. 3 Klasifikasi JUnit ... 20
Tabel 2. 4 Test case Triangle ... 21
Tabel 2. 5 Studi Literatur ... 23
Tabel 4. 1 Detail Program Triangle ... 31
Tabel 4. 2: Proses Tokenizing 1 ... 35
Tabel 4. 3: Proses Tokenizing 2... 36
Tabel 4. 4: Proses Tokenizing 3... 36
Tabel 4. 5: Proses Tokenizing 4... 36
Tabel 4. 6: Proses Tokenizing 5... 37
Tabel 4. 7: Test Data ... 39
Tabel 4. 8: Populasi Awal ... 40
Tabel 4. 9: Evaluasi Nilai Fitness ... 41
Tabel 4. 10: Inverse Fitness ... 41
Tabel 4. 11: Nilai Probabilitas ... 42
Tabel 4. 12: Fitness Kumulatif ... 42
Tabel 4. 13: Kromosom Hasil Seleksi... 42
Tabel 4. 14: Populasi Baru Hasil Corssover ... 43
Tabel 4. 15: Keturunan Hasil Mutasi ... 44
Tabel 4. 16: Populiasi Generasi Baru ... 45
Tabel 4. 17: Metrik Evaluasi ... 48
Tabel 5. 1 Hasil Akhir Percobaan ... 54
xiv
DAFTAR GRAFIK
Grafik 5. 1 Hasil Perbandingan Test Cases ... 55 Grafik 5. 2 Hasil Perbandingan Waktu Pengujian ... 56
xv
LOC Line of code adalah setiap baris yang terdapat pada program Test data Nilai input untuk pengujian
Test Cases Serangkaian input data yang digunakan untuk menguji Test Suites Sekumpulasn test cases untuk mengeksekusi program Graph Representasi alur program
Node Bentuk lingkaran pada graph Edge Bentuk garis pada graph
CFG Control flow graph
Path Jalur pada CFG yang berpengaruh terhadap pengujian Kromosom kumpulan dari gen
Gen Nilai dari kromosom
Populasi Kumpulan dari kromosom-kromosom
Rank selection Memberikan nilai fitness pada setiap individu untuk seleksi Crossover Operator GA
Mutasi Operator GA untuk melakukan modifikasi kromosom CC Singkatan dari parameter pengujian code coverage MA Singkatan dari parameter pengujian mutant analysis Precision Nilai ketepatan mesin pencari
Recall Nilai keberhasilan mesin pencari menyelesaikan masalah Accuracy Nilai akurasi dari mesin pencari
xvi
DAFTAR LAMPIRAN
Lampiran 1- Source Code Triangle ... 63
Lampiran 2- Test Case Pengujian Otomatis SBST ... 66
Lampiran 3- Test Case Pengujian Otomatis ... 69
Lampiran 4- Test Case Pengujian Manual ... 74
Lampiran 5- Bobot Graph ... 75
Lampiran 6- Mutant Program Hasil PIT Mutation Test ... 76
1
Pengujian adalah proses mengeksekusi program dari sekumpulan input data sampel dan menganalisa hasil outputnya (Ali and Fairouz, 2015). Tujuan utama dalam melakukan pengujian adalah menemukan error, faults, failures dan incidents (Paul C. Jorgensen, 2014). Pengujian perangkat lunak atau software testing merupakan bagian dari software engineering life cycle yang mana dari mulai tahap analisa kebutuhan hingga tahap pemeliharaan selalu terkait dengan pengujian (Ali and Fairouz, 2015). Tahap terkecil pengujian atau sering disebut dengan unit testing merupakan tahap awal pengujian setelah coding selesai dibangun.
Sumber: (Paul C. Jorgensen, 2014), Software Testing A Craftman’s Approach 4𝑡ℎ Edition, pg. 12
Pada tahap unit test dibutuhkan sekumpulan test case yang berkaitan dengan behavior software, fungsinya untuk mengidentifikasi data masukan dan hasil yang dikeluarkan sudah sesuai dengan kebutuhan software (Paul C. Jorgensen, 2014, hal.
4). Proses perancangan test case untuk pengujian disebut dengan test data generation (Ali and Fairouz, 2015). Tujuan utama melakukan proses test data generation adalah menghasilkan test case yang dapat mencangkup keseluruhan code (Kuar and Goyal, 2011). Melakukan test data generation secara manual
Gambar 1. 1 Level Pengujian
2
UIN Syarif Hidayatullah Jakarta
membutuhkan waktu yang tidak sebentar, sekitar 50% waktu dihabiskan untuk menyelesaikan proses tersebut (Mahadik and Thakore, 2016). Banyaknya waktu yang dihabiskan untuk melakukan test data generation berdampak terhadap biaya pengujian yang akan dikeluarkan. Pada grafik di bawah menjelaskan, apabila bugs ditemukan semakin awal maka biaya yang akan dihabiskan semakin kecil, tapi jika bugs ditemukan setelah fase akhir, kemungkinan bugs yang ditemukan akan semakin banyak dan biaya akan semakin meningkat.
Gambar 1. 2 Grafik Biaya dan Tahap Pengujian
Sumber: (Kaczanowski, 2012), Practical Unit testing with JUnit and Mockito pg. 9
Berbagai pendekatan pengujian dilakukan untuk menyelesaikan masalah tersebut. Mulai dari penggunaan metode pengujian seperti Random Test Generation dan Search Based Techniques hingga tools untuk pengujian secara otomatis (Shamshiri et al., 2015).
Pada penelitian ini, penulis mencoba melakukan pendekatan penyelesaian masalah test data generation menggunakan metode pencarian (search-based techniques). Search-based technique atau search based optimization bekerja dengan merumuskan ulang permasalah sebagai ‘search problem’ yang dapat memberikan solusi yang optimal ataupun mendekati solusi optimal (Harman et al., 2012). Search-Based Software Testing (SBST) merupakan inti dari interaksi antara metode pencarian dan pengujian perangkat lunak. SBST dapat digunakan untuk mengindikasi cangkupan dari kode pemograman, sehingga menggunakan metode ini dapat menjadi pendekatan penyelesaian masalah pengujian yang lebih efektif (Mahadik and Thakore, 2016).
UIN Syarif Hidayatullah Jakarta Sumber: (SVV Lab, 2015) Mark Harman – Recent Advances in Search Based Software
Testing and Genetic Improvment
Berbagai penelitian membahas SBST sebagai pendekatan penyelesaian masalah pengujian. Tujuannya untuk mengefesiensikan waktu pengujian yang akan berdampak pada penghematan biaya selama pengujian. Berbagai publikasi terkait SBST sudah dimulai sejak tahun 1976 hingga saat ini.
Sumber: (Harman, Jia and Zhang, 2015), Achivement, Open Problem and Challenges For Search Based Software testing
Gambar 1. 3 Interaksi Antara Metode Pencarian dan Pengujian
Gambar 1. 4 Grafik Publikasi SBST
4
UIN Syarif Hidayatullah Jakarta
SBST diterapkan dengan penggunaan algoritma pencarian. Beberapa algoritma pencarian yang dapat digunakan adalah Hill Climbing, Simulated Annealing dan Genetic Algorithm (GA). Penulis akan menganalisa GA sebagai algoritma pencarian pada penelitian ini. Penulis memilih GA sebagai algoritma genetika karena beberapa penelitian menunjukan bahwa algoritma genetika dapat mengoptimasi proses perancangan test cases (Samatha, Chokkadi and Yogananda, 2012). Setelah menetukan metode dan algoritma pencarian, penulis akan melakukan simulasi menggunakan tool SBST yaitu EvoSuite.
EvoSuite merupakan tool SBST yang dirancang dengan menggabungkan metode pencarian dan GA (Shamshiri et al., 2015). Pada tahun 2016, EvoSuite memenangkan kompetisi SBST dengan mencapai nilai cangkupan pengujian tertinggi 1126.7 dari total nilai keseluruhan (Fraser and Arcuri, 2015). EvoSuite telah diterapkan beberapa kali untuk automatisasi test data generation.
Sumber: http://study.evosuite.org/2013/ISSTA2013
Pada gambar di atas EvoSuite diuji terhadap tiga pemograman: Option, Rational dan DocType. Parameter pengujian adalah branch coverage. Grafik pada gambar menunjukan EvoSuite dapat mencangkup pengujian lebih baik dibandingan dengan pengujian manual. Selain itu, penggunaan EvoSuite dapat mengefensiesi waktu pengujian. Beberapa penelitian pendukung lainnya juga telah menunjukan hasil pengujian dari EvoSuite. Diantaranya, Jason Ross Frier dalam thesis yang berjudul
“Genetic Algorithm as a Visible Method of Obtaining Branch Coverage”, Gambar 1. 5 Laporan Hasil Kinerja EvoSuite
UIN Syarif Hidayatullah Jakarta
menerapkan EvoSuite terhadap unit testing, Sharan Raj dalam thesis yang berjudul Comparing the Effectiveness of Automated Test Generation Tools EvoSuite dan Tpalus. Selain itu, Fraser & Arcuri dalam jurnalnya yang berjudul “A Large Scale Evaluation of Automated Unit Test Generation Using EvoSuite”, menerapkan EvoSuite untuk mengotomatisasi test data generation (Fraser and Arcuri, 2014).
Jurnal yang berjudul Random or Genetic Algorithm Search-Based for Object- Oriented Test Suite Generation, menerapkan dua teknik test data generation dan membandingkan hasil pengujian dengan parameter branch coverage (Shamshiri et al., 2015).
Berdasarkan hasil penjabar latar belakang tersebut, penulis akan membahas lebih lanjut dalam penelitian yang berjudul “Pengujian Perangkat Lunak Dengan Metode Pencarian Berbasis Algoritma Genetika” pada penelitian ini penulis akan menggunakan program Triangle sebagai studi kasus. Parameter pengujian yang akan dibandingkan adalah hasil test case, code coverage, mutant analysis dan waktu pengujian, waktu yang digunakan mengambil dari penelitian sebelumnya yang berjudul Comparative Anlaysis Statement, Branch, And Loop Coverage In Software Testing Using Genetic Algorithm oleh Khoirunissa, 2017 maksimal waktu pengujian yang akan penulis ambil adalah 420s atau 7 menit.
1.2. Rumusan Masalah
Perumusan masalah pada penelitian ini adalah:
1. Bagaimana cara kerja metode pencarian berbasis algoritma genetika dalam pengujian program Triangle?
2. Bagaimana hasil perbandingan antara test case manual dan test case otomatis dan test case otomatis menggunakan metode pencarian berbasis algoritma genetika dengan parameter code coverage dan mutant analysis?
3. Bagaimana hasil waktu pengujian menggunakan metode pencarian berbasis algoritma genetika?
4. Bagaimana hasil kinerja mesin pencari untuk melakukan pengujian dihitung berdasarkan rumus precision dan recall?
6
UIN Syarif Hidayatullah Jakarta
1.3. Batasan Masalah
Batasan masalah pada penelitian ini adalah:
1. Pengujian yang dilakukan merupakan pengujian tahap unit.
2. Penelitian ini menggunakan program Triangle sebagai studi kasus.
3. Tahapan penelitian yang dilakukan adalah membandingkan test case yang dibuat manual dengan JUnit, otomatis dengan CodePro Analytix dan otomatis SBST menggunakan EvoSuite.
4. Implementasi search-based testing dalam bentuk analisa dan simulasi penggunaan tool EvoSuite.
5. Menggunakan algoritma genetika sebagai algoritma pencarian, algoritma ini digunakan sebagai dasar perancangan tool EvoSuite.
6. Parameter perbandingan pengujian dilakukan dalam segi kecepatan maksimal waktu 400s atau 7 menit, code coverage dan mutant analysis.
7. IDE yang digunakan untuk menjalankan program adalah IDE Eclipse Neon.
8. Tool EvoSuite yang digunakan versi 1.0.5 dalam betuk plugin untuk IDE Eclipse.
9. Bahasa pemograman yang digunakan adalah Java.
10. Menggunakan satu algoritma pencarian.
11. Tahapan yang dilakukan adalah analisa pendekatan melakukan perancangan tool pengujian.
1.4. Tujuan Penelitian
Tujuan dari penelitian ini adalah:
1. Melakukan langkah analisa pengujian dengan metode pencarian berbasis algoritma genetika.
2. Melakukan simulasi menggunakan tool EvoSuite untuk perancangan test case secara automatis dengan metode pencarian berbasis algoritma genetika.
3. Membandingkan hasil test case manual, test case otomatis dengan test case otomatis menggunakan metode pencarian berbasis algoritma genetika dengan parameter code coverage dan mutant analysis.
UIN Syarif Hidayatullah Jakarta
4. Menghitung perbandingan persentase waktu pengujian terhadap pengujian manual, otomatis dan otomatis dengan metode pencarian berbasis algoritma genetika, dengan maksimal waktu pengujian (420s atau 7 menit).
5. Menghitung nilai precision dan recall untuk mengukur tingkat ketepatan dan keberhasilan metode pencarian.
1.5. Manfaat Penelitian
1.5.1. Manfaat Bagi Penulis
1. Memperdalam ilmu tentang pengujian perangkat lunak.
2. Dapat merancang test cases secara manual maupun otomatis.
3. Dapat melakukan analisa pada sebuah masalah dan mengambil langkah-langkah penyelesaiannya.
4. Menerapkan ilmu yang sudah didapat selama masa perkuliahan, khusunya dalam bidang software testing.
1.5.2. Manfaat Bagi Akademik
1. Mengetahui pencapaian dan kemampuan mahasiswa dalam melakukan penelitian.
2. Mengetahui kemampuan mahasiswa dalam menguasai materi perkuliahan.
1.5.3. Manfaat Bagi Pembaca
1. Memberikan pengetahuan terkait pengujian perangkat lunak dan dapat dijadikan referensi untuk penelitian selanjutnya.
1.6. Metode Penelitian
Pada penyusunan penelitian “Pengujian Perangkat Lunak Dengan Metode Pencarian Berbasis Algoritma Genetika” ini, penulis menggunakan metode pengumpulan data dan simulasi, berikut adalah langkah-langkah penelitian:
1.6.1 Metode Pengumpulan Data 1.6.1.1 Studi Pustaka
1.6.2 Metode Simulasi
Adapun tahapan yang dilakukan untuk melakukan simulasi pengujian adalah:
8
UIN Syarif Hidayatullah Jakarta
1.6.2.1 Analisa Source code 1.6.2.2 Code Pre-proccesing 1.6.2.3 Proses Pembentukan Graph 1.6.2.4 Proses Test data Generation 1.6.2.5 Menentukan Independent Path
1.6.2.6 Test data Berdasarkan Independent Path 1.6.2.7 Proses Inisialisasi Populasi
1.6.2.8 Perhitungan Evaluasi Nilai Fitness 1.6.2.9 Proses Seleksi Kromosom
1.6.2.10 Proses Crossover 1.6.2.11 Proses Mutasi
1.6.2.12 Pembentukan Populasi Generasi Baru
1.6.2.13 Generate Test Cases Menggunakan EvoSuite 1.7. Sistematika Penulisan
Secara sistematis penelitian ini ditulis ke dalam enam bab yang setiap babnya secara rinci akan menjelaskan:
BAB I PENDAHULUAN
Bab ini akan menjelaskan tentang latar belakang dalam melakukan penelitian. Penulis akan menjabarkan topik penelitian, masalah, dampak dari masalah dan solusi penyelesaian masalah.
BAB II TINJAUAN PUSTAKA DAN LANDASAN TEORI
Bab dua akan menguraikan landasan teori dari setiap materi yang berhubungan dengan penelitian ini, landasan teori yang akan dibahas terdiri dari pengujian perangkat lunak, unit testing, seach based testing, test data generation, dll. Pada bagian akhir dari bab ini penulis akan menjabarkan tinjauan pustaka dalam bentuk tabel studi literatur sejenis.
UIN Syarif Hidayatullah Jakarta
BAB III METODOLOGI PENELITIAN
Bab tiga menunjukan kerangka berfikir penelitian. Bab ini juga akan menjelaskan tentang metode penelitian bagaimana cara mendapakan data dan pengolahan data.
BAB IV ANALISA DAN IMPLEMENTASI SIMULASI
Bab ini akan menguraikan mengenai penyelesaian permasalahan dengan menggunakan metodologi yang dipilih, pengujian dengan metode pencarian berbasis algoritma genetika untuk test data generation dan melakukan simulasi menggunakan tool search based testing untuk menghasilkan test case secara otomatis.
BAB V HASIL DAN PEMBAHASAN
Bab ini akan menguraikan hasil analisa dari pengujian yang dilakukan secara manual, otomatis dan otomatis dengan metode pencarian berbasis algoritma genetika. Hasil analisa tersebut akan menunjukan kelebihan dan kekurangan dari metode pengujian yang digunakan.
BAB VI PENUTUP
Bab ini berisi tentang kesimpulan penelitian yang menjelaskan hasil akhir penelitian serta saran untuk perbaikan penelitian dari hasil analisa dan proses simulasi yang telah dilakukan untuk pengembangan atau penelitian selanjutnya.
10 BAB II
TINJAUAN PUSTAKA DAN LANDASAN TEORI
Pengujian Perangkat Lunak
2.1.1 Definisi Pengujian Perangkat Lunak
Pengujian adalah proses mengeksekusi sampel input data dari suatu produk (software) dan menganalisa hasil outputnya (Ali & Fairouz, 2015, hal.
23). Tujuan utama dalam melakukan aktifitas pengujian adalah untuk menemukan error, faults, failure dan incidents. Errors atau bugs adalah kesalahan yang terjadi saat proses coding. Fault adalah kesalahan yang menggabarkan hasil error dan failure terjadi saat kode program merespon ketika fault dieksekusi (Paul C. Jorgensen, 2014, hal. 3).
Sumber: (Ali and Fairouz, 2015), Software Testing Concept and Operations, hlm. 33
Gambar 2.1 menampilkan model V siklus pengujian. Dari gambar tersebut dapat dilihat setiap tahapan pembangunan perangkat lunak akan berintegrasi dengan pengujian. Pada penelitian ini, penulis berfokus pada tahap unit testing yang dilakukan setelah melakukan programming atau coding.
Berikut ini adalah gambar siklus tahap unit testing.
Gambar 2. 1 V Model Siklus Pengujian
UIN Syarif Hidayatullah Jakarta Sumber: https://onlinedigitaltechnology.com
Saat ini, hampir semua tahap pengujian sudah dilakukan secara otomatis dengan menggunakan berbagai tools pengujian. Otomatisasi pengujian perangkat lunak merupakan sebuah proses untuk mencapai satu atau lebih dari aktivitas pengujian perangkat lunak menjadi terstruktur atau otomatis. Manfaat utama dari pengujian perangkat lunak secara otomatis adalah mengurangi biaya kegagalan saat pengujian dalam mendeteksi error atau kesalahan.
2.2. Unit Testing
Menurut Paul dalam buku Software Testing A Craftman’s Approach, unit adalah bagian terkecil dari perangkat lunak yang dirancang, dibangun, dan diuji oleh satu atau sepasang programmer. Menjalankan proses unit testing dapat dilakukan dengan beberapa metode pengujian seperti Boundary Value Testing, Equivalence Class Testing, Decision Table Based Testing, Path Testing dan Control Flow Testing.
2.1.1. Path Testing
Path testing dilakukan dengan terlebih dahulu merancang graph dari source code program (Khan and Amjad, 2015). Untuk menjalankan path testing penguji perlu memperhatikan struktur yang membangun program tersebut. Berikut ini adalah contoh dua struktur dasar yang paling sering muncul dalam suatu program, yaitu kondisi if-then-else dan looping.
Gambar 2. 2 Siklus Unit testing
12
UIN Syarif Hidayatullah Jakarta
Gambar 2. 3 (a) struktur dasar if-then-else (b) struktur dasar loop
Sumber: (Paul C. Jorgensen, 2014), Software Testing A Craftsman’s Approach
Pada path testing, apabila node (bentuk lingkaran) dan edge (bentuk garis) pada graph program terlalui maka nilai path coverage nya adalah 100%, untuk menghitung nilai path coverage dapat menggunakan rumus:
Path Coverage = 𝑗𝑢𝑚𝑙𝑎ℎ 𝑝𝑎𝑡ℎ 𝑦𝑎𝑛𝑔 𝑑𝑖𝑒𝑘𝑠𝑒𝑘𝑢𝑠𝑖
𝑡𝑜𝑡𝑎𝑙 𝑖𝑛𝑑𝑒𝑝𝑒𝑛𝑑𝑒𝑛𝑡 𝑝𝑎𝑡ℎ 𝑥100………..…… (2.1) Nilai path coverage dapat dihitung apabila penguji sudah mengetahui independent path dari suatu graph. Nilai independent path didapatkan dengn rumus cyclometic complexity (CC). Berikut ini adalah rumus dari CC:
CC = C(G) = E – N + 2 ……… (2.2) E = jumlah edge
N = jumlah node
2.3. Search Based Software Testing
Metode berbasis pencarian Search Based Software Testing (SBST) merupakan bagian dari Search Based Software Engineering (Harman, Jia and Zhang, 2015).
SBST merupakan penggabungan antara metode pengujian dan metode pencarian (search technique).
Metode pencarian merupakan konsep pencarian sebuah informasi yang tersimpan dari berbagai sumber maupun dokumen tidak terstruktur dengan melakukan sebuah prosedur pencarian dan pengolahan data (Saha et al., 2014).
Pada penelitian ini, source code dianggap sebagai sumber dokumen untuk mencari informasi. Prosedur pencarian atau disebut dengan code pre-processing adalah
UIN Syarif Hidayatullah Jakarta
tahapan persiapan yang dilakukan untuk menyiapkan dokumen sebelum diolah, code pre-processing terdiri dari proses tokenizing.
Tokenizing adalah proses memecah souce code menjadi kata-kata (Stein, 2016). Pada penelitian ini proses tokenizing dilakukan untuk memisahkan source code dengan kata kunci yang menggambarkan struktur program karena kata kunci tersebut akan berpengaruh terhadap pengujian.
Hasil kinerja mesin pencarian dapat dinilai dengan menggunakan metrik evaluasi. Metrik evaluasi terdiri dari empat kata kunci yaitu true posistive (tp), true negative (tn), false positive (fp) dan false negative (fn) (Pang, Xue and Namin, 2013).
Tabel 2. 1 Metrik Evaluasi
Test Cases True Effective True Non-Effective
Predicted Effective tp fp
Predicted Non-Effective fn tn
Berdasarkan metrik evaluasi akan didapatkan nilai precision, recall dan accuracy. Precision adalah tingkat ketepatan antara informasi yang dicari dengan hasil pencarian yang diberikan oleh mesin pencari dan recall adalah tingkat keberhasilan dari mesin pencari dalam menemukan kembali sebuah informasi (Kausar, Nasar and Singh, 2013). Accuracy adalah tingkat kedekatan antara nilai precision dengan nilai aktual (Pang, Xue and Namin, 2013).
Berikut ini adalah rumus ketiga nilai tersebut:
Precision = 𝑡𝑝
𝑡𝑝+𝑓𝑝 ………. (2.3)
Recall = 𝑡𝑝
𝑡𝑝+𝑓𝑛 ………... (2.4)
Accuracy = 𝑡𝑝+𝑡𝑛
𝑡𝑝+𝑡𝑛+𝑓𝑝+𝑓𝑛 ……… (2.5)
Membahas tentang SBST sama dengan membahas berbagai cara kerja algoritma pencarian. Algoritma pencarian digunakan sebagai teknik optimasi untuk melakukan test data generation dan sebagai penyelesaian masalah optimasi yang ada di software enginnering (Mahadik and Thakore, 2016). Algoritma pencarian ini terdiri dari: Hill Climbing, Algoritma Genetika, Algoritma Semut, Simulated
14
UIN Syarif Hidayatullah Jakarta
Annealing, Tabu Search dan lain-lain. Pada umumnya, terdapat dua syarat yang dibutuhkan untuk mengimplementasikan algoritma pencarian, yaitu: representation dan fitness function (McMinn, 2011). Representation yang dimaksud adalah representasi masalah dan fungsi fitness untuk mengevaluasi solusi. Keuntungan dari penggunaan algoritma pencarian adalah efesiensi dari segi cangkupan uji dan waktu pengujian.
2.4. Test data Generation
Test data generation adalah proses merancang sekumpulan data untuk melakukan pengujian terhadap perangkat lunak yang baru dibangun maupun memperbaiki perangkat lunak yang sudah ada (Ali & Fairouz, 2015, hal. 143).
Sumber: https://en.wikipedia.org/wiki/Test_data_generation
Dasar untuk menghasilkan test data adalah dengan mengubah source code program menjadi control flow graph (Kumar, Singh and Gopal, 2013). Berikut ini adalah 4 tahapan melakukan proses test data generation:
1. Membangun control flow graph (CFG) dari program yang akan diuji.
2. Menentukan target path.
3. Proses mengeksekusi test case.
4. Hasil dari eksekusi test case.
Apabila pemograman yang diuji hanya terdiri dari beberapa baris atau line of code (LOC) proses generate test data akan menjadi lebih mudah. Tapi, jika sebaliknya maka proses generate test data hanya akan menghabiskan waktu.
Gambar 2. 4 Test Data Generator Model
UIN Syarif Hidayatullah Jakarta
2.5. Definisi Test data, Test cases dan Test Suites
Test Data adalah input data yang digunakan untuk menguji
Test Case adalah serangkaian input data yang mengidentifikasi perilaku program (Paul C. Jorgensen, 2014, hal. 4)..
Test Suite merupakan sekumpulan test cases yang digunakan untuk menguji program, test suite membantu mengeksekusi pengujian dan melaporkan hasil eksekusi.
2.6. EvoSuite
EvoSuite adalah tool search-based testing yang dapat digunakan untuk menghasilkan test suites secara automatis. EvoSuite menggunakan metode pendekatan berbasis pencarian yang menghasilkan populasi dari test suites, (Fraser and Arcuri, 2011).
EvoSuite dapat digunakan untuk bahasa pemograman Java, tool ini secara otomatis menghasilakn test suites untuk class Java, EvoSuite dapat menargetkan berbagai cangkupan yang berbeda seperti branch coverage, line coverage, output- input coverage dll. Selain itu, EvoSuite dapat secara otomatis digunakan untuk mendekteksi kesalahan seperti broken code (kode yang rusak).
Tabel 2. 2 Klasifikasi EvoSuite Prasyarat
Statik atau Dinamik Pengujian dinamik pada Java class
Tipe Perangkat Java classes
Jenis Pengujian Unit testing pada program Java
Lingkup penggunaan Seluruh lingkungan pengembangan Java
Kebutuhan Pengetahuan JUnit unit testing untuk Java Kebutuhan pengalaman Pengetahuan dasar unit testing Input dan Output
Input Bytecode target class dan dependecies
Output JUnit test cases (versi 3 atau 4)
16
UIN Syarif Hidayatullah Jakarta
Interaksi Dapat digunakan pada commandline,
Eclipse plugin, Intellij plugin dan Maven
Panduan pengguna Manual verifikasi dari assertions untuk kesalahan fungsi
Sumber Informasi http://evosuite.org
Jenis Perangkat Prototype dalam pengembangan
Teknologi EvoSuite Metode pencarian keseluruhan test suites generation
Informasi Tool
Perizinan Lesser GPL V.3
Akses Open source
Pendukung Tidak ada
2.6.1. EvoSuite Test Suite Generation
EvoSuite menggunakan pendekatan evolusioner (algoritma genetika) untuk menghasilkan test suites, dengan membangkitkan kandidat individu (kromosom) menggunakan operator genetika yang terinspirasi dari teori evolusi alam (selection, crossover dan mutation). Kromosom tersebut akan berevolusi secara berulang-ulang untuk mencari solusi terbaik dengan menghasilkan cangkupan uji yang optimal dan membentuk test suites terbaik (Fraser and Arcuri, 2015). Berikut ini adalah langka-langkah cara kerja EvoSuite:
1. Membangkitkan secara acak sekumpulan test suite sebagai kandidat awal (kromosom)
2. Selanjutnya, test suite yang sudah dipilih secara acak akan berevolusi/
dikembangkan menggunakan algoritma genetik.
3. EvoSuite menghasilkan test suite yang optimal dengan cangkupan uji yang maksimal (Chitirala, 2015, hal. 4)
UIN Syarif Hidayatullah Jakarta Sumber: (Fraser and Arcuri, 2011), Evolutionary Generation of Whole Test Suites
2.6.2. Algoritma Genetika EvoSuite
Pada algoritma genetika populasi kromosom berkembang dengan menggunakan operasi genetika yaitu crossover dan mutasi, yang mana setiap kromosom mewakili solusi masalah yang mungkin terjadi (Fraser and Arcuri, 2011). Berikut ini adalah pseudocode dari algoitma genetika EvoSuite:
Sumber: (Fraser and Arcuri, 2013),Whole Test Suites Generation
Gambar 2. 5 Cara Kerja EvoSuite
Gambar 2. 6 Pseudocode Algoritma Genetika EvoSuite
18
UIN Syarif Hidayatullah Jakarta
Berdasarkan gambar 2.6 di atas berikut ini adalah tahapan algoritma genetika untuk melakukan proses generate test data:
1. Representasi current_population. Representasi populasi awal dipilih secara acak (baris ke-1)
2. Proses seleksi kromosom. Pilih dua parent atau induk dengan metode rank selection (baris ke-5).
3. Selanjutnya tetapkan nilai crossover probabiliti dan melakukan proses crossover terhadap induk yang terpilih (baris ke-6).
4. Hasil proses crossover selanjutnya dilakukan proses mutasi dengan menentapkan nilai mutasi probabiliti (baris ke-10).
5. Dapatkan populasi terbaik (baris ke-24).
6. Ulangi tahap 1-5 sampai mendapatkan hasil yang maksimum (baris ke-25).
2.7. Code Coverage
Evaluasi cangkupan kode adalah masalah identifikasi bagian dari sebuah program yang dijalankan. Pada umumnya code coverage digunakan untuk mengevaluasi kecangkupan uji test case terhadap kode program, menilai kualitas test case dan menganalisa pengukuran hasil test case (Ma et al., 2015). Evaluasi menggunakan code coverage terdiri dari beberapa bagian seperti branch coverage dan statement coverage (Chen et al., 2013). Melakukan evaluasi code coverage membutuhkan penggambaran struktur program, misalnya untuk branch coverage dipilih if-condition dari kode program dan dilakukan pengujian.
2.7.1. Eclemma
Eclemma adalah tool pengujian otomatis yang akan digunakan pada penelitian ini. Eclemma adalah tool yang digunakan untuk melakukan pengujian cangkupan (code coverage) terhadap test cases yang sudah dibuat. Eclemma bersifat open source untuk bahasa pemograman Java dan dapat digunakan sebagai plugin Eclipse. Pada penelitian ini Eclemma
UIN Syarif Hidayatullah Jakarta
digunakan sebagai tool untuk menguji test case dengan parameter code coverage (CC).
2.8. Mutant Analysis
Mutant Analysis merupakan suatu metode yang digunakan untuk mengevaluasi kumpulan test case dalam mendeteksi suatu error atau kesalahan (Fraser and Zeller, 2012). Menurut Paul C. Jogersen dalam buku Software Testing Craftsma’s Approach mutant analysis adalah merancang suatu program dengan memasukkan mutant (memodifikasi bagian program) sehingga terbentuk suatu mutant program.
Apabila test case dapat mengasilkan output yang tidak sesuai dengan output seharusnya, maka mutant terbunuh (killable) (Chen et al., 2013).
Mutant analysis dapat dihitung menggunakan rumus mutant score (MS).
MS = 𝑚𝑡𝑎𝑛 𝑦𝑎𝑛𝑔 𝑡𝑒𝑟𝑑𝑒𝑡𝑒𝑘𝑠𝑖
𝑠𝑒𝑙𝑢𝑟𝑢ℎ 𝑚𝑢𝑡𝑎𝑛𝑡 𝑋100%……… (2.6)
Pada penelitian ini penulis akan menggunkan tool mutant analysis yaitu PIT Mutation Test. Tool ini akan digunakan untuk menguji test case yang telah dibuat secara manual dan otomatis.
Contoh perubahan program menjadi mutant program:
if (a<b) { mutant program if (a>=) { a=a-b; a=a+b;
else else b=b-a; b=a+b;
Dari contoh di atas, perubahan yang terjadi adalah a<b menjadi a>= b dan operator (–) menjadi (+)
2.8.1. PIT Mutation Testing
PIT Mutation Testing adalah tool automatis untuk membuat program mutant, yang selanjutnya test case yang sudah dibuat akan diuji dengan parameter mutant analysis. Pada penelitian ini, penulis akan menggunakan tool ini untuk mendeteksi banyaknya mutant yang dimasukan ke dalam program dan mendapatkan hasil evaluasi test cases dengan menghitung MS.
20
UIN Syarif Hidayatullah Jakarta
2.9. CodePro AnalytiX
CodePro AnalytiX adalah tool automatis untuk melakukan test data generation, tool ini dirancang oleh perusahaan Google dan beredar secara open source (Galler and Aichernig, 2014). CodePro AnalytiX dapat diintegrasikan terhadap Rational Developer, IBM WebSphere Studio dan Eclipse. Pada penelitian ini penulis menggunakan CodePro AnalytiX sebagai plugin eclipse. CodePro AnalytiX digunakan untuk pengujian terhadap bahasa pemograman Java. CodePro AnalytiX dapat digunkan untuk:
Menghasilkan test input data untuk pengujian
Mengeksekusi program
Validasi hasil
Menghasilkan JUnit Test Cases.
2.10. Framework JUnit
JUnit adalah sebuah framework pengujian java yang bersifat open source yang digunakan untuk menulis dan menjalankan pengujian perangkat lunak secara berulang-ulang (Ali & Fairouz, 2015, hal. 342). JUnit termasuk ke dalam oracle testing tools. Untuk menggunakan JUnit pengujian harus menambahkan file.jar ke dalam library project. Berikut ini adalah klasifikasi dari JUnit.
Tabel 2. 3 Klasifikasi JUnit JUnit
Sumber Freeware
Website resmi http://www.junit.org
Akses Open source
Target bahasa Java
Bahasa Unit testing
Tahap Pengujian Oracle
UIN Syarif Hidayatullah Jakarta
2.11. Triangle Program
Triangle adalah program yang digunakan untuk mengklasifikasikan segitiga, dalam penelitian ini disebut program Triangle. Masukan dari program ini adalah tiga buah nilai dari setiap sisi segitiga (S1, S2, S3), keluaran dari program ini adalah klasifikasi bentuk segitiga seperti segitiga siku-siku, segitiga sembarang, segitiga sama kaki dan segitiga sama sisi. Program ini sering dijadikan sebagai studi kasus pengujian perangkat lunak dalam berbagai penelitian (Paul C. Jorgensen, 2014, hal. 18). Keuntungan menggunakan program ini adalah program ini relatif sederhana, mudah dipahami dan mempunyai struktur logika yang cukup rumit sehingga dapat mewakili hampir semua konsep.
Untuk menguji program, penulis merancang test case sebagai berikut:
Tabel 2. 4 Test case Triangle Test cases
(TC)
Input Data
Hasil S1 S2 S3
TC1 3 4 5 segitiga siku-siku
TC2 5 8 6 segitiga sembarang
TC3 7 3 7 segitiga sama kaki
TC4 10 10 10 segitiga sama sisi
TC5 0 0 0 bukan segitiga
Gambar 2. 7 Gambar Segitiga
22
UIN Syarif Hidayatullah Jakarta
2.12. Tinjauan Pustaka
Pada bagian tinjauan pustaka penulis mengumpulkan studi literatur sejenis yang penulis gunakan sebagai acuan penelitian. Tujuannya adalah untuk mendalami materi, mengambil kesimpulan, melihat kekurangan, dan kelebihan dari penelitian sebelumnya untuk dapat menghasilkan penelitian yang lebih baik. Pada penelitian sejenis ini, penulis akan menekankan pada metode yang digunakan, kelebihan dan kekurangannya. Berikut ini adalah pemaparan dari beberapa literatur sejenis (Tabel 2.6):
UIN Syarif Hidayatullah Jakarta
Tabel 2. 5 Studi Literatur
Judul Tahun
Pengujian Perangkat Lunak
Metode Hasil Kelebihan Kekurangan
Manual Otomatis SBSE Comparing The
Effectiveness of Automated Test Generation Tools
“EvoSuite” and “Tpalus”
(Chitirala, 2015)
2015 - Unit
Testing
EvoSuite lebih mudah digunakan dan memberikan nilai cangkupan yang lebih tinggi sedangkan Tpalus memberikan nilai 10% lebih besar untuk parameter mutant analysis.
Melakukan
perbandingan dengan dua tools yang berbeda untuk
melakukan unit testing
EvoSuite digunakan sebagai plugin Maven sehingga
membutuhkan syntax commandline yang lebih sulit digunakan.
Genetic Algorithm As A Visible Method of Obtaining Branch Coverage
(Frier, 2017)
2017 - - Unit
Testing
Menggunakan SBST
terhadap program yang terdiri dari 292 LOC dan 170 branch dapat mencangkup 62%, 66% dan 61% untuk 3x running. Parameter yang digunakan adalah branch coverage.
Menguji 22 class dari berbagai program dengan dengan parameter branch coverage.
Hanya menggunakan satu parameter pengujian.
Whole Test Suite Generation (Fraser and Arcuri, 2013)
2013 - - Unit
Testing
Hasil kinerja EvoSuite dengan metode Search Based Testing dapat mencangkup pengujian yang lebih baik dengan parameter branch coverage.
Melakukan perbandingan tool pengujian lainnya.
Hanya diujikan pada satu pemograman sederhana terdiri dari 22 LOC
24
UIN Syarif Hidayatullah Jakarta
A Process Web
Application Testing Using TAO Tool Search Based Genetic Algorithm (Sudheer, Sharma and Raju, 2016)
2016 - OOP
Testing
Penggabungan tools TAO dan Selenium Web Testing dengan meode search-based untuk proses pengujian otomatis terhadap Web Application
Melakukan pengujian otomatis terhadap web application dengan menggabungkan beberapa tools
Pegujian yang dilakukan tergolong kompleks karena menggunakan web application sebagai studi kasus dan membutuhkan tools lebih dari satu Effective Program
Analyses for Automated Software Testing and Error Diagnosis (Zhang, 2014)
2014 - - Unit
Testing
Tool Palus dapat menghasilkan uji cangkupan yang lebih tinggi dan mendeteksi bugs lebih banyak.
Melakukan perbandingan beberapa tool untuk melakukan pengujian.
Tidak menggunakan metode search based testing.
Pengujian Perangkat Lunak Menggunakan Metode Pencarian Berbasisi Algoritma Genetika
Penulis (2017)
2017 Unit
Testing
Pengujian menggunakan metode pencarian berbasis algoritma genetika dapat menghasilkan test case yang lebih optimal. Simulasi dilakukan dengan tool EvoSuite terhadap source code Triangle menghasilkan 14 test case.
Melakukan analisa cara kerja algoritma genetika terhadap source code program.
Tidak melakukan perbandingan algoritma dan tidak membuat tool pencarian
UIN Syarif Hidayatullah Jakarta
Berdasarkan tabel 2.5 studi literatur penulis menjabarkan 5 studi literatur sejenis yang penulis gunakan sebagai acuan penelitian, yang pertama ada Chitalar dalam thesisnya yang berjudul Comparing The Effectiveness of Automated Test Generation Tools “EvoSuite” dan “Tpalus” pada penelitiannya Chitalara melakukan perbandingan dua tools dalam melakukan generate test data secara otomatis. Parameter yang digunakan adalah mutant analysis, branch coverage dan line coverage. Hasilnya tool EvoSuite memiliki nilai cangkupan yang lebih besar dengan parameter branch dan line coverage, sedangkan dengan parameter mutant analysis Tpalus 10% lebih besar.
Penelitian kedua oleh Frier dengan judul Genetic Algorithm As A Visible Method of Branch Coverage hasil penelitiannya adalah dengan menggunakn metode SBST dapat dihasilkan uji cangkupan yang lebih tinggi dengan parameter yang digunakan adalah branch coverage.
Selanjutnya ada Fraser dan Arcuri dalam jurnal Whole Test Suite Generation hasilnya menunjukan metode SBST menggunakan tool EvoSuite memberikan uji cangkupan yang lebih baik dengan parameter pengujian branch coverage.
Penelitian keempat oleh Sharma dkk, penelitian ini menerapkan metode SBST yang dilakukan terhadap object oriented programming menghasilkan JUnit test script secara otomatis.
Penelitian terakhir oleh Zhang dengan judul Effectiveness Program Anlyses for Automated Software Testing and Error Diagnosis melakukan percobaan terhadap beberapa tools automated testing dan didapatkan bahwa tool Palus menghasilkan uji cangkupan yang lebih tinggi dan mendeteksi bugs lebih banyak.
26 BAB III
METODOLOGI PENELITIAN
3.1. Kerangka Berfikir
Gambar 3. 1 Metodologi Penelitian
UIN Syarif Hidayatullah Jakarta
3.2. Metode Pengumpulan Data
Sebagai landasan dalam penyusunan skripsi ini penulis melakukan pengumpulan data yang terkait dengan penelitian seperti landasan teori, metodologi penulisan, proses analisa dan implementasi dan literatur sejenis yang menjadi acuan penelitian. Metode pengumpulan data yang dilakukan oleh penulis adalah studi pustaka.
Penulis melakukan studi pustaka dengan cara mengumpulkan data-data dan segala bentuk informasi yang memiliki keterkaitan dengan penelitian. Penulis membaca dan mempelajari buku-buku, jurnal-jurnal penelitian, baik cetak maupun secara online dari internet. Referensi-referensi terkait dari hasil studi pustaka tersebut penulis gunakan untuk mengidentifikasi masalah dan dasar dari penulisan penelitian ini. Daftar referensi yang digunakan pada penelitian ini dapat dilihat pada bagian daftar pustaka.
3.3. Metode Simulasi (Nomor 11-15 pada Gambar 3.1)
Berikut ini penulis akan menjelaskan tahapan metode pencarian berbasis algoritm genetika:
1. Analisa Source code
Program yang akan diujikan pada penelitian ini adalah program Triangle, untuk melakukan pencarian, source code program dianggap sebagai sebuah dokumen yang terdiri dari LOC yang memiliki informasi seperti class, method, if-condition dan while.
2. Code Pre-Processing (Nomor 12 pada Gambar 3.1) 2.1. Tokenizing
Tokenizing adalah tahapan memecah source code Triangle menjadi kata-kata yang diperlukan untuk pengujian. Pada penelitian ini kata kunci yang penulis cari adalah method, if-condition dan while.
2.2. Proses Pembentukan Graph
Setelah mendapatkan kata kunci yang dibutuhkan, penulis akan membentuk graph dari source code tersebut.
28
UIN Syarif Hidayatullah Jakarta
3. Test data Generation dengan Algoritma Genetika (Nomor 13 dan 14 pada Gambar 3.1)
3.1. Menentukan Independent Path
Setelah terbentuk sebuah graph, penulis menentukan independent path dengan terlebih dahulu menghitung cyclometix complexity (CC), hasil nilai CC menunjukan berapa banyak path yang ada pada graph Triangle
3.2. Test Data Berdasarkan Independent Path
Berdasarkan banyaknya path yang ada, penulis membuat test data untuk menguji path tersebut, test data yang digunakan berupa nilai integer dari S1, S2 dan S3. Setelah memberikan nilai input, penulis menghitung nilai path coverage menggunakan rumus 2.1. Path dengan nilai tertinggi akan terpilih menjadi target path pengujian.
3.3. Proses Inisialisai Populasi
Tahap ini bertujuan untuk membangkitkan populasi awal untuk menjalankan proses algoritma genetika. Pada tahap ini, penulis memilih populasi awal secara acak, populasi awal yang terpilih harus memiliki nilai path coverage di atas 20% (Satrio, Saputra and Rachmadi, 2017).
3.4. Perhitungan Evaluasi Nilai Fitness
Setiap kromosom yang telah terbentuk pada tahap inisialisasi populasi, selanjutnya dihitung nilai fitness dari kromosom tersebut. Nilai fitness pada penelitian adalah jumlah bobot dari tiap path. Bobot nilai yang digunakan diambil dari penelitian sebelumnya.
3.5. Proses Seleksi Kromosom
Proses seleksi kromsom ini dilakukan untuk menentukan induk terbaik yang selanjutnya akan digunakan pada proses crossover dan mutasi. Induk terbaik adalah induk yang memiliki nilai kumulatif fitness terbaik.
3.6. Proses Crossover
Proses ini bertujuan untuk membuat individu yang lebih baik, tahap awal pada proses ini adalah menentukan nilai probabilitas crossover (𝑃𝑐)
= ¾ atau 0.75 setelah menentukan nilai probabilitas, penulis
UIN Syarif Hidayatullah Jakarta
membangkitkan nilai acak R[i] dengan batasan nilai 1-0, apabila nilai tersebut R[i] < (𝑃𝑐) maka lakukan crossover.
3.7. Proses Mutasi
Proses mutasi pada penelitian ini menggunakan metode insertion mutation. Tahapan awal adalah menghitung panjang gen pada populasi (total gen). Selanjutnya memilih posisi gen yang dimutasikan dengan membangkitkan bilangan acak antara 1 sampai total gen (1-30), penulis menentukan probabilitas mutasi (𝑃𝑚) = 0,1. Apabila R[i] < (𝑃𝑚) maka lakukan mutasi.
3.8. Pembentukan Populasi Generasi Baru
Pembentukan populasi generasi baru dilakukan dengan menghitung ulang nilai fitness dari hasil keturunan mutasi, keturunan tersebut selanjutya diurutkan berdasarkan nilai fitness tertinggi.
30 BAB IV
ANALISA DAN IMPLEMENTASI SIMULASI
4.1. Analisa Source code
Program yang akan digunakan sebagai studi kasus adalah program Triangle atau program yang digunakan untuk mengklasifikasikan bentuk segitiga. Program ini ditulis dalam bahasa pemograman Java menggunakan IDE Eclipse Neon.
Berikut ini source code dari program Triangle:
1 import java.io.*;
2
3 //Class pertama 4 class Triangle { 5
6 // Stores the length of each side of the Triangle object. (atribut) 7 private int side1, side2, side3;
8
9 //Method konstruktor dengan parameter int s1, int s2, int s3 10 public Triangle (int s1, int s2, int s3) {
11 side1 = s1;
12 side2 = s2;
13 side3 = s3;
14 } 15
16 //Method fungsi untuk menguji segitiga siku-siku.
17 public boolean is_right () {
18 if (((side1*side1) == ((side2*side2) + (side3*side3))) ||
19 ((side2*side2) == ((side1*side1) + (side3*side3))) ||
20 ((side3*side3) == ((side1*side1) + (side2*side2)))) 21 return true;
22 else
23 return false;
24 } 25
26 //Method fungsi untuk menguji segitiga sembarang.
27 public boolean is_scalene () {
28 if ((side1 != side2) && (side1 != side3) && (side2 != side3)) 29 return true;
30 else
31 return false;
32 } 33
34 //Method fungsi untuk menguji segitiga sama kaki.
35 public boolean is_isosceles () {
36 if (((side1 == side2) && (side1 != side3)) ||
37 ((side1 == side3) && (side1 != side2)) ||
38 ((side2 == side3) && (side2 != side1))) 39 return true;
40 else
41 return false;
42 } 43
44 //Method fungsi untuk menguji segitiga sama sisi.
45 public boolean is_equilateral () {
UIN Syarif Hidayatullah Jakarta 46 if ((side1 == side2) && (side1 == side3))
47 return true;
48 else
49 return false;
50 } 51 } 52
53 //Class kedua
54 class Test_Triangle { 55
56 public static void main (String[] args) throws IOException { 57
58 // Declare stdin so data can be read from input.
59 DataInputStream stdin = new DataInputStream (System.in);
60
61 // loop exits when the user response is "n"
62 String user_response = "y";
63 while (!user_response.equals("n")) { 64
65 // Ask user for 3 dimensions of triangle.
66 System.out.println ("\nEnter side1 length: ");
67 int side1 = Integer.parseInt (stdin.readLine());
68
69 System.out.println ("Enter side2 length: ");
70 int side2 = Integer.parseInt (stdin.readLine());
71
72 System.out.println ("Enter side3 length: ");
73 int side3 = Integer.parseInt (stdin.readLine());
74
75 // Now use these values to create a Triangle object.
76 Triangle tri = new Triangle (side1,side2,side3);
77
78 // Determine what kind of triangle it is.
79 System.out.println ("\nIs triangle right-angle? "+tri.is_right());
80 System.out.println ("Is triangle scalene? "+tri.is_scalene());
81 System.out.println ("Is triangle isosceles? "+tri.is_isosceles());
82 System.out.println ("Is triangle equilateral? "+tri.is_equilateral());
83 // Ask user if they want to continue.
84 System.out.println ("\nDo you want to examine more triangles?");
85 System.out.println ("(type 'y' for yes or 'n' for no)");
86 user_response = stdin.readLine();
87 } 88 } 89 }
Berdasarkan hasil analisa source code diatas, maka didapatkan detail program sebagai berikut:
Tabel 4. 1 Detail Program Triangle
Project #Class #Branches #Loop #Method LOC
Triangle 2 5 1 6 89
32
UIN Syarif Hidayatullah Jakarta
4.2. Pengujian Manual Menggunakan Framework JUnit
Pengujian secara manual dilakukan dengan membuat skenario test case. Pada penelitian ini penulis akan membuat skenario test case menggunakan framework JUnit. Test case manual dirancang sebagai pembanding untuk test case SBST dan otomatis. Test case dirancang dengan mengabaikan metode pencarian dan hanya berdasarkan method yang ada pada kode Triangle. Penulis menggunakan IDE Eclipse Neon untuk merancang JUnit.
Berikut ini adalah tahapan merancang test case secara manual dengan JUnit:
1. Pada file Triangle.java klik kanan pilih New-Junit test case
2. Selanjutnya beri nama file test case, penulis memberi nama file TringleTest.java
3. Pilih New JUnit4 Test.
4. Merancang skenario test case.
5. Jalankan skenario test case yang sudah dibuat.
Menggunakan JUnit, penulis menghasilkan 4 test case berdasarkan method program Triangle. Keempat test case tersebut berjalan dengan baik dan tidak terdapat error.
Gambar 4. 2 Hasil Menjalankan Test Case Manual Gambar 4. 1 Arsitektur Pengujian Manual
UIN Syarif Hidayatullah Jakarta
Pengujian manual yang dilakukan dari tahap membuat test case hingga dilakukan pengujian terhadap kode Triangle dengan test case tersebut menghabiskan waktu 300s atau lima menit.
4.3. Pengujian Otomatis Menggunakan CodePro AnalytiX
Menggunakan CodePro AnalytiX penulis mencoba membuat test case secara otomatis. CodePro AnalytiX adalah tool pengujian otomatis yang tidak menggunakan metode SBST. Sehingga test case yang dihasilkan akan berbeda, untuk menggunakan tool ini penulis melakukan:
1. Pada file Triangle.java klik kanan dan pilih CodePro Tool.
2. Selanjutnya pilih ‘Generate Test Cases.’
3. Setelah proses menghasilkan test case selesai akan terbentuk folder baru bernama TriangleClassifierTest
4. Di dalam folder terbagi menjadi 3 file test cases, penulis hanya menggunakan satu file test case dengan nama TriangleTest.java
Gambar 4. 3 Arsitektur Pengujian Otomatis
34
UIN Syarif Hidayatullah Jakarta
Berikut ini adalah hasil menjalankan test case otomastis dengan CodePro AnalytiX:
Dari gambar di atas dapat dilihat bahwa menghasilkan test case otomatis dengan CodePro AnalytiX dapat menghasilkan 17 test case, setelah dijalankan ke-17 test case tersebut berjalan dengan baik atau tidak terdapat error. Menggunakan CodePro AnalytiX waktu yang dibutuhkan untuk menghasilkan 17 test case adalah 30s atau 0.5s menit.
4.4. Pengujian Otomatis Metode Pencarian Berbasis Algoritma Genetika
Pengujian ketiga adalah melakukan pengujian dengan metode pencarian berbasis algoritma genetika. Pada penelitian ini penulis akan mencoba menganalisa
Gambar 4. 4 Hasil Menjalankan Test Case Otomatis
Gambar 4. 5 Arsitektur Pengujian Otomatis Dengan Metode Pencarian Berbasis Algoritma Genetika