IDEAS.md 3.9 KB

Ideas

https://github.com/metrixplusplus/metrixplusplus/blob/master/IDEAS.md This file captures all the ideas sparked in the past in relation to this project.

New metrics

  • Number of casts to void
  • Count good stuff: const, pure, rodata, static
  • Numver of dead symbols, files, functions, directories
  • Detect and count source code within comments and #if 0
  • Number of lines suppresed from static analysis, compiler warnings (useful when analysis is separated from new/modified code and untouched code)
  • check presense of doxygen comments before a region
  • Number of warnings by unused code detector
  • number of breaks per case statement (motivation is to enforce break per case)
  • Number of dead http links in strings and comments
  • count not empty (pattern based) comments (to evaluate quality of comments to some extent.?)
  • analysis of names, fucntions include english verbs, object under operation, etc., compliancy with naming conventions
  • number of throwing exceptions or consider how it is linked with multiple returns and cyclomatic complexity
  • number of violations to coding style (source from external tool?)
  • Number of violations to coding standards (against external tool?)
  • count declaration without initialisation
  • count default:s per switches (to enforce default case)
  • inheritance deepness, number of children, number of parent
  • number of using 'using namespace' statements
  • volume of changes in commit
  • size of corresponding *.o file
  • number of global variables (or extern symbols from binaries?)
  • number of valgrind warnings
  • count noname structs, namespaces, enums, classes
  • Number of components per whole scanned system, size of a component
  • number of logging statements
  • number of asserts metric
  • number of returns or span time between returns, code indent level in case of mutiple returns
  • fan-in/fan-out (input/output asignments and flows) metric
  • Number of basic blocks metric
  • number of variable-members in public headers
  • number of warnings by static analysis tool
  • number of warnings by compiler
  • Max line length metric
  • radio of length of name of identifier to span time (more spanning variables should be named longer)
  • Number of changes metric (frequently changing places may require attention to revision approaches)
  • Number of magic strings metric
  • Span time, life time metrics
  • Number of delete, new (malloc/free) operators metric (to enforce none and use smart pointers)
  • Arguments per function metric
  • Preprocessor statements metric (differentiate conditional and non-conditional)
  • Number of statements metric
  • Simple Coupling metric (number of external identifiers used, number of times used by others)
  • Code duplication metric (develop own code duplication detector?)
  • Code coverage metric (integrate with other tools?)
  • Add a way to collect usage data (Need some sort of feedback on usage trends. Datafile properties would be enough to feedback.)
  • Exclude header files guards from std.code.lines:preprocessor metric. (To minimise number of false-positives for the metric.)
  • Maximum number of pointer dereferencing per statement (Ref: Limit the use of pointers. Use no more than two levels of dereferencing per expression. http://spinroot.com/p10/rule9.html)
  • Average number of assertions per function length (Ref: Use minimally two assertions per function on average. http://spinroot.com/p10/rule5.html)
  • Metric for gotos, setjmp, longjmp (Inspired by: http://spinroot.com/p10/rule1.html)

Other

  • Add default useful views inside the db file. It turned out people browse DB file directly and want to have useful views available when DB file is opened.
  • Web dashboard to browse trends.
  • Support for other languages (Python, Matlabm Lua, sh, Ruby, etc..)
  • Performance profile the tool (Need a way to enable cProfile module via configuration. Plus, need a measurement of time spent per plugin.)
  • Handle kill signal and kill child process and release database file