Расчёт плотности ошибок и его реализации в MSR Tools

Как уже было отмечено традиционная плотность ошибок рассчитывается как количество дефектов на 1000 строк кода. Важно отметить какого именно кода. Того кода, который существует на момент измерения. Считается эта метрика именно так а не иначе не потому что так «правильно», а потому что так удобно. Что может быть проще посчитать количество дефектов, количество строк кода и разделить первое на второе. Однако такой подход имеет ряд недостатков.

Недостатки эти незаметны и не столь существенны, когда плотность ошибок рассчитывается для больших объёмов кода. Например для всего кода, как чаще всего и происходит. Однако если считать плотность ошибок для относительно небольших множеств кода (код отдельного автора, код в файле), то проблемы становятся заметны.

Вот простой пример. Допустим мы создали новый файл и добавили в него 1000 строк кода. Постепенно исправляются ошибки. Пусть в файле было исправлено 10 ошибок. При исправлениях код удалялся, добавлялся, подвергался рефакторингу и в итоге в файле получилось 800 строк кода. Традиционная плотность ошибок равна 1/80. Приемлемый показатель. Но погодите… После этого происходит рефакторинг, в результате которого в нашем файле остаётся 100 строк кода, и вот традиционная плотность ошибок для него уже 1/10. Хотя очевидно, что причиной большинства ошибок которые мы учитываем, был код, которого в файле уже нет. Можно пойти дальше. В результате ещё одного чудо-рефакторинга в файле осталось 5 строк кода, и традиционная плотность ошибок для него стала 2, т.е. два дефекта на строку. Нонсенс! На практике подобная ситуация случается не так редко как может показаться, но чаще конечно, при таком подходе просто получаем погрешность, которая тем больше чем больше было удалено кода.

Поэтому в MSR Tools есть альтернативная плотность ошибок пригодная для измерения плотности ошибок для небольших множеств кода. Она считается как количество дефектов на 1000 строк добавленного кода. Для примера приведённого выше, если предположить, что в процессе рефакторинга и исправлений в файле сверх 1000 строк было добавлено ещё скажем 200 она составит 1/120. Не трудно догадаться, что подсчёт этой метрики только на основе анализа кода в его текущем состоянии невозможен. Нужна информация обо всём добавленном коде, которую можно получить только из системы контроля версий.

Обычная плотность ошибок всем хороша, но она не даёт представления о доле ошибочного кода в общей его массе. Такое представление даёт другая метрика в MSR Tools — плотность ошибочного кода. Она считается как количество  дефектных строк кода делённое на их общее количество. Фактически это вероятность того, что отдельная вновь добавленная строка кода окажется ошибочной, если исходить из предположения, что новый код добавляется теми же людьми что и уже имеющийся.