When working on eclipse, I discovered the necessity to represents things like plugins or components which are not directly handled in Famix.
It is important if we want to be able to deal with real world cases.
I am not sure I understand. Could you be more specific?
May be we should consider introducing them as Moose Entities?
FAMIX is meant to be extended. For example, to model JEE systems, we added entities like EntityBean or SessionBeans.
If I works with Eclipse project, at some point I will want to handle plugins as entities. For example, if the application is very big, or if I want to think about the architecture, I will want to work with plugins (components) rather than packages.
So now I want plugins in Moose.
Of course, I can extend the metamodel, but this means I have to think where to put it, may be implement metrics, create the MooseChef queries, ...
Whereas by using MooseGroup I can instantly prototype components without changing Famix, so I have some guarantee that things will just work. Except that to work, many things require bidirectional navigation (from group to members and members back to its group(s) ) ...
Or may be not: I used Moose-Groups (of class because one package can be spread over different plugins) and it is not that bad. the main issue, in my case, was that classes don't know to what group they have been assigned...
Groups are not meant to work bidirectionally. But, perhaps it would be an interesting addition to try to add this information.
So computing dependencies could be very lengthy. I solved that by creating a dictionary on the side, but maybe we should think on a better solution.
And then of course integrate this with all the tools...
Interesting. I would be interested in hearing the actual cases.
Two concrete cases that are cited above: - when computing metrics on eclipse, I wanted the metrics at the level of plugins. Instead of defining a FamixEclipsePlugin entity, I created each plugin has a class group, and implemented the few metrics I needed on that (which required bidirectional navigation).
- we are supposed to look soon at a big eclipse "application" where the guy is interested in looking at the dependences between plugins because there are too many classes and packages to work at that level. This implies having bidirectional navigation. If DSM, metrics, MooseChef where already working on MooseGroups, I would have an instant poor man component ...
- It could be used to define application layers and reason about them. We had the issue recently for a paper, where we wanted to look at dependencies between a package and itself, the package with its application, and the package with the underlying layer(s) (e.g. a framework on which the application is defined). For this we had to hack some dependency queries ...
- I could also maybe test various possible system decomposition using groups (somehow similar to what Orion can do).
nicolas