microsoft / ELL
Conditional Complexity

The distribution of complexity of units (measured with McCabe index).

Intro
  • Conditional complexity (also called cyclomatic complexity) is a term used to measure the complexity of software. The term refers to the number of possible paths through a program function. A higher value ofter means higher maintenance and testing costs (infosecinstitute.com).
  • Conditional complexity is calculated by counting all conditions in the program that can affect the execution path (e.g. if statement, loops, switches, and/or operators, try and catch blocks...).
  • Conditional complexity is measured at the unit level (methods, functions...).
  • Units are classified in four categories based on the measured McCabe index: 1-5 (simple units), 6-10 (medium complex units), 11-25 (complex units), 26+ (very complex units).
Learn more...
Conditional Complexity Overall
  • There are 7,411 units with 74,515 lines of code in units (58.2% of code).
    • 1 very complex units (583 lines of code)
    • 10 complex units (1,256 lines of code)
    • 133 medium complex units (7,961 lines of code)
    • 391 simple units (12,490 lines of code)
    • 6,876 very simple units (52,225 lines of code)
<1% | 1% | 10% | 16% | 70%
Legend:
51+
26-50
11-25
6-10
1-5
Alternative Visuals
Conditional Complexity per Extension
51+
26-50
11-25
6-10
1-5
cpp1% | 1% | 11% | 17% | 68%
py0% | 3% | 15% | 21% | 59%
h0% | 0% | 5% | 11% | 82%
Conditional Complexity per Logical Component
primary logical decomposition
51+
26-50
11-25
6-10
1-5
libraries/value5% | 3% | 22% | 19% | 49%
tools/utilities0% | 2% | 13% | 24% | 59%
tools/importers0% | 3% | 13% | 20% | 63%
libraries/utilities0% | 2% | 6% | 9% | 81%
tools/trainers0% | 13% | 43% | 3% | 39%
interfaces/common0% | 4% | 7% | 20% | 67%
libraries/emitters0% | <1% | 3% | 12% | 83%
libraries/nodes0% | 0% | 10% | 13% | 76%
libraries/dsp0% | 0% | 7% | 14% | 78%
libraries/passes0% | 0% | 22% | 27% | 50%
libraries/predictors0% | 0% | 5% | 21% | 73%
libraries/optimization0% | 0% | 8% | 11% | 79%
libraries/model0% | 0% | 1% | 14% | 84%
tools/wrap0% | 0% | 41% | 0% | 58%
libraries/common0% | 0% | 5% | 8% | 85%
libraries/data0% | 0% | 5% | 7% | 87%
interfaces/python0% | 0% | 6% | 34% | 59%
libraries/emittable_functions0% | 0% | 5% | 0% | 94%
libraries/trainers0% | 0% | 0% | 24% | 75%
libraries/math0% | 0% | 0% | 8% | 91%
libraries/model_testing0% | 0% | 0% | 23% | 76%
libraries/functions0% | 0% | 0% | 16% | 83%
libraries/testing0% | 0% | 0% | 15% | 84%
libraries/evaluators0% | 0% | 0% | 0% | 100%
Most Complex Units
Top 20 most complex units
Unit# linesMcCabe index# params
void GeneralCachingStrategy::HandleCachingImpl()
in libraries/value/src/CachingStrategies.cpp
583 57 1
def fit()
in tools/utilities/pythonlibs/audio/training/train_classifier.py
168 48 8
Node ModelBuilder::AddTypeCastNode()
in interfaces/common/src/ModelBuilderInterface.cpp
121 31 3
void CommandLineParser::Parse()
in libraries/utilities/src/CommandLineParser.cpp
135 31 0
Value LLVMContext::BinaryOperationImpl()
in libraries/value/src/LLVMContext.cpp
143 31 3
int main()
in tools/trainers/retargetTrainer/src/main.cpp
123 27 2
LLVMType IREmitter::Type()
in libraries/emitters/src/IREmitter.cpp
58 26 1
std::string LoopNestPrinter::GetPredicateString()
in libraries/value/src/loopnests/LoopNestPrinter.cpp
136 26 3
bool LoopNestVisitor::IsPlacementValid()
in libraries/value/src/loopnests/LoopNestVisitor.cpp
97 26 3
def parse_cfg()
in tools/importers/darknet/darknet_to_ell.py
163 26 1
def run()
in tools/utilities/optimizer/profile_builder.py
112 26 1
Scalar CodeGenerator::EmitKernelPredicate()
in libraries/value/src/loopnests/CodeGenerator.cpp
144 24 3
void LoopNestVisitor::GenerateLoopsOld()
in libraries/value/src/loopnests/LoopNestVisitor.cpp
110 24 2
Value CppEmitterContext::BinaryOperationImpl()
in libraries/value/src/CppEmitterContext.cpp
104 23 3
void LLVMContext::CopyDataImpl()
in libraries/value/src/LLVMContext.cpp
149 23 2
int main()
in tools/trainers/linearTrainer/src/main.cpp
137 22 2
def train()
in tools/utilities/pythonlibs/audio/training/train_classifier.py
114 22 5
void GenerateMachineCode()
in libraries/emitters/src/IRAssemblyWriter.cpp
103 20 4
DetectedWeightType DetectWeightType()
in libraries/passes/src/DetectLowPrecisionConvolutionTransformation.cpp
72 20 2
Value ComputeContext::BinaryOperationImpl()
in libraries/value/src/ComputeContext.cpp
105 20 3