Skip to content

Latest commit

 

History

History
3994 lines (3859 loc) · 90.9 KB

File metadata and controls

3994 lines (3859 loc) · 90.9 KB

Object Oriented Design Quality Metrics


References

Incoming Dependencies

Incoming dependencies are also denoted as "Fan-in", "Afferent Coupling" or "in-degree". These are the ones that use the listed package.

If these packages get changed, the incoming dependencies might be affected by the change. The more incoming dependencies, the harder it gets to change the code without the need to adapt the dependent code (“rigid code”). Even worse, it might affect the behavior of the dependent code in an unwanted way (“fragile code”).

Since Java Packages are organized hierarchically, incoming dependencies can be count for every package in isolation or by including all of its sub-packages. The latter one is done without top level packages like for example "org" or "org.company" by assuring that only packages are considered that have other packages or types in the same hierarchy level ("siblings").

Table 1a

  • Show the top 20 Java Packages with the most incoming dependencies
  • Set the "incomingDependencies" properties on Package nodes.
artifactName fullQualifiedPackageName packageName incomingDependencies incomingDependenciesWeight incomingDependentTypes incomingDependentInterfaces incomingDependentPackages incomingDependentArtifacts
0 axon-messaging-5.0.0 org.axonframework.messaging.core.unitofwork unitofwork 11695 41449 245 55 60 4
1 axon-messaging-5.0.0 org.axonframework.messaging.core core 10952 35476 406 78 69 7
2 axon-common-5.0.0 org.axonframework.common.configuration configuration 3297 17699 143 50 32 8
3 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling eventhandling 3209 10519 152 31 37 6
4 axon-common-5.0.0 org.axonframework.common.annotation annotation 1826 2042 129 16 52 7
5 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling commandhandling 1426 4983 97 25 26 6
6 axon-common-5.0.0 org.axonframework.common.infra infra 1212 1486 111 27 41 6
7 axon-common-5.0.0 org.axonframework.common common 833 2020 276 20 76 9
8 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling queryhandling 697 2463 76 17 16 3
9 axon-messaging-5.0.0 org.axonframework.messaging.core.annotation annotation 480 1682 117 11 24 4
10 axon-conversion-5.0.0 org.axonframework.conversion conversion 426 1719 55 12 19 4
11 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... token 425 2089 58 8 16 3
12 axon-messaging-5.0.0 org.axonframework.messaging.eventstreaming eventstreaming 283 801 53 14 10 3
13 axon-eventsourcing-5.0.0 org.axonframework.eventsourcing.eventstore eventstore 223 719 65 7 9 3
14 axon-messaging-5.0.0 org.axonframework.messaging.tracing tracing 137 481 37 7 7 1
15 axon-test-5.0.0 org.axonframework.test.fixture fixture 132 355 26 0 1 0
16 axon-modelling-5.0.0 org.axonframework.modelling modelling 125 282 36 9 9 2
17 axon-modelling-5.0.0 org.axonframework.modelling.entity entity 115 394 25 5 5 1
18 axon-modelling-5.0.0 org.axonframework.modelling.entity.child child 89 230 28 7 3 0
19 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... segmenting 86 651 31 5 10 1

Table 1b

  • Show the top 20 Java Packages including their sub-packages with the most incoming dependencies
  • Set the property "incomingDependenciesIncludingSubpackages" on Package nodes.
artifactName fullQualifiedPackageName packageName incomingDependencies incomingDependenciesWeight incomingDependentTypes incomingDependentInterfaces incomingDependentPackages incomingDependentArtifacts
0 axon-messaging-5.0.0 org.axonframework.messaging.core core 18114 61678 377 113 68 7
1 axon-messaging-5.0.0 org.axonframework.messaging.core.unitofwork unitofwork 11490 40323 230 55 58 5
2 axon-common-5.0.0 org.axonframework.common common 6699 22139 442 99 87 9
3 axon-common-5.0.0 org.axonframework.common.configuration configuration 3136 17040 103 50 31 8
4 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling eventhandling 2081 7212 97 35 25 6
5 axon-common-5.0.0 org.axonframework.common.annotation annotation 1825 2041 128 16 51 7
6 axon-common-5.0.0 org.axonframework.common.infra infra 1198 1412 106 27 40 6
7 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling commandhandling 867 3168 63 26 20 6
8 axon-messaging-5.0.0 org.axonframework.messaging.core.annotation annotation 394 1384 81 11 23 4
9 axon-conversion-5.0.0 org.axonframework.conversion conversion 374 1538 36 12 15 3
10 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... token 350 1383 45 8 11 4
11 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling queryhandling 279 897 34 15 12 5
12 axon-messaging-5.0.0 org.axonframework.messaging.eventstreaming eventstreaming 231 656 39 14 9 3
13 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... processing 217 663 30 13 10 5
14 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... streaming 207 633 30 12 11 4
15 axon-messaging-5.0.0 org.axonframework.messaging.tracing tracing 108 359 22 7 5 1
16 axon-eventsourcing-5.0.0 org.axonframework.eventsourcing.eventstore eventstore 76 206 19 6 6 3
17 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... segmenting 74 612 23 5 9 1
18 axon-modelling-5.0.0 org.axonframework.modelling modelling 74 226 13 20 4 1
19 axon-modelling-5.0.0 org.axonframework.modelling.repository repository 66 311 14 5 6 1

