Индекс работоспособности

Я встретил рекомендуемые значения индекса работоспособности (MI) следующим образом:

  • 85 и более: хорошая ремонтопригодность
  • 65-85: умеренная ремонтопригодность
  • 65 и ниже: трудно поддерживать с помощью плохие фрагменты кода (большие, без комментариев, неструктурированный) значение MI может быть даже отрицательный

Являются ли эти значения зависимыми от технологии? Например, это значение, равное 70 для мейнфреймов, но которое трудно поддерживать для Java?

Можно использовать такой же критерий независимо от технологий?

Ответ 1

Это пояснение о значении значения индекса ремонтопригодности.

В скором времени это

MI = 171 - 5.2*ln(Halstead Volume) - 0.23*(Cyclomatic Complexity) - 16.2*ln(Lines of Code)

масштабируется между 0 и 100.

Как легко видеть, эта метрика может использоваться для любого процедурного языка.

Ответ 2

Пороги 65 и 85 взяты из оригинальной статьи введя индекс работоспособности в 1992/1994 годах.

Visual Studio немного скорректировала метрику (mutiplying by 100/171), чтобы она соответствовала шкале 1-100. Visual Studio использует 10 и 20 как пороговые значения.

В общем, я бы слишком серьезно относился к этой метрике и ее порогам: см. также мое сообщение в блоге " Подумайте дважды, прежде чем использовать индекс работоспособности."

Ответ 3

Индекс работоспособности является эмпирической формулой. Это была построена модель, основанная на наблюдении и адаптации. Если вы ищете более подробную информацию, выясните, что уравнение должно быть кабриотировано для определенного языка. Версия SEI откалибрована для Pascal и C и использует набор программ, средний 50KLOC, поддерживаемый Hewlett-Packard.

Калибровка версии Visual Studio такая же, как и версия SEI, но была пропущена для ограничения домена от 0 до 100.

Ответ 4

Я не думаю, что вы можете поместить номер на то, насколько легко часть кода будет поддерживаться разработчиком.

Различные люди будут смотреть на один и тот же код и интерпретировать его по-своему, в зависимости от опыта, культуры, понимания прочитанного и т.д.

При этом метрики будут определенно отличаться друг от друга по технологиям. Вы смотрите на совершенно разные синтаксисы, условности, терминологию и т.д. Как вы можете количественно определить разницу в сложности между низкоуровневым мэйнфреймом и языком высокого уровня, например Java или С#?

Я думаю, что показатели хороши для одной вещи, и только одна вещь: рекомендации. Что касается качества кода, я не думаю, что они должны использоваться для чего-либо, кроме описания базы кода. Они не должны использоваться в качестве определяющего фактора сложности или "способности grok".

Ответ 5

Это зависит от того, как рассчитывается "индекс работоспособности". Мне это не похоже на то, что будет работать на разных языках просто потому, что языки настолько разные.

Может показаться разумным сделать простой сопоставление "количества строк в каждой функции", но что происходит, когда вы пытаетесь сравнить C-код с полными указателей или код С++, полный шаблонов, или С# с запросами LINQ, или Java с дженериками?
Все эти вещи влияют на ремонтопригодность, но не могут быть измерены каким-либо значимым способом на разных языках, поэтому как вы можете сравнивать числа между двумя языками?