Skip to content

Latest commit

 

History

History
3994 lines (3859 loc) · 91 KB

File metadata and controls

3994 lines (3859 loc) · 91 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.1 org.axonframework.messaging.core.unitofwork unitofwork 11695 41605 245 55 60 4
1 axon-messaging-5.0.1 org.axonframework.messaging.core core 10993 35618 406 78 69 7
2 axon-common-5.0.1 org.axonframework.common.configuration configuration 3336 17876 145 50 32 8
3 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling eventhandling 3209 10719 152 31 37 6
4 axon-common-5.0.1 org.axonframework.common.annotation annotation 1842 2058 130 16 52 7
5 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling commandhandling 1442 5110 97 25 26 6
6 axon-common-5.0.1 org.axonframework.common.infra infra 1212 1486 111 27 41 6
7 axon-common-5.0.1 org.axonframework.common common 838 2028 278 20 77 10
8 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling queryhandling 698 2468 76 17 16 3
9 axon-messaging-5.0.1 org.axonframework.messaging.core.annotation annotation 484 1624 117 11 24 4
10 axon-conversion-5.0.1 org.axonframework.conversion conversion 426 1719 55 12 19 4
11 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... token 425 2089 58 8 16 3
12 axon-messaging-5.0.1 org.axonframework.messaging.eventstreaming eventstreaming 283 801 53 14 10 3
13 axon-eventsourcing-5.0.1 org.axonframework.eventsourcing.eventstore eventstore 223 719 65 7 9 3
14 axon-messaging-5.0.1 org.axonframework.messaging.tracing tracing 137 481 37 7 7 1
15 axon-test-5.0.1 org.axonframework.test.fixture fixture 132 357 26 0 1 0
16 axon-modelling-5.0.1 org.axonframework.modelling modelling 125 282 36 9 9 2
17 axon-modelling-5.0.1 org.axonframework.modelling.entity entity 115 394 25 5 5 1
18 axon-modelling-5.0.1 org.axonframework.modelling.entity.child child 89 230 28 7 3 0
19 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... segmenting 86 659 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.1 org.axonframework.messaging.core core 18122 61768 377 113 68 7
1 axon-messaging-5.0.1 org.axonframework.messaging.core.unitofwork unitofwork 11490 40479 230 55 58 5
2 axon-common-5.0.1 org.axonframework.common common 6759 22336 445 99 87 9
3 axon-common-5.0.1 org.axonframework.common.configuration configuration 3175 17216 105 50 31 8
4 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling eventhandling 2081 7412 97 35 25 6
5 axon-common-5.0.1 org.axonframework.common.annotation annotation 1841 2057 129 16 51 7
6 axon-common-5.0.1 org.axonframework.common.infra infra 1198 1412 106 27 40 6
7 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling commandhandling 883 3295 63 26 20 6
8 axon-messaging-5.0.1 org.axonframework.messaging.core.annotation annotation 396 1318 81 11 23 4
9 axon-conversion-5.0.1 org.axonframework.conversion conversion 374 1538 36 12 15 3
10 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... token 350 1386 45 8 11 4
11 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling queryhandling 279 897 34 15 12 5
12 axon-messaging-5.0.1 org.axonframework.messaging.eventstreaming eventstreaming 231 656 39 14 9 3
13 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... processing 217 663 30 13 10 5
14 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... streaming 207 633 30 12 11 4
15 axon-messaging-5.0.1 org.axonframework.messaging.tracing tracing 108 359 22 7 5 1
16 axon-eventsourcing-5.0.1 org.axonframework.eventsourcing.eventstore eventstore 76 206 19 6 6 3
17 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... segmenting 74 620 23 5 9 1
18 axon-modelling-5.0.1 org.axonframework.modelling modelling 74 226 13 20 4 1
19 axon-modelling-5.0.1 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.1 org.axonframework.messaging.core.configuration configuration 2549 15962 75 40 28 2
1 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... pooled 2346 9920 96 47 21 1
2 axon-eventsourcing-5.0.1 org.axonframework.eventsourcing.eventstore.jpa jpa 1260 4805 59 27 16 3
3 axon-eventsourcing-5.0.1 org.axonframework.eventsourcing.configuration configuration 1237 4801 66 41 25 3
4 axon-server-connector-5.0.1 org.axonframework.axonserver.connector.event event 1228 3848 72 29 18 3
5 axon-messaging-5.0.1 org.axonframework.messaging.core.interception interception 1084 5770 46 25 11 1
6 axon-test-5.0.1 org.axonframework.test.fixture fixture 954 3383 71 38 15 3
7 axon-modelling-5.0.1 org.axonframework.modelling.entity.annotation annotation 858 3265 64 30 19 3
8 axon-modelling-5.0.1 org.axonframework.modelling.entity entity 800 2887 35 21 9 2
9 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... subscribing 737 2672 46 29 15 1
10 axon-eventsourcing-5.0.1 org.axonframework.eventsourcing.eventstore eventstore 705 2705 64 29 10 2
11 axon-spring-boot-autoconfigure-5.0.1 org.axonframework.extension.springboot.autoconfig autoconfig 678 2925 99 36 34 6
12 axon-modelling-5.0.1 org.axonframework.modelling.configuration configuration 585 2279 41 29 10 2
13 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling queryhandling 547 2129 48 23 9 2
14 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.anno... annotation 528 1611 51 23 14 2
15 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling.dist... distributed 513 1412 38 23 10 1
16 axon-messaging-5.0.1 org.axonframework.messaging.monitoring.interce... interception 500 1550 15 15 6 0
17 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling.inte... interception 491 1561 26 16 6 1
18 axon-messaging-5.0.1 org.axonframework.messaging.core.annotation annotation 464 1548 74 16 10 1
19 axon-messaging-5.0.1 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.1 org.axonframework.messaging.eventhandling eventhandling 656 2132 104 47 20 2
1 axon-messaging-5.0.1 org.axonframework.messaging.core core 398 1425 84 72 25 2
2 axon-modelling-5.0.1 org.axonframework.modelling modelling 381 1124 66 23 19 2
3 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... processing 345 1285 79 13 18 2
4 axon-eventsourcing-5.0.1 org.axonframework.eventsourcing eventsourcing 317 1060 96 14 30 3
5 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling commandhandling 313 1019 75 29 14 2
6 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling queryhandling 310 1111 73 19 12 2
7 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... streaming 275 1026 80 11 20 2
8 axon-modelling-5.0.1 org.axonframework.modelling.entity entity 270 856 47 11 17 3
9 axon-server-connector-5.0.1 org.axonframework.axonserver.connector connector 253 870 107 2 24 3
10 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... pooled 231 928 73 2 20 1
11 axon-eventsourcing-5.0.1 org.axonframework.eventsourcing.eventstore eventstore 183 597 53 7 15 3
12 axon-modelling-5.0.1 org.axonframework.modelling.entity.annotation annotation 179 681 49 5 18 3
13 axon-messaging-5.0.1 org.axonframework.messaging.core.unitofwork unitofwork 176 697 11 55 5 1
14 axon-messaging-5.0.1 org.axonframework.messaging.core.interception interception 166 587 43 0 11 1
15 axon-test-5.0.1 org.axonframework.test test 157 469 43 9 13 2
16 axon-server-connector-5.0.1 org.axonframework.axonserver.connector.event event 142 420 59 0 17 3
17 axon-test-5.0.1 org.axonframework.test.fixture fixture 129 462 41 8 14 3
18 axon-messaging-5.0.1 org.axonframework.messaging.core.annotation annotation 124 337 36 8 9 1
19 axon-messaging-5.0.1 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.1 org.axonframework.common.annotation annotation 0.001626 0.022556 0.000000 0.037037 0.000000 3 1842 3 130 0 16 2 52 0 7
1 axon-messaging-5.0.1 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.1 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.1 org.axonframework.messaging.core core 0.030086 0.164609 0.178947 0.103896 0.222222 341 10993 80 406 17 78 8 69 2 7
4 axon-common-5.0.1 org.axonframework.common common 0.035673 0.057627 0.000000 0.012821 0.000000 31 838 17 278 0 20 1 77 0 10
5 axon-messaging-5.0.1 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.1 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.1 org.axonframework.common.configuration configuration 0.074875 0.263959 0.295775 0.135135 0.000000 270 3336 52 145 21 50 5 32 0 8
8 axon-messaging-5.0.1 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.1 org.axonframework.messaging.commandhandling commandhandling 0.192157 0.276119 0.444444 0.187500 0.250000 343 1442 37 97 20 25 6 26 2 6
10 axon-common-5.0.1 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.1 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.1 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.1 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.1 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.1 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.1 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.1 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.1 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.1 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.1 org.axonframework.common.annotation annotation 0.001085 0.015267 0.000000 0.019231 0.000000 2 1841 2 129 0 16 1 51 0 7
1 axon-common-5.0.1 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.1 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-common-5.0.1 org.axonframework.common.configuration configuration 0.021270 0.070796 0.425287 0.114286 0.000000 69 3175 8 105 37 50 4 31 0 8
4 axon-messaging-5.0.1 org.axonframework.messaging.core core 0.021490 0.182213 0.389189 0.268817 0.222222 398 18122 84 377 72 113 25 68 2 7
5 axon-conversion-5.0.1 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.1 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.1 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.1 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.1 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.1 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.1 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.1 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.1 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.1 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.1 org.axonframework.messaging.core.annotation annotation 0.238462 0.307692 0.421053 0.281250 0.200000 124 396 36 81 8 11 9 23 1 4
16 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling eventhandling 0.239678 0.517413 0.573171 0.444444 0.250000 656 2081 104 97 47 35 20 25 2 6
17 axon-common-5.0.1 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.1 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.1 org.axonframework.messaging.commandhandling commandhandling 0.261706 0.543478 0.527273 0.411765 0.250000 313 883 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.1 org.axonframework.extension.springboot.autoconfig autoconfig 0.0 0 34
1 axon-spring-boot-autoconfigure-5.0.1 org.axonframework.extension.springboot springboot 0.0 0 21
2 axon-server-connector-5.0.1 org.axonframework.axonserver.connector.event event 0.0 0 14
3 axon-metrics-micrometer-5.0.1 org.axonframework.extension.metrics.micrometer micrometer 0.0 0 12
4 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling.inte... interception 0.0 0 8
5 axon-messaging-5.0.1 org.axonframework.messaging.core.timeout timeout 0.0 0 8
6 axon-server-connector-5.0.1 org.axonframework.axonserver.connector.command command 0.0 0 6
7 axon-messaging-5.0.1 org.axonframework.messaging.tracing.attributes attributes 0.0 0 6
8 axon-update-5.0.1 org.axonframework.update.api api 0.0 0 6
9 axon-tracing-opentelemetry-5.0.1 org.axonframework.extension.tracing.opentelemetry opentelemetry 0.0 0 5
10 axon-messaging-5.0.1 org.axonframework.messaging.monitoring.interce... interception 0.0 0 5
11 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling.in... interception 0.0 0 5
12 axon-conversion-5.0.1 org.axonframework.conversion.converter converter 0.0 0 5
13 axon-conversion-5.0.1 org.axonframework.conversion.json json 0.0 0 5
14 axon-common-5.0.1 org.axonframework.common.lifecycle lifecycle 0.0 0 5
15 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... jpa 0.0 0 4
16 axon-update-5.0.1 org.axonframework.update.detection detection 0.0 0 4
17 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.inte... interception 0.0 0 3
18 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... inmemory 0.0 0 3
19 axon-messaging-5.0.1 org.axonframework.messaging.core.configuration... reflection 0.0 0 3
20 axon-test-5.0.1 org.axonframework.test.server server 0.0 0 2
21 axon-spring-boot-autoconfigure-5.0.1 org.axonframework.extension.springboot.actuato... axonserver 0.0 0 2
22 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... annotation 0.0 0 2
23 axon-messaging-5.0.1 org.axonframework.messaging.core.reflection reflection 0.0 0 2
24 axon-messaging-5.0.1 org.axonframework.messaging.core.unitofwork.an... annotation 0.0 0 2
25 axon-messaging-5.0.1 org.axonframework.messaging.core.configuration configuration 0.0 0 2
26 axon-spring-boot-autoconfigure-5.0.1 org.axonframework.extension.springboot.util.jpa jpa 0.0 0 1
27 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling.retry retry 0.0 0 1
28 axon-update-5.0.1 org.axonframework.update.common common 0.0 0 1
29 axon-metrics-micrometer-5.0.1 org.axonframework.extension.metrics.micrometer... reservoir 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.1 org.axonframework.extension.springboot.actuator actuator 1.000000 1 1
142 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... streaming 1.000000 1 1
139 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling.co... configuration 0.750000 3 4
140 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling.conf... configuration 0.750000 3 4
138 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.conf... configuration 0.714286 10 14
137 axon-eventsourcing-5.0.1 org.axonframework.eventsourcing.annotation annotation 0.700000 7 10
135 axon-spring-boot-autoconfigure-5.0.1 org.axonframework.extension.springboot.util util 0.571429 4 7
136 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling.anno... annotation 0.571429 4 7
134 axon-modelling-5.0.1 org.axonframework.modelling.repository repository 0.555556 5 9
133 axon-common-5.0.1 org.axonframework.common.jdbc jdbc 0.545455 6 11
132 axon-modelling-5.0.1 org.axonframework.modelling.configuration configuration 0.538462 7 13
126 axon-messaging-5.0.1 org.axonframework.messaging.core.unitofwork.tr... transaction 0.500000 2 4
127 axon-common-5.0.1 org.axonframework.common.annotation annotation 0.500000 2 4
128 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.conv... conversion 0.500000 1 2
129 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling.gateway gateway 0.500000 1 2
130 axon-messaging-5.0.1 org.axonframework.messaging.core.conversion conversion 0.500000 1 2
131 axon-common-5.0.1 org.axonframework.common.jpa jpa 0.500000 1 2
125 axon-common-5.0.1 org.axonframework.common.configuration configuration 0.478261 22 46
123 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling commandhandling 0.473684 9 19
124 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling eventhandling 0.473684 9 19
122 axon-messaging-5.0.1 org.axonframework.messaging.core.interception.... annotation 0.454545 5 11
121 axon-test-5.0.1 org.axonframework.test.fixture fixture 0.451613 14 31
120 axon-messaging-5.0.1 org.axonframework.messaging.eventstreaming eventstreaming 0.437500 7 16
118 axon-modelling-5.0.1 org.axonframework.modelling.entity.child child 0.428571 6 14
119 axon-eventsourcing-5.0.1 org.axonframework.eventsourcing eventsourcing 0.428571 3 7
117 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling queryhandling 0.416667 10 24
114 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling.di... distributed 0.400000 4 10
115 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.repl... annotation 0.400000 4 10
116 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.gateway gateway 0.400000 2 5
113 axon-messaging-5.0.1 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.1 org.axonframework.extension.metrics.micrometer micrometer 0.0 0 13 1
1 axon-messaging-5.0.1 org.axonframework.messaging.core.configuration configuration 0.0 0 5 1
2 axon-spring-boot-autoconfigure-5.0.1 org.axonframework.extension.springboot.autoconfig autoconfig 0.0 0 34 0
3 axon-server-connector-5.0.1 org.axonframework.axonserver.connector.event event 0.0 0 14 0
4 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling.inte... interception 0.0 0 8 0
5 axon-messaging-5.0.1 org.axonframework.messaging.core.timeout timeout 0.0 0 8 0
6 axon-server-connector-5.0.1 org.axonframework.axonserver.connector.command command 0.0 0 6 0
7 axon-messaging-5.0.1 org.axonframework.messaging.tracing.attributes attributes 0.0 0 6 0
8 axon-update-5.0.1 org.axonframework.update.api api 0.0 0 6 0
9 axon-tracing-opentelemetry-5.0.1 org.axonframework.extension.tracing.opentelemetry opentelemetry 0.0 0 5 0
10 axon-messaging-5.0.1 org.axonframework.messaging.monitoring.interce... interception 0.0 0 5 0
11 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling.in... interception 0.0 0 5 0
12 axon-conversion-5.0.1 org.axonframework.conversion.converter converter 0.0 0 5 0
13 axon-conversion-5.0.1 org.axonframework.conversion.json json 0.0 0 5 0
14 axon-common-5.0.1 org.axonframework.common.lifecycle lifecycle 0.0 0 5 0
15 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... jpa 0.0 0 4 0
16 axon-update-5.0.1 org.axonframework.update.detection detection 0.0 0 4 0
17 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.inte... interception 0.0 0 3 0
18 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... inmemory 0.0 0 3 0
19 axon-messaging-5.0.1 org.axonframework.messaging.core.configuration... reflection 0.0 0 3 0
20 axon-test-5.0.1 org.axonframework.test.server server 0.0 0 2 0
21 axon-spring-boot-autoconfigure-5.0.1 org.axonframework.extension.springboot.actuato... axonserver 0.0 0 2 0
22 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... annotation 0.0 0 2 0
23 axon-messaging-5.0.1 org.axonframework.messaging.core.reflection reflection 0.0 0 2 0
24 axon-messaging-5.0.1 org.axonframework.messaging.core.unitofwork.an... annotation 0.0 0 2 0
25 axon-spring-boot-autoconfigure-5.0.1 org.axonframework.extension.springboot.util.jpa jpa 0.0 0 1 0
26 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling.retry retry 0.0 0 1 0
27 axon-update-5.0.1 org.axonframework.update.common common 0.0 0 1 0
28 axon-metrics-micrometer-5.0.1 org.axonframework.extension.metrics.micrometer... reservoir 0.0 0 1 0
29 axon-common-5.0.1 org.axonframework.common.io io 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.1 org.axonframework.messaging.commandhandling.co... configuration 0.750000 3 4 0
113 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling.conf... configuration 0.750000 3 4 0
111 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.conf... configuration 0.714286 10 14 0
110 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling.anno... annotation 0.571429 4 7 0
109 axon-eventsourcing-5.0.1 org.axonframework.eventsourcing.annotation annotation 0.562500 9 16 1
108 axon-modelling-5.0.1 org.axonframework.modelling.repository repository 0.555556 5 9 0
107 axon-common-5.0.1 org.axonframework.common.jdbc jdbc 0.545455 6 11 0
106 axon-modelling-5.0.1 org.axonframework.modelling.configuration configuration 0.538462 7 13 0
99 axon-spring-boot-autoconfigure-5.0.1 org.axonframework.extension.springboot.util util 0.500000 4 8 1
100 axon-messaging-5.0.1 org.axonframework.messaging.core.unitofwork.tr... transaction 0.500000 2 4 0
101 axon-common-5.0.1 org.axonframework.common.annotation annotation 0.500000 2 4 0
102 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.conv... conversion 0.500000 1 2 0
103 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling.gateway gateway 0.500000 1 2 0
104 axon-messaging-5.0.1 org.axonframework.messaging.core.conversion conversion 0.500000 1 2 0
105 axon-common-5.0.1 org.axonframework.common.jpa jpa 0.500000 1 2 0
98 axon-common-5.0.1 org.axonframework.common.configuration configuration 0.478261 22 46 0
97 axon-messaging-5.0.1 org.axonframework.messaging.core.interception.... annotation 0.454545 5 11 0
96 axon-test-5.0.1 org.axonframework.test.fixture fixture 0.451613 14 31 0
95 axon-messaging-5.0.1 org.axonframework.messaging.eventstreaming eventstreaming 0.437500 7 16 0
94 axon-modelling-5.0.1 org.axonframework.modelling.entity.child child 0.428571 6 14 0
91 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling.di... distributed 0.400000 4 10 0
92 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.repl... annotation 0.400000 4 10 0
93 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.gateway gateway 0.400000 2 5 0
90 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling queryhandling 0.380952 24 63 1
89 axon-modelling-5.0.1 org.axonframework.modelling modelling 0.376344 35 93 2
87 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling commandhandling 0.375000 24 64 1
88 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling.ga... gateway 0.375000 3 8 0
86 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.anno... annotation 0.368421 7 19 0
84 axon-messaging-5.0.1 org.axonframework.messaging.core.unitofwork unitofwork 0.363636 8 22 1
85 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling.dist... distributed 0.363636 4 11 0

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.1 org.axonframework.messaging.tracing.attributes attributes NaN 0.0 NaN 6
1 axon-conversion-5.0.1 org.axonframework.conversion.converter converter NaN 0.0 NaN 5
2 axon-messaging-5.0.1 org.axonframework.messaging.core.reflection reflection NaN 0.0 NaN 2
3 axon-spring-boot-autoconfigure-5.0.1 org.axonframework.extension.springboot.actuator actuator NaN 1.0 NaN 1
4 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling.retry retry NaN 0.0 NaN 1
5 axon-metrics-micrometer-5.0.1 org.axonframework.extension.metrics.micrometer... reservoir NaN 0.0 NaN 1
6 axon-common-5.0.1 org.axonframework.common.io io NaN 0.0 NaN 1
7 axon-common-5.0.1 org.axonframework.common.digest digest NaN 0.0 NaN 1
8 axon-server-connector-5.0.1 org org NaN 0.0 NaN 0
9 axon-server-connector-5.0.1 org.axonframework axonframework NaN 0.0 NaN 0
10 axon-server-connector-5.0.1 org.axonframework.axonserver axonserver NaN 0.0 NaN 0
11 axon-test-5.0.1 org org NaN 0.0 NaN 0
12 axon-test-5.0.1 org.axonframework axonframework NaN 0.0 NaN 0
13 axon-tracing-opentelemetry-5.0.1 org org NaN 0.0 NaN 0
14 axon-tracing-opentelemetry-5.0.1 org.axonframework axonframework NaN 0.0 NaN 0
15 axon-tracing-opentelemetry-5.0.1 org.axonframework.extension extension NaN 0.0 NaN 0
16 axon-tracing-opentelemetry-5.0.1 org.axonframework.extension.tracing tracing NaN 0.0 NaN 0
17 axon-spring-boot-autoconfigure-5.0.1 org org NaN 0.0 NaN 0
18 axon-spring-boot-autoconfigure-5.0.1 org.axonframework axonframework NaN 0.0 NaN 0
19 axon-spring-boot-autoconfigure-5.0.1 org.axonframework.extension extension NaN 0.0 NaN 0
20 axon-spring-boot-autoconfigure-5.0.1 org.axonframework.extension.springboot.service service NaN 0.0 NaN 0
21 axon-modelling-5.0.1 org org NaN 0.0 NaN 0
22 axon-modelling-5.0.1 org.axonframework axonframework NaN 0.0 NaN 0
23 axon-messaging-5.0.1 org org NaN 0.0 NaN 0
24 axon-messaging-5.0.1 org.axonframework axonframework NaN 0.0 NaN 0
25 axon-messaging-5.0.1 org.axonframework.messaging messaging NaN 0.0 NaN 0
26 axon-conversion-5.0.1 org org NaN 0.0 NaN 0
27 axon-conversion-5.0.1 org.axonframework axonframework NaN 0.0 NaN 0
28 axon-update-5.0.1 org org NaN 0.0 NaN 0
29 axon-update-5.0.1 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.1 org.axonframework.common.lifecycle lifecycle 0.833333 0.000000 0.166667 5
1 axon-conversion-5.0.1 org.axonframework.conversion conversion 0.775399 0.166667 0.057935 30
2 axon-common-5.0.1 org.axonframework.common.infra infra 0.745844 0.250000 0.004156 8
3 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... token 0.718425 0.129032 0.152542 31
4 axon-messaging-5.0.1 org.axonframework.messaging.core core 0.694106 0.284404 0.021490 218
5 axon-update-5.0.1 org.axonframework.update.api api 0.684211 0.000000 0.315789 6
6 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling.conf... configuration 0.671053 0.750000 0.921053 4
7 axon-test-5.0.1 org.axonframework.test.server server 0.666667 0.000000 0.333333 2
8 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling.co... configuration 0.666667 0.750000 0.916667 4
9 axon-messaging-5.0.1 org.axonframework.messaging.core.unitofwork unitofwork 0.621277 0.363636 0.015087 22
10 axon-common-5.0.1 org.axonframework.common.util util 0.575758 0.333333 0.090909 6
11 axon-messaging-5.0.1 org.axonframework.messaging.tracing tracing 0.530960 0.263158 0.205882 19
12 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling.anno... annotation 0.522648 0.571429 0.951220 7
13 axon-common-5.0.1 org.axonframework.common.configuration configuration 0.500469 0.478261 0.021270 46
14 axon-update-5.0.1 org.axonframework.update.detection detection 0.500000 0.000000 0.500000 4
15 axon-spring-boot-autoconfigure-5.0.1 org.axonframework.extension.springboot.util.jpa jpa 0.500000 0.000000 0.500000 1
16 axon-update-5.0.1 org.axonframework.update.common common 0.500000 0.000000 0.500000 1
17 axon-common-5.0.1 org.axonframework.common.annotation annotation 0.498915 0.500000 0.001085 4
18 axon-eventsourcing-5.0.1 org.axonframework.eventsourcing.annotation annotation 0.473214 0.562500 0.910714 16
19 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling eventhandling 0.444532 0.315789 0.239678 171
20 axon-messaging-5.0.1 org.axonframework.messaging.core.annotation annotation 0.441538 0.320000 0.238462 50
21 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.proc... errorhandling 0.435897 0.333333 0.230769 3
22 axon-common-5.0.1 org.axonframework.common.property property 0.416667 0.333333 0.250000 9
23 axon-modelling-5.0.1 org.axonframework.modelling.configuration configuration 0.415174 0.538462 0.876712 13
24 axon-spring-boot-autoconfigure-5.0.1 org.axonframework.extension.springboot.actuato... axonserver 0.400000 0.000000 0.600000 2
25 axon-messaging-5.0.1 org.axonframework.messaging.queryhandling.gateway gateway 0.400000 0.500000 0.900000 2
26 axon-messaging-5.0.1 org.axonframework.messaging.eventstreaming eventstreaming 0.399457 0.437500 0.163043 16
27 axon-messaging-5.0.1 org.axonframework.messaging.eventhandling.conf... configuration 0.377269 0.714286 0.662983 14
28 axon-messaging-5.0.1 org.axonframework.messaging.commandhandling commandhandling 0.363294 0.375000 0.261706 64
29 axon-messaging-5.0.1 org.axonframework.messaging.core.conversion conversion 0.363014 0.500000 0.136986 2

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