Outgoing Dependencies

Outgoing dependencies are also denoted as "Fan-out", "Efferent Coupling" or "out-degree". These are the ones that are used by the listed package.

Code from other packages and libraries you’re depending on (outgoing) might change over time. The more outgoing changes, the more likely and frequently code changes are needed. This involves time and effort which can be reduced by automation of tests and version updates. Automated tests are crucial to reveal updates, that change the behavior of the code unexpectedly (“fragile code”). As soon as more effort is required, keeping up becomes difficult (“rigid code”). Not being able to use a newer version might not only restrict features, it can get problematic if there are security issues. This might force you to take “fast but ugly” solutions into account which further increases technical dept.

Since Java Packages are organized hierarchically, outgoing dependencies can be count for every package in isolation or by including all of its sub-packages. The latter one is done without top level packages like for example "org" or "org.company" by assuring that only packages are considered that have other packages or types in the same hierarchy level ("siblings").

Table 2a

  • Show the top 20 Java Packages with the most outgoing dependencies
  • Set the "outgoingDependencies" properties on Package nodes.
artifactName fullQualifiedPackageName packageName outgoingDependencies outgoingDependenciesWeight outgoingDependentTypes outgoingDependentInterfaces outgoingDependentPackages outgoingDependentArtifacts
0 axon-messaging-5.0.0 org.axonframework.messaging.core.configuration configuration 2549 15962 75 40 28 2
1 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... pooled 2346 9872 96 47 21 1
2 axon-eventsourcing-5.0.0 org.axonframework.eventsourcing.eventstore.jpa jpa 1260 4805 59 27 16 3
3 axon-eventsourcing-5.0.0 org.axonframework.eventsourcing.configuration configuration 1237 4801 66 41 25 3
4 axon-server-connector-5.0.0 org.axonframework.axonserver.connector.event event 1228 3848 72 29 18 3
5 axon-messaging-5.0.0 org.axonframework.messaging.core.interception interception 1084 5770 46 25 11 1
6 axon-test-5.0.0 org.axonframework.test.fixture fixture 931 3167 71 38 15 3
7 axon-modelling-5.0.0 org.axonframework.modelling.entity.annotation annotation 858 3265 64 30 19 3
8 axon-modelling-5.0.0 org.axonframework.modelling.entity entity 800 2887 35 21 9 2
9 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... subscribing 737 2672 46 29 15 1
10 axon-eventsourcing-5.0.0 org.axonframework.eventsourcing.eventstore eventstore 705 2705 64 29 10 2
11 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot.autoconfig autoconfig 605 2679 88 32 31 5
12 axon-modelling-5.0.0 org.axonframework.modelling.configuration configuration 585 2279 41 29 10 2
13 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling queryhandling 546 2114 48 23 9 2
14 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling.dist... distributed 513 1412 38 23 10 1
15 axon-messaging-5.0.0 org.axonframework.messaging.monitoring.interce... interception 500 1550 15 15 6 0
16 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling.inte... interception 491 1561 26 16 6 1
17 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.anno... annotation 459 1507 50 22 14 2
18 axon-messaging-5.0.0 org.axonframework.messaging.core.annotation annotation 450 1501 72 16 10 1
19 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling eventhandling 438 1108 41 20 8 2

Table 2b

  • Show the top 20 Java Packages including their sub-packages with the most outgoing dependencies
  • Set the property "outgoingDependenciesIncludingSubpackages" on Package nodes.
