Анализ сложности и покрытия кода для IBM System Planning Tool

Comments

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

В этой статье подробно описываются действия по настройке инструментов анализа сложности и покрытия кода для проекта IBM System Tool в среде Windows.

IBM System Planning Tool – это Web-приложение, позволяющее проектировать конфигурации системы в соответствии с вашими потребностями. С его помощью можно сконфигурировать абсолютно новую систему или спроектировать систему на основе новых рабочих нагрузок или существующих данных о производительности.

В данном проекте используется архитектура модель-представление-контроллер (model-view-controller – MVC), в которой:

  • Для хранения объектов системы во время исполнения используется модель данных.
  • Для отображения на Web-странице сконфигурированной системной информации используется модель представления.
  • Для взаимодействия между моделью данных и моделью представления используется контроллер.

В данном проекте применяются следующие технологии: Java™, JavaServer Pages, JavaServer Faces, JavaScript, XML и ANT. Статья предназначена для разработчиков и тестировщиков Java- и J2EE-проектов

Эту статью можно использовать в качестве руководства по настройке среды анализа сложности и покрытия кода в вашем проекте. Чтобы применить примеры из статьи в вашем проекте, измените файлы и пути в соответствии с вашей средой.

Инструмент анализа сложности кода

Инструмент анализа сложности кода вычисляет различные метрики кода проекта System Planning Tool в процессе циклов создания. Метрики генерируют предупреждения о сложности кода для последующего устранения выявленных проблем. В статье описывается использование плагина Eclipse Metrics для анализа сложности кода.

Инструмент анализа сложности кода предоставляет такие метрики, как цикломатическая сложность, число строк в методе, число операторов и число уровней в коде.

Загрузка и установка плагина Eclipse Metric

Для работы плагина Eclipse Metrics необходима среда Eclipse с JDK 1.5 или выше.

  1. Загрузите JAR-файл Eclipse Metrics.
  2. Сохраните загруженный JAR-файл в каталоге плагинов Eclipse.
  3. Перезапустите Eclipse.

Включение и отключение плагина Eclipse Metrics

В зависимости от потребностей плагин Eclipse Metrics можно включить или отключить для каждого Java-проекта. Чтобы включить плагин, откройте раздел Properties проекта, выберите вкладку Metrics и отметьте или снимите флажок Enable Metrics Gathering. Нажмите OK для повторной компиляции проекта (если в предпочтениях проекта настроена автоматическая сборка) и вычисления метрик. При выходе метрик за пределы указанного диапазона в представлении Problems View генерируются и отображаются предупреждения, а блок кода помечается.

Например, чтобы включить плагин Eclipse Metrics в проекте System Planning Tool, щелкните правой кнопкой мыши на uSPT > Properties > Metrics и отметьте флажок Enable Metrics Gathering (см. рисунок 1).

Рисунок 1. Включение вычисления метрик
Рисунок 1. Включение вычисления метрик
Рисунок 1. Включение вычисления метрик

Установка предпочтений

Откройте диалоговое окно Windows Preferences и выберите вкладку Metrics для выполнения следующих действий:

  1. Включение или отключение метрик.
  2. Установка максимальных значений для включенных метрик.
  3. Настройка метрик в соответствии с требованиями проекта.

Нажмите OK для повторной компиляции проекта (если в предпочтениях проекта настроено выполнение автоматических сборок) и повторного вычисления метрик. При выходе метрик за пределы указанного диапазона в представлении Problems View генерируются и отображаются предупреждения, а блок кода помечается.

На вкладке Complexity укажите предпочтения для метрик (см. рисунок 2).

  • Отметьте Cycolomatic Complexity и укажите 4 в поле Upper Bound.
  • Отметьте Weighted Methods Per Class и укажите 40 в поле Upper Bound.
  • Установите флажки в разделе Options:
    • Include 'case' and 'default' statements
    • Include 'catch' clauses
    • Include 'ternary' operator
