оценить стоимость проекта;
определить график выполнения работ;
оценить производительность применяемых средств и методов с течением времени;
спрогнозировать потребности в персонале;
сократить расходы на техническое обслуживание.
Объектно-ориентированные метрики нацелены на оценку сложности объектно-ориентированных проектов. Основу программного кода таких проектов составляют классы. Они имеют возможность инициализироваться и существовать самостоятельно, наследоваться, зависеть друг от друга, ассоциироваться.
Существует ряд метрик, позволяющих определить сложность объектно-ориентированного проекта:
WeightedMethodsPerClass(WMC) – взвешенная насыщенность класса. Отражает относительную меру сложности класса на основе цикломатической сложности каждого его метода. Класс с более сложными методами и большим количеством методов считается более сложным. При вычислении метрики родительские классы не учитываются.
Depthofinheritancetree(DIT) – длина самого длинного пути наследования, заканчивающегося на данном модуле. Чем глубже дерево наследования модуля, тем может оказаться сложнее предсказать его поведение. С другой стороны, увеличение глубины даёт больший потенциал повторного использования данным модулем поведения, определённого для классов-предков.
Number of children (NOC) – количество наследуемых модулей. Большие значения этой метрики указывают на широкие возможности повторного использования; при этом слишком большое значение может свидетельствовать о плохо выбранной абстракции.
Coupling between objects (CBO) – количество модулей, связанных с данным модулем в роли клиента или поставщика. Чрезмерная связность говорит о слабости модульной инкапсуляции и может препятствовать повторному использованию кода.
Response For Class (RFS) – количество методов, которые могут вызываться экземплярами класса.
Практически на всех платформах для разработки ПО присутствуют инструменты для оценки метрик программного кода. Обычно, они совмещаются с системами статистического анализа кода.
Одна из самых распространённых сред разработки программного обеспечения – Visual Studio. Получить оценку кода можно нажав правой кнопкой на проекте и выбрав пункт “Calculate Code Metrics” (Рис.1).
Рис.1. Пример расчета метрик в VisualStudio
Данное программное обеспечение позволяет определить цикломатическую сложность, глубину наследования, взаимозависимость классов – объектно-ориентированные метрики. Глубина наследования определяется числом уровней наследования в модуле; чем меньше, а взаимозависимость классов – определяет число классов, на которые есть ссылки. Чем данные показатели ниже, тем качественнее считается продукт.
Другой не мало известной средой создания программного обеспечения является Oracle Solaris Studio.
В OSS включены средства сборки, отладки, профилирования и анализа многопоточных приложений. В ней для подсчета объектно-ориентированных метрик используется Performance Analyzer (Рис.2).
Рис. 2. Пример работы PerformanceAnalyzer
Oracle Solaris Studio позволяет разрабатывать приложения на объектно-ориентированных языках С++, С#, Java, а Performance Analyzer позволяет подсчитать сложность классов и их взаимодействия.
GlowCode используется разработчиками программного обеспечения для анализа и оптимизации приложений, производительности, скорости и использования ресурсов. Возможности GlowCode включают в себя обнаружение низкой производительности и утечек памяти (Рис. 3).
Рис. 3. Пример работы GlowCode
GlowCode показывает продолжительность, частоту использования вызовов методов и определяет, какие функции играют наиболее важную роль во времени ресурсоемких задач. GlowCode также выявляет проблемы в динамическом связывании методов, глубине абстракции, скорости доступа к данным, динамического создания и уничтожения объектов.
Shark от Apple является анализатором производительности, используемый разработчиками программного обеспечения для оптимизации программ программного обеспечения на Mac OS X (Рис.4). Он предоставляет образцы программного обеспечения через определенные промежутки времени (или движимый монитор производительности аппаратных средств событий), позволяет делать моментальные снимки стека, показывающий функции, которые требуют больше ресурсов приложения. Включает в себя инструменты для анализа данных, полученных с помощью прогона выборки. На основе этих данных обычно подсчитываются простые метрики для оценки производительности труда (KLOC/человеко-месяц) и качества изделия. Эти метрики не универсальны и спорны, особенно это относится к такому показателю как LOC, который существенно зависит от используемого языка программирования.
Рис.4. Пример работы Shark
Таким образом, были рассмотрены наиболее используемые автоматизированные средства расчета объектно-ориентированных метрик для различных операционных систем. Программ исключительно для расчета объектно-ориентированных метрик очень мало, они могут создаваться предприятиями, деятельность которых тесно связана с объектно-ориентированным программированием. Все вышеперечисленные средства могут применяться не только для расчета объектно-ориентированных метрик, но и для расчета метрик количества строк кода, цикломатической сложности, количества ошибок, степени покрытия кода, покрытия требований. Существуют средства, поддерживающие работу исключительно на одной операционной системе (например, Shark), и те, которые совместимы с несколькими операционными системами (например, с Windows и Linux).
Список литературы
Марков А.С., Цирлов В.Л., Барабанов А.В. Методы оценки несоответствия средств защиты информации / А.С.Марков, В.Л.Цирлов, А.В.Барабанов; под ред. А.С.Маркова. - М.: Радио и связь, 2012. 192 с.
Широков А.И., Потоцкий Е.П. Стандартизация, сертификация и оценка качества программного обеспечения: учеб. пособие – М.: Издательский дом МИСиС, 2013. – 208 с
Статья Code Metrics Values в справочном руководстве по C# MSDN. http://msdn.microsoft.com/en-us/library/bb385914.aspx.