Моя единственная проблема с охватом кода и модульными тестами состоит в том, что модульные тесты проверяют только то, что они изначально были предназначены для тестирования, и они, по определению, являются кодом и подвержены той же функциональности программного обеспечения, что и обычный код. (они хороши только для того, для чего они написаны, и через некоторое время этого недостаточно)
Но качественные юнит-тесты, очевидно, обеспечат некоторую защиту.
Итак, вот мои важные факторы для программного гниения:
- Количество внешних точек интерфейса данных (extDataIntfPts)
- Качество обработки данных / ошибок, юнит-тесты (codeQuality)
- Зависимость от базовых реализаций, таких как ОС / ВМ. (OsDep)
- Количество внешних точек реализации интерфейса, таких как плагины. (extIntfPts)
- Сложность кода / простой объем кода (linesOfCode)
Поскольку система живет в рабочем состоянии, она подвергается большему разнообразию входных данных по мере роста набора данных, который она собирает. Это по определению подвергает кодовую базу большему числу краевых случаев и последовательностей.
Это может быть смягчено качеством обработки данных, обработкой ошибок и юнит-тестами.
Есть также движущиеся цели базовой среды, в которой работает система. Один из способов смягчить это - поместить приложение в виртуальную машину.
Если в системе реализованы плагины, я вижу, что кодовая база сталкивается с большей вероятностью отказа, так как разрабатывается больше плагинов.
Сложный код! = Элегантный код. Если это элегантно, то, вероятно, просто. Здесь я пойму простую мысль: чем больше кода, тем меньше вероятность того, что он хорошо протестирован, но я полагаю, что его можно было бы перевернуть.
Итак, вот мое уравнение:
bitrot=((linesofcode/codeQuality)*(extDataInfPts+(osDep/change)+extIntfPts)*numberOfSecondsDeployed)
Оценка codeQuality, вероятно, будет включать метрику покрытия кода в модульных тестах. Вы можете запустить программу статического анализа для определения потенциальных ошибок, и это, вероятно, также поможет. Я имею в виду, что в какой-то момент очень сложно оценить, потому что многопоточный код должен быть намного тяжелее, чем POJO. И да, рефакторинг должен быть учтен, но только там, где есть свидетельства гниения программного обеспечения.
В конце концов, это псевдонаука. Вот мой вклад в лженауку.