multimetricprog

Calculate code metrics in various languages


License
MIT
Install
pip install multimetricprog==1.3.0

Documentation

NOTE: This is an edited version of multimetric, that allows you use this module in a programmatically way, it's not intended to replace the original CLI module, and I won't update more this package. For more info, see the original package

Usage

from multimetricprog import calculator

calculator.calculate('''
print("your python code")
''')

returns

{
  "files": {
    "fp.py": {
      "comment_ratio": 0.0,
      "cyclomatic_complexity": 2,
      "fanout_external": 0,
      "fanout_internal": 0,
      "halstead_bugprop": 0.004643856189774725,
      "halstead_difficulty": 1.3333333333333333,
      "halstead_effort": 18.575424759098897,
      "halstead_timerequired": 1.0319680421721609,
      "halstead_volume": 13.931568569324174,
      "lang": [
        "Python"
      ],
      "loc": 1,
      "operands_sum": 4,
      "operands_uniq": 3,
      "operators_sum": 2,
      "operators_uniq": 2
    }
  },
  "overall": {
    "comment_ratio": 0.0,
    "cyclomatic_complexity": 2,
    "fanout_external": 0,
    "fanout_internal": 0,
    "halstead_bugprop": 0.004643856189774725,
    "halstead_difficulty": 1.3333333333333333,
    "halstead_effort": 18.575424759098897,
    "halstead_timerequired": 1.0319680421721609,
    "halstead_volume": 13.931568569324174,
    "loc": 1,
    "maintainability_index": 100,
    "operands_sum": 4,
    "operands_uniq": 3,
    "operators_sum": 2,
    "operators_uniq": 2,
    "pylint": 100.0,
    "tiobe": 99.32835820895522,
    "tiobe_compiler": 100.0,
    "tiobe_complexity": 95.5223880597015,
    "tiobe_coverage": 100.0,
    "tiobe_duplication": 100.0,
    "tiobe_fanout": 100.0,
    "tiobe_functional": 100.0,
    "tiobe_security": 100.0,
    "tiobe_standard": 100.0
  },
  "stats": {
    "max": {
      "comment_ratio": 0.0,
      "cyclomatic_complexity": 2,
      "fanout_external": 0,
      "fanout_internal": 0,
      "halstead_bugprop": 0.004643856189774725,
      "halstead_difficulty": 1.3333333333333333,
      "halstead_effort": 18.575424759098897,
      "halstead_timerequired": 1.0319680421721609,
      "halstead_volume": 13.931568569324174,
      "loc": 1,
      "operands_sum": 4,
      "operands_uniq": 3,
      "operators_sum": 2,
      "operators_uniq": 2
    },
    "mean": {
      "comment_ratio": 0.0,
      "cyclomatic_complexity": 2,
      "fanout_external": 0,
      "fanout_internal": 0,
      "halstead_bugprop": 0.004643856189774725,
      "halstead_difficulty": 1.3333333333333333,
      "halstead_effort": 18.575424759098897,
      "halstead_timerequired": 1.0319680421721609,
      "halstead_volume": 13.931568569324174,
      "loc": 1,
      "operands_sum": 4,
      "operands_uniq": 3,
      "operators_sum": 2,
      "operators_uniq": 2
    },
    "median": {
      "comment_ratio": 0.0,
      "cyclomatic_complexity": 2,
      "fanout_external": 0,
      "fanout_internal": 0,
      "halstead_bugprop": 0.004643856189774725,
      "halstead_difficulty": 1.3333333333333333,
      "halstead_effort": 18.575424759098897,
      "halstead_timerequired": 1.0319680421721609,
      "halstead_volume": 13.931568569324174,
      "loc": 1,
      "operands_sum": 4,
      "operands_uniq": 3,
      "operators_sum": 2,
      "operators_uniq": 2
    },
    "min": {
      "comment_ratio": 0.0,
      "cyclomatic_complexity": 2,
      "fanout_external": 0,
      "fanout_internal": 0,
      "halstead_bugprop": 0.004643856189774725,
      "halstead_difficulty": 1.3333333333333333,
      "halstead_effort": 18.575424759098897,
      "halstead_timerequired": 1.0319680421721609,
      "halstead_volume": 13.931568569324174,
      "loc": 1,
      "operands_sum": 4,
      "operands_uniq": 3,
      "operators_sum": 2,
      "operators_uniq": 2
    }
  }
}

Notes

By default, the filename "fp.py" is hardcoded in order to make the module work, if you're interested, you can fork this and make a better version for this module (also, a better README.md).

Item structure

item description range recommendation
comment_ratio Comment to Code percentage 0..100 > 30.0
cyclomatic_complexity Cyclomatic complexity according to McCabe 0..(inf) < 10
fanout_external Number imports from out of tree modules 0..(inf)
fanout_internal Number imports from same source tree modules 0..(inf)
halstead_bugprop Number of delivered bugs according to Halstead 0..(inf) < 0.05
halstead_difficulty Difficulty according to Halstead 0..(inf)
halstead_effort Effort according to Halstead 0..(inf)
halstead_timerequired Time required to program according to Halstead 0..(inf)
halstead_volume Volume according to Halstead 0..(inf)
lang list of identified programming languages list
loc Lines of code 1..(inf)
maintainability_index Maintainability index 0..100 > 80.0
operands_sum Number of used operands 1..(inf)
operands_uniq Number of unique used operands 1..(inf)
operators_sum Number of used operators 1..(inf)
operators_uniq Number of unique used operators 1..(inf)
pylint General quality score according to pylint 0..100 > 80.0
tiobe_compiler Compiler warnings score according to TIOBE 0..100 > 90.0
tiobe_complexity Complexity according to TIOBE 0..100 > 80.0
tiobe_coverage Coverage according to TIOBE 0..100 > 80.0
tiobe_duplication Code duplications score according to TIOBE 0..100 > 80.0
tiobe_fanout Fan-Out score according to TIOBE 0..100 > 80.0
tiobe_functional Functional defect score according to TIOBE 0..100 > 90.0
tiobe_security Security score according to TIOBE 0..100 > 90.0
tiobe_standard Language standard score according to TIOBE 0..100 > 80.0
tiobe General quality score according to TIOBE 0..100 > 80.0

Statistics

The item stats contains in addition to the above mentioned the following items, which by themselves contain all the items mentioned at Item structure

  • max = the maximum value of all items of the metric
  • mean = statistical mean over all items of the metric
  • median = statistical median over all items of the metric
  • min = the minimum value of all items of the metric
  • sd = standard deviation over all items of the metric

Further reading

Bugs & Contribution

Feel free to create issues or pull requests