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.2 org.axonframework.messaging.core.unitofwork unitofwork 11526 38914 240 54 61 4
1 axon-messaging-5.0.2 org.axonframework.messaging.core core 11118 35970 408 79 70 7
2 axon-common-5.0.2 org.axonframework.common.configuration configuration 3366 18028 146 50 32 8
3 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling eventhandling 3202 10798 152 31 37 6
4 axon-common-5.0.2 org.axonframework.common.annotation annotation 2196 2438 137 18 56 8
5 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling commandhandling 1463 5131 98 25 26 6
6 axon-common-5.0.2 org.axonframework.common.infra infra 1377 1666 121 30 46 6
7 axon-common-5.0.2 org.axonframework.common common 895 2129 284 21 78 10
8 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling queryhandling 698 2468 76 17 16 3
9 axon-messaging-5.0.2 org.axonframework.messaging.core.annotation annotation 487 1508 117 11 24 4
10 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... token 425 2147 58 8 16 3
11 axon-conversion-5.0.2 org.axonframework.conversion conversion 415 1708 54 12 18 4
12 axon-messaging-5.0.2 org.axonframework.messaging.eventstreaming eventstreaming 293 833 53 14 10 3
13 axon-eventsourcing-5.0.2 org.axonframework.eventsourcing.eventstore eventstore 221 718 65 7 9 3
14 axon-messaging-5.0.2 org.axonframework.messaging.tracing tracing 136 478 36 7 6 1
15 axon-test-5.0.2 org.axonframework.test.fixture fixture 132 359 26 0 1 0
16 axon-modelling-5.0.2 org.axonframework.modelling modelling 125 282 36 9 9 2
17 axon-modelling-5.0.2 org.axonframework.modelling.entity entity 115 394 25 5 5 1
18 axon-modelling-5.0.2 org.axonframework.modelling.entity.child child 89 230 28 7 3 0
19 axon-messaging-5.0.2 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.2 org.axonframework.messaging.core core 18039 59506 373 112 69 7
1 axon-messaging-5.0.2 org.axonframework.messaging.core.unitofwork unitofwork 11278 38018 226 54 59 5
2 axon-common-5.0.2 org.axonframework.common common 7295 23086 462 104 90 9
3 axon-common-5.0.2 org.axonframework.common.configuration configuration 3205 17368 106 50 31 8
4 axon-common-5.0.2 org.axonframework.common.annotation annotation 2195 2437 136 18 55 8
5 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling eventhandling 2081 7484 97 36 25 6
6 axon-common-5.0.2 org.axonframework.common.infra infra 1363 1592 116 30 45 6
7 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling commandhandling 883 3295 63 26 20 6
8 axon-messaging-5.0.2 org.axonframework.messaging.core.annotation annotation 399 1202 81 11 23 4
9 axon-conversion-5.0.2 org.axonframework.conversion conversion 363 1527 35 12 14 3
10 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... token 350 1416 45 8 11 4
11 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling queryhandling 279 897 34 15 12 5
12 axon-messaging-5.0.2 org.axonframework.messaging.eventstreaming eventstreaming 241 688 39 14 9 3
13 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... processing 217 685 30 13 10 5
14 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... streaming 207 655 30 12 11 4
15 axon-messaging-5.0.2 org.axonframework.messaging.tracing tracing 107 356 21 7 4 1
16 axon-eventsourcing-5.0.2 org.axonframework.eventsourcing.eventstore eventstore 77 208 19 6 6 3
17 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... segmenting 74 623 23 5 9 1
18 axon-modelling-5.0.2 org.axonframework.modelling modelling 74 226 13 20 4 1
19 axon-messaging-5.0.2 org.axonframework.messaging.core.conversion conversion 66 225 21 3 16 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.2 org.axonframework.messaging.core.configuration configuration 2463 15546 74 39 28 2
1 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... pooled 2321 9770 96 46 20 1
2 axon-server-connector-5.0.2 org.axonframework.axonserver.connector.event event 1282 4029 72 29 18 3
3 axon-eventsourcing-5.0.2 org.axonframework.eventsourcing.eventstore.jpa jpa 1263 4885 65 28 18 3
4 axon-eventsourcing-5.0.2 org.axonframework.eventsourcing.configuration configuration 1237 4801 66 41 25 3
5 axon-messaging-5.0.2 org.axonframework.messaging.core.interception interception 1084 5770 46 25 11 1
6 axon-test-5.0.2 org.axonframework.test.fixture fixture 972 3461 73 39 16 3
7 axon-modelling-5.0.2 org.axonframework.modelling.entity.annotation annotation 858 3265 64 30 19 3
8 axon-modelling-5.0.2 org.axonframework.modelling.entity entity 800 2887 35 21 9 2
9 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... subscribing 749 2715 47 29 14 1
10 axon-eventsourcing-5.0.2 org.axonframework.eventsourcing.eventstore eventstore 700 2610 64 29 10 2
11 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension.springboot.autoconfig autoconfig 658 2833 103 37 34 6
12 axon-modelling-5.0.2 org.axonframework.modelling.configuration configuration 585 2279 41 29 10 2
13 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling queryhandling 533 2104 48 23 9 2
14 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling.dist... distributed 513 1412 38 23 10 1
15 axon-messaging-5.0.2 org.axonframework.messaging.monitoring.interce... interception 500 1550 15 15 6 0
16 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling.inte... interception 491 1561 26 16 6 1
17 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.anno... annotation 478 1359 49 22 14 1
18 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling eventhandling 471 1197 42 20 8 2
19 axon-messaging-5.0.2 org.axonframework.messaging.core.annotation annotation 464 1548 74 16 10 1

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.2 org.axonframework.messaging.eventhandling eventhandling 671 2124 103 47 20 2
1 axon-messaging-5.0.2 org.axonframework.messaging.core core 402 1431 85 72 26 2
2 axon-modelling-5.0.2 org.axonframework.modelling modelling 381 1124 66 23 19 2
3 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... processing 345 1265 76 13 17 2
4 axon-eventsourcing-5.0.2 org.axonframework.eventsourcing eventsourcing 329 1064 99 14 32 3
5 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling commandhandling 315 1014 72 29 14 2
6 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling queryhandling 314 1122 73 19 12 2
7 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... streaming 274 1006 77 11 19 2
8 axon-modelling-5.0.2 org.axonframework.modelling.entity entity 270 856 47 11 17 3
9 axon-server-connector-5.0.2 org.axonframework.axonserver.connector connector 253 866 107 2 24 3
10 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... pooled 231 919 73 2 19 1
11 axon-eventsourcing-5.0.2 org.axonframework.eventsourcing.eventstore eventstore 194 599 57 7 17 3
12 axon-modelling-5.0.2 org.axonframework.modelling.entity.annotation annotation 179 681 49 5 18 3
13 axon-messaging-5.0.2 org.axonframework.messaging.core.unitofwork unitofwork 176 693 12 54 6 1
14 axon-messaging-5.0.2 org.axonframework.messaging.core.interception interception 166 587 43 0 11 1
15 axon-test-5.0.2 org.axonframework.test test 160 479 45 9 14 2
16 axon-server-connector-5.0.2 org.axonframework.axonserver.connector.event event 142 416 59 0 17 3
17 axon-test-5.0.2 org.axonframework.test.fixture fixture 132 472 43 8 15 3
18 axon-messaging-5.0.2 org.axonframework.messaging.core.annotation annotation 124 337 36 8 9 1
19 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension.springboot.autoconfig autoconfig 121 437 79 0 33 6

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.2 org.axonframework.common.annotation annotation 0.001364 0.021429 0.000000 0.034483 0.000000 3 2196 3 137 0 18 2 56 0 8
1 axon-messaging-5.0.2 org.axonframework.messaging.core.unitofwork unitofwork 0.009283 0.080460 0.142857 0.089552 0.200000 108 11526 21 240 9 54 6 61 1 4
2 axon-common-5.0.2 org.axonframework.common.infra infra 0.019231 0.076336 0.090909 0.061224 0.000000 27 1377 10 121 3 30 3 46 0 6
3 axon-messaging-5.0.2 org.axonframework.messaging.core core 0.029758 0.163934 0.177083 0.102564 0.222222 341 11118 80 408 17 79 8 70 2 7
4 axon-common-5.0.2 org.axonframework.common common 0.033477 0.056478 0.000000 0.012658 0.000000 31 895 17 284 0 21 1 78 0 10
5 axon-messaging-5.0.2 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.2 org.axonframework.conversion conversion 0.048165 0.156250 0.250000 0.142857 0.200000 21 415 10 54 4 12 3 18 1 4
7 axon-common-5.0.2 org.axonframework.common.configuration configuration 0.074257 0.262626 0.295775 0.135135 0.000000 270 3366 52 146 21 50 5 32 0 8
8 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling eventhandling 0.128233 0.216495 0.392157 0.177778 0.250000 471 3202 42 152 20 31 8 37 2 6
9 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling commandhandling 0.168750 0.263158 0.431818 0.187500 0.250000 297 1463 35 98 19 25 6 26 2 6
10 axon-common-5.0.2 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.2 org.axonframework.messaging.core.conversion conversion 0.238636 0.185185 0.571429 0.227273 0.285714 21 67 5 22 4 3 5 17 2 5
12 axon-messaging-5.0.2 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.2 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
14 axon-messaging-5.0.2 org.axonframework.messaging.monitoring monitoring 0.278481 0.195122 0.666667 0.307692 0.333333 22 57 8 33 4 2 4 9 1 2
15 axon-common-5.0.2 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.2 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-update-5.0.2 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
18 axon-messaging-5.0.2 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
19 axon-test-5.0.2 org.axonframework.test.server server 0.400000 0.400000 0.000000 0.500000 0.500000 2 3 2 3 0 0 2 2 1 1

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.2 org.axonframework.common.annotation annotation 0.000910 0.014493 0.000000 0.017857 0.000000 2 2195 2 136 0 18 1 55 0 8
1 axon-common-5.0.2 org.axonframework.common.infra infra 0.003655 0.025210 0.000000 0.042553 0.000000 5 1363 3 116 0 30 2 45 0 6
2 axon-messaging-5.0.2 org.axonframework.messaging.core.unitofwork unitofwork 0.015366 0.050420 0.500000 0.092308 0.166667 176 11278 12 226 54 54 6 59 1 5
3 axon-common-5.0.2 org.axonframework.common.configuration configuration 0.021075 0.070175 0.425287 0.114286 0.000000 69 3205 8 106 37 50 4 31 0 8
4 axon-messaging-5.0.2 org.axonframework.messaging.core core 0.021799 0.185590 0.391304 0.273684 0.222222 402 18039 85 373 72 112 26 69 2 7
5 axon-conversion-5.0.2 org.axonframework.conversion conversion 0.059585 0.146341 0.500000 0.176471 0.000000 23 363 6 35 12 12 3 14 0 3
6 axon-common-5.0.2 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.2 org.axonframework.messaging.core.conversion conversion 0.131579 0.160000 0.500000 0.200000 0.285714 10 66 4 21 3 3 4 16 2 5
8 axon-messaging-5.0.2 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
9 axon-messaging-5.0.2 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.2 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-messaging-5.0.2 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
12 axon-messaging-5.0.2 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
13 axon-messaging-5.0.2 org.axonframework.messaging.core.annotation annotation 0.237094 0.307692 0.421053 0.281250 0.200000 124 399 36 81 8 11 9 23 1 4
14 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling eventhandling 0.243823 0.515000 0.566265 0.444444 0.250000 671 2081 103 97 47 36 20 25 2 6
15 axon-common-5.0.2 org.axonframework.common.jdbc jdbc 0.250000 0.266667 0.000000 0.500000 0.000000 5 15 4 11 0 0 4 4 0 2
16 axon-common-5.0.2 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
17 axon-spring-boot-autoconfigure-5.0.2 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
18 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling commandhandling 0.262938 0.533333 0.527273 0.411765 0.250000 315 883 72 63 29 26 14 20 2 6
19 axon-modelling-5.0.2 org.axonframework.modelling.repository repository 0.266667 0.333333 0.500000 0.400000 0.500000 24 66 7 14 5 5 4 6 1 1

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.2 org.axonframework.extension.springboot.autoconfig autoconfig 0.0 0 35
1 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension.springboot springboot 0.0 0 22
2 axon-server-connector-5.0.2 org.axonframework.axonserver.connector.event event 0.0 0 14
3 axon-metrics-micrometer-5.0.2 org.axonframework.extension.metrics.micrometer micrometer 0.0 0 12
4 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling.inte... interception 0.0 0 8
5 axon-messaging-5.0.2 org.axonframework.messaging.core.timeout timeout 0.0 0 8
6 axon-update-5.0.2 org.axonframework.update.api api 0.0 0 6
7 axon-messaging-5.0.2 org.axonframework.messaging.tracing.attributes attributes 0.0 0 6
8 axon-server-connector-5.0.2 org.axonframework.axonserver.connector.command command 0.0 0 6
9 axon-messaging-5.0.2 org.axonframework.messaging.monitoring.interce... interception 0.0 0 5
10 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling.in... interception 0.0 0 5
11 axon-conversion-5.0.2 org.axonframework.conversion.converter converter 0.0 0 5
12 axon-conversion-5.0.2 org.axonframework.conversion.json json 0.0 0 5
13 axon-common-5.0.2 org.axonframework.common.lifecycle lifecycle 0.0 0 5
14 axon-tracing-opentelemetry-5.0.2 org.axonframework.extension.tracing.opentelemetry opentelemetry 0.0 0 5
15 axon-update-5.0.2 org.axonframework.update.detection detection 0.0 0 4
16 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... jpa 0.0 0 4
17 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.inte... interception 0.0 0 3
18 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... inmemory 0.0 0 3
19 axon-messaging-5.0.2 org.axonframework.messaging.core.configuration... reflection 0.0 0 3
20 axon-test-5.0.2 org.axonframework.test.server server 0.0 0 2
21 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension.springboot.actuato... axonserver 0.0 0 2
22 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... annotation 0.0 0 2
23 axon-messaging-5.0.2 org.axonframework.messaging.core.reflection reflection 0.0 0 2
24 axon-messaging-5.0.2 org.axonframework.messaging.core.unitofwork.an... annotation 0.0 0 2
25 axon-messaging-5.0.2 org.axonframework.messaging.core.configuration configuration 0.0 0 2
26 axon-eventsourcing-5.0.2 org.axonframework.eventsourcing.eventstore.jdbc jdbc 0.0 0 2
27 axon-update-5.0.2 org.axonframework.update.common common 0.0 0 1
28 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension.springboot.util.jpa jpa 0.0 0 1
29 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling.retry retry 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
142 axon-common-5.0.2 org.axonframework.common.function function 1.000000 2 2
143 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension.springboot.actuator actuator 1.000000 1 1
144 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... streaming 1.000000 1 1
145 axon-common-5.0.2 org.axonframework.common.tx tx 1.000000 1 1
140 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling.co... configuration 0.750000 3 4
141 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling.conf... configuration 0.750000 3 4
139 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.conf... configuration 0.714286 10 14
138 axon-eventsourcing-5.0.2 org.axonframework.eventsourcing.annotation annotation 0.700000 7 10
137 axon-messaging-5.0.2 org.axonframework.messaging.core.unitofwork.tr... transaction 0.600000 3 5
135 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension.springboot.util util 0.571429 4 7
136 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling.anno... annotation 0.571429 4 7
134 axon-modelling-5.0.2 org.axonframework.modelling.repository repository 0.555556 5 9
133 axon-modelling-5.0.2 org.axonframework.modelling.configuration configuration 0.538462 7 13
128 axon-common-5.0.2 org.axonframework.common.jdbc jdbc 0.500000 6 12
129 axon-common-5.0.2 org.axonframework.common.annotation annotation 0.500000 2 4
130 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.conv... conversion 0.500000 1 2
131 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling.gateway gateway 0.500000 1 2
132 axon-messaging-5.0.2 org.axonframework.messaging.core.conversion conversion 0.500000 1 2
127 axon-common-5.0.2 org.axonframework.common.configuration configuration 0.478261 22 46
125 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling commandhandling 0.473684 9 19
126 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling eventhandling 0.473684 9 19
124 axon-messaging-5.0.2 org.axonframework.messaging.core.interception.... annotation 0.454545 5 11
123 axon-test-5.0.2 org.axonframework.test.fixture fixture 0.451613 14 31
122 axon-messaging-5.0.2 org.axonframework.messaging.eventstreaming eventstreaming 0.437500 7 16
120 axon-modelling-5.0.2 org.axonframework.modelling.entity.child child 0.428571 6 14
121 axon-eventsourcing-5.0.2 org.axonframework.eventsourcing eventsourcing 0.428571 3 7
119 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling queryhandling 0.416667 10 24
116 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling.di... distributed 0.400000 4 10
117 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.repl... annotation 0.400000 4 10
118 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.gateway gateway 0.400000 2 5

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.2 org.axonframework.extension.metrics.micrometer micrometer 0.0 0 13 1
1 axon-messaging-5.0.2 org.axonframework.messaging.core.configuration configuration 0.0 0 5 1
2 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension.springboot.autoconfig autoconfig 0.0 0 35 0
3 axon-server-connector-5.0.2 org.axonframework.axonserver.connector.event event 0.0 0 14 0
4 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling.inte... interception 0.0 0 8 0
5 axon-messaging-5.0.2 org.axonframework.messaging.core.timeout timeout 0.0 0 8 0
6 axon-update-5.0.2 org.axonframework.update.api api 0.0 0 6 0
7 axon-messaging-5.0.2 org.axonframework.messaging.tracing.attributes attributes 0.0 0 6 0
8 axon-server-connector-5.0.2 org.axonframework.axonserver.connector.command command 0.0 0 6 0
9 axon-messaging-5.0.2 org.axonframework.messaging.monitoring.interce... interception 0.0 0 5 0
10 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling.in... interception 0.0 0 5 0
11 axon-conversion-5.0.2 org.axonframework.conversion.converter converter 0.0 0 5 0
12 axon-conversion-5.0.2 org.axonframework.conversion.json json 0.0 0 5 0
13 axon-common-5.0.2 org.axonframework.common.lifecycle lifecycle 0.0 0 5 0
14 axon-tracing-opentelemetry-5.0.2 org.axonframework.extension.tracing.opentelemetry opentelemetry 0.0 0 5 0
15 axon-update-5.0.2 org.axonframework.update.detection detection 0.0 0 4 0
16 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... jpa 0.0 0 4 0
17 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.inte... interception 0.0 0 3 0
18 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... inmemory 0.0 0 3 0
19 axon-messaging-5.0.2 org.axonframework.messaging.core.configuration... reflection 0.0 0 3 0
20 axon-test-5.0.2 org.axonframework.test.server server 0.0 0 2 0
21 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension.springboot.actuato... axonserver 0.0 0 2 0
22 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... annotation 0.0 0 2 0
23 axon-messaging-5.0.2 org.axonframework.messaging.core.reflection reflection 0.0 0 2 0
24 axon-messaging-5.0.2 org.axonframework.messaging.core.unitofwork.an... annotation 0.0 0 2 0
25 axon-eventsourcing-5.0.2 org.axonframework.eventsourcing.eventstore.jdbc jdbc 0.0 0 2 0
26 axon-update-5.0.2 org.axonframework.update.common common 0.0 0 1 0
27 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension.springboot.util.jpa jpa 0.0 0 1 0
28 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling.retry retry 0.0 0 1 0
29 axon-metrics-micrometer-5.0.2 org.axonframework.extension.metrics.micrometer... reservoir 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
115 axon-common-5.0.2 org.axonframework.common.function function 1.000000 2 2 0
116 axon-common-5.0.2 org.axonframework.common.tx tx 1.000000 1 1 0
113 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling.co... configuration 0.750000 3 4 0
114 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling.conf... configuration 0.750000 3 4 0
112 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.conf... configuration 0.714286 10 14 0
111 axon-messaging-5.0.2 org.axonframework.messaging.core.unitofwork.tr... transaction 0.600000 3 5 0
110 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling.anno... annotation 0.571429 4 7 0
109 axon-eventsourcing-5.0.2 org.axonframework.eventsourcing.annotation annotation 0.562500 9 16 1
108 axon-modelling-5.0.2 org.axonframework.modelling.repository repository 0.555556 5 9 0
107 axon-modelling-5.0.2 org.axonframework.modelling.configuration configuration 0.538462 7 13 0
101 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension.springboot.util util 0.500000 4 8 1
102 axon-common-5.0.2 org.axonframework.common.jdbc jdbc 0.500000 6 12 0
103 axon-common-5.0.2 org.axonframework.common.annotation annotation 0.500000 2 4 0
104 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.conv... conversion 0.500000 1 2 0
105 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling.gateway gateway 0.500000 1 2 0
106 axon-messaging-5.0.2 org.axonframework.messaging.core.conversion conversion 0.500000 1 2 0
100 axon-common-5.0.2 org.axonframework.common.configuration configuration 0.478261 22 46 0
99 axon-messaging-5.0.2 org.axonframework.messaging.core.interception.... annotation 0.454545 5 11 0
98 axon-test-5.0.2 org.axonframework.test.fixture fixture 0.451613 14 31 0
97 axon-messaging-5.0.2 org.axonframework.messaging.eventstreaming eventstreaming 0.437500 7 16 0
96 axon-modelling-5.0.2 org.axonframework.modelling.entity.child child 0.428571 6 14 0
93 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling.di... distributed 0.400000 4 10 0
94 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.repl... annotation 0.400000 4 10 0
95 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.gateway gateway 0.400000 2 5 0
92 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling queryhandling 0.380952 24 63 1
91 axon-modelling-5.0.2 org.axonframework.modelling modelling 0.376344 35 93 2
89 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling commandhandling 0.375000 24 64 1
90 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling.ga... gateway 0.375000 3 8 0
88 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.anno... annotation 0.368421 7 19 0
86 axon-messaging-5.0.2 org.axonframework.messaging.core.unitofwork unitofwork 0.363636 8 22 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.2 org.axonframework.messaging.tracing.attributes attributes NaN 0.0 NaN 6
1 axon-conversion-5.0.2 org.axonframework.conversion.converter converter NaN 0.0 NaN 5
2 axon-messaging-5.0.2 org.axonframework.messaging.core.reflection reflection NaN 0.0 NaN 2
3 axon-common-5.0.2 org.axonframework.common.function function NaN 1.0 NaN 2
4 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension.springboot.actuator actuator NaN 1.0 NaN 1
5 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling.retry retry NaN 0.0 NaN 1
6 axon-metrics-micrometer-5.0.2 org.axonframework.extension.metrics.micrometer... reservoir NaN 0.0 NaN 1
7 axon-common-5.0.2 org.axonframework.common.io io NaN 0.0 NaN 1
8 axon-common-5.0.2 org.axonframework.common.digest digest NaN 0.0 NaN 1
9 axon-test-5.0.2 org org NaN 0.0 NaN 0
10 axon-test-5.0.2 org.axonframework axonframework NaN 0.0 NaN 0
11 axon-update-5.0.2 org org NaN 0.0 NaN 0
12 axon-update-5.0.2 org.axonframework axonframework NaN 0.0 NaN 0
13 axon-spring-boot-autoconfigure-5.0.2 org org NaN 0.0 NaN 0
14 axon-spring-boot-autoconfigure-5.0.2 org.axonframework axonframework NaN 0.0 NaN 0
15 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension extension NaN 0.0 NaN 0
16 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension.springboot.service service NaN 0.0 NaN 0
17 axon-messaging-5.0.2 org org NaN 0.0 NaN 0
18 axon-messaging-5.0.2 org.axonframework axonframework NaN 0.0 NaN 0
19 axon-messaging-5.0.2 org.axonframework.messaging messaging NaN 0.0 NaN 0
20 axon-conversion-5.0.2 org org NaN 0.0 NaN 0
21 axon-conversion-5.0.2 org.axonframework axonframework NaN 0.0 NaN 0
22 axon-metrics-micrometer-5.0.2 org org NaN 0.0 NaN 0
23 axon-metrics-micrometer-5.0.2 org.axonframework axonframework NaN 0.0 NaN 0
24 axon-metrics-micrometer-5.0.2 org.axonframework.extension extension NaN 0.0 NaN 0
25 axon-metrics-micrometer-5.0.2 org.axonframework.extension.metrics metrics NaN 0.0 NaN 0
26 axon-modelling-5.0.2 org org NaN 0.0 NaN 0
27 axon-modelling-5.0.2 org.axonframework axonframework NaN 0.0 NaN 0
28 axon-eventsourcing-5.0.2 org org NaN 0.0 NaN 0
29 axon-eventsourcing-5.0.2 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.2 org.axonframework.common.lifecycle lifecycle 0.833333 0.000000 0.166667 5
1 axon-conversion-5.0.2 org.axonframework.conversion conversion 0.773748 0.166667 0.059585 30
2 axon-common-5.0.2 org.axonframework.common.infra infra 0.746345 0.250000 0.003655 8
3 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... token 0.718425 0.129032 0.152542 31
4 axon-messaging-5.0.2 org.axonframework.messaging.core core 0.693797 0.284404 0.021799 218
5 axon-update-5.0.2 org.axonframework.update.api api 0.684211 0.000000 0.315789 6
6 axon-messaging-5.0.2 org.axonframework.messaging.commandhandling.co... configuration 0.675000 0.750000 0.925000 4
7 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling.conf... configuration 0.675000 0.750000 0.925000 4
8 axon-test-5.0.2 org.axonframework.test.server server 0.666667 0.000000 0.333333 2
9 axon-messaging-5.0.2 org.axonframework.messaging.core.unitofwork unitofwork 0.620998 0.363636 0.015366 22
10 axon-common-5.0.2 org.axonframework.common.util util 0.575758 0.333333 0.090909 6
11 axon-messaging-5.0.2 org.axonframework.messaging.tracing tracing 0.529435 0.263158 0.207407 19
12 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling.anno... annotation 0.523810 0.571429 0.952381 7
13 axon-common-5.0.2 org.axonframework.common.configuration configuration 0.500664 0.478261 0.021075 46
14 axon-update-5.0.2 org.axonframework.update.detection detection 0.500000 0.000000 0.500000 4
15 axon-update-5.0.2 org.axonframework.update.common common 0.500000 0.000000 0.500000 1
16 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension.springboot.util.jpa jpa 0.500000 0.000000 0.500000 1
17 axon-common-5.0.2 org.axonframework.common.annotation annotation 0.499090 0.500000 0.000910 4
18 axon-eventsourcing-5.0.2 org.axonframework.eventsourcing.annotation annotation 0.474781 0.562500 0.912281 16
19 axon-messaging-5.0.2 org.axonframework.messaging.core.annotation annotation 0.442906 0.320000 0.237094 50
20 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling eventhandling 0.440388 0.315789 0.243823 171
21 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.proc... errorhandling 0.435897 0.333333 0.230769 3
22 axon-common-5.0.2 org.axonframework.common.property property 0.416667 0.333333 0.250000 9
23 axon-modelling-5.0.2 org.axonframework.modelling.configuration configuration 0.415174 0.538462 0.876712 13
24 axon-messaging-5.0.2 org.axonframework.messaging.eventstreaming eventstreaming 0.405157 0.437500 0.157343 16
25 axon-spring-boot-autoconfigure-5.0.2 org.axonframework.extension.springboot.actuato... axonserver 0.400000 0.000000 0.600000 2
26 axon-messaging-5.0.2 org.axonframework.messaging.queryhandling.gateway gateway 0.400000 0.500000 0.900000 2
27 axon-messaging-5.0.2 org.axonframework.messaging.eventhandling.conf... configuration 0.371589 0.714286 0.657303 14
28 axon-messaging-5.0.2 org.axonframework.messaging.core.conversion conversion 0.368421 0.500000 0.131579 2
29 axon-common-5.0.2 org.axonframework.common.jpa jpa 0.365385 0.250000 0.384615 4

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