Предлагаемые пороги для некоторых показателей программного обеспечения - PullRequest
1 голос
/ 02 августа 2010

Я искал в Интернете некоторые предложения для порогов для следующих известных метрик программного продукта:

  • Отсутствие сплоченности в методах (для варианта метрики Хендерсона-Селлера)
  • Количество унаследованных методов в классе
  • Количество переопределенных методов в классе
  • Количество недавно добавленных методов в классе

Однако мне не удалосьнайти любой.Я особенно заинтересован в первом.Кто-нибудь знает что-нибудь об этом?Заранее спасибо, Мартин

Ответы [ 3 ]

2 голосов
/ 02 августа 2010

NDepend предлагает следующее:

http://www.ndepend.com/Metrics.aspx#LCOM

1 голос
/ 04 августа 2010

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

Я делаю много измерений когезии для больших классов.Я не думаю, что когда-либо видел измерения LCOM-HS выше 1,0, но я думаю, что вы можете увидеть их для крошечных классов (где вы, вероятно, не особо заботитесь о связности).Лично я использую порог 0,8, но это произвольно.Я прочитал много статей о сплоченности и видел очень мало упомянутых порогов.Это включает в себя статьи Хендерсона-Селлерса, которые я прочитал.

djna является правильным, когда он говорит, что меры сплоченности дадут плохие оценки для JavaBeans и других классов «хранения данных».Кроме того, многие измерения когезии, в том числе LCOM-HS, не учитывают некоторые вещи, которые могут привести к ошибочно плохим оценкам.Например, многие реализации не рассматривают отношения с унаследованными членами.LCOM-HS и многие другие также имеют чрезмерную зависимость от методов доступа к полям.Например, если вы напишите класс, в котором методы в основном взаимодействуют с «данными» через свои аргументы, вы получите то, что выглядит как весьма несвязный класс;тогда как в действительности он может быть хорошо спроектирован.

Что касается других упомянутых вами показателей, я не видел рекомендаций.Я осмотрелся, и единственная рекомендация, которую я видел относительно количества методов XXX, - максимум 20 на класс (никаких подробностей относительно экземпляра, статического, переопределенного и т. Д.).

Здесь - список некоторых работ, посвященных ОО-метрикам, главным образом связности.

1 голос
/ 02 августа 2010

Эта ссылка дает значения для LCOM и LCOMHS.Там написано

  • LCOM = 1 - (сумма (MF) / M * F)
  • LCOM HS = (M - сумма (MF) / F) (M-1)

Где:

  • M - количество методов в классе (учитываются как статические методы, так и методы экземпляра, в него входят также конструкторы, методы получения / установки свойств, событияметоды добавления / удаления).
  • F - количество полей экземпляра в классе.
  • MF - количество методов класса, обращающихся к конкретному полю экземпляра.
  • Sum (MF) - это сумма MF во всех полях экземпляра класса.

Основная идея этих формул может быть сформулирована следующим образом: класс полностью связен, если все его методы используют все своиполя экземпляра

Я не уверен, насколько хорошо эта мера работает при работе с Java Bean, который может иметь большое количество методов получения и установки, каждый из которых имеет дело с одним свойством.

...