artifactName fullQualifiedPackageName packageName outgoingDependencies outgoingDependenciesWeight outgoingDependentTypes outgoingDependentInterfaces outgoingDependentPackages outgoingDependentArtifacts
0 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling eventhandling 653 2127 103 47 20 2
1 axon-messaging-5.0.0 org.axonframework.messaging.core core 397 1424 84 72 25 2
2 axon-modelling-5.0.0 org.axonframework.modelling modelling 381 1124 66 23 19 2
3 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... processing 345 1282 79 13 18 2
4 axon-eventsourcing-5.0.0 org.axonframework.eventsourcing eventsourcing 317 1060 96 14 30 3
5 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling commandhandling 312 1020 75 29 14 2
6 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling queryhandling 310 1115 73 19 12 2
7 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... streaming 275 1023 80 11 20 2
8 axon-modelling-5.0.0 org.axonframework.modelling.entity entity 270 856 47 11 17 3
9 axon-server-connector-5.0.0 org.axonframework.axonserver.connector connector 253 870 107 2 24 3
10 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... pooled 231 916 73 2 20 1
11 axon-eventsourcing-5.0.0 org.axonframework.eventsourcing.eventstore eventstore 183 597 53 7 15 3
12 axon-modelling-5.0.0 org.axonframework.modelling.entity.annotation annotation 179 681 49 5 18 3
13 axon-messaging-5.0.0 org.axonframework.messaging.core.unitofwork unitofwork 176 697 11 55 5 1
14 axon-messaging-5.0.0 org.axonframework.messaging.core.interception interception 166 587 43 0 11 1
15 axon-test-5.0.0 org.axonframework.test test 156 448 43 9 13 2
16 axon-server-connector-5.0.0 org.axonframework.axonserver.connector.event event 142 420 59 0 17 3
17 axon-test-5.0.0 org.axonframework.test.fixture fixture 128 441 41 8 14 3
18 axon-messaging-5.0.0 org.axonframework.messaging.core.annotation annotation 123 334 36 8 9 1
19 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.conf... configuration 120 382 40 7 18 1

Instability

$$ Instability = \frac{Outgoing:Dependencies}{Outgoing:Dependencies + Incoming:Dependencies} $$

Instability is expressed as the ratio of the number of outgoing dependencies of a module (i.e., the number of packages that depend on it) to the total number of dependencies (i.e., the sum of incoming and outgoing dependencies).

Small values near zero indicate low Instability. With no outgoing but some incoming dependencies the Instability is zero which is denoted as maximally stable. Such code units are more rigid and difficult to change without impacting other parts of the system. If they are changed less because of that, they are considered stable.

Conversely, high values approaching one indicate high Instability. With some outgoing dependencies but no incoming ones the Instability is denoted as maximally unstable. Such code units are easier to change without affecting other modules, making them more flexible and less prone to cascading changes throughout the system. If they are changed more often because of that, they are considered unstable.

Since Java Packages are organized hierarchically, Instability can be calculated for every package in isolation or by including all of its sub-packages.

Table 3a

  • Show the top 20 Java Packages with the lowest Instability
  • Set the property "instability" on Package nodes.
artifactName fullQualifiedPackageName packageName instability instabilityTypes instabilityInterfaces instabilityPackages instabilityArtifacts p.outgoingDependencies p.incomingDependencies p.outgoingDependentTypes p.incomingDependentTypes p.outgoingDependentInterfaces p.incomingDependentInterfaces p.outgoingDependentPackages p.incomingDependentPackages p.outgoingDependentArtifacts p.incomingDependentArtifacts
0 axon-common-5.0.0 org.axonframework.common.annotation annotation 0.001640 0.022727 0.000000 0.037037 0.000000 3 1826 3 129 0 16 2 52 0 7
1 axon-messaging-5.0.0 org.axonframework.messaging.core.unitofwork unitofwork 0.010826 0.082397 0.153846 0.090909 0.200000 128 11695 22 245 10 55 6 60 1 4
2 axon-common-5.0.0 org.axonframework.common.infra infra 0.021792 0.082645 0.100000 0.068182 0.000000 27 1212 10 111 3 27 3 41 0 6
3 axon-messaging-5.0.0 org.axonframework.messaging.core core 0.030196 0.164609 0.178947 0.103896 0.222222 341 10952 80 406 17 78 8 69 2 7
4 axon-common-5.0.0 org.axonframework.common common 0.035880 0.058020 0.000000 0.012987 0.000000 31 833 17 276 0 20 1 76 0 9
5 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... token 0.036281 0.121212 0.200000 0.157895 0.250000 16 425 8 58 2 8 3 16 1 3
6 axon-conversion-5.0.0 org.axonframework.conversion conversion 0.046980 0.153846 0.250000 0.136364 0.200000 21 426 10 55 4 12 3 19 1 4
7 axon-common-5.0.0 org.axonframework.common.configuration configuration 0.075694 0.266667 0.295775 0.135135 0.000000 270 3297 52 143 21 50 5 32 0 8
8 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling eventhandling 0.120099 0.212435 0.392157 0.177778 0.250000 438 3209 41 152 20 31 8 37 2 6
9 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling commandhandling 0.193895 0.276119 0.444444 0.187500 0.250000 343 1426 37 97 20 25 6 26 2 6
10 axon-common-5.0.0 org.axonframework.common.util util 0.200000 0.153846 0.000000 0.250000 0.000000 3 12 2 11 0 0 2 6 0 2
11 axon-messaging-5.0.0 org.axonframework.messaging.core.conversion conversion 0.247059 0.192308 0.571429 0.238095 0.333333 21 64 5 21 4 3 5 16 2 4
12 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... store 0.263158 0.190476 1.000000 0.400000 0.333333 10 28 4 17 2 0 4 6 1 2
13 axon-messaging-5.0.0 org.axonframework.messaging.eventstreaming eventstreaming 0.270619 0.320513 0.461538 0.375000 0.250000 105 283 25 53 12 14 6 10 1 3
14 axon-common-5.0.0 org.axonframework.common.jpa jpa 0.272727 0.272727 1.000000 0.375000 0.000000 3 8 3 8 1 0 3 5 0 3
15 axon-messaging-5.0.0 org.axonframework.messaging.monitoring monitoring 0.282051 0.195122 0.666667 0.307692 0.333333 22 56 8 33 4 2 4 9 1 2
16 axon-common-5.0.0 org.axonframework.common.jdbc jdbc 0.310345 0.380952 0.000000 0.428571 0.000000 9 20 8 13 0 0 3 4 0 3
17 axon-messaging-5.0.0 org.axonframework.messaging.tracing tracing 0.331707 0.314815 0.533333 0.416667 0.500000 68 137 17 37 8 7 5 7 1 1
18 axon-common-5.0.0 org.axonframework.common.lifecycle lifecycle 0.333333 0.444444 0.000000 0.333333 0.000000 4 8 4 5 0 0 2 4 0 1
19 axon-update-5.0.0 org.axonframework.update.api api 0.379310 0.384615 0.000000 0.400000 1.000000 11 18 5 8 0 1 2 3 1 0

