Существуют различные типы качества, которые можно измерить в программных продуктах, например, соответствие назначению (например, конечное использование), ремонтопригодность, эффективность. Некоторые из них в некоторой степени субъективны или специфичны для конкретной области (например, хорошие принципы разработки графического интерфейса пользователя могут различаться в зависимости от культуры или в зависимости от контекста использования, например, военное и потребительское использование).
Меня интересует более глубокая форма качества, связанная с сетью (или графиком) типов и их взаимосвязью, то есть к каким типам относится каждый тип, существуют ли четко идентифицируемые кластеры взаимосвязанности, относящиеся к многоуровневая архитектура или, наоборот, существует большой «шар» ссылок на типы («монолитный» код). Кроме того, размер каждого типа и / или метода (например, измеренный в количестве байтового кода Java или .Net IL) должен давать некоторое представление о том, где большие сложные алгоритмы были реализованы как монолитные блоки кода, вместо того, чтобы разлагаться на более управляемые / обслуживаемые ломти.
Анализ, основанный на таких идеях, может быть в состоянии рассчитать показатели, которые по крайней мере являются показателем качества. Я предполагаю, что точный порог / точки принятия решения между высоким и низким качеством был бы субъективным, поскольку под ремонтопригодностью мы подразумеваем ремонтопригодность программистов-людей и, следовательно, функциональная декомпозиция должна быть совместима с тем, как работает человеческий разум. Поэтому я задаюсь вопросом, может ли когда-либо существовать математически чистое определение качества программного обеспечения, которое превосходит все возможные программы во всех возможных сценариях.
Мне также интересно, если это опасная идея, что, если объективные прокси для качества станут популярными, деловое давление заставит разработчиков использовать эти метрики в ущерб общему качеству (те аспекты качества, которые не измеряются прокси).
Еще один способ думать о качестве - с точки зрения энтропии. Энтропия - это тенденция систем переходить из упорядоченного в неупорядоченное состояние. Любой, кто когда-либо работал в реальном, среднем и крупномасштабном программном проекте, оценит степень, в которой качество кодовой базы со временем ухудшается. Деловые нагрузки обычно приводят к изменениям, которые фокусируются на новых функциональных возможностях (за исключением тех случаев, когда само качество является основным преимуществом, например, в программном обеспечении для авионики), а также на ухудшении качества из-за проблем регрессии и функциональности «чистокровных», где оно не подходит перспективы качества и обслуживания. Итак, можем ли мы измерить энтропию программного обеспечения? И если да, то как?