[log in to unmask] > ... tradeoff between wide trees with lots of WITHs
> and deep trees with more levels of abstraction?
Volume is measured by lines of code, depth of nesting,
cyclomatic complexity, number of WITHs per package, number of
methods per class, number of global variables, etc.
Clustering metrics like cohesion (clustering, etc.) and coupling
(accesses to those global variables, depth of nesting of WITHs,
aliasing, etc.) are HARDER TO MEASURE. For example, ASIS comes
with a called-calling tree application, but not a global variable
cross-reference list application, showing that data flow is
harder to do than program flow.
To make the tradeoff between wide trees and deep trees, the designer
needs a visualization tool to SEE this program flow and data flow
graphically, at the same time. The designer must also be able to
see the changes in clustering (cohesion and coupling) that occur
upon making a change. In other words, a what-if Clustering Tool.
There is not single equation to optimize between wide trees and
deep trees, because wideness and deepness are not the actual
criteria to optimize, but just attributes to achieve the desired
optimum maintainability. For example, when something is trusted and
stable, it should be re-widened and re-deepened -- the optimum
evolve with time.