Klasifikasi Severity dari Bug Untuk Proyek Perangkat Lunak Tegar Riyono Putra (5107100009)
Dosen Pembimbing : 1. Daniel Oranova Siahaan 2. Umi Laili Yuhana
Sistem pelacakan bug
Merupakan perangkat lunak yang dirancang untuk membantu mancatat dan melacak bug perangkat lunak yang dilaporkan, baik oleh pengembang, penjamin kualitas, maupun anggota tim yang lain Bug yang ditemukan oleh pengguna dapat dilaporkan secara langsung melalui sistem ini Dalam perkembangannya, sistem pelacakan bug sudah banyak digunakan dalam dunia pengembangan perangkat lunak, bahkan sistem ini diintegrasikan dengan sistem manajemen proyek
Entri bug pada sistem Bugzilla
Daftar bug pada Bugzilla
Latar belakang Perbedaan latar belakang pelapor menyebabkan pemberian nilai severity(tingkat keparahan) cenderung bersifat subjektif Waktu yang singkat membuat pelapor kesulitan dalam melakukan pengecekan secara menyeluruh
Rumusan Masalah Bagaimana mengubah data bug report menjadi berkas berjenis ARFF(Atribute Relation File Format) Bagaimana memodelkan klasifikasi severity dari bug berdasarkan atribut deskripsi/summary dari bug Bagaimana memproses bug report agar dapat menghasilkan rekomendasi sesuai dengan model klasifikasi severity
Batasan Permasalahan Aplikasi ini menggunakan data yang berasal dari repository Bugzilla untuk proyek pengembangan perangkat lunak Mozilla mulai tanggal 1 januari 2010 Severity yang akan dimodelkan meliputi 6 tingkat yaitu critical, major, normal, minor, trivial, dan enhancement
Use case Diagram
Unduh Laporan Bug
Menyaring Laporan Bug
Pembobotan Kata Admin
<
> <>
<>
Latih Model Klasifikasi
Perangkingan Kata
Arsitektur Sistem
Pengunduhan laporan bug Menggunakan web service yang disediakan Bugzilla Laporan bug yang diunduh dimulai dari tahun 2010 Laporan bug yang didapat disimpan dalam berkas bertipe Arff
Alur pemodelan klasifikasi act Modelling Workflow Sistem Data Kasar Laporan Bug
Seleksi Laporan Bug
mulai
Model Klasifikasi
Pembobotan Kata
selesai
Pelatihan Model Klasifikasi
Perangkingan Kata
Seleksi laporan bug Tujuan : menghilangkan data laporan bug yang dianggap tidak valid dan tidak layak dijadikan data latih
◦ Laporan bug dengan nilai severity yang tidak diperlukan ◦ Laporan bug dengan distribusi tidak merata ◦ Deskripsi bug yang mengandung karakter selain huruf • Mengubah deskripsi bug menjadi bentuk vektor kata (tokenisasi, stop word removal dan stemming)
Tokenisasi Adalah proses memecah suatu String menjadi substring berdasarkan pola tertentu(memecah deskripsi menjadi kumpulan kata) Menggunakan 2 pilihan tokenisasi
◦ Alphabetic Tokenization tokenisasi berdasarkan urutan alpabet ◦ Words Tokenization tokenisasi standar berdasarkan string pemisah
Stop word removal Adalah proses menghapus kata-kata yang tidak mempunyai arti secara independen Menggunakan daftar kata yang disediakan Weka
Stemming Adalah proses mengurangi kata yang berimbuhan atau kata turunan menjadi bentuk dasar Menggunakan 3 macam pilihan stemming
◦ Lovins stemmer ◦ IteratedLovins stemmer ◦ Snowball Stemmer
Laporan bug dengan distribusi tidak merata
Deskripsi/ summary bug yang mengandung angka/simbol pm-app-amo24 constantly segfaulting -moz-border-radius + overflow:hidden does not hide children (or shadows of children) at the rounded corners Port Bug 227305 (Support drag-drop single message to desktop / file-system window) jemalloc can be deadlock with fork(2)
Berkas arff berisi laporan bug
Berkas arff berisi vektor kata
Pembobotan kata
Menggunakan metode tf*idf (term freqency times inverse document frequency) Tujuan : pemangkasan kata berdasarkan bobot kata pada keseluruhan laporan bug Rumus : Tf*idfij=kij/lj * log(n/ni) Karena Tf*idf menghitung bobot kata dalam suatu summary(bukan keseluruhan) maka diperlukan penyesuaian agar dihasilkan bobot kata total Rumus : tf(avg)=
Perangkingan kata Menggunakan metode infogain Tujuan : pemangkasan kata berdasarkan nilai infogain dari kata Rumus :
H(Y|X) = Σj (Prob(X=vj) H(Y | X = vj)) IG(Y|X) = H(Y) - H(Y | X)
Pelatihan model klasifikasi Menggunakan metode RIPPER(Repeated Incremental Prunning to Produce Error Reduction) Algoritma pemodelan klasifikasi yang berupa induksi aturan Terdiri atas tahap pembangunan aturan dan tahap optimasi
Contoh model RIPPER
Uji coba pemodelan klasifikasi Menggunakan 929 laporan bug, setelah data set melalui proses perangkingan, dihasilkan 340 buah deskripsi dengan 295 macam kata Correctly Classified Instances 185 54.4118 % Incorrectly Classified Instances 155 45.5882 %
Kesimpulan Hasil pengunduhan laporan bug dari repositori Bugzilla dapat diubah menjadi bentuk Arff dengan beberapa penyesuaian Proses pelatihan laporan bug yang menggunakan metode RIPPER dapat menghasilkan model dengan tingkat akurasi yang cukup baik (tingkat akurasi 54%) meskipun hanya dilakukan terhadap atribut deskripsi/summary Aplikasi yang dibuat dalam Tugas Akhir ini telah dapat mengimplementasikan sebuah sistem yang mampu memberikan rekomendasi severity kepada pengguna sehingga memudahkan pengguna dalam melaporkan bug pada sistem manajemen bug
Berkas Arff Merupakan salah satu bentuk berkas standar yang digunakan aplikasi Weka Mudah digunakan untuk operasi penggalian data Terdiri dari 2 macam, bentuk normal dan sparse
Contoh berkas Arff normal
Contoh berkas Arff sparse
Class diagram recommendation class RecommendationManager javax.swing.JFrame RecommendationManager -
classifier: Classifier package_directory: File window: RecommendationManagerWindow
+ + + + +
classifyInstance(String) : void getPackage() : File LoadModel() : void setPackage(File) : void setWindow(RecommendationManagerWindow) : void -classifier Classifier # # #
manager: ProgressManager option: int ([]) package_name: File
+ + + +
do_classification() : void setOption(int[]) : void setPackage(File) : void setProgressManager(ProgressManager) : void
UI::RecommendationManagerWindow -window
+ +
output_area: javax.swing.JLabel summary_area: javax.swing.JTextArea
+ +
main(String[]) : void RecommendationManagerWindow(JFrame)
Class diagram model class ModelManager Runnable ModelManager + + + + +
DO_CLASSIFICATION: int = 4 {readOnly} DO_PREPROCCESS: int = 1 {readOnly} DO_RANKING: int = 3 {readOnly} DO_WEIGHTING: int = 2 {readOnly} GET_BUGREPORT: int = 5 {readOnly}
+ + + + + + + +
checkModel(File) : boolean get_package_name() : File ModelManager(JFrame) package_is_set() : boolean run() : void set_package_name(File) : void setBugRetrievalOption(String[]) : void startProccess(int, int[]) : void
-filter_manager FilterManager -classification_manager -valuation_manager
-retrieval_manager
ValuationManager
Retriev alManager + + +
getBugReport(String, String, int, int, File) : void isNewAttribute(String[], int, String) : boolean RetrievalManager(ProgressManager) SaveToArff(HashMap<String, Object>[], Object[], File) : void
+ + + +
doRanking(File) : void doWeighting(File) : void setOptions(int[]) : void ValuationManager(ProgressManager)
+ + + + + + +
AlphabethicTokenizer: int = 0 {readOnly} IteratedLovinsStemmer: int = 0 {readOnly} LovinsStemmer: int = 1 {readOnly} SnowballStemmer: int = 2 {readOnly} Tidak: int = 1 {readOnly} WordsTokenizer: int = 1 {readOnly} Ya: int = 0 {readOnly}
+ ApplyFilter(File) : void + FilterManager(ProgressManager) + setOptions(int[]) : void
ClassificationManager + ClassificationManager(ProgressManager) + doClassification(File) : void + setOptions(int[]) : void
Confusion matrix Diklasifikasikan sebagai
A
B
C
D
E
F
A = critical
10
51
0
0
0
0
B = major
0
101
0
0
0
0
C = normal
0
39
20
0
0
0
D = minor
0
34
0
11
0
0
E = trivial
0
0
0
0
16
0
F = enhancement
0
31
0
0
0
27
Perancangan penyimpanan model