I ended up importing the BaseVisualWorks package and generating from it a list of all the methods names. I installed this list in a helper class in Softwarenaut (BaseVisualWorksMethods class>>names).
I use this collection of methods to filter out the invocations that go to methods in my model that have the same name as methods that exist in the BaseVisualWorks package. When analyzing the SPO project, out of 2000 invocations going to 500 methods in the project's namespace, i filtered out in this way 600 invocations going to 40 methods. As a result, the #include: and #with: problems that I was mentioning in my last email were fixed. The other 38 methods that were filtered also pretty general method names (origin, height, day, menu) which at the first encounter with the system, I would say, are not that relevant.
For now this approach is suffcient for me. If I come up with something better I'll let you know. Also if anybody is interested in discussing this further ping me.
Cheers, Mircea.
On May 15, 2009, at 9:09 PM, Stéphane Ducasse wrote:
Not really we would be really interested to a good heuristic
Stef
On May 15, 2009, at 4:15 PM, Mircea Lungu wrote:
Hi guys,
Today I imported a smalltalk project in Moose/Softwarenaut.
I have more than 3500 invocations with multiple candidates in the candidates list. I decided that I will ignore those dependencies. I would rather see fewer dependencies but be sure that the ones I see are for real (some kind of the lower-bounds of inter-package dependencies).
The problem is that after removing the ambiguous invocations, I still have spurious invocations. Two examples:
- In the project, there is a class which defines the #includes:
method. In the resulting model, I have 64 invocations to this class's #include. However, if you look at the code, you see that the overwhelming majority of them are actually invocking List>>includes:. In fact, the model sais that several classes from the VisualWorks Base are depending on my code because they call includes:.
- The same situation with the #with. I have it defined in one class,
and all the invocations are attributed to the class although almost all are actually invoking the WATagBrush>>with: from Seaside.
I am thinking that I should ignore the dependencies that have as target methods that I will define in a blacklist. I would put in there methods which are frequently used like: for: with: contains: etc... I guess I can remove a lot of noise this way. Then i could probably allow the user to further filter methods from the UI of S*naut.
However, the user would have to know the system in order to be able to filter out these invocations. And the point of S*naut was that the user did not know the system... :)
Does anybody have a better approach to making sure that the dependencies in the model are for real?
Cheers,
Mircea. _______________________________________________ Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev