digilib@itb.ac.id +62 812 2508 8800

ABSTRAK Fitra Arifiansyah
PUBLIC Open In Flipbook Esha Mustika Dewi

Evolusi perangkat lunak menyebabkan kode sumber dan relasi antar fungsi berubah dari satu versi ke versi berikutnya. Perubahan tersebut dapat direpresentasikan menggunakan call graph, yaitu graf berarah yang menggambarkan relasi pemanggilan antar fungsi. Namun, semakin besar dan kompleks suatu perangkat lunak, semakin sulit bagi pengembang untuk mengukur seberapa besar perubahan yang terjadi serta memahami bagian mana dari perubahan tersebut yang berdampak terhadap alur eksekusi program. Network Portrait Divergence (NPD) telah digunakan untuk mengukur perbedaan antar graf melalui distribusi ketetanggaan dan jarak hop. Meskipun efektif untuk menangkap perubahan topologi, NPD belum secara khusus mempertimbangkan karakteristik kode program, khususnya jalur eksekusi yang merepresentasikan urutan pemanggilan fungsi dalam call graph. Selain itu, call graph berukuran besar memerlukan proses penyederhanaan agar lebih mudah dianalisis, tetapi proses clustering dapat menghilangkan informasi perubahan yang sebelumnya terdapat pada graf asli. Penelitian ini bertujuan untuk mengembangkan pendekatan pengukuran dan peringkasan evolusi perangkat lunak berbasis call graph. Terdapat dua kontribusi utama dalam penelitian ini. Pertama, penelitian ini mengusulkan NPD*, yaitu formulasi divergence yang menggantikan portrait ketetanggaan pada NPD dengan portrait berbasis jalur eksekusi dan panjang jalur eksekusi. Dengan pendekatan ini, perubahan antar versi perangkat lunak tidak hanya dilihat sebagai perubahan topologi graf, tetapi juga sebagai perubahan pada jalur eksekusi program. Kedua, penelitian ini mengusulkan HCSumm*, yaitu pendekatan penyederhanaan call graph berbasis hierarchical clustering dengan menambahkan fitur usulan pada representasi node. Fitur usulan tersebut meliputi Execution Path Length (EPL), indegree, outdegree, dan depth. Fitur-fitur tersebut digunakan untuk merepresentasikan peran node dalam struktur pemanggilan dan jalur eksekusi, kemudian dikombinasikan dengan embedding struktural untuk membentuk summary graph. ii Evaluasi dilakukan dalam beberapa tahap. Untuk NPD*, pengujian dilakukan menggunakan skenario sintetis terkontrol dan studi kasus proyek nyata menggunakan modul dari Flask. Hasil menunjukkan bahwa NPD* memberikan perspektif tambahan terhadap NPD. Pada perubahan yang mempengaruhi urutan pemanggilan, percabangan, atau restrukturisasi jalur eksekusi, NPD* dapat menangkap perubahan yang tidak selalu terlihat kuat melalui NPD. Namun, hasil menunjukkan bahwa NPD* tidak selalu menghasilkan nilai divergence yang lebih tinggi dibandingkan NPD. Pada perubahan yang dominan bersifat topologis, NPD tetap lebih baik. Dengan demikian, hipotesis bahwa jalur eksekusi dapat meningkatkan representasi evolusi kode program terdukung secara parsial, terutama untuk perubahan yang berdampak langsung pada alur eksekusi. Untuk HCSumm*, evaluasi dilakukan melalui enam skenario, yaitu uji ablasi fitur, test case sintetis, perbandingan moda representasi, variasi nilai jumlah cluster (K), validasi eksternal pada modul Pandas, dan pengujian empiris pada Django. Hasil uji ablasi menunjukkan bahwa kontribusi fitur usulan tidak seragam. Depth menjadi fitur yang paling preserving pada skenario yang diuji, sedangkan EPL lebih efektif ketika dikombinasikan dengan fitur lain. Pada eksperimen moda representasi, fitur usulan menghasilkan gap NPD* yang lebih kecil dibandingkan struktural saja, sehingga mendukung hipotesis bahwa fitur berbasis karakteristik call graph lebih tepat digunakan untuk clustering dibandingkan fitur topologi umum. Namun hasil variasi K, validasi Pandas, dan pengujian empiris Django menunjukkan bahwa peningkatan jumlah cluster tidak selalu meningkatkan kemampuan summary graph dalam mempertahankan NPD*. Nilai K terbaik bersifat kontekstual terhadap struktur call graph dan distribusi jalur eksekusi. Penelitian ini menawarkan kebaruan berupa pengembangan NPD* dan HCSumm* sebagai pendekatan untuk memasukkan karakteristik jalur eksekusi ke dalam analisis evolusi call graph. Berbeda dengan pendekatan yang hanya merepresentasikan perubahan topologi graf, NPD* dirancang untuk mengukur perubahan yang berkaitan dengan jalur eksekusi, sedangkan HCSumm* dirancang untuk menghasilkan ringkasan call graph yang mempertahankan sebagian informasi tersebut. Secara keseluruhan, penelitian ini menunjukkan bahwa NPD* dan HCSumm* dapat memperkaya analisis evolusi perangkat lunak berbasis call graph. NPD* berperan sebagai metrik pelengkap yang merepresentasikan perubahan jalur eksekusi, sedangkan HCSumm* berperan sebagai pendekatan peringkasan yang berpotensi mempertahankan sebagian informasi perubahan jalur eksekusi pada kondisi tertentu. Kontribusi penelitian ini adalah memberikan kerangka evaluasi evolusi perangkat lunak yang tidak hanya berorientasi pada topologi graf, tetapi juga mempertimbangkan karakteristik eksekusi program. Pengembangan selanjutnya perlu memperluas validasi pada lebih banyak proyek, mengembangkan strategi pemilihan K yang adaptif, serta mengevaluasi kualitas cluster secara semantik.