thank you very much for your detailed answer.
On Jul 13, 2007, at 19:52 PM, Toon Verwaest wrote:
On (13/07/07 18:23), Hani ABDEEN wrote:
From: Hani ABDEEN hani.abdeen@univ-savoie.fr To: Toon Verwaest tverwaes@infogroep.be Subject: Re: [Moose-dev] Class clustering (Bug:Exceptions) Date: Fri, 13 Jul 2007 18:23:04 +0200
Hi, thank you, yes It works correctly now :-) and I try to understand and to discover what we can do with this plugin. Just somethings that I would point out:
- I have seen that when the clustering algorithm take place, all the
classes, the packages, and the namespaces in the model under- consideration will be considered in the same way by the algorithm. What about the classes and the packages which do not really belong to the system that we would analyze it (stubs entities)? Such entities are used (accessed) by the considered system, and we have this information in moose model, but we have not any information about what these entities access?. may be they access our system, and may be not!!
It is true that we don't have information, but in the case that the system would try to put such classes together with classes in our system, this should probably fail since we don't want to find software components in libraries. This is where the "Fixating" tab comes in handy, were we can exclude results library classes. If we do this, even while they were clustered together, we exclude those results.
That was what I would tell you indirectly: It is the best simple solution... I understand perfectly the following of your mail, and I know that a clustering algorithm is not a kind of magic which could give us an ideal solution without any user's intervention!!! The objective was simply pointing out this point which does not occurs only in the case of -System under analysis and Platform library-. Ok I will not discus now the problem of inter-systems collaboration and system's plugins...
Important is to think that most of the algorithms, just present the basic results without automatically combining them, to the user, who can then manually validate clustering information before merging it. The reason why this is done like this, is because a lot of the basic algorithms (for example the "By Reference") will definitaly cause false positives because of the way the algorithm is adapted.
Next to that, the ones which do already combine results, like the hierarchical clustering based on delta-ic and interface, can automatically be filtered for "false positives", be automatically removing nodes in the hierarchies which only add information about "ignored classes", which we can ignore in the "fixating tab".
But well, it might be useful to already provide a checkbox which automatically exludes these classes, so the user doesn't have to find out which ones are part of the subject system and which ones aren't..
- this is a very small thing that may be it does not cause any
problem now, but it could do that latter: According to your implementation of FAMIXClass>>accessedByClasses and FAMIXClass>>allClassAccesses, a class could be accessed be it self.
I guess you are right, that in some situations this could lead to a problem. I will move the addition of the class itself to the algorithms that use it.
One of the basic things you can do with the program now, is using the different visualizations to analyse user-defined clusters. In other words how packages are organized in the system. Like this you can see for example, that the package "Kernel-Objects" contains "green classes" which are "ghostclasses" or classes which probably should be in the cluster, but are not. Of course since it is a core package and since the class causing the effect is the Object-class it might not be that relevant, but it shows how easy you can find things like this.
again thank you very much for this details, and before all, for this useful plugin. Note that if I interest on this plugin is because that the next step of my work will be around clustering algorithms and software graphs. So surely such plugin to Moose will be very useful for me.
bests, Hani
regards, Toon