Изучение качества кода
Качество кода не должно измеряться субъективно. Разработчик, пишущий код, оценил бы свой собственный код высоко, но это не лучший способ измерять качество кода. Разные команды могут использовать различные определения в зависимости от контекста.
"Код высокого качества" может значить одно для разработчика из автомобильной отрасли. Тот же термин может иметь другое значение для разработчика веб-приложений.
Качество кода крайне важно, ведь оно влияет на общее качество программного обеспечения.
Исследование "Причины дефектов в программном обеспечении и методы их устранения" выявило, что эффективность работающих в одиночку программистов при поиске ошибок в их собственном ПО составляет меньше 50%. При этом большинство форм тестирования эффективны лишь на 35%. Поэтому качество определять сложно.
Имеется пять ключевых характеристик, по которым оценивается высокое качество.
Надежность
Надежность измеряет вероятность того, что система проработает определенное время без отказов и сбоев. Она связана с числом дефектов и с доступностью программного обеспечения. Частоту появления некоторых дефектов можно измерять, запуская средство статического анализа.
Доступность программного обеспечения можно измерять с помощью показателя среднего времени между сбоями (MTBF).
Низкое количество дефектов необходимо для разработки надежной базы кода.
Удобство поддержки
Удобство поддержки измеряет то, насколько легко поддерживать конкретное программное обеспечение. Этот показатель связан с размером, согласованностью, структурой и сложностью базы кода. А обеспечение возможности поддержки исходного кода зависит от нескольких факторов, таких как возможность тестирования и понятность (удобочитаемость) кода.
Руководствуясь одним показателем, нельзя обеспечить удобство поддержки.
Среди метрик, которыми можно воспользоваться для улучшения удобства поддержки, — число предупреждений о стиле и метрики сложности Холстеда.
Для поддержания баз кода в удобном для обслуживания состоянии необходимы и автоматизация, и рецензенты-люди.
Возможность тестирования
Возможность тестирования измеряет, насколько программное обеспечение пригодно для проведения тестирования. Она зависит от того, как хорошо вы можете управлять тестированием, наблюдать за ним, изолировать отдельные элементы и автоматизировать тестирование, а также от других факторов.
Возможность тестирования можно измерять по тому, сколько тестовых случаев требуется, чтобы найти потенциальные сбои в системе.
Размер и сложность программного обеспечения могут влиять на возможность его тестирования.
Таким образом, применение методов на уровне кода, таких как измерение цикломатической сложности, может помочь улучшить возможность тестирования компонента.
Портативность
Переносимость измеряет, насколько сохраняется возможность использования одного и того же программного обеспечения в различных средах. Она связана с независимостью от платформы.
Конкретного показателя переносимости не существует. Но есть ряд способов, которыми можно обеспечить переносимость кода.
Очень важно регулярно тестировать код на различных платформах, а не дожидаться завершения разработки.
Также стоит установить максимально возможный уровень предупреждений компилятора и использовать по крайней мере два разных компилятора.
Обязательное применение стандартов написания кода также способствует переносимости.
Возможность повторного использования
Возможность повторного использования определяет, можно ли использовать заново существующие ресурсы (например, код).
Ресурсы легче использовать повторно, когда они имеют такие свойства, как модульность или слабые связи.
Возможность повторного использования можно измерять по числу взаимозависимостей.
Такие взаимозависимости может обнаруживать статический анализатор кода.