Skip to content

Latest commit

 

History

History
3994 lines (3859 loc) · 89.9 KB

File metadata and controls

3994 lines (3859 loc) · 89.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-4.12.2 org.axonframework.messaging messaging 10051 29462 368 68 63 8
1 axon-messaging-4.12.2 org.axonframework.eventhandling eventhandling 6120 26302 333 58 53 6
2 axon-messaging-4.12.2 org.axonframework.commandhandling commandhandling 1945 6341 140 20 22 7
3 axon-messaging-4.12.2 org.axonframework.serialization serialization 1771 7230 182 17 41 5
4 axon-messaging-4.12.2 org.axonframework.messaging.annotation annotation 1111 4088 157 19 27 6
5 axon-messaging-4.12.2 org.axonframework.common common 1066 2541 375 16 90 8
6 axon-messaging-4.12.2 org.axonframework.tracing tracing 635 2923 109 13 24 6
7 axon-messaging-4.12.2 org.axonframework.queryhandling queryhandling 436 1748 83 13 14 3
8 axon-configuration-4.12.2 org.axonframework.config config 428 3220 68 14 9 2
9 axon-messaging-4.12.2 org.axonframework.common.transaction transaction 368 1103 89 5 32 5
10 axon-modelling-4.12.2 org.axonframework.modelling.command command 276 947 83 8 12 6
11 axon-modelling-4.12.2 org.axonframework.modelling.saga saga 263 1142 62 12 11 3
12 axon-messaging-4.12.2 org.axonframework.messaging.unitofwork unitofwork 260 1102 83 5 38 6
13 axon-messaging-4.12.2 org.axonframework.deadline deadline 256 1252 47 9 14 4
14 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore.jdbc jdbc 235 1288 27 14 3 1
15 axon-messaging-4.12.2 org.axonframework.messaging.deadletter deadletter 206 1164 39 8 9 2
16 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore eventstore 205 816 70 5 14 5
17 axon-messaging-4.12.2 org.axonframework.monitoring monitoring 199 531 41 6 11 4
18 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing eventsourcing 148 580 47 5 7 5
19 axon-server-connector-4.12.2 org.axonframework.axonserver.connector connector 129 635 59 2 14 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-4.12.2 org.axonframework.messaging messaging 8918 28144 379 83 63 8
1 axon-messaging-4.12.2 org.axonframework.eventhandling eventhandling 3836 14381 176 63 34 6
2 axon-messaging-4.12.2 org.axonframework.serialization serialization 1550 6282 131 18 35 5
3 axon-messaging-4.12.2 org.axonframework.common common 1482 4139 414 23 86 8
4 axon-messaging-4.12.2 org.axonframework.commandhandling commandhandling 1058 4017 73 20 17 7
5 axon-messaging-4.12.2 org.axonframework.messaging.annotation annotation 994 3745 112 19 26 6
6 axon-messaging-4.12.2 org.axonframework.tracing tracing 565 2627 85 13 21 5
7 axon-messaging-4.12.2 org.axonframework.common.transaction transaction 362 1089 86 5 31 5
8 axon-configuration-4.12.2 org.axonframework.config config 302 1972 30 14 8 1
9 axon-messaging-4.12.2 org.axonframework.queryhandling queryhandling 273 1055 36 12 11 3
10 axon-messaging-4.12.2 org.axonframework.messaging.unitofwork unitofwork 223 885 72 5 37 6
11 axon-messaging-4.12.2 org.axonframework.monitoring monitoring 189 501 36 6 10 4
12 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing eventsourcing 173 645 28 21 7 4
13 axon-messaging-4.12.2 org.axonframework.messaging.deadletter deadletter 173 1030 24 8 8 2
14 axon-modelling-4.12.2 org.axonframework.modelling.command command 162 535 39 8 9 5
15 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore eventstore 144 464 35 19 9 5
16 axon-messaging-4.12.2 org.axonframework.deadline deadline 137 773 24 9 10 4
17 axon-messaging-4.12.2 org.axonframework.lifecycle lifecycle 98 271 28 3 21 4
18 axon-modelling-4.12.2 org.axonframework.modelling.saga saga 97 277 23 12 5 2
19 axon-messaging-4.12.2 org.axonframework.messaging.responsetypes responsetypes 90 372 20 4 5 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-configuration-4.12.2 org.axonframework.config config 10010 38497 248 96 49 4
1 axon-spring-boot-autoconfigure-4.12.2 org.axonframework.springboot.autoconfig autoconfig 6475 23556 268 78 63 6
2 axon-test-4.12.2 org.axonframework.test.aggregate aggregate 2210 7978 92 34 16 3
3 axon-messaging-4.12.2 org.axonframework.eventhandling eventhandling 1563 6457 160 57 16 0
4 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.query query 1544 7134 90 31 13 1
5 axon-disruptor-4.12.2 org.axonframework.disruptor.commandhandling commandhandling 1453 5180 84 30 14 3
6 axon-test-4.12.2 org.axonframework.test.saga saga 1419 4142 81 26 17 2
7 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore.jdbc jdbc 1340 6712 51 27 11 2
8 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.event.axon axon 1178 4270 101 36 24 3
9 axon-messaging-4.12.2 org.axonframework.queryhandling queryhandling 1141 5254 86 30 11 0
10 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing eventsourcing 1009 3348 95 33 16 2
11 axon-messaging-4.12.2 org.axonframework.eventhandling.pooled pooled 962 4483 57 25 12 0
12 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.command command 932 3074 62 23 11 1
13 axon-modelling-4.12.2 org.axonframework.modelling.command command 847 3239 97 34 15 1
14 axon-modelling-4.12.2 org.axonframework.modelling.command.inspection inspection 793 3001 75 28 10 1
15 axon-server-connector-4.12.2 org.axonframework.axonserver.connector connector 763 3983 87 26 19 4
16 axon-messaging-4.12.2 org.axonframework.commandhandling.distributed distributed 738 2227 74 27 12 0
17 axon-messaging-4.12.2 org.axonframework.commandhandling commandhandling 691 1832 74 30 9 0
18 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore eventstore 613 1981 65 26 16 2
19 axon-messaging-4.12.2 org.axonframework.eventhandling.deadletter.jdbc jdbc 560 3518 49 20 8 0

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-configuration-4.12.2 org.axonframework.config config 601 1855 206 14 48 3
1 axon-messaging-4.12.2 org.axonframework.eventhandling eventhandling 588 2124 106 52 20 0
2 axon-server-connector-4.12.2 org.axonframework.axonserver.connector connector 416 1529 149 3 30 3
3 axon-spring-boot-autoconfigure-4.12.2 org.axonframework.springboot.autoconfig autoconfig 409 1343 252 0 68 6
4 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing eventsourcing 380 1319 95 10 22 1
5 axon-spring-boot-autoconfigure-4.12.2 org.axonframework.springboot springboot 367 1185 222 0 63 7
6 axon-test-4.12.2 org.axonframework.test test 273 793 99 4 17 2
7 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore eventstore 245 914 58 6 19 2
8 axon-modelling-4.12.2 org.axonframework.modelling.command command 232 754 65 9 14 0
9 axon-messaging-4.12.2 org.axonframework.eventhandling.deadletter deadletter 207 996 57 4 10 0
10 axon-messaging-4.12.2 org.axonframework.commandhandling commandhandling 196 485 67 21 13 0
11 axon-messaging-4.12.2 org.axonframework.messaging messaging 193 499 31 56 10 0
12 axon-messaging-4.12.2 org.axonframework.deadline deadline 190 611 48 9 11 0
13 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.query query 179 707 72 0 12 1
14 axon-messaging-4.12.2 org.axonframework.queryhandling queryhandling 177 614 51 13 9 0
15 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.event event 167 548 73 2 22 3
16 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.event.axon axon 167 555 74 2 23 3
17 axon-modelling-4.12.2 org.axonframework.modelling.saga saga 155 474 58 9 15 0
18 axon-test-4.12.2 org.axonframework.test.aggregate aggregate 149 548 74 1 15 3
19 axon-disruptor-4.12.2 org.axonframework.disruptor.commandhandling commandhandling 130 436 62 0 13 2

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-messaging-4.12.2 org.axonframework.messaging messaging 0.013060 0.086849 0.180723 0.086957 0.0 133 10051 35 368 15 68 6 63 0 8
1 axon-messaging-4.12.2 org.axonframework.common.transaction transaction 0.016043 0.043011 0.000000 0.030303 0.0 6 368 4 89 0 5 1 32 0 5
2 axon-messaging-4.12.2 org.axonframework.common common 0.021120 0.038462 0.000000 0.010989 0.0 23 1066 15 375 0 16 1 90 0 8
3 axon-messaging-4.12.2 org.axonframework.eventhandling.scheduling scheduling 0.074074 0.111111 0.000000 0.181818 0.0 2 25 2 16 0 2 2 9 0 4
4 axon-messaging-4.12.2 org.axonframework.lifecycle lifecycle 0.087719 0.179487 0.000000 0.120000 0.0 10 104 7 32 0 3 3 22 0 4
5 axon-messaging-4.12.2 org.axonframework.serialization serialization 0.090395 0.201754 0.291667 0.180000 0.0 176 1771 46 182 7 17 9 41 0 5
6 axon-messaging-4.12.2 org.axonframework.monitoring monitoring 0.095455 0.145833 0.333333 0.214286 0.0 21 199 7 41 3 6 3 11 0 4
7 axon-messaging-4.12.2 org.axonframework.common.annotation annotation 0.120000 0.120000 0.000000 0.166667 0.0 3 22 3 22 0 0 2 10 0 2
8 axon-messaging-4.12.2 org.axonframework.common.stream stream 0.131579 0.150000 0.000000 0.111111 0.0 5 33 3 17 0 2 1 8 0 3
9 axon-messaging-4.12.2 org.axonframework.tracing tracing 0.161162 0.198529 0.480000 0.272727 0.0 122 635 27 109 12 13 9 24 0 6
10 axon-messaging-4.12.2 org.axonframework.updates.detection detection 0.166667 0.250000 0.000000 0.250000 0.0 1 5 1 3 0 0 1 3 0 2
11 axon-messaging-4.12.2 org.axonframework.eventhandling eventhandling 0.203436 0.324544 0.495652 0.231884 0.0 1563 6120 160 333 57 58 16 53 0 6
12 axon-messaging-4.12.2 org.axonframework.messaging.annotation annotation 0.212057 0.292793 0.406250 0.205882 0.0 299 1111 65 157 13 19 7 27 0 6
13 axon-messaging-4.12.2 org.axonframework.updates.api api 0.217391 0.333333 0.000000 0.250000 0.0 5 18 4 8 0 1 1 3 0 0
14 axon-messaging-4.12.2 org.axonframework.common.jpa jpa 0.240000 0.217391 1.000000 0.250000 0.0 6 19 5 18 2 0 3 9 0 4
15 axon-messaging-4.12.2 org.axonframework.common.legacyjpa legacyjpa 0.260870 0.238095 1.000000 0.272727 0.0 6 17 5 16 2 0 3 8 0 3
16 axon-messaging-4.12.2 org.axonframework.commandhandling commandhandling 0.262140 0.345794 0.600000 0.290323 0.0 691 1945 74 140 30 20 9 22 0 7
17 axon-spring-boot-autoconfigure-4.12.2 org.axonframework.springboot springboot 0.294737 0.460000 0.000000 0.428571 1.0 28 67 23 27 0 0 3 4 2 0
18 axon-messaging-4.12.2 org.axonframework.messaging.correlation correlation 0.304348 0.200000 0.400000 0.285714 0.0 14 32 3 12 2 3 2 5 0 2
19 axon-messaging-4.12.2 org.axonframework.serialization.upcasting upcasting 0.312500 0.083333 0.000000 0.333333 0.0 5 11 1 11 0 1 1 2 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-messaging-4.12.2 org.axonframework.common common 0.003362 0.011933 0.000000 0.022727 0.0 5 1482 5 414 0 23 2 86 0 8
1 axon-messaging-4.12.2 org.axonframework.messaging messaging 0.021183 0.075610 0.402878 0.136986 0.0 193 8918 31 379 56 83 10 63 0 8
2 axon-messaging-4.12.2 org.axonframework.serialization serialization 0.033063 0.154839 0.181818 0.186047 0.0 53 1550 24 131 4 18 8 35 0 5
3 axon-messaging-4.12.2 org.axonframework.lifecycle lifecycle 0.039216 0.066667 0.000000 0.086957 0.0 4 98 2 28 0 3 2 21 0 4
4 axon-messaging-4.12.2 org.axonframework.monitoring monitoring 0.040609 0.052632 0.454545 0.166667 0.0 8 189 2 36 5 6 2 10 0 4
5 axon-messaging-4.12.2 org.axonframework.tracing tracing 0.055184 0.141414 0.187500 0.275862 0.0 33 565 14 85 3 13 8 21 0 5
6 axon-messaging-4.12.2 org.axonframework.messaging.annotation annotation 0.071028 0.151515 0.424242 0.187500 0.0 76 994 20 112 14 19 6 26 0 6
7 axon-messaging-4.12.2 org.axonframework.common.annotation annotation 0.086957 0.086957 0.000000 0.100000 0.0 2 21 2 21 0 0 1 9 0 2
8 axon-messaging-4.12.2 org.axonframework.common.lock lock 0.107143 0.142857 0.000000 0.142857 0.0 3 25 2 12 0 2 1 6 0 3
9 axon-messaging-4.12.2 org.axonframework.messaging.unitofwork unitofwork 0.111554 0.100000 0.375000 0.097561 0.0 28 223 8 72 3 5 4 37 0 6
10 axon-messaging-4.12.2 org.axonframework.messaging.responsetypes responsetypes 0.126214 0.333333 0.000000 0.500000 0.0 13 90 10 20 0 4 5 5 0 1
11 axon-messaging-4.12.2 org.axonframework.eventhandling eventhandling 0.132911 0.375887 0.452174 0.370370 0.0 588 3836 106 176 52 63 20 34 0 6
12 axon-messaging-4.12.2 org.axonframework.common.jdbc jdbc 0.150943 0.212121 0.000000 0.266667 0.0 8 45 7 26 0 0 4 11 0 5
13 axon-messaging-4.12.2 org.axonframework.common.property property 0.153846 0.222222 0.000000 0.200000 0.0 2 11 2 7 0 0 1 4 0 1
14 axon-messaging-4.12.2 org.axonframework.commandhandling commandhandling 0.156300 0.478571 0.512195 0.433333 0.0 196 1058 67 73 21 20 13 17 0 7
15 axon-messaging-4.12.2 org.axonframework.common.jpa jpa 0.157895 0.117647 0.000000 0.200000 0.0 3 16 2 15 0 0 2 8 0 4
16 axon-messaging-4.12.2 org.axonframework.updates.detection detection 0.166667 0.250000 0.000000 0.250000 0.0 1 5 1 3 0 0 1 3 0 2
17 axon-messaging-4.12.2 org.axonframework.common.legacyjpa legacyjpa 0.176471 0.133333 0.000000 0.222222 0.0 3 14 2 13 0 0 2 7 0 3
18 axon-messaging-4.12.2 org.axonframework.messaging.deadletter deadletter 0.183962 0.272727 0.466667 0.333333 0.0 39 173 9 24 7 8 4 8 0 2
19 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.snapshotting snapshotting 0.187500 0.250000 0.500000 0.333333 0.0 6 26 4 12 2 2 3 6 0 2

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-4.12.2 org.axonframework.springboot.autoconfig autoconfig 0.0 0 41
1 axon-spring-boot-autoconfigure-4.12.2 org.axonframework.springboot springboot 0.0 0 28
2 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore.leg... legacyjpa 0.0 0 10
3 axon-messaging-4.12.2 org.axonframework.messaging.timeout timeout 0.0 0 8
4 axon-messaging-4.12.2 org.axonframework.commandhandling.distributed.... commandfilter 0.0 0 7
5 axon-messaging-4.12.2 org.axonframework.deadline.dbscheduler dbscheduler 0.0 0 7
6 axon-messaging-4.12.2 org.axonframework.eventhandling.scheduling.dbs... dbscheduler 0.0 0 7
7 axon-messaging-4.12.2 org.axonframework.serialization.json json 0.0 0 7
8 axon-messaging-4.12.2 org.axonframework.serialization.xml xml 0.0 0 7
9 axon-messaging-4.12.2 org.axonframework.tracing.attributes attributes 0.0 0 6
10 axon-messaging-4.12.2 org.axonframework.updates.api api 0.0 0 6
11 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.query.s... subscription 0.0 0 6
12 axon-tracing-opentelemetry-4.12.2 org.axonframework.tracing.opentelemetry opentelemetry 0.0 0 5
13 axon-messaging-4.12.2 org.axonframework.eventhandling.deadletter deadletter 0.0 0 5
14 axon-messaging-4.12.2 org.axonframework.serialization.converters converters 0.0 0 5
15 axon-test-4.12.2 org.axonframework.test.server server 0.0 0 4
16 axon-messaging-4.12.2 org.axonframework.commandhandling.callbacks callbacks 0.0 0 4
17 axon-messaging-4.12.2 org.axonframework.deadline.quartz quartz 0.0 0 4
18 axon-messaging-4.12.2 org.axonframework.eventhandling.scheduling.java java 0.0 0 4
19 axon-messaging-4.12.2 org.axonframework.eventhandling.tokenstore.jpa jpa 0.0 0 4
20 axon-messaging-4.12.2 org.axonframework.updates.detection detection 0.0 0 4
21 axon-messaging-4.12.2 org.axonframework.eventhandling.scheduling.job... jobrunr 0.0 0 3
22 axon-messaging-4.12.2 org.axonframework.util util 0.0 0 3
23 axon-modelling-4.12.2 org.axonframework.modelling.saga.repository.le... legacyjpa 0.0 0 3
24 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.event.util util 0.0 0 3
25 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.processor processor 0.0 0 3
26 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore.inm... inmemory 0.0 0 2
27 axon-messaging-4.12.2 org.axonframework.eventhandling.tokenstore.inm... inmemory 0.0 0 2
28 axon-messaging-4.12.2 org.axonframework.eventhandling.tokenstore.leg... legacyjpa 0.0 0 2
29 axon-messaging-4.12.2 org.axonframework.messaging.interceptors.legac... legacyvalidation 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
144 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore.jdb... statements 1.000000 15 15
145 axon-spring-boot-autoconfigure-4.12.2 org.axonframework.actuator actuator 1.000000 1 1
143 axon-messaging-4.12.2 org.axonframework.serialization.upcasting upcasting 0.833333 5 6
140 axon-messaging-4.12.2 org.axonframework.common.annotation annotation 0.666667 2 3
141 axon-messaging-4.12.2 org.axonframework.common.stream stream 0.666667 2 3
142 axon-messaging-4.12.2 org.axonframework.eventhandling.scheduling scheduling 0.666667 2 3
139 axon-messaging-4.12.2 org.axonframework.common common 0.642857 18 28
136 axon-messaging-4.12.2 org.axonframework.messaging messaging 0.600000 21 35
137 axon-messaging-4.12.2 org.axonframework.lifecycle lifecycle 0.600000 6 10
138 axon-messaging-4.12.2 org.axonframework.eventhandling.gateway gateway 0.600000 3 5
135 axon-spring-boot-autoconfigure-4.12.2 org.axonframework.springboot.util util 0.555556 5 9
132 axon-messaging-4.12.2 org.axonframework.serialization.upcasting.event event 0.500000 6 12
133 axon-messaging-4.12.2 org.axonframework.common.transaction transaction 0.500000 2 4
134 axon-modelling-4.12.2 org.axonframework.modelling.saga.metamodel metamodel 0.500000 2 4
130 axon-messaging-4.12.2 org.axonframework.common.jdbc jdbc 0.444444 8 18
131 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.conflictresolu... conflictresolution 0.444444 4 9
129 axon-configuration-4.12.2 org.axonframework.config config 0.441860 19 43
128 axon-modelling-4.12.2 org.axonframework.modelling.command command 0.410714 23 56
127 axon-messaging-4.12.2 org.axonframework.eventhandling eventhandling 0.410000 41 100
122 axon-test-4.12.2 org.axonframework.test.utils utils 0.400000 2 5
123 axon-test-4.12.2 org.axonframework.test.eventscheduler eventscheduler 0.400000 2 5
124 axon-messaging-4.12.2 org.axonframework.deadline.annotation annotation 0.400000 2 5
125 axon-messaging-4.12.2 org.axonframework.queryhandling.registration registration 0.400000 2 5
126 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.heartbeat heartbeat 0.400000 2 5
121 axon-modelling-4.12.2 org.axonframework.modelling.saga saga 0.393939 13 33
118 axon-messaging-4.12.2 org.axonframework.commandhandling commandhandling 0.375000 12 32
119 axon-messaging-4.12.2 org.axonframework.messaging.interceptors interceptors 0.375000 3 8
120 axon-messaging-4.12.2 org.axonframework.messaging.responsetypes responsetypes 0.375000 3 8
117 axon-messaging-4.12.2 org.axonframework.messaging.deadletter deadletter 0.368421 7 19
116 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore eventstore 0.354839 11 31

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-spring-boot-autoconfigure-4.12.2 org.axonframework.springboot.autoconfig autoconfig 0.0 0 43 1
1 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.heartbe... connection 0.0 0 2 1
2 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore.leg... legacyjpa 0.0 0 10 0
3 axon-messaging-4.12.2 org.axonframework.messaging.timeout timeout 0.0 0 8 0
4 axon-messaging-4.12.2 org.axonframework.commandhandling.distributed.... commandfilter 0.0 0 7 0
5 axon-messaging-4.12.2 org.axonframework.deadline.dbscheduler dbscheduler 0.0 0 7 0
6 axon-messaging-4.12.2 org.axonframework.eventhandling.scheduling.dbs... dbscheduler 0.0 0 7 0
7 axon-messaging-4.12.2 org.axonframework.serialization.json json 0.0 0 7 0
8 axon-messaging-4.12.2 org.axonframework.serialization.xml xml 0.0 0 7 0
9 axon-messaging-4.12.2 org.axonframework.tracing.attributes attributes 0.0 0 6 0
10 axon-messaging-4.12.2 org.axonframework.updates.api api 0.0 0 6 0
11 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.query.s... subscription 0.0 0 6 0
12 axon-tracing-opentelemetry-4.12.2 org.axonframework.tracing.opentelemetry opentelemetry 0.0 0 5 0
13 axon-messaging-4.12.2 org.axonframework.serialization.converters converters 0.0 0 5 0
14 axon-test-4.12.2 org.axonframework.test.server server 0.0 0 4 0
15 axon-messaging-4.12.2 org.axonframework.commandhandling.callbacks callbacks 0.0 0 4 0
16 axon-messaging-4.12.2 org.axonframework.deadline.quartz quartz 0.0 0 4 0
17 axon-messaging-4.12.2 org.axonframework.eventhandling.scheduling.java java 0.0 0 4 0
18 axon-messaging-4.12.2 org.axonframework.eventhandling.tokenstore.jpa jpa 0.0 0 4 0
19 axon-messaging-4.12.2 org.axonframework.updates.detection detection 0.0 0 4 0
20 axon-messaging-4.12.2 org.axonframework.eventhandling.scheduling.job... jobrunr 0.0 0 3 0
21 axon-messaging-4.12.2 org.axonframework.util util 0.0 0 3 0
22 axon-modelling-4.12.2 org.axonframework.modelling.saga.repository.le... legacyjpa 0.0 0 3 0
23 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.event.util util 0.0 0 3 0
24 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.processor processor 0.0 0 3 0
25 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore.inm... inmemory 0.0 0 2 0
26 axon-messaging-4.12.2 org.axonframework.eventhandling.tokenstore.inm... inmemory 0.0 0 2 0
27 axon-messaging-4.12.2 org.axonframework.eventhandling.tokenstore.leg... legacyjpa 0.0 0 2 0
28 axon-messaging-4.12.2 org.axonframework.messaging.interceptors.legac... legacyvalidation 0.0 0 2 0
29 axon-spring-boot-autoconfigure-4.12.2 org.axonframework.actuator.axonserver axonserver 0.0 0 2 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
123 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore.jdb... statements 1.000000 15 15 0
121 axon-messaging-4.12.2 org.axonframework.common.annotation annotation 0.666667 2 3 0
122 axon-messaging-4.12.2 org.axonframework.common.stream stream 0.666667 2 3 0
120 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore.jdbc jdbc 0.620690 18 29 1
119 axon-messaging-4.12.2 org.axonframework.serialization.upcasting upcasting 0.611111 11 18 1
117 axon-messaging-4.12.2 org.axonframework.lifecycle lifecycle 0.600000 6 10 0
118 axon-messaging-4.12.2 org.axonframework.eventhandling.gateway gateway 0.600000 3 5 0
114 axon-messaging-4.12.2 org.axonframework.serialization.upcasting.event event 0.500000 6 12 0
115 axon-messaging-4.12.2 org.axonframework.common.transaction transaction 0.500000 2 4 0
116 axon-modelling-4.12.2 org.axonframework.modelling.saga.metamodel metamodel 0.500000 2 4 0
113 axon-spring-boot-autoconfigure-4.12.2 org.axonframework.springboot.util util 0.454545 5 11 1
111 axon-messaging-4.12.2 org.axonframework.common.jdbc jdbc 0.444444 8 18 0
112 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.conflictresolu... conflictresolution 0.444444 4 9 0
110 axon-configuration-4.12.2 org.axonframework.config config 0.441860 19 43 0
109 axon-messaging-4.12.2 org.axonframework.common common 0.425743 43 101 1
105 axon-test-4.12.2 org.axonframework.test.utils utils 0.400000 2 5 0
106 axon-test-4.12.2 org.axonframework.test.eventscheduler eventscheduler 0.400000 2 5 0
107 axon-messaging-4.12.2 org.axonframework.deadline.annotation annotation 0.400000 2 5 0
108 axon-messaging-4.12.2 org.axonframework.queryhandling.registration registration 0.400000 2 5 0
104 axon-modelling-4.12.2 org.axonframework.modelling.command command 0.380952 32 84 1
103 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore eventstore 0.379747 30 79 2
102 axon-messaging-4.12.2 org.axonframework.messaging.responsetypes responsetypes 0.375000 3 8 0
101 axon-messaging-4.12.2 org.axonframework.messaging.deadletter deadletter 0.368421 7 19 0
100 axon-messaging-4.12.2 org.axonframework.messaging messaging 0.361842 55 152 2
99 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing eventsourcing 0.353383 47 133 3
98 axon-modelling-4.12.2 org.axonframework.modelling.command.inspection inspection 0.346154 9 26 0
93 axon-spring-boot-autoconfigure-4.12.2 org.axonframework.actuator actuator 0.333333 1 3 1
94 axon-test-4.12.2 org.axonframework.test.saga saga 0.333333 7 21 0
95 axon-messaging-4.12.2 org.axonframework.common.property property 0.333333 3 9 0
96 axon-messaging-4.12.2 org.axonframework.monitoring monitoring 0.333333 2 6 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-4.12.2 org.axonframework.serialization.converters converters NaN 0.0 NaN 5
1 axon-messaging-4.12.2 org.axonframework.common.io io NaN 0.0 NaN 1
2 axon-messaging-4.12.2 org.axonframework.eventhandling.interceptors interceptors NaN 0.0 NaN 1
3 axon-spring-boot-autoconfigure-4.12.2 org.axonframework.actuator actuator NaN 1.0 NaN 1
4 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.heartbe... source NaN 0.0 NaN 1
5 axon-test-4.12.2 org org NaN 0.0 NaN 0
6 axon-test-4.12.2 org.axonframework axonframework NaN 0.0 NaN 0
7 axon-disruptor-4.12.2 org org NaN 0.0 NaN 0
8 axon-disruptor-4.12.2 org.axonframework axonframework NaN 0.0 NaN 0
9 axon-disruptor-4.12.2 org.axonframework.disruptor disruptor NaN 0.0 NaN 0
10 axon-eventsourcing-4.12.2 org org NaN 0.0 NaN 0
11 axon-eventsourcing-4.12.2 org.axonframework axonframework NaN 0.0 NaN 0
12 axon-tracing-opentelemetry-4.12.2 org org NaN 0.0 NaN 0
13 axon-tracing-opentelemetry-4.12.2 org.axonframework axonframework NaN 0.0 NaN 0
14 axon-tracing-opentelemetry-4.12.2 org.axonframework.tracing tracing NaN 0.0 NaN 0
15 axon-configuration-4.12.2 org org NaN 0.0 NaN 0
16 axon-configuration-4.12.2 org.axonframework axonframework NaN 0.0 NaN 0
17 axon-messaging-4.12.2 org org NaN 0.0 NaN 0
18 axon-messaging-4.12.2 org.axonframework axonframework NaN 0.0 NaN 0
19 axon-spring-boot-autoconfigure-4.12.2 org org NaN 0.0 NaN 0
20 axon-spring-boot-autoconfigure-4.12.2 org.axonframework axonframework NaN 0.0 NaN 0
21 axon-spring-boot-autoconfigure-4.12.2 org.axonframework.springboot.service service NaN 0.0 NaN 0
22 axon-modelling-4.12.2 org org NaN 0.0 NaN 0
23 axon-modelling-4.12.2 org.axonframework axonframework NaN 0.0 NaN 0
24 axon-modelling-4.12.2 org.axonframework.modelling modelling NaN 0.0 NaN 0
25 axon-server-connector-4.12.2 org org NaN 0.0 NaN 0
26 axon-server-connector-4.12.2 org.axonframework axonframework NaN 0.0 NaN 0
27 axon-server-connector-4.12.2 org.axonframework.axonserver axonserver NaN 0.0 NaN 0
28 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.event event NaN 0.0 NaN 0
29 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.heartbe... connection 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-messaging-4.12.2 org.axonframework.updates.detection detection 0.833333 0.000000 0.166667 4
1 axon-server-connector-4.12.2 org.axonframework.axonserver.connector.event.util util 0.800000 0.000000 0.200000 3
2 axon-messaging-4.12.2 org.axonframework.tracing tracing 0.744816 0.200000 0.055184 25
3 axon-messaging-4.12.2 org.axonframework.common.lock lock 0.711039 0.181818 0.107143 11
4 axon-messaging-4.12.2 org.axonframework.serialization serialization 0.686449 0.280488 0.033063 82
5 axon-test-4.12.2 org.axonframework.test.server server 0.666667 0.000000 0.333333 4
6 axon-messaging-4.12.2 org.axonframework.common.digest digest 0.666667 0.000000 0.333333 1
7 axon-messaging-4.12.2 org.axonframework.messaging.annotation annotation 0.632676 0.296296 0.071028 54
8 axon-messaging-4.12.2 org.axonframework.monitoring monitoring 0.626058 0.333333 0.040609 6
9 axon-messaging-4.12.2 org.axonframework.messaging messaging 0.616975 0.361842 0.021183 152
10 axon-test-4.12.2 org.axonframework.test.matchers matchers 0.606707 0.125000 0.268293 24
11 axon-messaging-4.12.2 org.axonframework.messaging.unitofwork unitofwork 0.602732 0.285714 0.111554 14
12 axon-messaging-4.12.2 org.axonframework.eventhandling eventhandling 0.592827 0.274262 0.132911 237
13 axon-messaging-4.12.2 org.axonframework.common.jpa jpa 0.592105 0.250000 0.157895 4
14 axon-messaging-4.12.2 org.axonframework.common.legacyjpa legacyjpa 0.573529 0.250000 0.176471 4
15 axon-messaging-4.12.2 org.axonframework.common common 0.570895 0.425743 0.003362 101
16 axon-messaging-4.12.2 org.axonframework.commandhandling commandhandling 0.562147 0.281553 0.156300 103
17 axon-messaging-4.12.2 org.axonframework.updates updates 0.541353 0.142857 0.315789 21
18 axon-messaging-4.12.2 org.axonframework.messaging.correlation correlation 0.533784 0.250000 0.216216 4
19 axon-messaging-4.12.2 org.axonframework.common.property property 0.512821 0.333333 0.153846 9
20 axon-spring-boot-autoconfigure-4.12.2 org.axonframework.springboot.updates updates 0.500000 0.000000 0.500000 1
21 axon-spring-boot-autoconfigure-4.12.2 org.axonframework.springboot.util.legacyjpa legacyjpa 0.500000 0.000000 0.500000 1
22 axon-spring-boot-autoconfigure-4.12.2 org.axonframework.springboot.util.jpa jpa 0.500000 0.000000 0.500000 1
23 axon-messaging-4.12.2 org.axonframework.messaging.responsetypes responsetypes 0.498786 0.375000 0.126214 8
24 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.eventstore.jdb... statements 0.480769 1.000000 0.480769 15
25 axon-eventsourcing-4.12.2 org.axonframework.eventsourcing.snapshotting snapshotting 0.479167 0.333333 0.187500 3
26 axon-messaging-4.12.2 org.axonframework.serialization.xml xml 0.466667 0.000000 0.533333 7
27 axon-messaging-4.12.2 org.axonframework.util util 0.454545 0.000000 0.545455 3
28 axon-messaging-4.12.2 org.axonframework.messaging.deadletter deadletter 0.447617 0.368421 0.183962 19
29 axon-messaging-4.12.2 org.axonframework.updates.configuration configuration 0.428571 0.285714 0.285714 7

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