Индекс ремонтопригодности

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

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

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

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

Ответов (5)

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

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

Пороговые значения 65 и 85 взяты из оригинальной статьи, представляющей Индекс ремонтопригодности в 1992/1994 году.

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

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

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

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

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

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

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

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

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

Вскоре это

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

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

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