Table 3b

  • Show the top 20 Java Packages including their sub-packages with the lowest Instability
  • Set the property "instabilityIncludingSubpackages" on Package nodes.
artifactName fullQualifiedPackageName packageName instability instabilityTypes instabilityInterfaces instabilityPackages instabilityArtifacts p.outgoingDependenciesIncludingSubpackages p.incomingDependenciesIncludingSubpackages p.outgoingDependentTypesIncludingSubpackages p.incomingDependentTypesIncludingSubpackages p.outgoingDependentInterfacesIncludingSubpackages p.incomingDependentInterfacesIncludingSubpackages p.outgoingDependentPackagesIncludingSubpackages p.incomingDependentPackagesIncludingSubpackages p.outgoingDependentArtifactsIncludingSubpackages p.incomingDependentArtifactsIncludingSubpackages
0 axon-common-5.0.0 org.axonframework.common.annotation annotation 0.001095 0.015385 0.000000 0.019231 0.000000 2 1825 2 128 0 16 1 51 0 7
1 axon-common-5.0.0 org.axonframework.common.infra infra 0.004156 0.027523 0.000000 0.047619 0.000000 5 1198 3 106 0 27 2 40 0 6
2 axon-messaging-5.0.0 org.axonframework.messaging.core.unitofwork unitofwork 0.015087 0.045643 0.500000 0.079365 0.166667 176 11490 11 230 55 55 5 58 1 5
3 axon-messaging-5.0.0 org.axonframework.messaging.core core 0.021447 0.182213 0.389189 0.268817 0.222222 397 18114 84 377 72 113 25 68 2 7
4 axon-common-5.0.0 org.axonframework.common.configuration configuration 0.021529 0.072072 0.425287 0.114286 0.000000 69 3136 8 103 37 50 4 31 0 8
5 axon-conversion-5.0.0 org.axonframework.conversion conversion 0.057935 0.142857 0.500000 0.166667 0.000000 23 374 6 36 12 12 3 15 0 3
6 axon-common-5.0.0 org.axonframework.common.util util 0.090909 0.100000 0.000000 0.166667 0.000000 1 10 1 9 0 0 1 5 0 1
7 axon-common-5.0.0 org.axonframework.common.jdbc jdbc 0.133333 0.181818 0.000000 0.400000 0.000000 2 13 2 9 0 0 2 3 0 2
8 axon-messaging-5.0.0 org.axonframework.messaging.core.conversion conversion 0.136986 0.166667 0.500000 0.210526 0.333333 10 63 4 20 3 3 4 15 2 4
9 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... token 0.152542 0.328358 0.500000 0.450000 0.333333 63 350 22 45 8 8 9 11 2 4
10 axon-messaging-5.0.0 org.axonframework.messaging.eventstreaming eventstreaming 0.163043 0.204082 0.500000 0.357143 0.250000 45 231 10 39 14 14 5 9 1 3
11 axon-common-5.0.0 org.axonframework.common.lifecycle lifecycle 0.166667 0.250000 0.000000 0.250000 0.000000 1 5 1 3 0 0 1 3 0 1
12 axon-messaging-5.0.0 org.axonframework.messaging.tracing tracing 0.205882 0.290323 0.461538 0.444444 0.500000 28 108 9 22 6 7 4 5 1 1
13 axon-common-5.0.0 org.axonframework.common.jpa jpa 0.222222 0.222222 0.000000 0.333333 0.000000 2 7 2 7 0 0 2 4 0 2
14 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... errorhandling 0.230769 0.333333 0.500000 0.500000 0.000000 3 10 3 6 1 1 3 3 0 0
15 axon-messaging-5.0.0 org.axonframework.messaging.core.annotation annotation 0.237911 0.307692 0.421053 0.281250 0.200000 123 394 36 81 8 11 9 23 1 4
16 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling eventhandling 0.238844 0.515000 0.573171 0.444444 0.250000 653 2081 103 97 47 35 20 25 2 6
17 axon-common-5.0.0 org.axonframework.common.property property 0.250000 0.400000 0.000000 0.250000 0.000000 2 6 2 3 0 0 1 3 0 1
18 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot.util util 0.250000 0.333333 0.000000 0.500000 0.000000 1 3 1 2 0 0 1 1 0 0
19 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling commandhandling 0.264631 0.543478 0.527273 0.411765 0.250000 312 867 75 63 29 26 14 20 2 6

