It looks like we finally nailed down the first five heuristics to implement in Tipster. I will follow up this post with a more in-depth introduction into each heuristic and how we think it will add value to our radiator.
- Test Baseline - Does the commit contain at least one line of test code? This is the dumbest, most simple, heuristic to implement, but you'd be surprised how many commits get flagged here. If developers are not writing any test code, we can't even think about discussing other aspects of quality.
- Churn - How often is the file modified? Are large chunks of a file getting changed in a single commit? Are large chunks of the file getting deleted in a single commit? These are all red flags that can lead to risky code.
- Cyclomatic Complexity - The number of linearly independent paths through code. In layman's terms, the more if statements you add to a method, the higher the cyclomatic complexity.
- Contributor Diversity - It has been shown that the number of different teams (not people in a team, or geographic distance between people in a team) working on a file directly correlates to defect density.
- Code Coverage - We will use a mixture of line and branch coverage to gain insight to how well covered the source file is from a unit-test perspective.
I think this is a really good start and it will give us some good insight into each commit. As time goes on, these heuristics will be fine-tuned to give the best results possible and additional heuristics can be added after we are comfortable with the list above.