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.3 org.axonframework.messaging.core core 12499 39679 419 83 71 7
1 axon-messaging-5.0.3 org.axonframework.messaging.core.unitofwork unitofwork 11625 38453 242 54 62 4
2 axon-common-5.0.3 org.axonframework.common.configuration configuration 3727 19786 151 53 33 8
3 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling eventhandling 3012 10890 149 30 37 6
4 axon-common-5.0.3 org.axonframework.common.annotation annotation 2579 2787 144 20 60 8
5 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling commandhandling 1497 5379 100 25 27 6
6 axon-common-5.0.3 org.axonframework.common.infra infra 1378 1669 122 30 47 6
7 axon-common-5.0.3 org.axonframework.common common 977 2407 288 22 80 10
8 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling queryhandling 688 2544 76 17 16 3
9 axon-messaging-5.0.3 org.axonframework.messaging.core.annotation annotation 512 1632 119 11 24 4
10 axon-conversion-5.0.3 org.axonframework.conversion conversion 468 1807 62 12 22 4
11 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... token 425 2147 58 8 16 3
12 axon-messaging-5.0.3 org.axonframework.messaging.eventstreaming eventstreaming 293 833 53 14 10 3
13 axon-eventsourcing-5.0.3 org.axonframework.eventsourcing.eventstore eventstore 224 724 65 7 9 3
14 axon-messaging-5.0.3 org.axonframework.messaging.tracing tracing 136 478 36 7 6 1
15 axon-test-5.0.3 org.axonframework.test.fixture fixture 134 376 29 1 2 0
16 axon-modelling-5.0.3 org.axonframework.modelling modelling 125 282 36 9 9 2
17 axon-modelling-5.0.3 org.axonframework.modelling.entity entity 115 394 25 5 5 1
18 axon-modelling-5.0.3 org.axonframework.modelling.entity.child child 89 230 28 7 3 0
19 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... segmenting 86 662 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.3 org.axonframework.messaging.core core 18180 59941 367 115 67 7
1 axon-messaging-5.0.3 org.axonframework.messaging.core.unitofwork unitofwork 11275 37337 228 54 58 5
2 axon-common-5.0.3 org.axonframework.common common 8038 25190 470 107 94 9
3 axon-common-5.0.3 org.axonframework.common.configuration configuration 3566 19095 111 53 32 8
4 axon-common-5.0.3 org.axonframework.common.annotation annotation 2578 2786 143 20 59 8
5 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling eventhandling 2061 7468 99 35 26 6
6 axon-common-5.0.3 org.axonframework.common.infra infra 1364 1595 117 30 46 6
7 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling commandhandling 900 3463 62 26 20 6
8 axon-messaging-5.0.3 org.axonframework.messaging.core.annotation annotation 423 1325 82 11 23 4
9 axon-conversion-5.0.3 org.axonframework.conversion conversion 397 1597 38 12 17 3
10 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... token 350 1416 45 8 11 4
11 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling queryhandling 269 973 34 15 12 5
12 axon-messaging-5.0.3 org.axonframework.messaging.eventstreaming eventstreaming 241 688 39 14 9 3
13 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... processing 218 685 30 13 10 5
14 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... streaming 207 655 30 12 11 4
15 axon-messaging-5.0.3 org.axonframework.messaging.tracing tracing 107 356 21 7 4 1
16 axon-eventsourcing-5.0.3 org.axonframework.eventsourcing.eventstore eventstore 76 207 19 6 6 3
17 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... segmenting 74 623 23 5 9 1
18 axon-modelling-5.0.3 org.axonframework.modelling modelling 74 226 13 20 4 1
19 axon-messaging-5.0.3 org.axonframework.messaging.core.conversion conversion 69 225 22 3 17 5

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.3 org.axonframework.messaging.core.configuration configuration 2694 16653 79 41 29 2
1 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... pooled 2322 9835 96 46 20 1
2 axon-server-connector-5.0.3 org.axonframework.axonserver.connector.event event 1282 4029 72 29 18 3
3 axon-eventsourcing-5.0.3 org.axonframework.eventsourcing.eventstore.jpa jpa 1239 4839 61 27 17 3
4 axon-eventsourcing-5.0.3 org.axonframework.eventsourcing.configuration configuration 1237 4808 66 41 25 3
5 axon-messaging-5.0.3 org.axonframework.messaging.core.interception interception 1160 6002 48 27 11 1
6 axon-test-5.0.3 org.axonframework.test.fixture fixture 1079 3869 74 39 16 3
7 axon-modelling-5.0.3 org.axonframework.modelling.entity.annotation annotation 857 3255 63 30 19 3
8 axon-modelling-5.0.3 org.axonframework.modelling.entity entity 800 2887 35 21 9 2
9 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... subscribing 750 2762 47 29 14 1
10 axon-eventsourcing-5.0.3 org.axonframework.eventsourcing.eventstore eventstore 716 2684 64 29 10 2
11 axon-spring-boot-autoconfigure-5.0.3 org.axonframework.extension.springboot.autoconfig autoconfig 714 2921 112 39 36 6
12 axon-modelling-5.0.3 org.axonframework.modelling.configuration configuration 585 2279 41 29 10 2
13 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling queryhandling 533 2104 48 23 9 2
14 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling.dist... distributed 513 1412 38 23 10 1
15 axon-messaging-5.0.3 org.axonframework.messaging.monitoring.interce... interception 500 1550 15 15 6 0
16 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling.in... interception 499 1240 25 16 8 1
17 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling.inte... interception 491 1561 26 16 6 1
18 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.anno... annotation 480 1539 48 22 14 1
19 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling eventhandling 471 1201 42 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.3 org.axonframework.messaging.eventhandling eventhandling 675 2160 105 46 21 2
1 axon-messaging-5.0.3 org.axonframework.messaging.core core 434 1531 92 76 30 2
2 axon-modelling-5.0.3 org.axonframework.modelling modelling 372 1088 63 23 19 2
3 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... processing 348 1280 75 13 18 2
4 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling commandhandling 325 1035 74 29 15 2
5 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling queryhandling 316 1128 73 19 12 2
6 axon-eventsourcing-5.0.3 org.axonframework.eventsourcing eventsourcing 313 1037 96 14 31 3
7 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... streaming 275 1008 76 11 20 2
8 axon-modelling-5.0.3 org.axonframework.modelling.entity entity 269 854 46 11 17 3
9 axon-server-connector-5.0.3 org.axonframework.axonserver.connector connector 253 866 107 2 24 3
10 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... pooled 231 927 73 2 19 1
11 axon-messaging-5.0.3 org.axonframework.messaging.core.unitofwork unitofwork 188 716 15 54 9 1
12 axon-eventsourcing-5.0.3 org.axonframework.eventsourcing.eventstore eventstore 178 572 54 7 16 3
13 axon-modelling-5.0.3 org.axonframework.modelling.entity.annotation annotation 178 679 48 5 18 3
14 axon-messaging-5.0.3 org.axonframework.messaging.core.interception interception 172 588 43 2 11 1
15 axon-test-5.0.3 org.axonframework.test test 169 510 46 10 14 2
16 axon-server-connector-5.0.3 org.axonframework.axonserver.connector.event event 142 416 59 0 17 3
17 axon-test-5.0.3 org.axonframework.test.fixture fixture 138 490 43 9 15 3
18 axon-spring-boot-autoconfigure-5.0.3 org.axonframework.extension.springboot.autoconfig autoconfig 129 452 84 0 35 6
19 axon-messaging-5.0.3 org.axonframework.messaging.core.annotation annotation 128 341 38 11 10 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.3 org.axonframework.common.annotation annotation 0.001162 0.020408 0.000000 0.032258 0.000000 3 2579 3 144 0 20 2 60 0 8
1 axon-messaging-5.0.3 org.axonframework.messaging.core.unitofwork unitofwork 0.009205 0.079848 0.142857 0.088235 0.200000 108 11625 21 242 9 54 6 62 1 4
2 axon-common-5.0.3 org.axonframework.common.infra infra 0.019217 0.075758 0.090909 0.060000 0.000000 27 1378 10 122 3 30 3 47 0 6
3 axon-messaging-5.0.3 org.axonframework.messaging.core core 0.026558 0.160321 0.170000 0.101266 0.222222 341 12499 80 419 17 83 8 71 2 7
4 axon-common-5.0.3 org.axonframework.common common 0.030754 0.055738 0.000000 0.012346 0.000000 31 977 17 288 0 22 1 80 0 10
5 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... token 0.042793 0.134328 0.333333 0.200000 0.400000 19 425 9 58 4 8 4 16 2 3
6 axon-conversion-5.0.3 org.axonframework.conversion conversion 0.042945 0.138889 0.250000 0.120000 0.200000 21 468 10 62 4 12 3 22 1 4
7 axon-common-5.0.3 org.axonframework.common.configuration configuration 0.070574 0.256158 0.283784 0.131579 0.000000 283 3727 52 151 21 53 5 33 0 8
8 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling eventhandling 0.135228 0.219895 0.400000 0.177778 0.250000 471 3012 42 149 20 30 8 37 2 6
9 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling commandhandling 0.165552 0.259259 0.431818 0.181818 0.250000 297 1497 35 100 19 25 6 27 2 6
10 axon-common-5.0.3 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.3 org.axonframework.messaging.monitoring monitoring 0.213592 0.190476 0.571429 0.307692 0.333333 22 81 8 34 4 3 4 9 1 2
12 axon-messaging-5.0.3 org.axonframework.messaging.core.conversion conversion 0.230769 0.178571 0.571429 0.217391 0.285714 21 70 5 23 4 3 5 18 2 5
13 axon-messaging-5.0.3 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
14 axon-messaging-5.0.3 org.axonframework.messaging.eventstreaming eventstreaming 0.263819 0.320513 0.461538 0.375000 0.250000 105 293 25 53 12 14 6 10 1 3
15 axon-common-5.0.3 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
16 axon-messaging-5.0.3 org.axonframework.messaging.tracing tracing 0.333333 0.320755 0.533333 0.454545 0.500000 68 136 17 36 8 7 5 6 1 1
17 axon-common-5.0.3 org.axonframework.common.tx tx 0.375000 0.230769 0.666667 0.200000 0.000000 6 10 3 10 2 1 2 8 0 2
18 axon-update-5.0.3 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
19 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... errorhandling 0.380952 0.384615 0.750000 0.500000 0.000000 8 13 5 8 3 1 4 4 0 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.3 org.axonframework.common.annotation annotation 0.000775 0.013793 0.000000 0.016667 0.000000 2 2578 2 143 0 20 1 59 0 8
1 axon-common-5.0.3 org.axonframework.common.infra infra 0.003652 0.025000 0.000000 0.041667 0.000000 5 1364 3 117 0 30 2 46 0 6
2 axon-messaging-5.0.3 org.axonframework.messaging.core.unitofwork unitofwork 0.016401 0.061728 0.500000 0.134328 0.166667 188 11275 15 228 54 54 9 58 1 5
3 axon-messaging-5.0.3 org.axonframework.messaging.core core 0.023316 0.200436 0.397906 0.309278 0.222222 434 18180 92 367 76 115 30 67 2 7
4 axon-common-5.0.3 org.axonframework.common.configuration configuration 0.030188 0.067227 0.436170 0.111111 0.000000 111 3566 8 111 41 53 4 32 0 8
5 axon-conversion-5.0.3 org.axonframework.conversion conversion 0.059242 0.136364 0.500000 0.150000 0.000000 25 397 6 38 12 12 3 17 0 3
6 axon-common-5.0.3 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-messaging-5.0.3 org.axonframework.messaging.core.conversion conversion 0.126582 0.153846 0.500000 0.190476 0.285714 10 69 4 22 3 3 4 17 2 5
8 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... token 0.154589 0.318182 0.500000 0.476190 0.333333 64 350 21 45 8 8 10 11 2 4
9 axon-messaging-5.0.3 org.axonframework.messaging.eventstreaming eventstreaming 0.157343 0.204082 0.500000 0.357143 0.250000 45 241 10 39 14 14 5 9 1 3
10 axon-common-5.0.3 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
11 axon-modelling-5.0.3 org.axonframework.modelling.repository repository 0.204819 0.263158 0.500000 0.400000 0.500000 17 66 5 14 5 5 4 6 1 1
12 axon-messaging-5.0.3 org.axonframework.messaging.tracing tracing 0.207407 0.300000 0.461538 0.500000 0.500000 28 107 9 21 6 7 4 4 1 1
13 axon-common-5.0.3 org.axonframework.common.tx tx 0.230769 0.230769 0.500000 0.200000 0.000000 3 10 3 10 1 1 2 8 0 2
14 axon-messaging-5.0.3 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.3 org.axonframework.messaging.core.annotation annotation 0.232305 0.316667 0.500000 0.303030 0.200000 128 423 38 82 11 11 10 23 1 4
16 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling eventhandling 0.246711 0.514706 0.567901 0.446809 0.250000 675 2061 105 99 46 35 21 26 2 6
17 axon-common-5.0.3 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.3 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.3 org.axonframework.messaging.commandhandling commandhandling 0.265306 0.544118 0.527273 0.428571 0.250000 325 900 74 62 29 26 15 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.3 org.axonframework.extension.springboot.autoconfig autoconfig 0.0 0 41
1 axon-spring-boot-autoconfigure-5.0.3 org.axonframework.extension.springboot springboot 0.0 0 19
2 axon-server-connector-5.0.3 org.axonframework.axonserver.connector.event event 0.0 0 14
3 axon-metrics-micrometer-5.0.3 org.axonframework.extension.metrics.micrometer micrometer 0.0 0 11
4 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling.inte... interception 0.0 0 8
5 axon-messaging-5.0.3 org.axonframework.messaging.core.timeout timeout 0.0 0 8
6 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling.in... interception 0.0 0 6
7 axon-messaging-5.0.3 org.axonframework.messaging.tracing.attributes attributes 0.0 0 6
8 axon-update-5.0.3 org.axonframework.update.api api 0.0 0 6
9 axon-server-connector-5.0.3 org.axonframework.axonserver.connector.command command 0.0 0 6
10 axon-common-5.0.3 org.axonframework.common.lifecycle lifecycle 0.0 0 5
11 axon-tracing-opentelemetry-5.0.3 org.axonframework.extension.tracing.opentelemetry opentelemetry 0.0 0 5
12 axon-conversion-5.0.3 org.axonframework.conversion.jackson jackson 0.0 0 5
13 axon-conversion-5.0.3 org.axonframework.conversion.converter converter 0.0 0 5
14 axon-conversion-5.0.3 org.axonframework.conversion.jackson2 jackson2 0.0 0 5
15 axon-messaging-5.0.3 org.axonframework.messaging.monitoring.interce... interception 0.0 0 5
16 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... jpa 0.0 0 4
17 axon-update-5.0.3 org.axonframework.update.detection detection 0.0 0 4
18 axon-metrics-micrometer-5.0.3 org.axonframework.extension.metrics.micrometer... springboot 0.0 0 4
19 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.inte... interception 0.0 0 3
20 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... inmemory 0.0 0 3
21 axon-messaging-5.0.3 org.axonframework.messaging.core.configuration... reflection 0.0 0 3
22 axon-test-5.0.3 org.axonframework.test.server server 0.0 0 2
23 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... annotation 0.0 0 2
24 axon-messaging-5.0.3 org.axonframework.messaging.core.reflection reflection 0.0 0 2
25 axon-messaging-5.0.3 org.axonframework.messaging.core.unitofwork.an... annotation 0.0 0 2
26 axon-messaging-5.0.3 org.axonframework.messaging.core.unitofwork.tr... jdbc 0.0 0 2
27 axon-messaging-5.0.3 org.axonframework.messaging.core.unitofwork.tr... jpa 0.0 0 2
28 axon-messaging-5.0.3 org.axonframework.messaging.core.configuration configuration 0.0 0 2
29 axon-spring-boot-autoconfigure-5.0.3 org.axonframework.extension.springboot.actuato... axonserver 0.0 0 2