Abstractness

$$ Abstractness = \frac{abstract:classes:in:category}{total:number:of:classes:in:category} $$

Package Abstractness is expressed as the ratio of the number of abstract classes and interfaces to the total number of classes of a package.

Zero Abstractness means that there are no abstract types or interfaces in the package. On the other hand, a value of one means that there are only abstract types.

Since Java Packages are organized hierarchically, Abstractness can be calculated for every package in isolation or by including all of its sub-packages.

Table 4a

  • Show the top 30 packages with the lowest Abstractness
  • Set the property "abstractness" on Package nodes.
artifactName fullQualifiedPackageName packageName abstractness numberAbstractTypes numberTypes
0 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot.autoconfig autoconfig 0.0 0 31
1 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot springboot 0.0 0 20
2 axon-server-connector-5.0.0 org.axonframework.axonserver.connector.event event 0.0 0 14
3 axon-metrics-micrometer-5.0.0 org.axonframework.extension.metrics.micrometer micrometer 0.0 0 12
4 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling.inte... interception 0.0 0 8
5 axon-messaging-5.0.0 org.axonframework.messaging.core.timeout timeout 0.0 0 8
6 axon-server-connector-5.0.0 org.axonframework.axonserver.connector.command command 0.0 0 6
7 axon-messaging-5.0.0 org.axonframework.messaging.tracing.attributes attributes 0.0 0 6
8 axon-update-5.0.0 org.axonframework.update.api api 0.0 0 6
9 axon-common-5.0.0 org.axonframework.common.lifecycle lifecycle 0.0 0 5
10 axon-messaging-5.0.0 org.axonframework.messaging.monitoring.interce... interception 0.0 0 5
11 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling.in... interception 0.0 0 5
12 axon-conversion-5.0.0 org.axonframework.conversion.converter converter 0.0 0 5
13 axon-conversion-5.0.0 org.axonframework.conversion.json json 0.0 0 5
14 axon-tracing-opentelemetry-5.0.0 org.axonframework.extension.tracing.opentelemetry opentelemetry 0.0 0 5
15 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... jpa 0.0 0 4
16 axon-update-5.0.0 org.axonframework.update.detection detection 0.0 0 4
17 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.inte... interception 0.0 0 3
18 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... inmemory 0.0 0 3
19 axon-messaging-5.0.0 org.axonframework.messaging.core.configuration... reflection 0.0 0 3
20 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot.actuato... axonserver 0.0 0 2
21 axon-test-5.0.0 org.axonframework.test.server server 0.0 0 2
22 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... annotation 0.0 0 2
23 axon-messaging-5.0.0 org.axonframework.messaging.core.reflection reflection 0.0 0 2
24 axon-messaging-5.0.0 org.axonframework.messaging.core.unitofwork.an... annotation 0.0 0 2
25 axon-messaging-5.0.0 org.axonframework.messaging.core.configuration configuration 0.0 0 2
26 axon-metrics-micrometer-5.0.0 org.axonframework.extension.metrics.micrometer... reservoir 0.0 0 1
27 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot.util.jpa jpa 0.0 0 1
28 axon-common-5.0.0 org.axonframework.common.io io 0.0 0 1
29 axon-common-5.0.0 org.axonframework.common.digest digest 0.0 0 1

Table 4b

  • Show the top 30 packages with the highest Abstractness and number of Java Types