Рисунок 2. Установка предпочтений для метрик
Рисунок 2. Установка предпочтений для метрик
Рисунок 2. Установка предпочтений для метрик

Возможности плагина Eclipse Metrics

Плагин Eclipse Metrics обеспечивает доступ к нескольким видам метрик:

  • Цикломатическая сложность. Указывает количество линейных сегментов (секций кода без ветвей) в методе. Эта метрика используется для определения числа тестов, необходимых для обеспечения полного охвата. Эту метрику также можно использовать для оценки психологической сложности метода. Например, метод без ветвей имеет цикломатическую сложность 1. Это число увеличивается на единицу с каждой новой ветвью.
  • Число строк в методе. Указывает число строк в методе. Строку определяет наличие символа новой строки.
  • Число операторов. Указывает число операторов в методе. Это более точная метрика, чем число строк кода, потому что количество строк кода может меняться в зависимости от соглашений по форматированию. Эта метрика учитывает следующие операторы: break, continue, do, явный вызов конструктора, явный вызов суперконструктора, for, if, return, switch, throw, try, catch, finally, while и присваивания.
  • Число уровней. Указывает максимальное число уровней вложенности в методе. Чем больше уровней, тем выше сложность.

Метрики для проекта System Planning Tool

На рисунке 3 показаны метрики сложности кода для данного проекта. Для данного метода собираются следующие метрики:

  • Число уровней: 7.
  • Число строк кода в методе: 84.
  • Число операторов: 47.
  • Цикломатическая сложность: 10.
Рисунок 3. Метрики для проекта System Planning Tool
Рисунок 3. Метрики для проекта System Planning Tool
Рисунок 3. Метрики для проекта System Planning Tool

Инструмент для покрытия кода

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

В данной статье описывается использование Eclipse-инструмент EclEmma для анализа покрытия кода.

Загрузка и установка компонентов EclEmma

Для EclEmma необходимы Eclipse 3.5 (или выше) и Java 1.5 (или выше).

  1. В меню Eclipse нажмите Help > Eclipse Marketplace.
  2. Найдите EclEmma.
  3. Нажмите Install для записи EclEmma Java Code Coverage.
  4. Выполните действия, предлагаемые мастером установки.
  5. Включите файл junit.jar в рабочую область проекта.
  6. Перезапустите Eclipse.

Определение покрытия кода для одного контрольного теста проекта

В этом разделе описывается настройка EclEmma для определения подробностей покрытия для одного контрольного теста CCIN_test_cases в проекте System Planning Tool.

Для проверки покрытия кода CCIN_test_cases.java перейдите в Package Explorer и выберите файл CCIN_test_cases.java. Щелкните правой кнопкой мыши на имени файла и выберите Coverage As > Coverage Configurations (см. рисунок 4).

Рисунок 4. Конфигурации покрытия
Рисунок 4. Конфигурации покрытия
Рисунок 4. Конфигурации покрытия

В следующем окне создайте Java Application, указав в качестве имени CCIN_test_cases и введя указанные ниже данные на вкладке Main (см. рисунок 5).

  • Project: uTest.
  • Main class: test.TestLoader.
  • Отметьте флажок Stop in main.
  • Нажмите Coverage.
Рисунок 5. Настройка покрытия на вкладке Main
Рисунок 5. Настройка покрытия на вкладке Main
Рисунок 5. Настройка покрытия на вкладке Main

На вкладке Coverage по умолчанию выбираются все проекты в рабочей области Eclipse для System Planning Tool (uLVT, uSPT, uSPT_MRI и uTest). Поэтому покрытие кода конкретным контрольным тестом охватывает все эти проекты. Чтобы ограничить проверку покрытия определенными проектами, выберите на вкладке Coverage только те проекты, которые показаны на рисунке 6.

  • uLVT – src
  • uSPT – insulation/src
  • uSPT – web/src
  • uSPT_MRI
Рисунок 6. Настройка покрытия на вкладке Coverage
Рисунок 6. Настройка покрытия на вкладке Coverage
Рисунок 6. Настройка покрытия на вкладке Coverage

