Kernel Code Metrics

While code size is not a great measure for software, the sizes of the core and intralogistics kernel code modules (with some other explanations and measures), are presented below.

Files and lines are the number of C# files and raw code lines in the package source. “Maintain” is the Visual Studio maintainability index, which the article explains better than I even care to. Complexity likewise is a Visual Studio metric based on “amount of decisioning logic in a source code function”, summed up over each code class and package. Higher numbers means more things are decided (more branching on conditions and therefore more potential code paths that can be taken on any call). The “class coupling” numbers are rather abysmal by performance metric standards (even if I drill into the class and functions units themselves), which is why I often don’t care for those metrics.

Package Files Lines Maintain Complexity Coupling
Core 34 824 90 193 72
Interface 46 1139 91 240 80
Users.Model 13 226 96 129 40
Users.Interface 21 209 99 116 18
Users.Services 21 1158 70 188 113
Operations.Model 38 1276 97 760 77
Operations.Interface 51 817 98 498 56
Operations.Services 65 4019 73 637 174
Inventory.Model 72 1919 97 1087 97
Inventory.Interface 98 1874 96 926 98
Inventory.Services 86 11236 75 1801 243
Fulfillment.Model 44 1121 96 592 79
Fulfillment.Interface 62 907 100 489 41
Fulfillment.Services 86 5767 82 847 179
StockFlow.Model 28 1107 97 412 67
StockFlow.Interface 68 1543 98 425 46
StockFlow.Services 81 7383 76 1144 222
StockFlow.StockPumps 30 3535 80 465 106

Since maintainability is calculated from the other metrics , the high complexity and coupling numbers seem to show that overall the maintainability numbers are pretty good, being “least maintainable” in the services packages. These integrate other packages and perform the most useful intra-logistic and kernel-specific “work”, so that shouldn’t be surprising.

Overall, the size and complexity increases from the core through users, operations, and inventory. Each builds to a degree on the others, so the less dependent ones has less complexity. Fulfillment and stockflow are relatively complex, but rely heavily on the inventory management packages, so do not reach the same heights of complexity.