On 12/09/2017 11:58, Stéphane Ducasse wrote:
Hi
for certain metrics we need to compute the total amount of lines of code for the complete project.
FAMIXClass >> calculateARLCOMUnderstand "Class LCOM LOC C1 12 1000 C2 2 50 For C1 1000/1050 * 12 For C2 50/1050 * 2 "
self halt. ^ self TR_LoC / self mooseModel TR_totalNumberOfLinesOfCode * self TR_LCOM
Now I have a question because totalNumberOfLinesOfCode does exist on Model but on TypeGroup
I wrote it like that on FAMIXTypeGroup
TR_totalNumberOfLinesOfCode <MSEProperty: #TR_totalNumberOfLinesOfCode type: #Number>
<derived> <MSEComment: 'Total number of lines of code from Understand'> ^ self lookUpPropertyNamed: #TR_totalNumberOfLinesOfCode computedAs: [ (self sumNumbers: [ :each | each TR_LoC ]) asFloat ]
How can I access for example totalNumberOfLinesOfCode at the model level?
We had the problem at Synectique and it is a complex issue (and no, we did not find a satisfactory solution)
For LOC specifically, in Smalltalk your solution can work, but not in Java, since classes and methods can contain inner/anonymous classes and you don't want to count them twice The problem also exist in Ada (not with classes)
Second, there is also the larger problem of aggregation of a metric at some higher abstraction level - some times you want to sum (e.g. LOC) ; - sometimes it seems more reasonable to average (e.g. cyclomatic complexity at the level of classes) ; - sometimes you want to recompute (e.g. coupling between 2 classes can often not be aggregated from the results of couplings between their methods) ; - and also averaging is not always a good solution in itself and you want something more sophisticated (http://dx.doi.org/10.1002/smr.1558)
nicolas