Table 4b

  • Show the top 30 packages with the highest Abstractness and number of Java Types
artifactName fullQualifiedPackageName packageName abstractness numberAbstractTypes numberTypes
146 axon-common-5.0.3 org.axonframework.common.function function 1.000000 2 2
147 axon-common-5.0.3 org.axonframework.common.tx tx 1.000000 1 1
148 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... streaming 1.000000 1 1
149 axon-spring-boot-autoconfigure-5.0.3 org.axonframework.extension.springboot.actuator actuator 1.000000 1 1
144 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling.co... configuration 0.750000 3 4
145 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling.conf... configuration 0.750000 3 4
143 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.conf... configuration 0.714286 10 14
142 axon-eventsourcing-5.0.3 org.axonframework.eventsourcing.annotation annotation 0.700000 7 10
141 axon-modelling-5.0.3 org.axonframework.modelling.repository repository 0.625000 5 8
140 axon-messaging-5.0.3 org.axonframework.messaging.core.unitofwork.tr... transaction 0.600000 3 5
138 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling.anno... annotation 0.571429 4 7
139 axon-spring-boot-autoconfigure-5.0.3 org.axonframework.extension.springboot.util util 0.571429 4 7
137 axon-modelling-5.0.3 org.axonframework.modelling.configuration configuration 0.538462 7 13
131 axon-common-5.0.3 org.axonframework.common.jdbc jdbc 0.500000 6 12
132 axon-test-5.0.3 org.axonframework.test.extension extension 0.500000 2 4
133 axon-common-5.0.3 org.axonframework.common.annotation annotation 0.500000 2 4
134 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.conv... conversion 0.500000 1 2
135 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling.gateway gateway 0.500000 1 2
136 axon-messaging-5.0.3 org.axonframework.messaging.core.conversion conversion 0.500000 1 2
130 axon-common-5.0.3 org.axonframework.common.configuration configuration 0.478261 22 46
128 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling commandhandling 0.473684 9 19
129 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling eventhandling 0.473684 9 19
127 axon-messaging-5.0.3 org.axonframework.messaging.core.interception.... annotation 0.454545 5 11
125 axon-test-5.0.3 org.axonframework.test.fixture fixture 0.437500 14 32
126 axon-messaging-5.0.3 org.axonframework.messaging.eventstreaming eventstreaming 0.437500 7 16
123 axon-modelling-5.0.3 org.axonframework.modelling.entity.child child 0.428571 6 14
124 axon-eventsourcing-5.0.3 org.axonframework.eventsourcing eventsourcing 0.428571 3 7
122 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling queryhandling 0.416667 10 24
119 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling.di... distributed 0.400000 4 10
120 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.repl... annotation 0.400000 4 10

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.3 org.axonframework.extension.metrics.micrometer micrometer 0.0 0 16 1
1 axon-messaging-5.0.3 org.axonframework.messaging.core.configuration configuration 0.0 0 5 1
2 axon-spring-boot-autoconfigure-5.0.3 org.axonframework.extension.springboot.autoconfig autoconfig 0.0 0 41 0
3 axon-server-connector-5.0.3 org.axonframework.axonserver.connector.event event 0.0 0 14 0
4 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling.inte... interception 0.0 0 8 0
5 axon-messaging-5.0.3 org.axonframework.messaging.core.timeout timeout 0.0 0 8 0
6 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling.in... interception 0.0 0 6 0
7 axon-messaging-5.0.3 org.axonframework.messaging.tracing.attributes attributes 0.0 0 6 0
8 axon-update-5.0.3 org.axonframework.update.api api 0.0 0 6 0
9 axon-server-connector-5.0.3 org.axonframework.axonserver.connector.command command 0.0 0 6 0
10 axon-common-5.0.3 org.axonframework.common.lifecycle lifecycle 0.0 0 5 0
11 axon-tracing-opentelemetry-5.0.3 org.axonframework.extension.tracing.opentelemetry opentelemetry 0.0 0 5 0
12 axon-conversion-5.0.3 org.axonframework.conversion.jackson jackson 0.0 0 5 0
13 axon-conversion-5.0.3 org.axonframework.conversion.converter converter 0.0 0 5 0
14 axon-conversion-5.0.3 org.axonframework.conversion.jackson2 jackson2 0.0 0 5 0
15 axon-messaging-5.0.3 org.axonframework.messaging.monitoring.interce... interception 0.0 0 5 0
16 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... jpa 0.0 0 4 0
17 axon-update-5.0.3 org.axonframework.update.detection detection 0.0 0 4 0
18 axon-metrics-micrometer-5.0.3 org.axonframework.extension.metrics.micrometer... springboot 0.0 0 4 0
19 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.inte... interception 0.0 0 3 0
20 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... inmemory 0.0 0 3 0
21 axon-messaging-5.0.3 org.axonframework.messaging.core.configuration... reflection 0.0 0 3 0
22 axon-test-5.0.3 org.axonframework.test.server server 0.0 0 2 0
23 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... annotation 0.0 0 2 0
24 axon-messaging-5.0.3 org.axonframework.messaging.core.reflection reflection 0.0 0 2 0
25 axon-messaging-5.0.3 org.axonframework.messaging.core.unitofwork.an... annotation 0.0 0 2 0
26 axon-messaging-5.0.3 org.axonframework.messaging.core.unitofwork.tr... jdbc 0.0 0 2 0
27 axon-messaging-5.0.3 org.axonframework.messaging.core.unitofwork.tr... jpa 0.0 0 2 0
28 axon-spring-boot-autoconfigure-5.0.3 org.axonframework.extension.springboot.actuato... axonserver 0.0 0 2 0
29 axon-common-5.0.3 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
119 axon-common-5.0.3 org.axonframework.common.function function 1.000000 2 2 0
120 axon-common-5.0.3 org.axonframework.common.tx tx 1.000000 1 1 0
117 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling.co... configuration 0.750000 3 4 0
118 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling.conf... configuration 0.750000 3 4 0
116 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.conf... configuration 0.714286 10 14 0
115 axon-modelling-5.0.3 org.axonframework.modelling.repository repository 0.625000 5 8 0
114 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling.anno... annotation 0.571429 4 7 0
113 axon-eventsourcing-5.0.3 org.axonframework.eventsourcing.annotation annotation 0.562500 9 16 1
112 axon-modelling-5.0.3 org.axonframework.modelling.configuration configuration 0.538462 7 13 0
105 axon-spring-boot-autoconfigure-5.0.3 org.axonframework.extension.springboot.util util 0.500000 4 8 1
106 axon-common-5.0.3 org.axonframework.common.jdbc jdbc 0.500000 6 12 0
107 axon-test-5.0.3 org.axonframework.test.extension extension 0.500000 2 4 0
108 axon-common-5.0.3 org.axonframework.common.annotation annotation 0.500000 2 4 0
109 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.conv... conversion 0.500000 1 2 0
110 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling.gateway gateway 0.500000 1 2 0
111 axon-messaging-5.0.3 org.axonframework.messaging.core.conversion conversion 0.500000 1 2 0
104 axon-common-5.0.3 org.axonframework.common.configuration configuration 0.478261 22 46 0
103 axon-messaging-5.0.3 org.axonframework.messaging.core.interception.... annotation 0.454545 5 11 0
101 axon-test-5.0.3 org.axonframework.test.fixture fixture 0.437500 14 32 0
102 axon-messaging-5.0.3 org.axonframework.messaging.eventstreaming eventstreaming 0.437500 7 16 0
100 axon-modelling-5.0.3 org.axonframework.modelling.entity.child child 0.428571 6 14 0
97 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling.di... distributed 0.400000 4 10 0
98 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.repl... annotation 0.400000 4 10 0
99 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.gateway gateway 0.400000 2 5 0
96 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling queryhandling 0.380952 24 63 1
95 axon-modelling-5.0.3 org.axonframework.modelling modelling 0.380435 35 92 2
94 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling.ga... gateway 0.375000 3 8 0
93 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling.dist... distributed 0.363636 4 11 0
92 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling commandhandling 0.359375 23 64 1
90 axon-messaging-5.0.3 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.3 org.axonframework.messaging.tracing.attributes attributes NaN 0.0 NaN 6
1 axon-conversion-5.0.3 org.axonframework.conversion.converter converter NaN 0.0 NaN 5
2 axon-common-5.0.3 org.axonframework.common.function function NaN 1.0 NaN 2
3 axon-messaging-5.0.3 org.axonframework.messaging.core.reflection reflection NaN 0.0 NaN 2
4 axon-common-5.0.3 org.axonframework.common.io io NaN 0.0 NaN 1
5 axon-common-5.0.3 org.axonframework.common.digest digest NaN 0.0 NaN 1
6 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling.retry retry NaN 0.0 NaN 1
7 axon-metrics-micrometer-5.0.3 org.axonframework.extension.metrics.micrometer... reservoir NaN 0.0 NaN 1
8 axon-spring-boot-autoconfigure-5.0.3 org.axonframework.extension.springboot.actuator actuator NaN 1.0 NaN 1
9 axon-test-5.0.3 org org NaN 0.0 NaN 0
10 axon-test-5.0.3 org.axonframework axonframework NaN 0.0 NaN 0
11 axon-common-5.0.3 org org NaN 0.0 NaN 0
12 axon-common-5.0.3 org.axonframework axonframework NaN 0.0 NaN 0
13 axon-tracing-opentelemetry-5.0.3 org org NaN 0.0 NaN 0
14 axon-tracing-opentelemetry-5.0.3 org.axonframework axonframework NaN 0.0 NaN 0
15 axon-tracing-opentelemetry-5.0.3 org.axonframework.extension extension NaN 0.0 NaN 0
16 axon-tracing-opentelemetry-5.0.3 org.axonframework.extension.tracing tracing NaN 0.0 NaN 0
17 axon-eventsourcing-5.0.3 org org NaN 0.0 NaN 0
18 axon-eventsourcing-5.0.3 org.axonframework axonframework NaN 0.0 NaN 0
19 axon-conversion-5.0.3 org org NaN 0.0 NaN 0
20 axon-conversion-5.0.3 org.axonframework axonframework NaN 0.0 NaN 0
21 axon-messaging-5.0.3 org org NaN 0.0 NaN 0
22 axon-messaging-5.0.3 org.axonframework axonframework NaN 0.0 NaN 0
23 axon-messaging-5.0.3 org.axonframework.messaging messaging NaN 0.0 NaN 0
24 axon-update-5.0.3 org org NaN 0.0 NaN 0
25 axon-update-5.0.3 org.axonframework axonframework NaN 0.0 NaN 0
26 axon-metrics-micrometer-5.0.3 org org NaN 0.0 NaN 0
27 axon-metrics-micrometer-5.0.3 org.axonframework axonframework NaN 0.0 NaN 0
28 axon-metrics-micrometer-5.0.3 org.axonframework.extension extension NaN 0.0 NaN 0
29 axon-metrics-micrometer-5.0.3 org.axonframework.extension.metrics metrics 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.3 org.axonframework.common.lifecycle lifecycle 0.833333 0.000000 0.166667 5
1 axon-conversion-5.0.3 org.axonframework.conversion conversion 0.797901 0.142857 0.059242 35
2 axon-common-5.0.3 org.axonframework.common.infra infra 0.746348 0.250000 0.003652 8
3 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... token 0.716378 0.129032 0.154589 31
4 axon-messaging-5.0.3 org.axonframework.messaging.core core 0.697023 0.279661 0.023316 236
5 axon-update-5.0.3 org.axonframework.update.api api 0.684211 0.000000 0.315789 6
6 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling.co... configuration 0.678571 0.750000 0.928571 4
7 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling.conf... configuration 0.678571 0.750000 0.928571 4
8 axon-messaging-5.0.3 org.axonframework.messaging.core.unitofwork unitofwork 0.675907 0.307692 0.016401 26
9 axon-test-5.0.3 org.axonframework.test.server server 0.666667 0.000000 0.333333 2
10 axon-common-5.0.3 org.axonframework.common.util util 0.575758 0.333333 0.090909 6
11 axon-messaging-5.0.3 org.axonframework.messaging.tracing tracing 0.529435 0.263158 0.207407 19
12 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling.anno... annotation 0.523810 0.571429 0.952381 7
13 axon-update-5.0.3 org.axonframework.update.detection detection 0.500000 0.000000 0.500000 4
14 axon-update-5.0.3 org.axonframework.update.common common 0.500000 0.000000 0.500000 1
15 axon-spring-boot-autoconfigure-5.0.3 org.axonframework.extension.springboot.util.jpa jpa 0.500000 0.000000 0.500000 1
16 axon-common-5.0.3 org.axonframework.common.annotation annotation 0.499225 0.500000 0.000775 4
17 axon-common-5.0.3 org.axonframework.common.configuration configuration 0.491551 0.478261 0.030188 46
18 axon-eventsourcing-5.0.3 org.axonframework.eventsourcing.annotation annotation 0.474781 0.562500 0.912281 16
19 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.proc... errorhandling 0.435897 0.333333 0.230769 3
20 axon-messaging-5.0.3 org.axonframework.messaging.core.annotation annotation 0.434362 0.333333 0.232305 51
21 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling eventhandling 0.430308 0.322981 0.246711 161
22 axon-test-5.0.3 org.axonframework.test.fixture fixture 0.423214 0.437500 0.985714 32
23 axon-common-5.0.3 org.axonframework.common.property property 0.416667 0.333333 0.250000 9
24 axon-modelling-5.0.3 org.axonframework.modelling.configuration configuration 0.415174 0.538462 0.876712 13
25 axon-messaging-5.0.3 org.axonframework.messaging.eventstreaming eventstreaming 0.405157 0.437500 0.157343 16
26 axon-spring-boot-autoconfigure-5.0.3 org.axonframework.extension.springboot.actuato... axonserver 0.400000 0.000000 0.600000 2
27 axon-messaging-5.0.3 org.axonframework.messaging.queryhandling.gateway gateway 0.400000 0.500000 0.900000 2
28 axon-messaging-5.0.3 org.axonframework.messaging.eventhandling.conf... configuration 0.388083 0.714286 0.673797 14
29 axon-messaging-5.0.3 org.axonframework.messaging.commandhandling commandhandling 0.375319 0.359375 0.265306 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