artifactName fullQualifiedPackageName packageName abstractness numberAbstractTypes numberTypes
141 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot.actuator actuator 1.000000 1 1
142 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... streaming 1.000000 1 1
139 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling.co... configuration 0.750000 3 4
140 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling.conf... configuration 0.750000 3 4
138 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.conf... configuration 0.714286 10 14
137 axon-eventsourcing-5.0.0 org.axonframework.eventsourcing.annotation annotation 0.700000 7 10
135 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot.util util 0.571429 4 7
136 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling.anno... annotation 0.571429 4 7
134 axon-modelling-5.0.0 org.axonframework.modelling.repository repository 0.555556 5 9
133 axon-common-5.0.0 org.axonframework.common.jdbc jdbc 0.545455 6 11
132 axon-modelling-5.0.0 org.axonframework.modelling.configuration configuration 0.538462 7 13
126 axon-common-5.0.0 org.axonframework.common.annotation annotation 0.500000 2 4
127 axon-messaging-5.0.0 org.axonframework.messaging.core.unitofwork.tr... transaction 0.500000 2 4
128 axon-common-5.0.0 org.axonframework.common.jpa jpa 0.500000 1 2
129 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.conv... conversion 0.500000 1 2
130 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling.gateway gateway 0.500000 1 2
131 axon-messaging-5.0.0 org.axonframework.messaging.core.conversion conversion 0.500000 1 2
125 axon-common-5.0.0 org.axonframework.common.configuration configuration 0.478261 22 46
123 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling commandhandling 0.473684 9 19
124 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling eventhandling 0.473684 9 19
122 axon-messaging-5.0.0 org.axonframework.messaging.core.interception.... annotation 0.454545 5 11
121 axon-test-5.0.0 org.axonframework.test.fixture fixture 0.451613 14 31
120 axon-messaging-5.0.0 org.axonframework.messaging.eventstreaming eventstreaming 0.437500 7 16
118 axon-modelling-5.0.0 org.axonframework.modelling.entity.child child 0.428571 6 14
119 axon-eventsourcing-5.0.0 org.axonframework.eventsourcing eventsourcing 0.428571 3 7
117 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling queryhandling 0.416667 10 24
114 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling.di... distributed 0.400000 4 10
115 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.repl... annotation 0.400000 4 10
116 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.gateway gateway 0.400000 2 5
113 axon-messaging-5.0.0 org.axonframework.messaging.tracing tracing 0.384615 5 13

Table 4c

  • Show the top 30 packages including their sub-packages with the highest package depth and lowest Abstractness
  • Set the property "abstractnessIncludingSubpackages" on Package nodes.
artifactName fullQualifiedPackageName packageName abstractness numberAbstractTypes numberTypes maxSubpackageDepth
0 axon-metrics-micrometer-5.0.0 org.axonframework.extension.metrics.micrometer micrometer 0.0 0 13 1
1 axon-messaging-5.0.0 org.axonframework.messaging.core.configuration configuration 0.0 0 5 1
2 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot.autoconfig autoconfig 0.0 0 31 0
3 axon-server-connector-5.0.0 org.axonframework.axonserver.connector.event event 0.0 0 14 0
4 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling.inte... interception 0.0 0 8 0
5 axon-messaging-5.0.0 org.axonframework.messaging.core.timeout timeout 0.0 0 8 0
6 axon-server-connector-5.0.0 org.axonframework.axonserver.connector.command command 0.0 0 6 0
7 axon-messaging-5.0.0 org.axonframework.messaging.tracing.attributes attributes 0.0 0 6 0
8 axon-update-5.0.0 org.axonframework.update.api api 0.0 0 6 0
9 axon-common-5.0.0 org.axonframework.common.lifecycle lifecycle 0.0 0 5 0
10 axon-messaging-5.0.0 org.axonframework.messaging.monitoring.interce... interception 0.0 0 5 0
11 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling.in... interception 0.0 0 5 0
12 axon-conversion-5.0.0 org.axonframework.conversion.converter converter 0.0 0 5 0
13 axon-conversion-5.0.0 org.axonframework.conversion.json json 0.0 0 5 0
14 axon-tracing-opentelemetry-5.0.0 org.axonframework.extension.tracing.opentelemetry opentelemetry 0.0 0 5 0
15 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... jpa 0.0 0 4 0
16 axon-update-5.0.0 org.axonframework.update.detection detection 0.0 0 4 0
17 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.inte... interception 0.0 0 3 0
18 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... inmemory 0.0 0 3 0
19 axon-messaging-5.0.0 org.axonframework.messaging.core.configuration... reflection 0.0 0 3 0
20 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot.actuato... axonserver 0.0 0 2 0
21 axon-test-5.0.0 org.axonframework.test.server server 0.0 0 2 0
22 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... annotation 0.0 0 2 0
23 axon-messaging-5.0.0 org.axonframework.messaging.core.reflection reflection 0.0 0 2 0
24 axon-messaging-5.0.0 org.axonframework.messaging.core.unitofwork.an... annotation 0.0 0 2 0
25 axon-metrics-micrometer-5.0.0 org.axonframework.extension.metrics.micrometer... reservoir 0.0 0 1 0
26 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot.util.jpa jpa 0.0 0 1 0
27 axon-common-5.0.0 org.axonframework.common.io io 0.0 0 1 0
28 axon-common-5.0.0 org.axonframework.common.digest digest 0.0 0 1 0
29 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling.retry retry 0.0 0 1 0

Table 4d

  • Show the top 30 packages including their sub-packages with the highest package depth and highest Abstractness
