Granularity of analysis

Object-Oriented Programs (OOP) may have complex structure of components and interactions among them; in other words, components and interactions among them can be defined on different levels of granularities. Typically, the component of the coarsest granularity in OOP is class; this is called “granularity of classes" or “level of classes". In turn, a class may define methods; this finer granularity is called “granularity of methods" or “level of methods".

In Java it is also possible to define fields and subclasses within a class; in this way, methods, fields and subclasses are sometimes called “members" and thus granularity of methods may be called “granularity of members" as well. The finest granularity is the “granularity of lines of code". Moreover, Java language allows defining methods and classes within other methods etc, i.e. Java supports virtually infinite level of nesting, and JRipples dependency graph supports the analysis of these components.





For example, on the above picture, components A and B are defined on granularity of classes (top components), while components n and m are defined on granularity of members. In turn, dependencies among these components are defined on different granularities as well. For example, dependency 2 is defined between members, while dependency 1 is mixed dependency defined between the method and the class. The membership relation among the components affects the marks (statuses) of components during incremental change. For example, if method n is changed, then it implies that its parent component ?class A, - is changed as well. The type of dependency specifies, how a component interacts with other components, and how the change in status of this component through propagation rules affects other components it interacts with. For example, dependency 2 on the picture implies that class A interacts with component B only. On the other hand, dependency 2 implies the method n interacts with method m, and, transitively, method n interacts with class B; also, through membership relations, it implies that A interacts with m, and, transitively, A interacts with B.