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.
Perpustakaan Digital ITB