На вкладке Arguments укажите информацию в соответствии с рисунком 7.

  • Аргументы программы:
    	test/unit/fcresolution/information
    CCIN_test_cases
    -norecordings
  • Аргументы виртуальной машины: Dcom.ibm.spt.fdate=20151231.
Рисунок 7. Настройка покрытия на вкладке Arguments
Рисунок 7. Настройка покрытия на вкладке Arguments
Рисунок 7. Настройка покрытия на вкладке Arguments

Нажмите Apply, а затем Coverage.

Инструментальное средство выполняет первый контрольный тест (выходные данные теста отображаются на вкладке Console), а затем собирает информацию о покрытии для этого теста и отображает ее на вкладке Coverage (см. рисунок 8).

Рисунок 8. Информация о покрытии – покрытие проекта
Рисунок 8. Информация о покрытии – покрытие проекта
Рисунок 8. Информация о покрытии – покрытие проекта

Чтобы запросить покрытие кода для контрольного теста, выберите uTest > CCIN_test_cases в столбце элементов данных покрытия (см. рисунок 9). Это действие покажет процент покрытия кода в отдельных методах.

Рисунок 9. Информация о покрытии – покрытие методов
Рисунок 9. Информация о покрытии – покрытие методов
Рисунок 9. Информация о покрытии – покрытие методов

Аннотация исходного кода

Кроме того, подробная информация о покрытии (такая как покрытие строк, ветвей и методов) активного раздела кода отображается непосредственно в редакторе исходного Java-кода.

В том же окне Coverage дважды щелкните левой кнопкой мыши на файле контрольного теста. Обратите внимание на строки, выделенные разными цветами, что указывает на покрытие кода в контрольном тесте (см. рисунок 10).

Рисунок 10. Аннотация исходного кода
Рисунок 10. Аннотация исходного кода
Рисунок 10. Аннотация исходного кода

Каждый цвет в исходном коде имеет конкретное значение при определении покрытия для конкретного контрольного теста.

  • Зеленый: строки кода с полным покрытием.
  • Желтый: строки кода с частичным покрытием (некоторые инструкции или ветви пропущены).
  • Красный: строки с отсутствующим покрытием. Эти строки кода еще не были выполнены.

Свойства покрытия

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

Например, чтобы проверить свойства покрытия для контрольного теста CCIN_test_cases.java, перейдите в Package Explorer, выберите этот файл и щелкните правой кнопкой мыши на Properties, чтоб отобразить вкладку Coverage. Свойства покрытия перечислены на рисунке 11.

Рисунок 11. Свойства покрытия
Рисунок 11. Свойства покрытия
Рисунок 11. Свойства покрытия

Можно получить информацию о покрытии для всех контрольных тестов в блоке тестов или для комплекта тестов к конкретному проекту.

Заключение

Анализ сложности и анализ покрытия кода – два важных измерения качества кода, поставляемого в результате выполнения проекта разработки. В этой статье подробно описываются действия по настройке инструментов анализа сложности и покрытия кода для IBM System Tool. Для получения подробной информации о сложности и покрытии кода в рамках проекта используются плагины Eclipse Metrics и EclEmma соответственно. Плагин Eclipse Metrics позволяет разработчику получать различные метрики кода, такие как цикломатическая сложность, число строк в методе, число операторов и число уровней в коде. С помощью плагина EclEmma разработчик и тестировщик могут получать информацию об уровне тестирования конкретного набора кода (или набора тестов в блоке или комплекте тестов). Подробную информацию о покрытии кода можно получить как на уровне проекта, так и на уровне каждого метода. Использование этих инструментов в процессе ежедневной разработки позволяет существенно повысить качество и производительность любого проекта.


Ресурсы для скачивания


Похожие темы


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Rational
ArticleID=1003990
ArticleTitle=Анализ сложности и покрытия кода для IBM System Planning Tool
publish-date=04212015