(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Интеграция FindBugs, CheckStyle и Cobertura с системой сборки Rational Team Concert

Источник: ibm

Введение

Методология непрерывной разработки программного обеспечения предусматривает индивидуальную разработку каждой новой функциональности и последующую ее интеграцию в общую систему. Следуя данной методике, каждый разработчик должен тщательно проверять исходный код, применяя статический анализ, и отправлять отчеты или фиксировать свои действия в такой системе как IBM Rational Team Concert™. Язык программирования Java имеет более 400 стандартных типов статических ошибок. Исправление всех ошибок во время проверки кода и фиксация каждой из них является очень непростой задачей.

Интеграция FindBugs, CheckStyle и Unit Test Coverage Check (Cobertura) с системой Rational Team Concert сокращает процесс проверки поставляемого кода в рамках проекта. Некоторые разработчики не знают о передовых методиках написания кода. Это может привести к возникновению таких проблем производительности, как утечка памяти или неэффективное использование ресурсов процессора. Проблемы такого типа обнаруживаются автоматически при интеграции инструментария с Rational Team Concert, который создает для них уведомления о неисправностях.

Интеграция повышает качество исходного кода, что благотворно сказывается на проекте и его конечных пользователях.

Общая схема и описани

Чтобы понять детали реализации, рассмотрим Rational Team Concert в качестве базовой системы. Это означает, что мы рассматриваем механизм сборки, репозиторий исходных кодов и систему заявок как единый модуль. На рисунках 1 и 2 показано, как Rational Team Concert позволяет заказывать компоновку настроенных ранее действий с репозиторием исходных кодов посредством механизма сборки. В эти настроенные действия по компоновке мы и хотим добавить сценарии для запуска инструментов контроля качества. Эти инструменты можно запускать в последовательном или параллельном режимах. Поскольку они независимы друг от друга, я предпочитаю выполнять их параллельно. Система Cobertura работает с модульным тестированием, выполняющимся во время сборки, поэтому ее необходимо запускать одновременно с модульным тестированием.

Рисунок 1. Схема компонентов интеграции

Схема компонентов интеграции

Рисунок 2. Блок-схема интеграции инструментов

Блок-схема интеграции инструментов 

Разумная реализация отдельных инструментов и детали интеграции

FindBugs

FindBugs - это программа с открытыми исходными кодами, созданная Биллом Пью (Bill Pugh) и Дэвидом Хоумайером (David Howemeyer). Она выполняет поиск ошибок в исходном коде Java. Эта программа путем статического анализа идентифицирует сотни видов потенциальных ошибок в Java-программах. Потенциальные ошибки подразделяются на четыре категории: scariest (ужасные), scary (плохие), troubling (вызывающие тревогу) и of concern (заслуживающие внимания). Мы предлагаем запускать ее на этапе настройки maven-сборки.

Интеграция FindBugs с Rational Team Concert

  1. Добавьте в файл сборки проекта запись о программе FindBugs, которая будет запускать FindBugs во время сборки проекта. В листинге 1 приведен XML-фрагмент файла сборки, активизирующий FindBugs и генерирующий выходной файл с HTML-отчетом.
Листинг 1. Запуск FindBugs во время сборки с построчными комментариями
<tasks> 1 <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="maven.plugin.classpath" /> <mkdir dir="${basedir}/target" /> 2 <property name="findbugs.home" value="${env.FINDBUGS_HOME}" /> 3 <path id="findbugs.lib" > <fileset dir="${findbugs.home}/lib" > <include name="**/*.jar" /> </fileset> </path> 4 <property name="proj.file" value="project.fbp" /> 5 <property name="current.scan" value="target/scan-out.xml" /> 6 <property name="temp.db" value="target/temp-db.xml" /> 7 <property name="report.file" value="target/findbugs-report.html" /> <!-- сканирование указанного исходного кода --> 8 <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"> <classpath refid="findbugs.lib" /> </taskdef> 9 <findbugs home="${findbugs.home}" projectFile="${proj.file}" excludeFilter="excludes.xml" includeFilter="includes.xml" output="xml" outputFile="${current.scan}" /> <!-- завершение генерирования HTML-отчета из временной базы данных --> 10 <taskdef name="convertXmlToText" classname= "edu.umd.cs.findbugs.anttask.ConvertXmlToTextTask"> <classpath refid="findbugs.lib" /> </taskdef> 11 <convertXmlToText home="${findbugs.home}" input="${temp.db}" output="${report.file}" format="html:fancy-hist.xsl" jvmargs="-Djavax.xml.transform.TransformerFactory= org.apache.xalan.processor.TransformerFactoryImpl" /> </tasks>

Рассмотрим листинг 1 более внимательно

  • Строка 1. Указывает источник определения задания, который ссылается на classpath из maven: maven.plugin.classpath.
  • Строка 2. Определяет домашнюю папку FindBugs, указывающую на исполняемые файлы и библиотеки FindBugs.
  • Строка 3. Включает все .jar-файлы из домашней папки FindBugs. Они будут использоваться в дальнейшей работе.
  • Строка 4. Определяет расположение файлов проекта, в которых должна содержаться вся информация о проекте. Пример рассматривается в следующем разделе.
  • Строка 5. Определяет местоположение выходного XML-файла как scan-out.xml.
  • Строка 6. Определяет файл базы данных для хранения ошибок.
  • Строка 7. Определяет месторасположение файла отчета.
  • Строка 8. Определение задания FindBugs (объявление).
  • Строка 9. Выполнение программы FindBugs.
  • Строка 10. Определение задания генерации отчета (объявление).
  • Строка 11. Генерирование отчета. При этом данные преобразуются из XML в HTML.

Файл проекта (project.fbp) должен содержать информацию, приведенную в листинге 2. В нем перечисляются все сканируемые папки классов, соответствующие .jar-файлы, использующиеся для компиляции этих классов, и папки с исходным кодом классов.

Листинг 2. Пример файла project.fb
<Project projectName="MyProject"> <Jar>../MyProject/target/classes</Jar> <AuxClasspathEntry>../MyProject/lib/servlet-api-2.5.jar</AuxClasspathEntry> <SrcDir>../MyProject/src</SrcDir> </Project>
  1. Файл scan-out.xml содержит выходную информацию программы FindBugs по итогам анализа проекта. В листинге 3 приведен пример такого файла
Листинг 3. Пример файла scan-out.xml
<BugInstance type="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD" priority="2" abbrev="UrF" category="STYLE"> <Class classname="com.ibm.myproject.task.Process"> <SourceLine classname="com.ibm.myproject.task.Process" start="21" end="57" sourcefile="Process.java" sourcepath="com/ibm/myproject/task/Process.java"/> </Class> <Field classname="com.ibm.myproject.task.Process" name="conn" signature= "Lcom/com/ibm/myproject/task/Connection;" isStatic="false"> <SourceLine classname="com.ibm.myproject.task.Process" sourcefile="MyHTTP.java" sourcepath="com/ibm/myproject/task/Process.java"/> </Field> <SourceLine classname="com.ibm.myproject.task.Process" start="25" end="25" startBytecode="11" endBytecode="11" sourcefile="Process.java" sourcepath= "com/ibm/myproject/task/Process.java"/> </BugInstance>
  1. Создайте текстовый файл BugSet.txt, содержащий по одной строке для каждой ошибки, указанной в scan-out.xml. Для этого используйте XSL или языки сценариев.
  2. Преобразуйте каждую ошибку из текстового файла BugSet в JSON-формат Rational Team Concert WorkItem и отправьте его в Rational Team Concert, используя функцию автоматической заявки, которая будет рассмотрена ниже.

CheckStyle

CheckStyle - это программа статического анализа исходного кода, используемая при разработке программного обеспечения для проверки соответствия правилам написания исходного Java-кода.

Интеграция CheckStyle с Rational Team Concert

  1. Добавьте в файл сборки проекта запись о программе CheckStyle, которая будет запускать CheckStyle во время сборки проекта. В листинге 1 приведен XML-фрагмент файла сборки, активизирующий CheckStyle и генерирующий выходной файл с HTML-отчетом.
Листинг 4. Запуск CheckStyle во время сборки с построчными комментариями
<tasks> 1 <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref= "maven.plugin.classpath" /> <mkdir dir="${basedir}/target" /> 2 <property name="checkstyle.home" value="${env.CHECKSTYLE_HOME}" /> 3 <path id="checkstyle.lib" > <fileset dir="${checkstyle.home}" > <include name="**/*.jar" /> </fileset> </path> 4 <property name="config_loc" value="${env.BUILD_SCRIPTS}/common/checkstyle" /> <!-- это для того, чтобы Eclipse-CS смог найти excludes.xml --> 5 <property name="target.dir" value="${basedir}/target" /> 6 <property name="scan.xml" value="${target.dir}/scan.xml" /> <taskdef resource="checkstyletask.properties" classpathref="checkstyle.lib"/> <!-- Задание: Scan --> 7 <checkstyle config="${config_loc}/myproject-checkStyle-config.xml" classpathref= "checkstyle.lib" failOnViolation="false"> <fileset dir="${env.BUILD_HOME}/myproject/src" includes="**/*.java" /> <formatter type="xml" toFile="${scan.xml}" /> </checkstyle> </tasks>

Рассмотрим листинг 4 более внимательно

  • Строка 1. Указывает источник определения задания, который ссылается на classpath из maven: maven.plugin.classpath.
  • Строка 2. Определяет домашнюю папку CheckStyle, указывающую на исполняемые файлы и библиотеки CheckStyle.
  • Строка 3. Включает все .jar-файлы из домашней папки CheckStyle, которые будут использоваться в дальнейшей работе.
  • Строка 4. Определяет местоположение папки config, в которой находятся конфигурационные файлы, например excludes.xml.
  • Строка 5. Определяет целевой каталог, в котором будут размещаться все генерируемые файлы.
  • Строка 6. Определяет местоположение выходного XML-файла. В данном примере это scan.xml.
  • Строка 7. Выполняет фактическое сканирование указанной папки с исходными кодами. Сканируются только Java-файлы. Выходная информация генерируется в XML-формате. В данном примере данные пишутся в scan.xml.
  1. Программа checkstyle генерирует подробную выходную информацию, которую можно извлечь при помощи XSL-преобразования. Пример XSL-файла приведен в листинге 5. В примере сгенерирован .txt-файл, содержащий список ошибок.
Листинг 5. Пример XSL-файла
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" encoding="ISO-8859-1" indent="no" /> <xsl:template match="/"> <!-- проходим в цикле по всем указанным файлам --> <xsl:for-each select="checkstyle/file"> <xsl:variable name="fname" select="@name" /> <!-- проходим в цикле по всем ошибкам в файле --> <xsl:for-each select="error"> <xsl:variable name="errtype"> <xsl:choose> <xsl:when test= "@source='com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocMethodCheck'"> Javadoc</xsl:when> <xsl:when test= "@source='com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocStyleCheck'"> Javadoc</xsl:when> <xsl:otherwise>Other</xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:value-of select="$errtype" /><xsl:text> problem(s) in </xsl:text><xsl:value-of select="$fname"/><xsl:text> </xsl:text> </xsl:for-each> </xsl:for-each> </xsl:template> </xsl:stylesheet>
  1. Преобразуйте каждую ошибку из текстового файла DefectSet в JSON-формат Rational Team Concert WorkItem и отправьте ее в Rational Team Concert, используя функцию автоматической заявки, которая будет рассмотрена ниже.

Cobertura

Cobertura - это программа с открытыми исходными кодами, предназначенная для измерения покрытия кода (code coverage) путем его тестирования. Она работает с байт-кодом. Эта программа основана на инструменте jcoverage. Она помогает программистам измерять эффективность тестов и объем исходного кода, охватываемого тестами.

Интеграция Cobertura с Rational Team Concert

Добавьте в файл сборки проекта запись о программе Cobertura, которая будет запускать Cobertura во время сборки проекта. В листинге 1 приведен XML-фрагмент файла сборки, активизирующий Cobertura и генерирующий выходной файл с HTML-отчетом.

Листинг 6. Запуск Cobertura во время сборки
<tasks> 1 <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref= "maven.plugin.classpath" /> <mkdir dir="${project.build.directory}/coverage"/> 2 <taskdef name="cobertura-report" classname="net.sourceforge.cobertura.ant.ReportTask" classpathref="maven.compile.classpath"/> 3 <cobertura-report datafile="${project.build.directory}/cobertura.ser" format="xml" destdir="${project.build.directory}/coverage/xml"> <fileset dir="${basedir}/../myproject/app1/src"> <include name="**/*.java" /> </fileset> </cobertura-report> </tasks>

Рассмотрим листинг 6 более внимательно.

  • Строка 1. Указывает источник определения задания, который ссылается на classpath из maven: maven.plugin.classpath.
  • Строка 2. Определяет задание Cobertura.
  • Строка 3. Генератор XML-отчетов Cobertura работает с файлом cobertura.ser, в котором сохраняются данные анализа.

Система автоматической подачи заявок Rational Team Concert

  1. Создайте JSON для каждой строки текстового файла, которые генерируются для каждой обнаруженной ошибки. В листинге 7 приведен пример JSON-шаблона.
Листинг 7. JSON с ошибками для Rational Team Concert
{ "dc:title":"[Static Analysis] @BUGSUBJ@", "dc:description":"@BUGSUBJ@<br\/><br\/>This problem was found in build: @BUILDID@.<br\/> <br\/>Please see the FindBugs report attached to the above build for more details;<br\/> 1. in Rational Team Concert client, go to Team Artifacts > My Project > Builds<br\/> 2. find the build definition: @BLDDEFN@, and double click it<br\/> 3. in the Builds view that opens, find a build with the 'Label' value matching the build# above, and double click it<br\/> 4. in the Build Result that opens, go to the 'Downloads' tab, and double click the 'logs' in the list<br\/> 5. now your browser should come up, and you just click the findbugs-myproject.html<br\/>" "rtc_cm:plannedFor": { "_comment":"Specifies 'Development' as planned-for for the ticket", "rdf:resource":"https://myjazzrtc.ibm.com:9000/ccm/oslc/iterations/ _gMAnkOlIEeKwsc_eM5wLCA" }, "rtc_cm:ownedBy": { "_comment":"Specifies 'Developer1' (=_0k3H0MheEeKc1_BomI__Fw) as the owner of the ticket", "rdf:resource":"https://myjazzrtc.ibm.com:9000/ccm/oslc/users/_0k3H0MheEeKc1_BomI__Fw" } }
  1. Файл сценария считывает каждую строку текстового файла отчета об ошибках и вызывает REST API Rational Team Concert для создания уведомлений об ошибках.

В листинге 8 приведен пример сценария.

Листинг 8. Сценарий REST-вызовов Rational Team Concert
# поместить динамическую информацию в полезную нагрузку BUGDESC=`cat $QTXT1` BLDDEFN=`grep ^buildDefinitionId= $BUILD_HOME/jazz.properties / awk -F= '{print $2}'` BUILDID=`grep ^buildLabel= $BUILD_HOME/jazz.properties / awk -F= '{print $2}'` sed -e "s%@BUGSUBJ@%$BUGDESC%g" -e "s/@BUILDID@/$BUILDID/g" -e "s/@BLDDEFN@/$BLDDEFN/g" new-defect.json >$PAYLOAD PLSZ=`wc $PAYLOAD / awk '{print $3}'` if [ $PLSZ -lt 1000 ]; then echo "...well, payload seems too small to be valid - please check.." cat $PAYLOAD fi # вызвать REST API curl -s -D - -k -b $COOKIES -H "Content-Type: application/x-oslc-cm-change-request+ json" -H "Accept: text/xml" -X POST --data-binary @$PAYLOAD $HOST/oslc/contexts/$PROJ/ workitems >$JAZRESP

Заключение

FindBugs, Cobertura, CheckStyle - это популярные инструментальные программы для проверки качества исходного кода. Их интеграция с Rational Team Concert помогает программистам повысить качество кода. Благодаря простоте генерации уведомлений об ошибках устраняется необходимость ручного вмешательства и выполнения дополнительной работы. Интеграция с Rational Team Concert особенно полезна начинающим программистам, поскольку учит написанию эффективного кода.



 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 17.08.2015 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
IBM Domino Enterprise Server Processor Value Unit (PVU) License + SW Subscription & Support 12 Months
IBM Rational Functional Tester Floating User License
IBM Domino Messaging Client Access License Authorized User License + SW Subscription & Support 12 Months
IBM Domino Utility Server Processor Value Unit (PVU) License + SW Subscription & Support 12 Months
IBM RATIONAL Clearcase Floating User License + Sw Subscription & Support 12 Months
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Мир OLAP и Business Intelligence: новости, статьи, обзоры
Один день системного администратора
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100