Измерение возможности повторного использования кода

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

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

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


person user384278    schedule 06.07.2010    source источник


Ответы (3)


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

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

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

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

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

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

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

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

person Péter Török    schedule 06.07.2010
comment
Я знаю обо всех этих препятствиях, но я все же хотел бы что-то сделать, и мне нужна какая-то рекомендация. Различные модули можно анализировать отдельно. (еще не пробовал) Хороший подход - изучить распределение количества использований на функцию (что я уже сделал - количество использований по оси X, количество функций, использованных X раз по оси Y). Я предполагаю, что что эти дистрибутивы будут похожи для разных больших программных пакетов, поэтому можно будет сравнить их. В качестве простого начала мне было бы интересно, сколько функций не вызывается более одного раза. - person user384278; 06.07.2010

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

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

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

person Ira Baxter    schedule 06.07.2010

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

Даже если вы не в .net, возможно, вам пригодятся определения показателей.

person Philipp    schedule 14.09.2010