Измерение повторного использования кода - PullRequest
3 голосов
/ 06 июля 2010

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

Сколько кода обычно повторно используется в одном приложении?Более конкретно - если мы рассмотрим весь код готового продукта для конечного пользователя (и в конечном итоге исключим сторонние библиотеки), сколько функций и методов вызывается из более чем одного места?

Какие показатели используются для измеренияповторное использование кода?Есть ли доступные номера или исследования для программного обеспечения с открытым исходным кодом и / или с закрытым исходным кодом?

Ответы [ 3 ]

2 голосов
/ 06 июля 2010

Если вы зададите вопрос о том, «сколько функций вызывается из более чем одного места», вы можете технически построить статический анализатор, чтобы ответить на этот вопрос; это просто вопрос построения графа вызовов и некоторого подсчета (см. this для инструмента, который извлекает графы вызовов из C, Java и COBOL). В практическом плане вы можете обнаружить, что гораздо больше работы, которую вы готовы сделать, чтобы непосредственно ответить на этот вопрос.

Возможно, вы захотите запустить детектор клонов на своей базе кода. Это покажет код, который фактически использовался (и должен был каким-то образом абстрагироваться) людьми, выполняющими копирование и вставку, и предоставил точные метрики. Подобное копирование кода является наиболее прямой и распространенной формой повторного использования.

Я строю детекторы клонов уже около десяти лет. Почти каждая система, с которой я сталкиваюсь, независимо от языка, имеет 20% кода, задействованного в клонах (-> около 10% используется повторно). Я видел примеры до 55%.

2 голосов
/ 06 июля 2010

Сколько кода обычно повторно используется в одном приложении?

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

Рассмотрим приложение пакетной обработки данных, которое считывает данные из файла в определенном формате, преобразует их в другой формат и затем сохраняет. Он практически имеет единственный путь выполнения, поэтому не много методов вызывается из более чем одного места.

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

Вы не можете сказать, что дизайн первого приложения хуже, чем у второго приложения (не вдаваясь в детали конкретного случая).

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

Что приводит к другому моменту: повторное использование может происходить на многих уровнях. Вы можете повторно использовать код в приложении или между приложениями. Последнее можно измерить только с учетом всех рассматриваемых приложений.

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

0 голосов
/ 14 сентября 2010

если вы работаете на платформе .NET, рассмотрите возможность использования NDepend, чтобы дать вам много метрик о вашем программном обеспечении.«Повторное использование кода» не доступно как метрика напрямую (возможно, по причинам, которые уже упоминались другими авторами), но такие вещи, как сцепление и сплоченность, могут быть также интересны для вас.

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

...