Ad-Hoc Features and Where to Find Them, Part 1: Origin Story

4 pointsposted 3 months ago
by yann-gael

2 Comments

yann-gael

3 months ago

When you look at a piece of code/software, it is often fairly intuitive to know where/what are some of the implemented features; either because there is a good amount of documentation, the code is well structured, or because there are tools that help with feature location. However, not all features are simple to find: some because of poor maintenance, others because the feature was not necessarily treated as such during the implementation. I would call these ad-hoc features. As the name suggests, these features were implemented without much thought: maybe developers thought it would not be useful to properly package them and they ended up being reused elsewhere, maybe a large team got confused and re-implemented the same piece of code many times, or maybe someone just didn't recognize that there was even a feature to begin with!

luca-sctr

3 months ago

A recent paper[1] has shown that such features (which can also be looked at as refactoring candidates) can be detected with concept lattices, using a 'reverse-inheritance' relationship.

Their tool is available[2] on github, for those wishing to experiment with ad-hoc features.

[1] H. Mili, I. Benzarti, A. Elkharraz, G. Elboussaidi, Y. -G. Guéhéneuc and P. Valtchev, "Discovering Reusable Functional Features in Legacy Object-Oriented Systems," in IEEE Transactions on Software Engineering, vol. 49, no. 7, pp. 3827-3856, July 2023

[2] https://github.com/hafedhmili/featurediscovery