Uncovering Dependence Clusters and Linchpin Functions – Árpád Beszédes

Dependence clusters are program elements that are mutually dependent on each other. The program elements can be any granularity, from lines of code to libraries. Why do clusters matter?

Many maintenance and evolution tasks are easier if code is loosely coupled. As such, detecting clusters can support understanding, refactoring and testing, but we do not know how exactly. It feels like the early days of clone detection, says Arpad, we could detect clones but we do not know yet in what cases they are harmful.

To detect clusters, two types of dependency are use: both System Dependence Graph (SDG) and Statement Executed Before (SEB) which is simpler, as it only calculates if a statement can be executed before another one, so it is not needed to calculate all data dependencies. Therefore, SEB is more efficient and only a little bit less precise (this is the result of other papers, not this one)

With the, the following research question is answered:

Are clusters very different with different analysis techniques? This question both focused on the clusters themselves, but also on ‘linchpin; function, function that connect clusters. For the empirical evaluation, 30 projects were analyzed:


The patterns were really different for the different projects, some projects exhibited very little clusters (like wu-ftpd) while others (like go and copia) were very clustered.

So, how similar are the SEB and the SDG approach? For go they seem similar, while for copia they differ a lot. In general, it seems that they are quite similar, so in general we can conclude that SEB is a viable alternative.