artifactName fullQualifiedPackageName packageName abstractness numberAbstractTypes numberTypes maxSubpackageDepth
112 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling.co... configuration 0.750000 3 4 0
113 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling.conf... configuration 0.750000 3 4 0
111 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.conf... configuration 0.714286 10 14 0
110 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling.anno... annotation 0.571429 4 7 0
109 axon-eventsourcing-5.0.0 org.axonframework.eventsourcing.annotation annotation 0.562500 9 16 1
108 axon-modelling-5.0.0 org.axonframework.modelling.repository repository 0.555556 5 9 0
107 axon-common-5.0.0 org.axonframework.common.jdbc jdbc 0.545455 6 11 0
106 axon-modelling-5.0.0 org.axonframework.modelling.configuration configuration 0.538462 7 13 0
99 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot.util util 0.500000 4 8 1
100 axon-common-5.0.0 org.axonframework.common.annotation annotation 0.500000 2 4 0
101 axon-messaging-5.0.0 org.axonframework.messaging.core.unitofwork.tr... transaction 0.500000 2 4 0
102 axon-common-5.0.0 org.axonframework.common.jpa jpa 0.500000 1 2 0
103 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.conv... conversion 0.500000 1 2 0
104 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling.gateway gateway 0.500000 1 2 0
105 axon-messaging-5.0.0 org.axonframework.messaging.core.conversion conversion 0.500000 1 2 0
98 axon-common-5.0.0 org.axonframework.common.configuration configuration 0.478261 22 46 0
97 axon-messaging-5.0.0 org.axonframework.messaging.core.interception.... annotation 0.454545 5 11 0
96 axon-test-5.0.0 org.axonframework.test.fixture fixture 0.451613 14 31 0
95 axon-messaging-5.0.0 org.axonframework.messaging.eventstreaming eventstreaming 0.437500 7 16 0
94 axon-modelling-5.0.0 org.axonframework.modelling.entity.child child 0.428571 6 14 0
91 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling.di... distributed 0.400000 4 10 0
92 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.repl... annotation 0.400000 4 10 0
93 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.gateway gateway 0.400000 2 5 0
90 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling queryhandling 0.380952 24 63 1
89 axon-modelling-5.0.0 org.axonframework.modelling modelling 0.376344 35 93 2
87 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling commandhandling 0.375000 24 64 1
88 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling.ga... gateway 0.375000 3 8 0
85 axon-messaging-5.0.0 org.axonframework.messaging.core.unitofwork unitofwork 0.363636 8 22 1
86 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling.dist... distributed 0.363636 4 11 0
83 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.replay replay 0.357143 5 14 1

Distance from the main sequence

The main sequence is a imaginary line that represents a good compromise between Abstractness and Instability. A high distance to this line may indicate problems. For example is very stable (rigid) code with low abstractness hard to change.

Read more details on that in OO Design Quality Metrics and Calculate metrics.

Table 5a

  • Show the top 30 packages with the highest distance from the "main sequence"
artifactName fullQualifiedName name distance abstractness instability elementsCount
0 axon-messaging-5.0.0 org.axonframework.messaging.tracing.attributes attributes NaN 0.0 NaN 6
1 axon-conversion-5.0.0 org.axonframework.conversion.converter converter NaN 0.0 NaN 5
2 axon-messaging-5.0.0 org.axonframework.messaging.core.reflection reflection NaN 0.0 NaN 2
3 axon-metrics-micrometer-5.0.0 org.axonframework.extension.metrics.micrometer... reservoir NaN 0.0 NaN 1
4 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot.actuator actuator NaN 1.0 NaN 1
5 axon-common-5.0.0 org.axonframework.common.io io NaN 0.0 NaN 1
6 axon-common-5.0.0 org.axonframework.common.digest digest NaN 0.0 NaN 1
7 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling.retry retry NaN 0.0 NaN 1
8 axon-metrics-micrometer-5.0.0 org org NaN 0.0 NaN 0
9 axon-metrics-micrometer-5.0.0 org.axonframework axonframework NaN 0.0 NaN 0
10 axon-metrics-micrometer-5.0.0 org.axonframework.extension extension NaN 0.0 NaN 0
11 axon-metrics-micrometer-5.0.0 org.axonframework.extension.metrics metrics NaN 0.0 NaN 0
12 axon-spring-boot-autoconfigure-5.0.0 org org NaN 0.0 NaN 0
13 axon-spring-boot-autoconfigure-5.0.0 org.axonframework axonframework NaN 0.0 NaN 0
14 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension extension NaN 0.0 NaN 0
15 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot.service service NaN 0.0 NaN 0
16 axon-common-5.0.0 org org NaN 0.0 NaN 0
17 axon-common-5.0.0 org.axonframework axonframework NaN 0.0 NaN 0
18 axon-test-5.0.0 org org NaN 0.0 NaN 0
19 axon-test-5.0.0 org.axonframework axonframework NaN 0.0 NaN 0
20 axon-server-connector-5.0.0 org org NaN 0.0 NaN 0
21 axon-server-connector-5.0.0 org.axonframework axonframework NaN 0.0 NaN 0
22 axon-server-connector-5.0.0 org.axonframework.axonserver axonserver NaN 0.0 NaN 0
23 axon-messaging-5.0.0 org org NaN 0.0 NaN 0
24 axon-messaging-5.0.0 org.axonframework axonframework NaN 0.0 NaN 0
25 axon-messaging-5.0.0 org.axonframework.messaging messaging NaN 0.0 NaN 0
26 axon-eventsourcing-5.0.0 org org NaN 0.0 NaN 0
27 axon-eventsourcing-5.0.0 org.axonframework axonframework NaN 0.0 NaN 0
28 axon-update-5.0.0 org org NaN 0.0 NaN 0
29 axon-update-5.0.0 org.axonframework axonframework NaN 0.0 NaN 0

