2008-10-09 2 views
4

Я хотел бы знать, часто ли кто-то использует метрики для проверки своего кода/дизайна. В качестве примера, кажется, я буду использовать:Метрики и объектно-ориентированное программирование

  • количества линий на метод (< 20)
  • числа переменных в метод (< 7)
  • количества параметров при в метод (< 8)
  • число методов в классе (< 20)
  • количество поля для каждого класса (20) <
  • наследования глубины дерева (< 6).
  • Отсутствие Сплоченность в методах

Большинство из этих метрик очень просты.

Какова ваша политика в отношении такого рода измерений? Используете ли вы инструмент для проверки их (например, NDepend)?

ответ

0

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

В течение многих лет книга «Объектно-ориентированные программные показатели» Марка Лоренца была лучшим ресурсом для показателей OO. Но в последнее время я видел больше ресурсов.

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

Обновление Теперь мы используем этот инструмент для обнаружения возможных проблем с источником. Несколько метрик мы добавили (не все чище OO):

  • использования утверждает
  • использования магии константы
  • использования комментариев, в связи с compelxity методов
  • оператор уровень вложенности
  • класс
  • кол-во открытых площадок в классе
  • относительное число переопределенных методов
  • использование операторов goto

Есть еще больше. Мы сохраняем те, которые дают хороший образ болевых пятен в коде. Таким образом, мы имеем прямую обратную связь, если они исправлены.

0

Жесткие номера не работают для каждого решения. Некоторые решения более сложны, чем другие. Я начну с них в качестве ваших рекомендаций и посмотрю, где закончится ваш проект.

Но, касаясь этих цифр, эти цифры выглядят довольно высокими.Я обычно найти в моем конкретном стиле кодирования, который я обычно:

  • не более 3 параметров в методе
  • подписи около 5-10 строк в методе
  • не более 3 уровней наследования

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

4

Наложение количественных ограничений на эти значения (как вы, кажется, подразумеваете с числами), на мой взгляд, не очень хорошая идея. Количество строк в методе может быть очень большим, если существует значительный оператор switch, и все же метод все еще прост и правилен. Количество полей в классе может быть очень большим, если поля просты. И пять уровней наследования могут быть слишком много, иногда.

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

1

Лично я считаю, что очень сложно придерживаться этих требований (например, иногда вам действительно нужен метод с более чем 20 строками), но в духе вашего вопроса я упомянул некоторые из принципов, используемых в эссе под названием Object Calisthenics (часть Thoughtworks Anthology, если вам интересно).

  • Уровни отступа в методе (< 2)
  • Количество 'точек' в строке (< 2)
  • Количество строк в классе (< 50)
  • Количество классов в упаковке (< 10)
  • Количество например дисперсии в классе (< 3)

Он также защищает не использование ключевого слова «else», а также никаких геттеров или сеттеров, но я думаю, что это немного за борт.

0

Как утверждают другие, соблюдение строгого стандарта будет жестким. Я считаю, что одним из наиболее ценных применений этих показателей является просмотр того, как они меняются по мере развития приложения. Это помогает дать вам представление о том, как хорошая работа, которую вы выполняете при получении необходимого рефакторинга, выполняемого по функциональности, добавлена ​​и помогает предотвратить большой беспорядок :)

2

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

Это не означает, что показатели не являются полезными. Показатели наиболее полезны , когда они меняются, чтобы искать области, которые могут изменяться неожиданными способами. Например, если вы вдруг перейдете от 3 уровней наследования до 15 или 4 парм за один метод до 12, зайдите и выясните, почему.

пример: хранимая процедура для обновления таблицы базы данных может иметь столько параметров, сколько в таблице есть столбцы; интерфейс объекта к этой процедуре может иметь то же самое, или он может иметь один, если есть объект для представления объекта данных. Но конструктор для объекта данных может иметь все эти параметры. Итак, что бы вам сказали показатели? Немного! И если у вас достаточно таких ситуаций в базе кода, целевые средние будут выведены из воды.

Поэтому не полагайтесь на показатели как абсолютные индикаторы ничего; нет никакой замены для чтения/просмотра кода.

4

Метрика, которую я не видел в вашем списке, - это Цикломатическая сложность МакКейба. Он измеряет сложность данной функции и имеет корреляцию с ошибкой. Например. высокие оценки сложности для функции указывают: 1) вероятно, чтобы быть функцией багги и 2) Вероятно, трудно исправить (например, исправления представит свои собственные ошибки).

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

Смежные вопросы