Table 5b

  • Show the top 30 packages including their sub-packages with the highest distance from the "main sequence"
artifactName fullQualifiedName name distance abstractness instability elementsCount
0 axon-common-5.0.0 org.axonframework.common.lifecycle lifecycle 0.833333 0.000000 0.166667 5
1 axon-conversion-5.0.0 org.axonframework.conversion conversion 0.775399 0.166667 0.057935 30
2 axon-common-5.0.0 org.axonframework.common.infra infra 0.745844 0.250000 0.004156 8
3 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... token 0.718425 0.129032 0.152542 31
4 axon-messaging-5.0.0 org.axonframework.messaging.core core 0.692839 0.285714 0.021447 217
5 axon-update-5.0.0 org.axonframework.update.api api 0.684211 0.000000 0.315789 6
6 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling.conf... configuration 0.671053 0.750000 0.921053 4
7 axon-test-5.0.0 org.axonframework.test.server server 0.666667 0.000000 0.333333 2
8 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling.co... configuration 0.666667 0.750000 0.916667 4
9 axon-messaging-5.0.0 org.axonframework.messaging.core.unitofwork unitofwork 0.621277 0.363636 0.015087 22
10 axon-common-5.0.0 org.axonframework.common.util util 0.575758 0.333333 0.090909 6
11 axon-messaging-5.0.0 org.axonframework.messaging.tracing tracing 0.530960 0.263158 0.205882 19
12 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling.anno... annotation 0.522648 0.571429 0.951220 7
13 axon-common-5.0.0 org.axonframework.common.configuration configuration 0.500210 0.478261 0.021529 46
14 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot.util.jpa jpa 0.500000 0.000000 0.500000 1
15 axon-update-5.0.0 org.axonframework.update.common common 0.500000 0.000000 0.500000 1
16 axon-common-5.0.0 org.axonframework.common.annotation annotation 0.498905 0.500000 0.001095 4
17 axon-eventsourcing-5.0.0 org.axonframework.eventsourcing.annotation annotation 0.473214 0.562500 0.910714 16
18 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling eventhandling 0.447202 0.313953 0.238844 172
19 axon-update-5.0.0 org.axonframework.update.detection detection 0.444444 0.000000 0.555556 4
20 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.proc... errorhandling 0.435897 0.333333 0.230769 3
21 axon-messaging-5.0.0 org.axonframework.messaging.core.annotation annotation 0.435558 0.326531 0.237911 49
22 axon-common-5.0.0 org.axonframework.common.property property 0.416667 0.333333 0.250000 9
23 axon-modelling-5.0.0 org.axonframework.modelling.configuration configuration 0.415174 0.538462 0.876712 13
24 axon-spring-boot-autoconfigure-5.0.0 org.axonframework.extension.springboot.actuato... axonserver 0.400000 0.000000 0.600000 2
25 axon-messaging-5.0.0 org.axonframework.messaging.queryhandling.gateway gateway 0.400000 0.500000 0.900000 2
26 axon-messaging-5.0.0 org.axonframework.messaging.eventstreaming eventstreaming 0.399457 0.437500 0.163043 16
27 axon-messaging-5.0.0 org.axonframework.messaging.eventhandling.conf... configuration 0.377269 0.714286 0.662983 14
28 axon-messaging-5.0.0 org.axonframework.messaging.core.conversion conversion 0.363014 0.500000 0.136986 2
29 axon-messaging-5.0.0 org.axonframework.messaging.commandhandling commandhandling 0.360369 0.375000 0.264631 64

Abstractness vs. Instability Plot with "Main Sequence" line as reference

  • Plot Abstractness vs. Instability of all packages
  • Draw the "main sequence" as dashed green diagonal line
  • Scale the packages by the number of types they contain
  • Color the packages by their distance to the "main sequence" (blue=near, red=far)

Figure 5a - Packages without their sub-packages

png

Figure 5b - Packages including their sub-packages

png