<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://findbugs.googlecode.com/svn/trunk/findbugs/etc/docbook/docbookx.dtd" [ <!ENTITY FindBugs "<application>FindBugs</application>"> <!ENTITY Ant "<application>Ant</application>"> <!ENTITY Saxon "<application>Saxon</application>"> <!ENTITY FBHome "<replaceable>$FINDBUGS_HOME</replaceable>"> <!ENTITY FBHomeWin "<replaceable>%FINDBUGS_HOME%</replaceable>"> <!ENTITY nbsp " "> ]> <book lang="ja" id="findbugs-manual"> <bookinfo> <title>&FindBugs;™ マニュアル</title> <authorgroup> <author> <firstname>David</firstname> <othername>H.</othername> <surname>Hovemeyer</surname> </author> <author> <firstname>William</firstname> <othername>W.</othername> <surname>Pugh</surname> </author> </authorgroup> <copyright> <year>2003</year> <year>2004</year> <year>2005</year> <year>2006</year> <year>2008</year> <holder>University of Maryland</holder> </copyright> <legalnotice> <para>ã“ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã¯ã€ã‚¯ãƒªã‚¨ã‚¤ãƒ†ã‚£ãƒ–・コモンズ表示-éžå–¶åˆ©-継承ã«åŸºã¥ã使用許諾ãŒãªã•ã‚Œã¦ã„ã¾ã™ã€‚使用許諾書をã”覧ã«ãªã‚‹å ´åˆã¯ã€ <ulink url="http://creativecommons.org/licenses/by-nc-sa/1.0/deed.ja">http://creativecommons.org/licenses/by-nc-sa/1.0/</ulink> ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã‹ã€ã‚¯ãƒªã‚¨ã‚¤ãƒ†ã‚£ãƒ–・コモンズ(559 Nathan Abbott Way, Stanford, California 94305, USA)ã«æ›¸ç°¡ã‚’é€ä»˜ã—ã¦ãã ã•ã„。</para> <para>å称「FindBugsã€ãŠã‚ˆã³ FindBugs ã®ãƒã‚´ã¯ã€ãƒ¡ãƒªãƒ¼ãƒ©ãƒ³ãƒ‰å¤§å¦ã®ç™»éŒ²å•†æ¨™ã§ã™ã€‚</para> </legalnotice> <edition>2.0.3</edition> <pubdate>17:16:15 EST, 22 November, 2013</pubdate> </bookinfo> <!-- ************************************************************************** Introduction ************************************************************************** --> <chapter id="introduction"> <title>ã¯ã˜ã‚ã«</title> <para>&FindBugs;™ ã¯ã€Java プãƒã‚°ãƒ©ãƒ ã®ä¸ã®ãƒã‚°ã‚’見ã¤ã‘るプãƒã‚°ãƒ©ãƒ ã§ã™ã€‚ã“ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã¯ã€ã€Œãƒã‚° パターンã€ã®å®Ÿä¾‹ã‚’探ã—ã¾ã™ã€‚「ãƒã‚° パターンã€ã¨ã¯ã€ã‚¨ãƒ©ãƒ¼ã¨ãªã‚‹å¯èƒ½æ€§ã®é«˜ã„コードã®äº‹ä¾‹ã§ã™ã€‚</para> <para>ã“ã®æ–‡æ›¸ã¯ã€&FindBugs; ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.0.3 ã«ã¤ã„ã¦èª¬æ˜Žã—ã¦ã¾ã™ã€‚ç§ãŸã¡ã¯ã€ &FindBugs; ã«å¯¾ã™ã‚‹ãƒ•ã‚£ãƒ¼ãƒ‰ãƒãƒƒã‚¯ã‚’心待ã¡ã«ã—ã¦ã„ã¾ã™ã€‚ã©ã†ãžã€ <ulink url="http://findbugs.sourceforge.net">&FindBugs; Web ページ</ulink> ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ãã ã•ã„。&FindBugs; ã«ã¤ã„ã¦ã®æœ€æ–°æƒ…å ±ã€é€£çµ¡å…ˆãŠã‚ˆã³ &FindBugs; メーリングリストãªã©ã®ã‚µãƒãƒ¼ãƒˆæƒ…å ±ã‚’å…¥æ‰‹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> <sect1> <title>å¿…è¦æ¡ä»¶</title> <para>&FindBugs; を使用ã™ã‚‹ã«ã¯ã€ <ulink url="http://java.sun.com/j2se">Java 2 Standard Edition</ulink>, ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1.5 以é™ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨äº’æ›æ€§ã®ã‚るランタイム環境ãŒå¿…è¦ã§ã™ã€‚&FindBugs; ã¯ã€ãƒ—ラットフォームéžä¾å˜ã§ã‚り〠GNU/Linux 〠Windows 〠MacOS X プラットフォーム上ã§å‹•ä½œã™ã‚‹ã“ã¨ãŒçŸ¥ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚</para> <para>&FindBugs; を使用ã™ã‚‹ãŸã‚ã«ã¯ã€å°‘ãªãã¨ã‚‚ 512 MB ã®ãƒ¡ãƒ¢ãƒªãŒå¿…è¦ã§ã™ã€‚巨大ãªãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã‚’解æžã™ã‚‹ãŸã‚ã«ã¯ã€ãれより多ãã®ãƒ¡ãƒ¢ãƒªãŒå¿…è¦ã¨ã•ã‚Œã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚</para> </sect1> </chapter> <!-- ************************************************************************** Installing FindBugs ************************************************************************** --> <chapter id="installing"> <title>&FindBugs;™ ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«</title> <para>ã“ã®ç« ã§ã¯ã€ &FindBugs; ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ–¹æ³•ã‚’説明ã—ã¾ã™ã€‚</para> <sect1> <title>é…布物ã®å±•é–‹</title> <para>&FindBugs; をインストールã™ã‚‹æœ€ã‚‚ç°¡å˜ãªæ–¹æ³•ã¯ã€ãƒã‚¤ãƒŠãƒªé…布物をダウンãƒãƒ¼ãƒ‰ã™ã‚‹ã“ã¨ã§ã™ã€‚ ãƒã‚¤ãƒŠãƒªé…布物ã¯ã€ <ulink url="http://prdownloads.sourceforge.net/findbugs/findbugs-2.0.3.tar.gz?download">gzipped tar å½¢å¼</ulink> ãŠã‚ˆã³ <ulink url="http://prdownloads.sourceforge.net/findbugs/findbugs-2.0.3.zip?download">zip å½¢å¼</ulink> ãŒãã‚Œãžã‚Œå…¥æ‰‹å¯èƒ½ã§ã™ã€‚ãƒã‚¤ãƒŠãƒªé…布物をダウンãƒãƒ¼ãƒ‰ã—ã¦ããŸã‚‰ã€ãれを任æ„ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«å±•é–‹ã—ã¾ã™ã€‚</para> <para>gzipped tar å½¢å¼é…布物ã®å±•é–‹æ–¹æ³•ä¾‹:<screen> <prompt>$ </prompt><command>gunzip -c findbugs-2.0.3.tar.gz | tar xvf -</command> </screen> </para> <para>zip å½¢å¼é…布物ã®å±•é–‹æ–¹æ³•ä¾‹:<screen> <prompt>C:\Software></prompt><command>unzip findbugs-2.0.3.zip</command> </screen> </para> <para>ãƒã‚¤ãƒŠãƒªé…布物ã®å±•é–‹ã™ã‚‹ã¨ã€é€šå¸¸ã¯ <filename class="directory">findbugs-2.0.3</filename> ディレクトリーãŒä½œæˆã•ã‚Œã¾ã™ã€‚例ãˆã°ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ <filename class="directory">C:\Software</filename> ã§ãƒã‚¤ãƒŠãƒªé…布物を展開ã™ã‚‹ã¨ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ <filename class="directory">C:\Software\findbugs-2.0.3</filename> ã« &FindBugs; ã¯å±•é–‹ã•ã‚Œã¾ã™ã€‚ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒ &FindBugs; ã®ãƒ›ãƒ¼ãƒ ディレクトリーã«ãªã‚Šã¾ã™ã€‚ã“ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã§ã¯ã€ã“ã®ãƒ›ãƒ¼ãƒ ディレクトリーを &FBHome; (Windowsã§ã¯ &FBHomeWin;) を用ã„ã¦å‚ç…§ã—ã¾ã™ã€‚</para> </sect1> </chapter> <!-- ************************************************************************** Compiling FindBugs from Source ************************************************************************** --> <chapter id="building"> <title>&FindBugs;™ ã®ã‚½ãƒ¼ãƒ«ã‹ã‚‰ã®ãƒ“ルド</title> <para>ã“ã®ç« ã§ã¯ã€ &FindBugs; をソースコードã‹ã‚‰ãƒ“ルドã™ã‚‹æ–¹æ³•ã‚’説明ã—ã¾ã™ã€‚&FindBugs; ã‚’ä¿®æ£ã™ã‚‹ã“ã¨ã«èˆˆå‘³ãŒãªã„ã®ã§ã‚ã‚Œã°ã€ <link linkend="running">次ã®ç« </link> ã«é€²ã‚“ã§ãã ã•ã„。</para> <sect1> <title>å‰ææ¡ä»¶</title> <para>ソースã‹ã‚‰ &FindBugs; をコンパイルã™ã‚‹ãŸã‚ã«ã¯ã€ä»¥ä¸‹ã®ã‚‚ã®ãŒå¿…è¦ã§ã™ã€‚<itemizedlist> <listitem> <para><ulink url="http://prdownloads.sourceforge.net/findbugs/findbugs-2.0.3-source.zip?download">&FindBugs; ã®ã‚½ãƒ¼ã‚¹é…布物</ulink> </para> </listitem> <listitem> <para> <ulink url="http://java.sun.com/j2se/">JDK 1.5.0 ベータ ã¾ãŸã¯ãれ以é™</ulink> </para> </listitem> <listitem> <para> <ulink url="http://ant.apache.org/">Apache &Ant;</ulink>, ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1.6.3 ã¾ãŸã¯ãれ以é™</para> </listitem> </itemizedlist> </para> <warning> <para>Redhat Linux システム㮠<filename>/usr/bin/ant</filename> ã«åŒæ¢±ã•ã‚Œã¦ã„ã‚‹ &Ant; ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€ &FindBugs; ã®ã‚³ãƒ³ãƒ‘イルã¯<emphasis>ã†ã¾ãã§ãã¾ã›ã‚“</emphasis>。<ulink url="http://ant.apache.org/">&Ant; web サイト</ulink>ã‹ã‚‰ãƒã‚¤ãƒŠãƒªé…布物をダウンãƒãƒ¼ãƒ‰ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã‚’推奨ã—ã¾ã™ã€‚&Ant; を実行ã™ã‚‹å ´åˆã¯ã€ 環境変数 <replaceable>JAVA_HOME</replaceable> ㌠JDK 1.5 (ã¾ãŸã¯ãれ以é™)をインストールã—ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’指ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。</para> </warning> <para>体è£ã®æ•´ã£ãŸ &FindBugs; ã®ãƒ‰ã‚ュメントを生æˆã—ãŸã„å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚‚å¿…è¦ã¨ãªã‚Šã¾ã™:<itemizedlist> <listitem> <para><ulink url="http://docbook.sourceforge.net/projects/xsl/index.html">DocBook XSL スタイルシート</ulink>。&FindBugs; ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’ HTML ã«å¤‰æ›ã™ã‚‹ã®ã«å¿…è¦ã§ã™ã€‚</para> </listitem> <listitem> <para><ulink url="http://saxon.sourceforge.net/">&Saxon; XSLT プãƒã‚»ãƒƒã‚µãƒ¼</ulink>。(åŒæ§˜ã«ã€ &FindBugs; ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’ HTML ã«å¤‰æ›ã™ã‚‹ã®ã«å¿…è¦ã§ã™ã€‚)</para> </listitem> <!-- <listitem> <para> </para> </listitem> --> </itemizedlist> </para> </sect1> <sect1> <title>ソースé…布物ã®å±•é–‹</title> <para>ソースé…布物をダウンãƒãƒ¼ãƒ‰ã—ãŸå¾Œã«ã€ãれを作æ¥ç”¨ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«å±•é–‹ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚通常ã¯ã€æ¬¡ã®ã‚ˆã†ãªã‚³ãƒžãƒ³ãƒ‰ã§å±•é–‹ã‚’è¡Œã„ã¾ã™:<screen> <prompt>$ </prompt><command>unzip findbugs-2.0.3-source.zip</command> </screen> </para> </sect1> <sect1> <title><filename>local.properties</filename> ã®ä¿®æ£</title> <para>FindBugs ã®ãƒ‰ã‚ュメントをビルドã™ã‚‹ãŸã‚ã«ã¯ã€ <filename>local.properties</filename> ファイルを修æ£ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€ &FindBugs; をビルドã™ã‚‹éš›ã« <ulink url="http://ant.apache.org/">&Ant;</ulink> <filename>build.xml</filename> ファイルãŒå‚ç…§ã—ã¾ã™ã€‚FindBugs ã®ãƒ‰ã‚ュメントをビルドã—ãªã„å ´åˆã¯ã€ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ç„¡è¦–ã—ã¦ã‚‚ã‹ã¾ã„ã¾ã›ã‚“。</para> <para><filename>local.properties</filename> ã§ã®å®šç¾©ã¯ã€ <filename>build.properties</filename> ファイルã§ã®å®šç¾©ã«å„ªå…ˆã—ã¾ã™ã€‚<filename>build.properties</filename> ã¯æ¬¡ã®ã‚ˆã†ãªå†…容ã§ã™:<programlisting> <![CDATA[ # User Configuration: # This section must be modified to reflect your system. local.software.home =/export/home/daveho/linux # Set this to the directory containing the DocBook Modular XSL Stylesheets # from http://docbook.sourceforge.net/projects/xsl/ xsl.stylesheet.home =${local.software.home}/docbook/docbook-xsl-1.71.1 # Set this to the directory where Saxon (http://saxon.sourceforge.net/) # is installed. saxon.home =${local.software.home}/java/saxon-6.5.5 ]]> </programlisting> </para> <para><varname>xsl.stylesheet.home</varname> プãƒãƒ‘ティーã«ã¯ã€<ulink url="http://docbook.sourceforge.net/projects/xsl/">DocBook Modular XSL スタイルシート</ulink>ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ã‚るディレクトリーã®çµ¶å¯¾ãƒ‘スを指定ã—ã¾ã™ã€‚&FindBugs; ドã‚ュメントを生æˆã—よã†ã¨è€ƒãˆã¦ã„ã‚‹å ´åˆã«ã®ã¿ã€ã“ã®ãƒ—ãƒãƒ‘ティーを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚</para> <para><varname>saxon.home</varname> プãƒãƒ‘ティーã«ã¯ã€<ulink url="http://saxon.sourceforge.net/">&Saxon; XSLT プãƒã‚»ãƒƒã‚µãƒ¼</ulink>ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ã‚るディレクトリーã®çµ¶å¯¾ãƒ‘スを指定ã—ã¾ã™ã€‚&FindBugs; ドã‚ュメントを生æˆã—よã†ã¨è€ƒãˆã¦ã„ã‚‹å ´åˆã«ã®ã¿ã€ã“ã®ãƒ—ãƒãƒ‘ティーを指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚</para> </sect1> <sect1> <title>&Ant; ã®å®Ÿè¡Œ</title> <para>ソースé…布物ã®å±•é–‹ã€ &Ant; ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€<filename>build.properties</filename>(<filename>local.properties</filename>) ã®ä¿®æ£ (ã“ã‚Œã¯ä»»æ„) ãŠã‚ˆã³ãƒ„ール (&Saxon; ãªã©)ã®ç’°å¢ƒæ§‹ç¯‰ãŒã§ãã‚Œã°ã€ &FindBugs; をビルドã™ã‚‹ãŸã‚ã®æº–å‚™ã¯å®Œäº†ã§ã™ã€‚&Ant; ã®èµ·å‹•ã™ã‚‹æ–¹æ³•ã¯ã€å˜ã«ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã ã‘ã§ã™ã€‚<screen> <prompt>$ </prompt><command>ant <replaceable>target</replaceable></command> </screen><replaceable>target</replaceable> ã«ã¯ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã‚’指定ã—ã¾ã™: <variablelist> <varlistentry> <term><command>build</command></term> <listitem> <para>ã“ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¯ã€ &FindBugs; ã®ã‚³ãƒ¼ãƒ‰ã‚’コンパイルã—ã¾ã™ã€‚ã“ã‚Œã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã§ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>docs</command></term> <listitem> <para>ã“ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¯ã€ãƒ‰ã‚ュメントã®æ•´å½¢ã‚’è¡Œã„ã¾ã™(ã¾ãŸã€å‰¯ä½œç”¨ã¨ã—ã¦ã„ãã¤ã‹ã®ã‚½ãƒ¼ã‚¹ã®ã‚³ãƒ³ãƒ‘イルも行ã„ã¾ã™ã€‚)</para> </listitem> </varlistentry> <varlistentry> <term><command>runjunit</command></term> <listitem> <para>ã“ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¯ã€ã‚³ãƒ³ãƒ‘イルを行ㄠ&FindBugs; ãŒæŒã£ã¦ã„ã‚‹ JUnit テストを実行ã—ã¾ã™ã€‚ユニットテストãŒå¤±æ•—ã—ãŸå ´åˆã¯ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>bindist</command></term> <listitem> <para>&FindBugs; ã®ãƒã‚¤ãƒŠãƒªé…布物を構築ã—ã¾ã™ã€‚ã“ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¯ã€ <filename>.zip</filename> ãŠã‚ˆã³ <filename>.tar.gz</filename> ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã‚’ãã‚Œãžã‚Œä½œæˆã—ã¾ã™ã€‚</para> </listitem> </varlistentry> </variablelist> </para> <para>&Ant; コマンドã®å®Ÿè¡Œå¾Œã€æ¬¡ã®ã‚ˆã†ãªå‡ºåŠ›ãŒè¡¨ç¤ºã•ã‚Œã‚‹ã¯ãšã§ã™ã€‚ (ã“ã®å‰ã« &Ant; ãŒå®Ÿè¡Œã—ãŸã‚¿ã‚¹ã‚¯ã«é–¢ã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚‚ã„ãらã‹å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚):<screen> <computeroutput> BUILD SUCCESSFUL Total time: 17 seconds </computeroutput> </screen> </para> </sect1> <sect1> <title>ソースディレクトリーã‹ã‚‰ã® &FindBugs;™ ã®å®Ÿè¡Œ</title> <para><command>build</command> ターゲットã®å®Ÿè¡ŒãŒçµ‚了ã™ã‚‹ã¨ã€ãƒã‚¤ãƒŠãƒªé…布物ã¨åŒæ§˜ã®çŠ¶æ…‹ãŒä½œæ¥ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã«æ§‹ç¯‰ã•ã‚Œã‚‹ã‚ˆã†ã« &FindBugs; ã®&Ant; ビルドスクリプトã¯è¨˜è¿°ã•ã‚Œã¦ã„ã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€<xref linkend="running"/> ã® &FindBugs; ã®å®Ÿè¡Œã«é–¢ã™ã‚‹æƒ…å ±ã¯ã‚½ãƒ¼ã‚¹é…布物ã®å ´åˆã«ã‚‚応用ã§ãã¾ã™ã€‚</para> </sect1> </chapter> <!-- ************************************************************************** Running FindBugs ************************************************************************** --> <chapter id="running"> <title>&FindBugs;™ ã®å®Ÿè¡Œ</title> <para>&FindBugs; ã«ã¯2ã¤ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãŒã‚ã‚Šã¾ã™ã€‚ã™ãªã‚ã¡ã€ã‚°ãƒ©ãƒ•ã‚£ã‚«ãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ (GUI) ãŠã‚ˆã³ コマンドラインインタフェースã§ã™ã€‚ã“ã®ç« ã§ã¯ã€ãã‚Œãžã‚Œã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã®å®Ÿè¡Œæ–¹æ³•ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚</para> <warning> <para>ã“ã®ç« ã¯ã€ç¾åœ¨æ›¸ãç›´ã—ä¸ã§ã™ã€‚書ãç›´ã—ã¯ã¾ã 完了ã—ã¦ã„ã¾ã›ã‚“。</para> </warning> <!-- <sect1> <title>Executing the &FindBugs;™ GUI</title> </sect1> --> <sect1> <title>クイック・スタート</title> <para>Windows システム㧠&FindBugs; ã‚’èµ·å‹•ã™ã‚‹å ´åˆã¯ã€ <filename>&FBHomeWin;\lib\findbugs.jar</filename> ファイルをダブルクリックã—ã¦ãã ã•ã„。 &FindBugs; GUI ãŒèµ·å‹•ã—ã¾ã™ã€‚</para> <para>Unix 〠Linux ã¾ãŸã¯ Mac OS X システムã®å ´åˆã¯ã€<filename>&FBHome;/bin/findbugs</filename> スクリプトを実行ã™ã‚‹ã‹ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚<screen> <command>java -jar &FBHome;/lib/findbugs.jar</command></screen>ã“ã‚Œã§ã€ &FindBugs; GUI ãŒèµ·å‹•ã—ã¾ã™ã€‚</para> <para>GUI ã®ä½¿ç”¨æ–¹æ³•ã«ã¤ã„ã¦ã¯ã€ <xref linkend="gui"/> ã‚’å‚ç…§ã—ã¦ãã ã•ã„。</para> </sect1> <sect1> <title>&FindBugs; ã®èµ·å‹•</title> <para>ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ &FindBugs; ã®èµ·å‹•æ–¹æ³•ã‚’説明ã—ã¾ã™ã€‚&FindBugs; ã‚’èµ·å‹•ã™ã‚‹ã«ã¯2ã¤ã®æ–¹æ³•ãŒã‚ã‚Šã¾ã™ã€‚ã™ãªã‚ã¡ã€ç›´æŽ¥èµ·å‹•ã™ã‚‹æ–¹æ³•ã€ãŠã‚ˆã³ã€ãƒ©ãƒƒãƒ—ã—ã¦ã„るスクリプトを使用ã™ã‚‹æ–¹æ³•ã§ã™ã€‚</para> <sect2 id="directInvocation"> <title>&FindBugs; ã®ç›´æŽ¥èµ·å‹•</title> <para>最åˆã«è¿°ã¹ã‚‹ &FindBugs; ã®èµ·å‹•æ–¹æ³•ã¯ã€ <filename>&FBHome;/lib/findbugs.jar</filename> を直接実行ã™ã‚‹æ–¹æ³•ã§ã™ã€‚JVM (<command>java</command>) 実行プãƒã‚°ãƒ©ãƒ ã® <command>-jar</command> コマンドラインスイッãƒã‚’使用ã—ã¾ã™ã€‚(&FindBugs;ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒ 1.3.5 よりå‰ã®å ´åˆã¯ã€ãƒ©ãƒƒãƒ—ã—ã¦ã„るスクリプトを使用ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚)</para> <para>&FindBugs; を直接起動ã™ã‚‹ãŸã‚ã®ã€ä¸€èˆ¬çš„ãªæ§‹æ–‡ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚<screen> <command>java <replaceable>[JVM 引数]</replaceable> -jar &FBHome;/lib/findbugs.jar <replaceable>オプション…</replaceable></command> </screen> </para> <!-- <para> By default, executing <filename>findbugs.jar</filename> runs the &FindBugs; graphical user interface (GUI). On windows systems, you can double-click on <filename>findbugs.jar</filename> to launch the GUI. From a command line, the command <screen> java -jar <replaceable>&FBHome;</replaceable>/lib/findbugs.jar</screen> will launch the GUI. </para> --> <sect3 id="chooseUI"> <title> ユーザーインタフェースã®é¸æŠž</title> <para>1 番目ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションã¯ã€èµ·å‹•ã™ã‚‹ &FindBugs; ユーザーインタフェースをé¸æŠžã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚指定å¯èƒ½ãªå€¤ã¯æ¬¡ã®é€šã‚Šã§ã™:</para> <itemizedlist> <listitem> <para> <command>-gui</command>: グラフィカルユーザーインタフェース (GUI) ã‚’èµ·å‹•ã—ã¾ã™ã€‚</para> </listitem> <listitem> <para> <command>-textui</command>: コマンドラインインタフェースを起動ã—ã¾ã™ã€‚</para> </listitem> <listitem> <para> <command>-version</command>: &FindBugs; ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã‚’表示ã—ã¾ã™ã€‚</para> </listitem> <listitem> <para> <command>-help</command>: &FindBugs; コマンドラインインタフェースã®ãƒ˜ãƒ«ãƒ—æƒ…å ±ã‚’è¡¨ç¤ºã—ã¾ã™ã€‚</para> </listitem> <listitem> <para> <command>-gui1</command>: 最åˆã«ä½œæˆã•ã‚ŒãŸ &FindBugs; グラフィカルユーザーインタフェース(ã™ã§ã«å»ƒæ¢ã•ã‚Œã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„)ã‚’èµ·å‹•ã—ã¾ã™ã€‚</para> </listitem> </itemizedlist> </sect3> <sect3 id="jvmArgs"> <title>Java 仮想マシン (JVM) 引数</title> <para>&FindBugs; ã‚’èµ·å‹•ã™ã‚‹éš›ã«æœ‰ç”¨ãª Java 仮想マシン 引数をã„ãã¤ã‹ç´¹ä»‹ã—ã¾ã™ã€‚</para> <variablelist> <varlistentry> <term><command>-Xmx<replaceable>NN</replaceable>m</command></term> <listitem> <para>Java ヒープサイズã®æœ€å¤§å€¤ã‚’ <replaceable>NN</replaceable> メガãƒã‚¤ãƒˆã«è¨å®šã—ã¾ã™ã€‚&FindBugs; ã¯ä¸€èˆ¬çš„ã«å¤§å®¹é‡ã®ãƒ¡ãƒ¢ãƒªã‚µã‚¤ã‚ºã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚大ããªãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã§ã¯ã€ 1500 メガãƒã‚¤ãƒˆã‚’使用ã™ã‚‹ã“ã¨ã‚‚çã—ãã‚ã‚Šã¾ã›ã‚“。</para> </listitem> </varlistentry> <varlistentry> <term><command>-D<replaceable>name</replaceable>=<replaceable>value</replaceable></command></term> <listitem> <para>Java システムプãƒãƒ‘ティーをè¨å®šã—ã¾ã™ã€‚例ãˆã°ã€å¼•æ•° <command>-Duser.language=ja</command> を使用ã™ã‚‹ã¨ GUI 文言ãŒæ—¥æœ¬èªžã§è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚</para> </listitem> </varlistentry> <!-- <varlistentry> <term></term> <listitem> <para> </para> </listitem> </varlistentry> --> </variablelist> </sect3> </sect2> <sect2 id="wrapperScript"> <title>ラップã—ã¦ã„るスクリプトを使用ã—㟠&FindBugs; ã®èµ·å‹•</title> <para>&FindBugs; ã‚’èµ·å‹•ã™ã‚‹ã‚‚ã†ã²ã¨ã¤ã®æ–¹æ³•ã¯ã€ãƒ©ãƒƒãƒ—ã—ã¦ã„るスクリプトを使用ã™ã‚‹æ–¹æ³•ã§ã™ã€‚</para> <para>Unix ç³»ã®ã‚·ã‚¹ãƒ†ãƒ ã«ãŠã„ã¦ã¯ã€æ¬¡ã®ã‚ˆã†ãªã‚³ãƒžãƒ³ãƒ‰ã§ãƒ©ãƒƒãƒ—ã—ã¦ã„るスクリプトを起動ã—ã¾ã™ :<screen> <prompt>$ </prompt><command>&FBHome;/bin/findbugs <replaceable>オプション…</replaceable></command> </screen> </para> <para>Windows システムã«ãŠã„ã¦ã¯ã€ãƒ©ãƒƒãƒ—ã—ã¦ã„るスクリプトを起動ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚<screen> <prompt>C:\My Directory></prompt><command>&FBHomeWin;\bin\findbugs.bat <replaceable>オプション…</replaceable></command> </screen> </para> <para>Unix 系システムãŠã‚ˆã³ Windows システムã®ã©ã¡ã‚‰ã«ãŠã„ã¦ã‚‚ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ <filename><replaceable>$FINDBUGS_HOME</replaceable>/bin</filename> を環境変数 <filename>PATH</filename> ã«è¿½åŠ ã™ã‚‹ã ã‘ã§ã€ <command>findbugs</command> コマンドを使用ã—㦠FindBugs ã‚’èµ·å‹•ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> <sect3 id="wrapperOptions"> <title>ラップã—ã¦ã„るスクリプトã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ション</title> <para>&FindBugs; ã®ãƒ©ãƒƒãƒ—ã—ã¦ã„るスクリプトã¯ã€æ¬¡ã®ã‚ˆã†ãªã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚ã“れらã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ション㯠&FindBugs; プãƒã‚°ãƒ©ãƒ 自体ãŒæ“作ã™ã‚‹ã®ã§ã¯<emphasis>ãªã</emphasis>ã€ã©ã¡ã‚‰ã‹ã¨ã„ãˆã°ã€ãƒ©ãƒƒãƒ—ã—ã¦ã„るスクリプトã®æ–¹ãŒå‡¦ç†ã‚’è¡Œã„ã¾ã™ã€‚</para> <variablelist> <varlistentry> <term><command>-jvmArgs <replaceable>引数</replaceable></command></term> <listitem> <para>JVM ã«å—ã‘渡ã•ã‚Œã‚‹å¼•æ•°ã‚’指定ã—ã¾ã™ã€‚例ãˆã°ã€æ¬¡ã®ã‚ˆã†ãª JVM プãƒãƒ‘ティãŒè¨å®šã§ãã¾ã™:<screen> <prompt>$ </prompt><command>findbugs -textui -jvmArgs "-Duser.language=ja" <replaceable>myApp.jar</replaceable></command> </screen> </para> </listitem> </varlistentry> <varlistentry> <term><command>-javahome <replaceable>ディレクトリー</replaceable></command></term> <listitem> <para>&FindBugs; ã®å®Ÿè¡Œã«ä½¿ç”¨ã™ã‚‹ JRE (Java ランタイム環境) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„るディレクトリーを指定ã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-maxHeap <replaceable>サイズ</replaceable></command></term> <listitem> <para>Java ヒープサイズã®æœ€å¤§å€¤ã‚’メガãƒã‚¤ãƒˆå˜ä½ã§æŒ‡å®šã—ã¾ã™ã€‚デフォルトã¯ã€ 256 ã§ã™ã€‚巨大ãªãƒ—ãƒã‚°ãƒ©ãƒ やライブラリを分æžã™ã‚‹ã«ã¯ã€ã‚‚ã£ã¨å¤§ããªãƒ¡ãƒ¢ãƒªãƒ¼å®¹é‡ãŒå¿…è¦ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-debug</command></term> <listitem> <para>ディテクタ実行ãŠã‚ˆã³ã‚¯ãƒ©ã‚¹åˆ†æžã®ãƒˆãƒ¬ãƒ¼ã‚¹æƒ…å ±ãŒæ¨™æº–出力ã«å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚分æžãŒäºˆæœŸã›ãšå¤±æ•—ã—ãŸéš›ã®ã€ãƒˆãƒ©ãƒ–ルシューティングã«æœ‰ç”¨ã§ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-property</command> <replaceable>name=value</replaceable></term> <listitem> <para>ã“ã®ã‚ªãƒ—ションを使用ã—ã¦ã‚·ã‚¹ãƒ†ãƒ プãƒãƒ‘ティーをè¨å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ &FindBugs; ã¯ã‚·ã‚¹ãƒ†ãƒ プãƒãƒ‘ティーを使用ã—ã¦åˆ†æžç‰¹æ€§ã®è¨å®šã‚’è¡Œã„ã¾ã™ã€‚<xref linkend="analysisprops"/> ã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã“ã®ã‚ªãƒ—ションを複数指定ã—ã¦ã€è¤‡æ•°ã®ã‚·ã‚¹ãƒ†ãƒ プãƒãƒ‘ティをè¨å®šã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚注: Windows ã®å¤šãã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€ <replaceable>name=value</replaceable> æ–‡å—列を引用符ã§å›²ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚</para> </listitem> </varlistentry> </variablelist> </sect3> </sect2> </sect1> <sect1 id="commandLineOptions"> <title>コマンドラインオプション</title> <!-- <para> There are two ways to invoke &FindBugs;. The first invokes the the Graphical User Interface (GUI): <screen> <prompt>$ </prompt><command>findbugs <replaceable>[standard options]</replaceable> <replaceable>[GUI options]</replaceable></command> </screen> The second invokes the Command Line Interface (Text UI): <screen> <prompt>$ </prompt><command>findbugs -textui <replaceable>[standard options]</replaceable> <replaceable>[Text UI options]</replaceable></command> </screen> </para> --> <para>ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ &FindBugs; ãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚ã“ã“ã§ç¤ºã™ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションã¯ã€ &FindBugs; 直接起動ã€ã¾ãŸã¯ã€ãƒ©ãƒƒãƒ—ã—ã¦ã„るスクリプトã«ã‚ˆã‚‹èµ·å‹•ã§ä½¿ç”¨ã§ãã¾ã™ã€‚</para> <sect2> <title>共通ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ション</title> <para>ã“ã“ã§ç¤ºã™ã‚ªãƒ—ションã¯ã€ GUI ãŠã‚ˆã³ コマンドラインインタフェースã®ä¸¡æ–¹ã§ä½¿ç”¨ã§ãã¾ã™ã€‚</para> <variablelist> <varlistentry> <term><command>-effort:min</command></term> <listitem> <para>ã“ã®ã‚ªãƒ—ションを指定ã™ã‚‹ã¨ã€ç²¾åº¦ã‚’上ã’ã‚‹ãŸã‚ã«å¤§é‡ã®ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’消費ã™ã‚‹åˆ†æžãŒç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚&FindBugs; ã®å®Ÿè¡Œæ™‚ã«ãƒ¡ãƒ¢ãƒªãƒ¼ä¸è¶³ã«ãªã£ãŸã‚Šã€åˆ†æžã‚’完了ã™ã‚‹ã¾ã§ã«ç•°å¸¸ã«é•·ã„時間ãŒã‹ã‹ã‚‹å ´åˆã«è©¦ã—ã¦ã¿ã¦ãã ã•ã„。</para> </listitem> </varlistentry> <varlistentry> <term><command>-effort:max</command></term> <listitem> <para>精度ãŒé«˜ãã€ã‚ˆã‚Šå¤šãã®ãƒã‚°ã‚’検出ã™ã‚‹åˆ†æžã‚’有効ã«ã—ã¾ã™ã€‚ãŸã ã—ã€å¤šãã®ãƒ¡ãƒ¢ãƒªãƒ¼å®¹é‡ã‚’å¿…è¦ã¨ã—ã€ã¾ãŸã€å®Œäº†ã¾ã§ã®æ™‚é–“ãŒå¤šãã‹ã‹ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-project</command> <replaceable>project</replaceable></term> <listitem> <para>分æžã™ã‚‹ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã‚’指定ã—ã¾ã™ã€‚指定ã™ã‚‹ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã«ã¯ã€ GUI を使ã£ã¦ä½œæˆã—ãŸã‚‚ã®ã‚’使用ã—ã¦ãã ã•ã„。ファイルã®æ‹¡å¼µåã¯ã€ä¸€èˆ¬çš„ã«ã¯ <filename>.fb</filename> ã¾ãŸã¯ <filename>.fbp</filename> ã§ã™ã€‚</para> </listitem> </varlistentry> <!-- <varlistentry> <term><command></command></term> <listitem> <para> </para> </listitem> </varlistentry> --> </variablelist> </sect2> <sect2> <title>GUI オプション</title> <para>ã“ã“ã§ç¤ºã™ã‚ªãƒ—ションã¯ã€ã‚°ãƒ©ãƒ•ã‚£ã‚«ãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã§ã®ã¿ä½¿ç”¨ã§ãã¾ã™ã€‚<variablelist> <varlistentry> <term><command>-look:</command><replaceable>plastic|gtk|native</replaceable></term> <listitem> <para>Swing ã®ãƒ«ãƒƒã‚¯ãƒ»ã‚¢ãƒ³ãƒ‰ãƒ»ãƒ•ã‚£ãƒ¼ãƒ«ã‚’è¨å®šã—ã¾ã™ã€‚</para> </listitem> </varlistentry> </variablelist> </para> </sect2> <sect2> <title>テã‚ストユーザーインタフェースオプション</title> <para>ã“ã“ã§ç¤ºã™ã‚ªãƒ—ションã¯ã€ãƒ†ã‚ストユーザーインタフェースã§ã®ã¿ä½¿ç”¨ã§ãã¾ã™ã€‚</para> <variablelist> <varlistentry> <term><command>-sortByClass</command></term> <listitem> <para>å ±å‘Šã•ã‚Œã‚‹ãƒã‚°æ¤œç´¢çµæžœã‚’クラスåã§ã‚½ãƒ¼ãƒˆã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-include</command> <replaceable>filterFile.xml</replaceable></term> <listitem> <para><replaceable>filterFile.xml</replaceable> ã§æŒ‡å®šã—ãŸãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã«ä¸€è‡´ã—ãŸãƒã‚°æ¤œç´¢çµæžœã®ã¿å ±å‘Šã•ã‚Œã¾ã™ã€‚<xref linkend="filter"/> ã‚’å‚ç…§ã—ã¦ãã ã•ã„。</para> </listitem> </varlistentry> <varlistentry> <term><command>-exclude</command> <replaceable>filterFile.xml</replaceable></term> <listitem> <para><replaceable>filterFile.xml</replaceable> ã§æŒ‡å®šã—ãŸãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã«ä¸€è‡´ã—ãŸãƒã‚°æ¤œç´¢çµæžœã¯å ±å‘Šã•ã‚Œã¾ã›ã‚“。<xref linkend="filter"/> ã‚’å‚ç…§ã—ã¦ãã ã•ã„。</para> </listitem> </varlistentry> <varlistentry> <term><command>-onlyAnalyze</command> <replaceable>com.foobar.MyClass,com.foobar.mypkg.*</replaceable></term> <listitem> <para>コンマ区切りã§æŒ‡å®šã—ãŸã‚¯ãƒ©ã‚¹ãŠã‚ˆã³ãƒ‘ッケージã®ã¿ã«é™å®šã—ã¦ã€ãƒã‚°æ¤œå‡ºã®åˆ†æžã‚’è¡Œã†ã‚ˆã†ã«ã—ã¾ã™ã€‚フィルターã¨é•ã£ã¦ã€ã“ã®ã‚ªãƒ—ションを使ã†ã¨ä¸€è‡´ã—ãªã„クラスãŠã‚ˆã³ãƒ‘ッケージã«å¯¾ã™ã‚‹åˆ†æžã®å®Ÿè¡Œã‚’回é¿ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚大ããªãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã«ãŠã„ã¦ã€ã“ã®ã‚ªãƒ—ションを活用ã™ã‚‹ã¨åˆ†æžã«ã‹ã‹ã‚‹æ™‚間を大ãã削減ã™ã‚‹ã“ã¨ãŒã§ãã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚(ã—ã‹ã—ãªãŒã‚‰ã€ã‚¢ãƒ—リケーションã®å…¨ä½“ã§å®Ÿè¡Œã—ã¦ã„ãªã„ãŸã‚ã«ä¸æ£ç¢ºãªçµæžœã‚’出ã—ã¦ã—ã¾ã†ãƒ‡ã‚£ãƒ†ã‚¯ã‚¿ãŒã‚ã‚‹å¯èƒ½æ€§ã‚‚ã‚ã‚Šã¾ã™ã€‚) クラスã¯ãƒ‘ッケージもå«ã‚“ã 完全ãªåå‰ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã¾ãŸã€ãƒ‘ッケージã¯ã€ Java ã® <literal>import</literal> æ–‡ã§ãƒ‘ッケージ下ã®ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¹ã‚’インãƒãƒ¼ãƒˆã™ã‚‹ã¨ãã¨åŒã˜æ–¹æ³•ã§æŒ‡å®šã—ã¾ã™ã€‚ (ã™ãªã‚ã¡ã€ãƒ‘ッケージã®å®Œå…¨ãªåå‰ã« <literal>.*</literal> を付ã‘åŠ ãˆãŸå½¢ã§ã™ã€‚)<literal>.*</literal> ã®ä»£ã‚ã‚Šã« <literal>.-</literal> を指定ã™ã‚‹ã¨ã€ã‚µãƒ–パッケージもå«ã‚ã¦ã™ã¹ã¦ãŒåˆ†æžã•ã‚Œã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-low</command></term> <listitem> <para>ã™ã¹ã¦ã®ãƒã‚°ãŒå ±å‘Šã•ã‚Œã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-medium</command></term> <listitem> <para>優先度 (ä¸) ãŠã‚ˆã³å„ªå…ˆåº¦ (高) ã®ãƒã‚°ãŒå ±å‘Šã•ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®è¨å®šå€¤ã§ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-high</command></term> <listitem> <para>優先度 (高) ã®ãƒã‚°ã®ã¿ãŒå ±å‘Šã•ã‚Œã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-relaxed</command></term> <listitem> <para>手抜ãå ±å‘Šãƒ¢ãƒ¼ãƒ‰ã§ã™ã€‚ã“ã®ã‚ªãƒ—ションを指定ã™ã‚‹ã¨ã€å¤šãã®ãƒ‡ã‚£ãƒ†ã‚¯ã‚¿ã«ãŠã„㦠誤検出を回é¿ã™ã‚‹ãŸã‚ã®ãƒ’ューリスティック機能ãŒæŠ‘æ¢ã•ã‚Œã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-xml</command></term> <listitem> <para>ãƒã‚°å ±å‘ŠãŒ XML ã§ä½œæˆã•ã‚Œã¾ã™ã€‚作æˆã•ã‚ŒãŸ XML データ㯠ã€å¾Œã§ GUI ã§è¦‹ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ã‚ªãƒ—ション㯠<command>-xml:withMessages</command> ã¨æŒ‡å®šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã†ã™ã‚‹ã¨ 出力 XML ã«ã¯ å„ãƒã‚°ã«é–¢ã—ã¦äººé–“ã«èªã‚€ã“ã¨ãŒã§ãるメッセージãŒå«ã¾ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションã§ä½œæˆã•ã‚ŒãŸ XML ãƒ•ã‚¡ã‚¤ãƒ«ã¯ å ±å‘Šæ›¸ã«å¤‰æ›ã™ã‚‹ã®ãŒç°¡å˜ã§ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-html</command></term> <listitem> <para>HTML 出力ãŒç”Ÿæˆã•ã‚Œã¾ã™ã€‚デフォルトã§ã¯ &FindBugs; 㯠<filename>default.xsl</filename> <ulink url="http://www.w3.org/TR/xslt">XSLT</ulink> スタイルシートを使用ã—㦠HTML 出力を生æˆã—ã¾ã™: ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€ <filename>findbugs.jar</filename> ã®ä¸ã€ã¾ãŸã¯ã€ &FindBugs; ã®ã‚½ãƒ¼ã‚¹é…布物もã—ãã¯ãƒã‚¤ãƒŠãƒªé…布物ã®ä¸ã«ã‚ã‚Šã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションã«ã¯ã€æ¬¡ã®ã‚ˆã†ãªãƒãƒªã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ã‚‚å˜åœ¨ã—ã¾ã™ã€‚ã™ãªã‚ã¡ã€ <command>-html:plain.xsl</command> 〠<command>-html:fancy.xsl</command> ãŠã‚ˆã³ <command>-html:fancy-hist.xsl</command> ã§ã™ã€‚<filename>plain.xsl</filename> スタイルシート㯠Javascript ã‚„ DOM を利用ã—ã¾ã›ã‚“。ã—ãŸãŒã£ã¦ã€å¤ã„Web ブラウザ使用時やå°åˆ·æ™‚ã«ã‚‚比較的ã†ã¾ã表示ã•ã‚Œã‚‹ã§ã—ょã†ã€‚<filename>fancy.xsl</filename> スタイルシート㯠DOM 㨠Javascript を利用ã—ã¦ãƒŠãƒ“ゲーションを行ã„ã¾ã™ã€‚ã¾ãŸã€ãƒ“ジュアル表示㫠CSS を使用ã—ã¾ã™ã€‚<command>fancy-hist.xsl</command> 㯠<command>fancy.xsl</command> スタイルシートを更ã«é€²åŒ–ã•ã›ãŸã‚‚ã®ã§ã™ã€‚DOM ã‚„ Javascript ã‚’ãµã‚“ã ã‚“ã«é§†ä½¿ã—ã¦ã€ãƒã‚°ã®ä¸€è¦§ã‚’å‹•çš„ã«ãƒ•ã‚£ãƒ«ã‚¿ãƒªãƒ³ã‚°ã—ã¾ã™ã€‚</para> <para>ユーザー自身㮠XSLT スタイルシートを用ã„㦠HTML ã¸ã®å¤‰æ›ã‚’è¡Œã„ãŸã„å ´åˆã¯ã€ <command>-html:<replaceable>myStylesheet.xsl</replaceable></command> ã®ã‚ˆã†ã«æŒ‡å®šã—ã¦ãã ã•ã„。ã“ã“ã§ã€ <replaceable>myStylesheet.xsl</replaceable> ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒä½¿ç”¨ã—ãŸã„スタイルシートã®ãƒ•ã‚¡ã‚¤ãƒ«åã§ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-emacs</command></term> <listitem> <para>ãƒã‚°å ±å‘ŠãŒ Emacs å½¢å¼ã§ä½œæˆã•ã‚Œã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-xdocs</command></term> <listitem> <para>ãƒã‚°å ±å‘ŠãŒ xdoc XML å½¢å¼ã§ä½œæˆã•ã‚Œã¾ã™ã€‚Apache Mavenã§ä½¿ç”¨ã§ãã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-output</command> <replaceable>ファイルå</replaceable></term> <listitem> <para>指定ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã«å‡ºåŠ›çµæžœãŒä½œæˆã•ã‚Œã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-outputFile</command> <replaceable>ファイルå</replaceable></term> <listitem> <para>ã“ã®å¼•æ•°ã¯ã€ä½¿ç”¨ã™ã¹ãã§ã¯ã‚ã‚Šã¾ã›ã‚“。代ã‚ã‚Šã«ã€ <command>-output</command> を使用ã—ã¦ãã ã•ã„。</para> </listitem> </varlistentry> <varlistentry> <term><command>-nested</command><replaceable>[:true|false]</replaceable></term> <listitem> <para>ã“ã®ã‚ªãƒ—ションã¯ã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚„ディレクトリーã®ä¸ã§å…¥ã‚Œåã«ãªã£ãŸ jar ãŠã‚ˆã³ zip ファイルを分æžã™ã‚‹ã‹ã©ã†ã‹ã‚’指定ã—ã¾ã™ã€‚デフォルトã§ã¯ã€å…¥ã‚Œåã«ãªã£ãŸ jar ãŠã‚ˆã³ zip ファイルも分æžã—ã¾ã™ã€‚入れåã«ãªã£ãŸ jar ãŠã‚ˆã³ zip ファイルã®åˆ†æžã™ã‚‹ã‚’無効ã«ã™ã‚‹å ´åˆã¯ã€ <command>-nested:false</command> をコマンドライン引数ã«è¿½åŠ ã—ã¦ãã ã•ã„。</para> </listitem> </varlistentry> <varlistentry> <term><command>-auxclasspath</command> <replaceable>クラスパス</replaceable></term> <listitem> <para>分æžæ™‚ã«ä½¿ç”¨ã™ã‚‹è£œåŠ©ã‚¯ãƒ©ã‚¹ãƒ‘スをè¨å®šã—ã¾ã™ã€‚分æžã™ã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ ã§ä½¿ç”¨ã™ã‚‹jarファイルやクラスディレクトリーをã™ã¹ã¦æŒ‡å®šã—ã¦ãã ã•ã„。補助クラスパスã«æŒ‡å®šã—ãŸã‚¯ãƒ©ã‚¹ã¯åˆ†æžã®å¯¾è±¡ã«ã¯ãªã‚Šã¾ã›ã‚“。</para> </listitem> </varlistentry> <!-- <varlistentry> <term><command></command> <replaceable></replaceable></term> <listitem> <para> </para> </listitem> </varlistentry> --> </variablelist> </sect2> </sect1> </chapter> <chapter id="gui"> <title>&FindBugs; GUI ã®ä½¿ç”¨æ–¹æ³•</title> <para>ã“ã®ç« ã§ã¯ã€&FindBugs; グラフィカルユーザーインタフェース (GUI) ã®ä½¿ç”¨æ–¹æ³•ã‚’説明ã—ã¾ã™ã€‚</para> <sect1> <title>プãƒã‚¸ã‚§ã‚¯ãƒˆã®ä½œæˆ</title> <para><command>findbugs</command> コマンド㧠&FindBugs; ã‚’èµ·å‹•ã—ã¦ã‹ã‚‰ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§ <menuchoice><guimenu>File</guimenu><guimenuitem>New Project</guimenuitem></menuchoice> ã‚’é¸æŠžã—ã¦ãã ã•ã„。ãã†ã™ã‚‹ã¨ã€æ¬¡ã®ã‚ˆã†ãªãƒ€ã‚¤ã‚¢ãƒã‚°ãŒè¡¨ç¤ºã•ã‚Œã¾ã™:<mediaobject> <imageobject> <imagedata fileref="project-dialog.png"/> </imageobject> </mediaobject> </para> <para>「Class archives and directories to analyzeã€ãƒ†ã‚ストフィールドã®æ¨ªã«ã‚ã‚‹ 「Addã€ãƒœã‚¿ãƒ³ã‚’押ã™ã¨ã€ãƒã‚°ã‚’分æžã™ã‚‹ java クラスをå«ã‚“ã§ã„ã‚‹ Java アーカイブファイル (zip, jar, ear, or war file) ã‚’é¸æŠžã—ã¦æŒ‡å®šã§ãã¾ã™ã€‚複数㮠アーカイブ/ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’è¿½åŠ ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚</para> <para>ã¾ãŸã€åˆ†æžã‚’行ㆠJava アーカイブã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’å«ã‚“ã ソースディレクトリーを指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ãã†ã™ã‚‹ã¨ã€ãƒã‚°ã®å¯èƒ½æ€§ãŒã‚るソースコードã®å ´æ‰€ãŒã€&FindBugs; 上ã§ãƒã‚¤ãƒ©ã‚¤ãƒˆã—ã¦è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ソースディレクトリーã¯ã€Java パッケージ階層ã®ãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚例ãˆã°ã€ãƒ¦ãƒ¼ã‚¶ã®ã‚¢ãƒ—リケーション㌠<varname>org.foobar.myapp</varname> パッケージã®ä¸ã«ã‚ã‚‹å ´åˆã¯ã€ <filename class="directory">org</filename> ディレクトリーã®è¦ªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’ソースディレクトリーリストã«æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚</para> <para>ã‚‚ã†ã²ã¨ã¤ã€ä»»æ„指定ã®æ‰‹é †ãŒã‚ã‚Šã¾ã™ã€‚ãã‚Œã¯ã€è£œåŠ©ç”¨ã® Jar ファイルãŠã‚ˆã³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’ 「Auxiliary classpath locationsã€ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã«è¿½åŠ ã™ã‚‹ã“ã¨ã§ã™ã€‚分æžã™ã‚‹ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–/ディレクトリーã«ã‚‚標準ã®å®Ÿè¡Œæ™‚クラスパスã«ã‚‚å«ã¾ã‚Œã¦ã„ãªã„クラスをã€åˆ†æžã™ã‚‹ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–/ディレクトリーãŒå‚ç…§ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã“ã®é …目をè¨å®šã—ãŸæ–¹ãŒã„ã„ã§ã—ょã†ã€‚クラス階層ã«é–¢ã™ã‚‹æƒ…å ±ã‚’ä½¿ç”¨ã™ã‚‹ãƒã‚°ãƒ‡ã‚£ãƒ†ã‚¯ã‚¿ãŒã€ &FindBugs; ã«ã¯ã„ãã¤ã‹ã‚ã‚Šã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€&FindBugs; ãŒåˆ†æžã‚’è¡Œã†ã‚¯ãƒ©ã‚¹ã®å®Œå…¨ãªã‚¯ãƒ©ã‚¹éšŽå±¤ã‚’å‚ç…§ã§ãã‚Œã°ã€ã‚ˆã‚Šæ£ç¢ºãªåˆ†æžçµæžœã‚’å–å¾—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> </sect1> <sect1> <title>分æžã®å®Ÿè¡Œ</title> <para>アーカイブã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŠã‚ˆã³ã‚½ãƒ¼ã‚¹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã®æŒ‡å®šãŒã§ãã‚Œã°ã€ã€ŒFinishã€ãƒœã‚¿ãƒ³ã‚’押ã—㦠Jar ファイルã«å«ã¾ã‚Œã‚‹ã‚¯ãƒ©ã‚¹ã«å¯¾ã™ã‚‹åˆ†æžã‚’実行ã—ã¾ã™ã€‚巨大ãªãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã‚’å¤ã„コンピュータ上ã§å®Ÿè¡Œã™ã‚‹ã¨ã€ã‹ãªã‚Šã®æ™‚é–“(æ•°å分)ãŒã‹ã‹ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。大容é‡ãƒ¡ãƒ¢ãƒªã§ã‚る最近ã®ã‚³ãƒ³ãƒ”ュータãªã‚‰ã€å¤§ããªãƒ—ãƒã‚°ãƒ©ãƒ ã§ã‚ã£ã¦ã‚‚数分程度ã§åˆ†æžã§ãã¾ã™ã€‚</para> </sect1> <sect1> <title>çµæžœã®é–²è¦§</title> <para>分æžãŒå®Œäº†ã™ã‚‹ã¨ã€æ¬¡ã®ã‚ˆã†ãªç”»é¢ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ :<mediaobject> <imageobject> <imagedata fileref="example-details.png"/> </imageobject> </mediaobject> </para> <para>左上ã®ãƒšã‚¤ãƒ³ã«ã¯ãƒã‚°éšŽå±¤ãƒ„リーãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã€åˆ†æžã§ã¿ã¤ã‹ã£ãŸãƒã‚°ã®æ¤œç´¢çµæžœãŒéšŽå±¤çš„ã«è¡¨ç¤ºã•ã‚ŒãŸã‚‚ã®ã§ã™ã€‚</para> <para>上部ã®ãƒšã‚¤ãƒ³ã§ãƒã‚°æ¤œç´¢çµæžœã‚’é¸æŠžã™ã‚‹ã¨ã€ä¸‹éƒ¨ã®ã€ŒDetailsã€ãƒšã‚¤ãƒ³ã«ãƒã‚°ã®è©³ç´°èª¬æ˜ŽãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚æ›´ã«ã€ã‚½ãƒ¼ã‚¹ãŒã¿ã¤ã‹ã‚Œã°ã€å³ä¸Šã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ãƒšã‚¤ãƒ³ã«ãƒã‚°ã®å‡ºç¾ç®‡æ‰€ã«è©²å½“ã™ã‚‹ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚上図ã®ä¾‹ã§è¡¨ç¤ºã•ã‚Œã¦ã„ã‚‹ãƒã‚°ã¯ã€ã‚¹ãƒˆãƒªãƒ¼ãƒ オブジェクトãŒã‚¯ãƒãƒ¼ã‚ºã•ã‚Œã¦ã„ãªã„ã¨ã„ã†ã‚‚ã®ã§ã™ã€‚ソースコード・ウィンドウã«ãŠã„ã¦å½“該ストリームオブジェクトを生æˆã—ã¦ã„ã‚‹è¡ŒãŒãƒã‚¤ãƒ©ã‚¤ãƒˆã•ã‚Œã¦ã„ã¾ã™ã€‚</para> <para>ãƒã‚°ã®æ¤œç´¢çµæžœã«å¯¾ã—ã¦ãƒ†ã‚ストã§æ³¨é‡ˆã‚’入れるã“ã¨ãŒã§ãã¾ã™ã€‚階層ツリー図ã®ã™ã下ã«ã‚るテã‚ストボックスã«æ³¨é‡ˆã‚’入力ã—ã¦ãã ã•ã„。記録ã—ã¦ãŠããŸã„æƒ…å ±ã‚’ä½•ã§ã‚‚自由ã«å…¥åŠ›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãƒã‚°çµæžœãƒ•ã‚¡ã‚¤ãƒ«ã®ä¿å˜ãŠã‚ˆã³èªã¿è¾¼ã¿ã‚’è¡Œã£ãŸã¨ãã«ã€æ³¨é‡ˆã‚‚ä¿å˜ã•ã‚Œã¾ã™ã€‚</para> </sect1> <sect1> <title>ä¿å˜ã¨èªã¿è¾¼ã¿</title> <para>ãƒ¡ãƒ‹ãƒ¥ãƒ¼é …ç›®ã‹ã‚‰ <menuchoice><guimenu>File</guimenu><guimenuitem>Save as...</guimenuitem></menuchoice> ã‚’é¸æŠžã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ä½œæ¥çµæžœã‚’ä¿å˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚「Save as...ã€ãƒ€ã‚¤ã‚¢ãƒã‚°ã«ã‚るドãƒãƒƒãƒ—ダウン・リストã®ä¸ã‹ã‚‰ã€ŒFindBugs analysis results (.xml)ã€ã‚’é¸æŠžã“ã¨ã§ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŒ‡å®šã—㟠jar ファイルリストやãƒã‚°æ¤œç´¢çµæžœãªã©ã®ä½œæ¥çµæžœã‚’ä¿å˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€jar ファイルリストã®ã¿ã‚’ä¿å˜ã™ã‚‹é¸æŠžè‚¢ (「FindBugs project file (.fbp)ã€) ã‚„ãƒã‚°æ¤œç´¢çµæžœã®ã¿ã‚’ä¿å˜ã™ã‚‹é¸æŠžè‚¢ (「FindBugs analysis file (.fba)ã€) ã‚‚ã‚ã‚Šã¾ã™ã€‚ä¿å˜ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼é …ç›®ã‹ã‚‰ <menuchoice><guimenu>File</guimenu><guimenuitem>Open...</guimenuitem></menuchoice> ã‚’é¸æŠžã™ã‚‹ã“ã¨ã§ã€èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚</para> </sect1> <!-- <sect1 id="textui"> <title>Using the &FindBugs;™ Command Line Interface</title> <para> The &FindBugs; Command Line Interface (or Text UI) can be used to analyze an application for bugs non-interactively. Each bug instance will be reported on a single line. All output is written to the standard output file descriptor. <xref linkend="filter" /> explains how bug reports may be filtered in order to get only the output you're interested in. </para> <para> See <xref linkend="commandLineOptions" /> for a description of how to invoke the Command Line Interface. </para> </sect1> --> </chapter> <!-- ************************************************************************** Using the FindBugs Ant task ************************************************************************** --> <chapter id="anttask"> <title>&FindBugs;™ &Ant; タスクã®ä½¿ç”¨æ–¹æ³•</title> <para>ã“ã®ç« ã§ã¯ã€ &FindBugs; ã‚’ <ulink url="http://ant.apache.org/">&Ant;</ulink> ã®ãƒ“ルドスクリプトã«çµ„ã¿å…¥ã‚Œã‚‹æ–¹æ³•ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚ <ulink url="http://ant.apache.org/">&Ant;</ulink> ã¯ã€ãƒ“ルドやé…備を行ã†ã“ã¨ãŒã§ãã‚‹ Java ã§ã‚ˆã使用ã•ã‚Œã‚‹ãƒ„ールã§ã™ã€‚&FindBugs; &Ant; タスクを使用ã™ã‚‹ã¨ã€ ビルドスクリプトを作æˆã—ã¦æ©Ÿæ¢°çš„ã« &FindBugs; ã«ã‚ˆã‚‹ Java コードã®åˆ†æžã‚’実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> <para>ã“ã® &Ant; タスクã¯ã€ Mike Fagan æ°ã®å¤šå¤§ãªè²¢çŒ®ã«ã‚ˆã‚‹ã‚‚ã®ã§ã™ã€‚</para> <sect1> <title>&Ant; タスクã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«</title> <para>&Ant; タスクã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¯ã€ <filename>&FBHome;/lib/findbugs-ant.jar</filename> ã‚’ &Ant; インストールディレクトリーã®<filename>lib</filename> サブディレクトリーã«ã‚³ãƒ”ーã™ã‚‹ã ã‘ã§ã™ã€‚<note> <para>使用ã™ã‚‹ &Ant; タスク㨠&FindBugs; 本体ã¯ã€åŒæ¢±ã•ã‚Œã¦ã„ãŸåŒã˜ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚‚ã®ã‚’使用ã™ã‚‹ã“ã¨ã‚’å¼·ã推奨ã—ã¾ã™ã€‚別ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® &FindBugs; ã«å«ã¾ã‚Œã¦ã„㟠&Ant; タスク Jar ファイルã§ã®å‹•ä½œã¯ä¿è¨¼ã—ã¾ã›ã‚“。</para> </note> </para> </sect1> <sect1> <title>build.xml ã®æ›¸ãæ–¹</title> <para>&FindBugs; ã‚’ <filename>build.xml</filename> (&Ant; ビルドスクリプト) ã«çµ„ã¿å…¥ã‚Œã‚‹ãŸã‚ã«ã¯ã¾ãšã€ã‚¿ã‚¹ã‚¯å®šç¾©ã‚’記述ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚タスク定義ã¯æ¬¡ã®ã‚ˆã†ã«è¨˜è¿°ã—ã¾ã™ã€‚:<screen> <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"/> </screen>タスク定義ã¯ã€ <literal>findbugs</literal> è¦ç´ ã‚’ <filename>build.xml</filename> 上ã«è¨˜è¿°ã—ãŸã¨ãã€ãã®ã‚¿ã‚¹ã‚¯ã®å®Ÿè¡Œã«ä½¿ç”¨ã•ã‚Œã‚‹ã‚¯ãƒ©ã‚¹ã‚’指定ã—ã¾ã™ã€‚</para> <para>タスク定義ã®è¨˜è¿°ã‚’ã™ã‚Œã°ã€<literal>findbugs</literal> タスクを使ã£ã¦ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’定義ã§ãã¾ã™ã€‚次ã«ç¤ºã™ã®ã¯ã€ Apache <ulink url="http://jakarta.apache.org/bcel/">BCEL</ulink> ライブラリーを分æžã™ã‚‹å ´åˆã‚’想定ã—㟠<filename>build.xml</filename> ã®è¨˜è¿°ä¾‹ã§ã™ã€‚<screen> <property name="findbugs.home" value="/export/home/daveho/work/findbugs" /> <target name="findbugs" depends="jar"> <findbugs home="${findbugs.home}" output="xml" outputFile="bcel-fb.xml" > <auxClasspath path="${basedir}/lib/Regex.jar" /> <sourcePath path="${basedir}/src/java" /> <class location="${basedir}/bin/bcel.jar" /> </findbugs> </target> </screen><literal>findbugs</literal> è¦ç´ ã«ã¯ã€ <literal>home</literal> 属性ãŒå¿…é ˆã§ã™ã€‚ &FindBugs; ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã™ãªã‚ã¡ &FBHome; ã®å€¤ã‚’è¨å®šã—ã¾ã™ã€‚<xref linkend="installing"/> ã‚’å‚ç…§ã—ã¦ãã ã•ã„。</para> <para>ã“ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¯ <filename>bcel.jar</filename> ã«å¯¾ã—㦠&FindBugs; を実行ã—ã¾ã™ã€‚ã“ã® Jar ファイルã¯ã€ BCEL ビルドスクリプトã«ã‚ˆã£ã¦ä½œæˆã•ã‚Œã‚‹ã‚‚ã®ã§ã™ã€‚(上記ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãŒã€Œjarã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã«ä¾å˜ã—ã¦ã„ã‚‹ (depends) ã¨è¨å®šã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ &FindBugs; ãŒå®Ÿè¡Œã•ã‚Œã‚‹å‰ã«å½“該ライブラリーãŒå®Œå…¨ã«ã‚³ãƒ³ãƒ‘イルã•ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’ä¿è¨¼ã—ã¦ã„ã¾ã™ã€‚) &FindBugs; ã®å‡ºåŠ›ã¯ã€ XML å½¢å¼ã§ <filename>bcel-fb.xml</filename> ファイルã«ä¿å˜ã•ã‚Œã¾ã™ã€‚補助 Jar ファイル <filename>Regex.jar</filename> ã‚’ aux classpath ã«è¨˜è¿°ã—ã¦ã„ã¾ã™ã€‚ãªãœãªã‚‰ã€å½“該 Jar ファイル㌠BCEL メイン・ライブラリーã‹ã‚‰å‚ç…§ã•ã‚Œã‚‹ã‹ã‚‰ã§ã™ã€‚source path を指定ã™ã‚‹ã“ã¨ã§ã€ä¿å˜ã•ã‚Œã‚‹ãƒã‚°ãƒ‡ãƒ¼ã‚¿ã« BCEL ソースコードã¸ã®æ£ç¢ºãªå‚ç…§ãŒè¨˜è¿°ã•ã‚Œã¾ã™ã€‚</para> </sect1> <sect1> <title>タスクã®å®Ÿè¡Œ</title> <para>コマンドラインã‹ã‚‰ &Ant; ã‚’èµ·å‹•ã™ã‚‹ä¾‹ã‚’次ã«ç¤ºã—ã¾ã™ã€‚å‰è¿°ã® <literal>findbugs</literal> ターゲットを使用ã—ã¦ã„ã¾ã™ã€‚<screen> <prompt>[daveho@noir]$</prompt> <command>ant findbugs</command> Buildfile: build.xml init: compile: examples: jar: findbugs: [findbugs] Running FindBugs... [findbugs] Bugs were found [findbugs] Output saved to bcel-fb.xml BUILD SUCCESSFUL Total time: 35 seconds </screen>ã“ã®äº‹ä¾‹ã«ãŠã„ã¦ã¯ã€XML ファイルã§ãƒã‚°æ¤œç´¢çµæžœã‚’ä¿å˜ã—ã¦ã„ã‚‹ã®ã§ã€ &FindBugs; GUI を使ã£ã¦çµæžœã‚’å‚ç…§ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ <xref linkend="running"/> ã‚’å‚ç…§ã—ã¦ãã ã•ã„。</para> </sect1> <sect1> <title>パラメーター</title> <para>ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ &FindBugs; タスクを使用ã™ã‚‹éš›ã«ã€æŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ãるパラメーターã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚<variablelist> <varlistentry> <term><literal>class</literal></term> <listitem> <para>分æžã®å¯¾è±¡ã¨ãªã‚‹ã‚¯ãƒ©ã‚¹ç¾¤ã‚’指定ã™ã‚‹ãŸã‚ã®ãƒã‚¹ãƒˆã•ã‚Œã‚‹è¦ç´ ã§ã™ã€‚<literal>class</literal> è¦ç´ ã«ã¯ <literal>location</literal> 属性ã®æŒ‡å®šãŒå¿…é ˆã§ã™ã€‚分æžå¯¾è±¡ã¨ãªã‚‹ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ファイル (jar, zip, ä»–)ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã¾ãŸã¯ã‚¯ãƒ©ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã®åå‰ã‚’記述ã—ã¾ã™ã€‚1 ã¤ã® <literal>findbugs</literal> è¦ç´ ã«å¯¾ã—ã¦ã€è¤‡æ•°ã® <literal>class</literal> åè¦ç´ を指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>auxClasspath</literal></term> <listitem> <para>ä»»æ„指定ã®ãƒã‚¹ãƒˆã•ã‚Œã‚‹è¦ç´ ã§ã™ã€‚分æžå¯¾è±¡ã®ãƒ©ã‚¤ãƒ–ラリーã¾ãŸã¯ã‚¢ãƒ—リケーションã«ã‚ˆã£ã¦ä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹ãŒåˆ†æžã®å¯¾è±¡ã«ã¯ã—ãŸããªã„クラスをå«ã‚“ã§ã„るクラスパス (Jar ファイルã¾ãŸã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼) を指定ã—ã¾ã™ã€‚ &Ant; ã® Java タスクã«ã‚ã‚‹ <literal>classpath</literal> è¦ç´ ã¨åŒã˜æ–¹æ³•ã§æŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>sourcePath</literal></term> <listitem> <para>ä»»æ„指定ã®ãƒã‚¹ãƒˆã•ã‚Œã‚‹è¦ç´ ã§ã™ã€‚分æžå¯¾è±¡ Java コードã®ã‚³ãƒ³ãƒ‘イル時ã«ä½¿ç”¨ã—ãŸã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å«ã‚“ã§ã„るソースディレクトリーã¸ã®ãƒ‘スを指定ã—ã¾ã™ã€‚ソースパスを指定ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ç”Ÿæˆã•ã‚Œã‚‹ XML ã®ãƒã‚°å‡ºåŠ›çµæžœã«å®Œå…¨ãªã‚½ãƒ¼ã‚¹æƒ…å ±ã‚’ã‚‚ãŸã›ã‚‹ã“ã¨ãŒã§ãã€å¾Œã«ãªã£ã¦ GUI ã§å‚ç…§ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>home</literal></term> <listitem> <para>å¿…é ˆå±žæ€§ã§ã™ã€‚&FindBugs; ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„るディレクトリーåã‚’è¨å®šã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>quietErrors</literal></term> <listitem> <para>ä»»æ„指定ã®ãƒ–ール値属性ã§ã™ã€‚true ã‚’è¨å®šã™ã‚‹ã¨ã€æ·±åˆ»ãªåˆ†æžã‚¨ãƒ©ãƒ¼ç™ºç”Ÿã‚„クラスãŒã¿ã¤ã‹ã‚‰ãªã„ã¨ã„ã£ãŸæƒ…å ±ãŒ &FindBugs; 出力ã«è¨˜éŒ²ã•ã‚Œã¾ã›ã‚“。デフォルトã¯ã€ false ã§ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>reportLevel</literal></term> <listitem> <para>ä»»æ„指定ã®å±žæ€§ã§ã™ã€‚å ±å‘Šã•ã‚Œã‚‹ãƒã‚°ã®å„ªå…ˆåº¦ã®ã—ãã„値を指定ã—ã¾ã™ã€‚「lowã€ã«è¨å®šã™ã‚‹ã¨ã€ã™ã¹ã¦ã®ãƒã‚°ãŒå ±å‘Šã•ã‚Œã¾ã™ã€‚「medium〠(デフォルト) ã«è¨å®šã™ã‚‹ã¨ã€å„ªå…ˆåº¦ (ä¸)ãŠã‚ˆã³å„ªå…ˆåº¦ (高)ã®ãƒã‚°ãŒå ±å‘Šã•ã‚Œã¾ã™ã€‚「highã€ã«è¨å®šã™ã‚‹ã¨ã€å„ªå…ˆåº¦ (高) ã®ãƒã‚°ã®ã¿ãŒå ±å‘Šã•ã‚Œã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>output</literal></term> <listitem> <para>ä»»æ„指定ã®å±žæ€§ã§ã™ã€‚出力形å¼ã‚’指定ã—ã¾ã™ã€‚「xml〠(デフォルト) ã«è¨å®šã™ã‚‹ã¨ã€å‡ºåŠ›ã¯ XML å½¢å¼ã«ãªã‚Šã¾ã™ã€‚「xml:withMessages〠ã«è¨å®šã™ã‚‹ã¨ã€å‡ºåŠ›ã¯äººé–“ãŒèªã‚るメッセージ ãŒè¿½åŠ ã•ã‚ŒãŸ XML å½¢å¼ã«ãªã‚Šã¾ã™ã€‚(XSL スタイルシートを使ã£ã¦ãƒ¬ãƒãƒ¼ãƒˆã‚’作æˆã™ã‚‹ã“ã¨ã‚’計画ã—ã¦ã„ã‚‹å ´åˆã¯ã“ã®å½¢å¼ã‚’使用ã—ã¦ãã ã•ã„。) 「htmlã€ã«è¨å®šã™ã‚‹ã¨ã€å‡ºåŠ›ã¯ HTML å½¢å¼(デフォルトã®ã‚¹ã‚¿ã‚¤ãƒ«ã‚·ãƒ¼ãƒˆã¯ default.xsl) ã«ãªã‚Šã¾ã™ã€‚ 「textã€ã«è¨å®šã™ã‚‹ã¨ã€å‡ºåŠ›ã¯ç‰¹åˆ¥ãªãƒ†ã‚スト形å¼ã«ãªã‚Šã¾ã™ã€‚「emacsã€ã«è¨å®šã™ã‚‹ã¨ã€å‡ºåŠ›ã¯ <ulink url="http://www.gnu.org/software/emacs/">Emacs</ulink> エラーメッセージ形å¼ã«ãªã‚Šã¾ã™ã€‚「xdocsã€ã«è¨å®šã™ã‚‹ã¨ã€å‡ºåŠ›ã¯ Apache Maven ã§ä½¿ç”¨ã§ãã‚‹ xdoc XML ã«ãªã‚Šã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>stylesheet</literal></term> <listitem> <para>ä»»æ„指定ã®å±žæ€§ã§ã™ã€‚output 属性 ã« html を指定ã—ãŸå ´åˆã«ã€ HTML 出力作æˆã«ä½¿ç”¨ã•ã‚Œã‚‹ã‚¹ã‚¿ã‚¤ãƒ«ã‚·ãƒ¼ãƒˆã‚’指定ã—ã¾ã™ã€‚FindBugs é…布物ã«å«ã¾ã‚Œã¦ã„るスタイルシートã¯ã€ default.xsl〠fancy.xsl 〠fancy-hist.xsl 〠plain.xsl ãŠã‚ˆã³ summary.xsl ã§ã™ã€‚デフォルト値㯠default.xsl ã§ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>sort</literal></term> <listitem> <para>ä»»æ„指定ã®å±žæ€§ã§ã™ã€‚<literal>output</literal> 属性ã«ã€Œtextã€ã‚’指定ã—ãŸå ´åˆã«ã€ãƒã‚°ã®å ±å‘Šã‚’ã‚¯ãƒ©ã‚¹é †ã«ã‚½ãƒ¼ãƒˆã™ã‚‹ã‹ã©ã†ã‹ã‚’ <literal>sort</literal> 属性ã§æŒ‡å®šã—ã¾ã™ã€‚デフォルトã¯ã€ true ã§ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>outputFile</literal></term> <listitem> <para>ä»»æ„指定ã®å±žæ€§ã§ã™ã€‚指定ã—ãŸå ´åˆã€&FindBugs; ã®å‡ºåŠ›ã¯ãã®åå‰ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¸ã¨ä¿å˜ã•ã‚Œã¾ã™ã€‚çœç•¥æ™‚ã€å‡ºåŠ›ã¯ &Ant; ã«ã‚ˆã£ã¦ç›´æŽ¥è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>debug</literal></term> <listitem> <para>ä»»æ„指定ã®ãƒ–ール値属性ã§ã™ã€‚true ã«è¨å®šã™ã‚‹ã¨ã€ &FindBugs; 㯠診æ–æƒ…å ±ã‚’å‡ºåŠ›ã—ã¾ã™ã€‚ã©ã®ã‚¯ãƒ©ã‚¹ã‚’分æžã—ã¦ã„ã‚‹ã‹ã€ã©ã®ãƒ‘グパターンディテクタãŒå®Ÿè¡Œã•ã‚Œã¦ã„ã‚‹ã‹ã€ã¨ã„ã†æƒ…å ±ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚デフォルトã¯ã€ false ã§ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>effort</literal></term> <listitem> <para>分æžã®æ´»å‹•ãƒ¬ãƒ™ãƒ«ã‚’è¨å®šã—ã¾ã™ã€‚<literal>min</literal> ã€<literal>default</literal> ã¾ãŸã¯ <literal>max</literal> ã®ã„ãšã‚Œã‹ã®å€¤ã‚’è¨å®šã—ã¦ãã ã•ã„。分æžãƒ¬ãƒ™ãƒ«ã®è¨å®šã«é–¢ã™ã‚‹è©³ç´°æƒ…å ±ã¯ã€ <xref linkend="commandLineOptions"/> ã‚’å‚ç…§ã—ã¦ãã ã•ã„。</para> </listitem> </varlistentry> <varlistentry> <term><literal>conserveSpace</literal></term> <listitem> <para>effort="min" ã¨åŒç¾©ã§ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>workHard</literal></term> <listitem> <para>effort="max" ã¨åŒç¾©ã§ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>visitors</literal></term> <listitem> <para>ä»»æ„指定ã®å±žæ€§ã§ã™ã€‚ã©ã®ãƒã‚°ãƒ‡ã‚£ãƒ†ã‚¯ã‚¿ã‚’実行ã™ã‚‹ã‹ã‚’コンマ区切りã®ãƒªã‚¹ãƒˆã§æŒ‡å®šã—ã¾ã™ã€‚ãƒã‚°ãƒ‡ã‚£ãƒ†ã‚¯ã‚¿ã¯ãƒ‘ッケージ指定ãªã—ã®ã‚¯ãƒ©ã‚¹åã§æŒ‡å®šã—ã¾ã™ã€‚çœç•¥æ™‚ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ç„¡åŠ¹åŒ–ã•ã‚Œã¦ã„ã‚‹ã‚‚ã®ã‚’除ãã™ã¹ã¦ã®ãƒ‡ã‚£ãƒ†ã‚¯ã‚¿ãŒå®Ÿè¡Œã•ã‚Œã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>omitVisitors</literal></term> <listitem> <para>ä»»æ„指定ã®å±žæ€§ã§ã™ã€‚<literal>visitors</literal> 属性ã¨ä¼¼ã¦ã„ã¾ã™ãŒã€ã“ã¡ã‚‰ã¯ <emphasis>実行ã•ã‚Œãªã„</emphasis> ディテクタを指定ã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>excludeFilter</literal></term> <listitem> <para>ä»»æ„指定ã®å±žæ€§ã§ã™ã€‚フィルターファイルåを指定ã—ã¾ã™ã€‚å ±å‘Šã‹ã‚‰é™¤å¤–ã•ã‚Œã‚‹ãƒã‚°ã‚’指定ã—ã¾ã™ã€‚<xref linkend="filter"/> ã‚’å‚ç…§ã—ã¦ãã ã•ã„。</para> </listitem> </varlistentry> <varlistentry> <term><literal>includeFilter</literal></term> <listitem> <para>ä»»æ„指定ã®å±žæ€§ã§ã™ã€‚フィルターファイルåを指定ã—ã¾ã™ã€‚å ±å‘Šã•ã‚Œã‚‹ãƒã‚°ã‚’指定ã—ã¾ã™ã€‚<xref linkend="filter"/> ã‚’å‚ç…§ã—ã¦ãã ã•ã„。</para> </listitem> </varlistentry> <varlistentry> <term><literal>projectFile</literal></term> <listitem> <para>ä»»æ„指定ã®å±žæ€§ã§ã™ã€‚プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ•ã‚¡ã‚¤ãƒ«åを指定ã—ã¾ã™ã€‚プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€ &FindBugs; GUI ã§ä½œæˆã—ã¾ã™ã€‚分æžã•ã‚Œã‚‹ã‚¯ãƒ©ã‚¹ã€ãŠã‚ˆã³ã€è£œåŠ©ã‚¯ãƒ©ã‚¹ãƒ‘スã€ã‚½ãƒ¼ã‚¹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãŒè¨˜å…¥ã•ã‚Œã¦ã¾ã™ã€‚プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’指定ã—ãŸå ´åˆã¯ã€ <literal>class</literal> è¦ç´ ・ <literal>auxClasspath</literal> 属性ãŠã‚ˆã³ <literal>sourcePath</literal> 属性をè¨å®šã™ã‚‹å¿…è¦ã¯ã‚ã‚Šã¾ã›ã‚“。プãƒã‚¸ã‚§ã‚¯ãƒˆã®ä½œæˆæ–¹æ³•ã¯ã€ <xref linkend="running"/> ã‚’å‚ç…§ã—ã¦ãã ã•ã„。</para> </listitem> </varlistentry> <varlistentry> <term><literal>jvmargs</literal></term> <listitem> <para>ä»»æ„指定ã®å±žæ€§ã§ã™ã€‚&FindBugs; を実行ã—ã¦ã„ã‚‹ Java 仮想マシンã«å¯¾ã—ã¦å—ã‘渡ã•ã‚Œã‚‹å¼•æ•°ã‚’指定ã—ã¾ã™ã€‚巨大ãªãƒ—ãƒã‚°ãƒ©ãƒ を分æžã™ã‚‹å ´åˆã«ã€ JVM ãŒä½¿ç”¨ã™ã‚‹ãƒ¡ãƒ¢ãƒªå®¹é‡ã‚’増やã™æŒ‡å®šã‚’ã™ã‚‹ãŸã‚ã«ã“ã®å¼•æ•°ã‚’利用ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。</para> </listitem> </varlistentry> <varlistentry> <term><literal>systemProperty</literal></term> <listitem> <para>ä»»æ„指定ã®ãƒã‚¹ãƒˆã•ã‚Œã‚‹è¦ç´ ã§ã™ã€‚指定ã—ãŸå ´åˆã€Java システムプãƒãƒ‘ティーを定義ã—ã¾ã™ã€‚<literal>name</literal> 属性ã«ã¯ã‚·ã‚¹ãƒ†ãƒ プãƒãƒ‘ティーã®åå‰ã‚’指定ã—ã¾ã™ã€‚ãã—ã¦ã€ <literal>value</literal> 属性ã«ã¯ã‚·ã‚¹ãƒ†ãƒ プãƒãƒ‘ティã®å€¤ã‚’指定ã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>timeout</literal></term> <listitem> <para>ä»»æ„指定ã®å±žæ€§ã§ã™ã€‚&FindBugs; を実行ã—ã¦ã„ã‚‹ Java プãƒã‚»ã‚¹ ã®å®Ÿè¡Œè¨±å®¹æ™‚間をミリ秒å˜ä½ã§æŒ‡å®šã—ã¾ã™ã€‚時間を超éŽã™ã‚‹ã¨ãƒãƒ³ã‚°ã‚¢ãƒƒãƒ—ã—ã¦ã„ã‚‹ã¨åˆ¤æ–ã—ã¦ãƒ—ãƒã‚»ã‚¹ãŒçµ‚了ã•ã‚Œã¾ã™ã€‚デフォルトã¯ã€ 600,000 ミリ秒 (10 分) ã§ã™ã€‚巨大ãªãƒ—ãƒã‚°ãƒ©ãƒ ã®å ´åˆã¯ã€ &FindBugs; ãŒåˆ†æžã‚’完了ã™ã‚‹ã¾ã§ã« 10 分 以上掛ã‹ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。</para> </listitem> </varlistentry> <varlistentry> <term><literal>failOnError</literal></term> <listitem> <para>ä»»æ„指定ã®ãƒ–ール値属性ã§ã™ã€‚&FindBugs; ã®å®Ÿè¡Œä¸ã«ã‚¨ãƒ©ãƒ¼ãŒã‚ã£ãŸå ´åˆã«ã€ãƒ“ルドプãƒã‚»ã‚¹è‡ªä½“を打ã¡åˆ‡ã£ã¦ç•°å¸¸çµ‚了ã•ã›ã‚‹ã‹ã©ã†ã‹ã‚’指定ã—ã¾ã™ã€‚デフォルトã¯ã€ã€Œfalseã€ã§ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>errorProperty</literal></term> <listitem> <para>ä»»æ„指定ã®å±žæ€§ã§ã™ã€‚&FindBugs; ã®å®Ÿè¡Œä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã«ã€ã€Œtrueã€ãŒè¨å®šã•ã‚Œã‚‹ãƒ—ãƒãƒ‘ティーã®åå‰ã‚’指定ã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal>warningsProperty</literal></term> <listitem> <para>ä»»æ„指定ã®å±žæ€§ã§ã™ã€‚&FindBugs; ãŒåˆ†æžã—ãŸãƒ—ãƒã‚°ãƒ©ãƒ ã«ãƒã‚°å ±å‘ŠãŒ 1 件ã§ã‚‚ã‚ã‚‹å ´åˆã«ã€ã€Œtrueã€ãŒè¨å®šã•ã‚Œã‚‹ãƒ—ãƒãƒ‘ティーã®åå‰ã‚’指定ã—ã¾ã™ã€‚</para> </listitem> </varlistentry> </variablelist> </para> <!-- --> </sect1> </chapter> <!-- ************************************************************************** Using the FindBugs Eclipse plugin ************************************************************************** --> <chapter id="eclipse"> <title>&FindBugs;™ Eclipse プラグインã®ä½¿ç”¨æ–¹æ³•</title> <para>FindBugs Eclipse プラグインを使用ã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ã€ &FindBugs; ã‚’ <ulink url="http://www.eclipse.org/">Eclipse</ulink> IDE ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ã“ã®FindBugs Eclipse プラグインã¯ã€ Peter Friese æ°ã®å¤šå¤§ãªè²¢çŒ®ã«ã‚ˆã‚‹ã‚‚ã®ã§ã™ã€‚Phil Crosby æ° ã¨ Andrei Loskutov æ°ã¯ã€ãƒ—ラグインã®é‡è¦ãªæ”¹è‰¯ã«è²¢çŒ®ã—ã¾ã—ãŸã€‚</para> <sect1> <title>å¿…è¦æ¡ä»¶</title> <para>&FindBugs; Eclipse Plugin を使用ã™ã‚‹ãŸã‚ã«ã¯ã€ Eclipse 3.3 ã‚ã‚‹ã„ã¯ãれ以é™ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€ã¾ãŸã€ JRE/JDK 1.5 ã‚ã‚‹ã„ã¯ãれ以é™ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå¿…è¦ã§ã™ã€‚</para> </sect1> <sect1> <title>インストール</title> <para>更新サイトãŒæä¾›ã•ã‚Œã¦ã„ã¾ã™ã€‚更新サイトを利用ã—ã¦ã€æ©Ÿæ¢°çš„ã« FindBugs ã‚’ Eclipse ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚ã¾ãŸè‡ªå‹•çš„ã«ã€æœ€æ–°ç‰ˆã®ã‚¢ãƒƒãƒ—デートを照会ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚内容ã®ç•°ãªã‚‹ 3 ã¤ã®æ›´æ–°ã‚µã‚¤ãƒˆãŒå˜åœ¨ã—ã¾ã™ã€‚</para> <variablelist><title>FindBugs Eclipse 更新サイト一覧</title> <varlistentry><term><ulink url="http://findbugs.cs.umd.edu/eclipse/">http://findbugs.cs.umd.edu/eclipse/</ulink></term> <listitem> <para>FindBugs ã®å…¬å¼ãƒªãƒªãƒ¼ã‚¹ç‰©ã‚’æä¾›ã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry><term><ulink url="http://findbugs.cs.umd.edu/eclipse-candidate/">http://findbugs.cs.umd.edu/eclips-candidate/</ulink></term> <listitem> <para>FindBugsã®å…¬å¼ãƒªãƒªãƒ¼ã‚¹ç‰©ã«åŠ ãˆã¦ã€å…¬å¼ãƒªãƒªãƒ¼ã‚¹å€™è£œç‰ˆã‚’æä¾›ã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry><term><ulink url="http://findbugs.cs.umd.edu/eclipse-daily/">http://findbugs.cs.umd.edu/eclipse-daily/</ulink></term> <listitem> <para>FindBugsã®æ—¥æ¬¡ãƒ“ルド物をæä¾›ã—ã¾ã™ã€‚コンパイルãŒã§ãã‚‹ã“ã¨ä»¥ä¸Šã®ãƒ†ã‚¹ãƒˆã¯è¡Œã‚ã‚Œã¦ã„ã¾ã›ã‚“。</para> </listitem> </varlistentry> </variablelist> <para>ã¾ãŸã€æ¬¡ã«ç¤ºã™ãƒªãƒ³ã‚¯ã‹ã‚‰æ‰‹å‹•ã§ãƒ—ラグインをダウンãƒãƒ¼ãƒ‰ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ : <ulink url="http://prdownloads.sourceforge.net/findbugs/edu.umd.cs.findbugs.plugin.eclipse_2.0.3.20131122.zip?download">http://prdownloads.sourceforge.net/findbugs/edu.umd.cs.findbugs.plugin.eclipse_2.0.3.20131122.zip?download</ulink>. 展開ã—㦠Eclipse ã®ã€Œpluginsã€ã‚µãƒ–ディレクトリーã«å…¥ã‚Œã¦ãã ã•ã„。(ãã†ã™ã‚‹ã¨ã€ <eclipse インストールディレクトリー >/plugins/edu.umd.cs.findbugs.plugin.eclipse_2.0.3.20131122/findbugs.png ㌠&FindBugs; ã®ãƒã‚´ãƒ•ã‚¡ã‚¤ãƒ«ã¸ã®ãƒ‘スã«ãªã‚‹ã¯ãšã§ã™ã€‚)</para> <para>プラグインã®å±•é–‹ãŒã§ããŸã‚‰ã€ Eclipse ã‚’èµ·å‹•ã—㦠<menuchoice> <guimenu>Help</guimenu> <guimenuitem>About Eclipse Platform</guimenuitem> <guimenuitem>Plug-in Details</guimenuitem> </menuchoice> ã‚’é¸æŠžã—ã¦ãã ã•ã„。「FindBugs Projectã€ã‹ã‚‰æä¾›ã•ã‚ŒãŸã€ŒFindBugs Plug-inã€ã¨ã„ã†ãƒ—ラグインãŒã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。</para> </sect1> <sect1> <title>プラグインã®ä½¿ç”¨æ–¹æ³•</title> <para>実行ã™ã‚‹ã«ã¯ã€ Java プãƒã‚¸ã‚§ã‚¯ãƒˆä¸Šã§å³ã‚¯ãƒªãƒƒã‚¯ã—ã¦ã€ŒFind Bugsã€ã‚’é¸æŠžã—ã¾ã™ã€‚&FindBugs; ãŒå®Ÿè¡Œã•ã‚Œã¦ã€ãƒã‚°ãƒ‘ターンã®å®Ÿä¾‹ã®å¯èƒ½æ€§ãŒã‚ã‚‹ã¨è˜åˆ¥ã•ã‚ŒãŸã‚³ãƒ¼ãƒ‰ç®‡æ‰€ã«å•é¡Œãƒžãƒ¼ã‚«ãƒ¼ãŒã¤ãã¾ã™ã€‚ (ソース画é¢ãŠã‚ˆã³ Eclipse å•é¡Œãƒ“ューã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚)</para> <para>Java プãƒã‚¸ã‚§ã‚¯ãƒˆã®ãƒ—ãƒãƒ‘ティーダイアãƒã‚°ã‚’é–‹ã„ã¦ã€ŒFindbugsã€ãƒ—ãƒãƒ‘ティーページをé¸æŠžã™ã‚‹ã“ã¨ã§ã€ &FindBugs; ã®å‹•ä½œã‚’カスタマイズã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚é¸æŠžã§ãã‚‹é …ç›®ã«ã¯æ¬¡ã®ã‚ˆã†ãªã‚‚ã®ãŒã‚ã‚Šã¾ã™ :</para> <itemizedlist> <listitem> <para>「Run FindBugs Automaticallyã€ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã®è¨å®šã€‚ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆå†…ã® Java クラスãŒä¿®æ£ã•ã‚Œã‚‹ãŸã³ã« FindBugs ãŒå®Ÿè¡Œã•ã‚Œã¾ã™ã€‚</para> </listitem> <listitem> <para>優先度ã¨ãƒã‚°ã‚«ãƒ†ã‚´ãƒªãƒ¼ã®é¸æŠžã€‚ã“れらã®ã‚ªãƒ—ションã¯ã€ã©ã®è¦å‘Šã‚’表示ã™ã‚‹ã‹ã‚’é¸æŠžã—ã¾ã™ã€‚例ãˆã°ã€å„ªå…ˆåº¦ã§ 「Medium〠をé¸æŠžã™ã‚‹ã¨ã€å„ªå…ˆåº¦ (ä¸) ãŠã‚ˆã³å„ªå…ˆåº¦ (高) ã®è¦å‘Šã®ã¿ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚åŒæ§˜ã«ã€ã€ŒStyleã€ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã®ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ã‚’外ã™ã¨ã€Style カテゴリーã«å±žã™ã‚‹è¦å‘Šã¯è¡¨ç¤ºã•ã‚Œã¾ã›ã‚“。</para> </listitem> <listitem> <para>ディテクタã®é¸æŠžã€‚表ã‹ã‚‰ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã§æœ‰åŠ¹ã«ã—ãŸã„ディテクタをé¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> </listitem> </itemizedlist> </sect1> <sect1> <title>トラブルシューティング</title> <para>&FindBugs; Eclipse プラグインã¯ã€ã¾ã 実験段階ã§ã™ã€‚ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ãƒ—ラグインã«é–¢ã™ã‚‹ä¸€èˆ¬çš„ãªå•é¡Œã¨ (判明ã—ã¦ã„ã‚Œã°) ãれらã®å•é¡Œã®è§£æ±ºæ–¹æ³•ã‚’記述ã—ã¾ã™ã€‚</para> <itemizedlist> <listitem> <para>&FindBugs; å•é¡Œãƒžãƒ¼ã‚«ãƒ¼ãŒ (ソース画é¢ãŠã‚ˆã³å•é¡Œãƒ“ューã«) 表示ã•ã‚Œãªã„å ´åˆã¯ã€å•é¡Œãƒ“ューã®ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼è¨å®šã‚’変更ã—ã¦ãã ã•ã„ã€‚è©³ç´°æƒ…å ±ã¯ <ulink url="http://findbugs.sourceforge.net/FAQ.html#q7">http://findbugs.sourceforge.net/FAQ.html#q7</ulink> ã‚’å‚ç…§ã—ã¦ãã ã•ã„。</para> </listitem> </itemizedlist> </sect1> </chapter> <!-- ************************************************************************** Filter files ************************************************************************** --> <chapter id="filter"> <title>フィルターファイル</title> <para>フィルターファイルを使用ã™ã‚‹ã“ã¨ã§ã€ç‰¹å®šã®ã‚¯ãƒ©ã‚¹ã‚„メソッドをãƒã‚°å ±å‘Šã«å«ã‚ãŸã‚Šãƒã‚°å ±å‘Šã‹ã‚‰é™¤å¤–ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ç« ã§ã¯ã€ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã®ä½¿ç”¨æ–¹æ³•ã‚’説明ã—ã¾ã™ã€‚<note> <title>計画ã•ã‚Œã¦ã„る機能</title> <para>フィルターã¯ç¾åœ¨ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã§ã®ã¿ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã™ã€‚最終的ã«ã¯ã€ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã®ã‚µãƒãƒ¼ãƒˆã¯ GUI ã«ã‚‚è¿½åŠ ã•ã‚Œã‚‹äºˆå®šã§ã™ã€‚</para> </note> </para> <sect1> <title>フィルターファイルã®æ¦‚è¦</title> <para>概念的ã«è¨€ãˆã°ã€ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã¯ãƒã‚°æ¤œç´¢çµæžœã‚’ã‚る基準ã¨ç…§åˆã—ã¾ã™ã€‚フィルターを定義ã™ã‚‹ã“ã¨ã§ã€ 特別ãªå–り扱ã„ã‚’ã™ã‚‹ãƒã‚°æ¤œç´¢çµæžœã‚’é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚例ãˆã°ã€ã‚ã‚‹ãƒã‚°æ¤œç´¢çµæžœã‚’ãƒã‚°å ±å‘Šã«å«ã‚ãŸã‚Šã€ãƒã‚°å ±å‘Šã‹ã‚‰é™¤å¤–ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> <para>フィルターファイルã¯ã€ <ulink url="http://www.w3.org/XML/">XML</ulink> 文書ã§ã™ã€‚最上ä½è¦ç´ ãŒã€€<literal>FindBugsFilter</literal> è¦ç´ ã§ã‚ã‚Šã€ãã®åè¦ç´ ã¨ã—㦠<literal>Match</literal> è¦ç´ を複数個定義ã—ã¾ã™ã€‚ãã‚Œãžã‚Œã® <literal>Match</literal> è¦ç´ ã¯ã€ç”Ÿæˆã•ã‚ŒãŸãƒã‚°æ¤œç´¢çµæžœã«é©ç”¨ã•ã‚Œã‚‹è¿°éƒ¨ã«ã‚ãŸã‚Šã¾ã™ã€‚通常ã€ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã¯ãƒã‚°æ¤œç´¢çµæžœã‚’除外ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã—ã¾ã™ã€‚次ã«ã€ä¾‹ã‚’示ã—ã¾ã™:<screen> <prompt>$ </prompt><command>findbugs -textui -exclude <replaceable>myExcludeFilter.xml</replaceable> <replaceable>myApp.jar</replaceable></command> </screen>ã¾ãŸä¸€æ–¹ã§ã€çš„ã‚’ã—ã¼ã£ãŸå ±å‘Šã‚’å¾—ã‚‹ãŸã‚ã«ãƒã‚°å ±å‘Šçµæžœã‚’é¸æŠžã™ã‚‹ãŸã‚ã«ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚’使用ã™ã‚‹ã“ã¨ã‚‚考ãˆã‚‰ã‚Œã¾ã™ :<screen> <prompt>$ </prompt><command>findbugs -textui -include <replaceable>myIncludeFilter.xml</replaceable> <replaceable>myApp.jar</replaceable></command> </screen> </para> <para> <literal>Match</literal> è¦ç´ ã¯åè¦ç´ ã‚’æŒã¡ã¾ã™ã€‚ãれらã®åè¦ç´ ã¯è«–ç†ç©ã§è¿°éƒ¨ã«ãªã‚Šã¾ã™ã€‚ã¤ã¾ã‚Šã€è¿°éƒ¨ãŒçœŸã§ã‚ã‚‹ãŸã‚ã«ã¯ã€ã™ã¹ã¦ã®åè¦ç´ ãŒçœŸã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚</para> </sect1> <sect1> <title>マッãƒãƒ³ã‚°æ¡ä»¶ã®ç¨®é¡ž</title> <variablelist> <varlistentry> <term><literal><Bug></literal></term> <listitem><para>ã“ã®è¦ç´ ã¯ã€ãƒã‚°ãƒ‘ターンを指定ã—ã¦ç…§åˆã—ã¾ã™ã€‚<literal>pattern</literal> 属性ã«ã¯ã€ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã§ãƒã‚°ãƒ‘ターン類型ã®ãƒªã‚¹ãƒˆã‚’指定ã—ã¾ã™ã€‚ã©ã®è¦å‘ŠãŒã©ã®ãƒã‚°ãƒ‘ターン類型ã«ã‚ãŸã‚‹ã‹ã¯ã€ <command>-xml</command> オプションをã¤ã‹ã£ã¦å‡ºåŠ›ã•ã‚ŒãŸã‚‚ã® (<literal>BugInstance</literal> è¦ç´ ã® <literal>type</literal> 属性) を見るã‹ã€ã¾ãŸã¯ã€ <ulink url="../../bugDescriptions.html">ãƒã‚°è§£èª¬ãƒ‰ã‚ュメント</ulink>ã‚’å‚ç…§ã—ã¦ãã ã•ã„。</para><para>ã‚‚ã£ã¨ç²’度ã®ç²—ã„ç…§åˆã‚’è¡Œã„ãŸã„ã¨ãã¯ã€ <literal>code</literal> 属性を使用ã—ã¦ãã ã•ã„。ãƒã‚°ç•¥ç§°ã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®ãƒªã‚¹ãƒˆã§æŒ‡å®šã§ãã¾ã™ã€‚ã•ã‚‰ã«ç²’度ã®ç²—ã„ç…§åˆã‚’è¡Œã„ãŸã„ã¨ãã¯ã€ <literal>category</literal> 属性を使用ã—ã¦ãã ã•ã„。次ã«ç¤ºã™ã€ãƒã‚°ã‚«ãƒ†ã‚´ãƒªãƒ¼åã®ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã®ãƒªã‚¹ãƒˆã§æŒ‡å®šã§ãã¾ã™ : <literal>CORRECTNESS</literal>, <literal>MT_CORRECTNESS</literal>, <literal>BAD_PRACTICICE</literal>, <literal>PERFORMANCE</literal>, <literal>STYLE</literal>.</para><para>åŒã˜ <literal><Bug></literal> è¦ç´ ã«ä¸Šè¨˜ã®å±žæ€§ã‚’複数指定ã—ãŸå ´åˆã¯ã€ãƒã‚°ãƒ‘ターンåã€ãƒã‚°ç•¥ç§°ã€ãƒã‚°ã‚«ãƒ†ã‚´ãƒªãƒ¼ã®ã„ãšã‚Œã‹1ã¤ã§ã‚‚該当ã™ã‚Œã°ã€ãƒã‚°ãƒ‘ターンã¯åˆè‡´ã™ã‚‹ã¨åˆ¤å®šã•ã‚Œã¾ã™ã€‚</para><para>下ä½äº’æ›æ€§ã‚’æŒãŸã›ãŸã„å ´åˆã¯ã€ <literal><Bug></literal> è¦ç´ ã®ä»£ã‚ã‚Šã« <literal><BugPattern></literal> è¦ç´ ãŠã‚ˆã³ <literal><BugCode></literal> è¦ç´ を使用ã—ã¦ãã ã•ã„。ã“れらã®è¦ç´ ã¯ãã‚Œãžã‚Œã€ <literal>name</literal> 属性ã§å€¤ã®ãƒªã‚¹ãƒˆã‚’指定ã—ã¾ã™ã€‚ã“れらã®è¦ç´ ã¯ã€å°†æ¥ã‚µãƒãƒ¼ãƒˆã•ã‚Œãªããªã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚</para></listitem> </varlistentry> <varlistentry> <term><literal><Priority></literal></term> <listitem> <para>ã“ã®è¦ç´ ã¯ã€ç‰¹å®šã®å„ªå…ˆåº¦ã‚’ã‚‚ã¤è¦å‘Šã‚’ç…§åˆã—ã¾ã™ã€‚<literal>value</literal> 属性ã«ã¯ã€æ•´æ•°å€¤ã‚’指定ã—ã¾ã™ : 1 ã¯å„ªå…ˆåº¦(高)ã€ã¾ãŸã€ 2 ã¯å„ªå…ˆåº¦(ä¸) 〠3 ã¯å„ªå…ˆåº¦(低) を示ã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal><Package></literal></term> <listitem> <para>ã“ã®è¦ç´ ã¯ã€ <literal>name</literal> 属性ã§æŒ‡å®šã—ãŸç‰¹å®šã®ãƒ‘ッケージ内ã«ã‚るクラスã«é–¢é€£ã—ãŸè¦å‘Šã‚’ç…§åˆã—ã¾ã™ã€‚入れåã®ãƒ‘ッケージã¯å«ã¾ã‚Œã¾ã›ã‚“ (Java import æ–‡ã«å¾“ã£ã¦ã„ã¾ã™) 。ã—ã‹ã—ãªãŒã‚‰ã€æ£è¦è¡¨ç¾ã‚’使ã†ã¨è¤‡æ•°ãƒ‘ッケージã«ãƒžãƒƒãƒã•ã›ã‚‹ã“ã¨ã¯ç°¡å˜ã«ã§ãã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><literal><Class></literal></term> <listitem> <para>ã“ã®è¦ç´ ã¯ã€ç‰¹å®šã®ã‚¯ãƒ©ã‚¹ã«é–¢é€£ã—ãŸè¦å‘Šã‚’ç…§åˆã—ã¾ã™ã€‚<literal>name</literal> 属性を使用ã—ã¦ã€ç…§åˆã™ã‚‹ã‚¯ãƒ©ã‚¹åをクラスåãã®ã‚‚ã®ã‹ã€ã¾ãŸã¯ã€æ£è¦è¡¨ç¾ã§æŒ‡å®šã—ã¾ã™ã€‚</para> <para>下ä½äº’æ›æ€§ã‚’æŒãŸã›ãŸã„å ´åˆã¯ã€ã“ã®è¦ç´ ã®ä»£ã‚ã‚Šã« <literal>Match</literal> è¦ç´ を使用ã—ã¦ãã ã•ã„。クラスåãã®ã‚‚ã®ã®æŒ‡å®šã¯ <literal>class</literal> 属性をã€ã‚¯ãƒ©ã‚¹åã‚’æ£è¦è¡¨ç¾ã§æŒ‡å®šã™ã‚‹å ´åˆã¯ <literal>classregex</literal> 属性をãã‚Œãžã‚Œä½¿ç”¨ã—ã¦ãã ã•ã„</para> <para>ã‚‚ã— <literal>Match</literal> è¦ç´ ã« <literal>Class</literal> è¦ç´ ãŒç„¡ã‹ã£ãŸã‚Šã€ <literal>class</literal> / <literal>classregex</literal> 属性ãŒç„¡ã‹ã£ãŸã‚Šã—ãŸå ´åˆã¯ã€ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¹ã«é©ç”¨ã•ã‚Œã¾ã™ã€‚ãã®å ´åˆã€æƒ³å®šå¤–ã«å¤šãã®ãƒã‚°æ¤œç´¢çµæžœãŒä¸€è‡´ã—ã¦ã—ã¾ã†ã“ã¨ãŒã‚ã‚Šå¾—ã¾ã™ã€‚ãã®å ´åˆã¯ã€é©å½“ãªãƒ¡ã‚½ãƒƒãƒ‰ã‚„フィールドã§çµžã‚Šè¾¼ã‚“ã§ãã ã•ã„。</para> </listitem> </varlistentry> <varlistentry> <term><literal><Method></literal></term> <listitem><para>ã“ã®è¦ç´ ã¯ã€ãƒ¡ã‚½ãƒƒãƒ‰ã‚’指定ã—ã¾ã™ã€‚<literal>name</literal> 属性を使用ã—ã¦ã€ç…§åˆã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰åをメソッドåãã®ã‚‚ã®ã‹ã€ã¾ãŸã¯ã€æ£è¦è¡¨ç¾ã§æŒ‡å®šã—ã¾ã™ã€‚<literal>params</literal> 属性ã«ã¯ã€ã‚³ãƒ³ãƒžåŒºåˆ‡ã‚Šã§ãƒ¡ã‚½ãƒƒãƒ‰å¼•æ•°ã®åž‹ã®ãƒªã‚¹ãƒˆã‚’指定ã—ã¾ã™ã€‚<literal>returns</literal> 属性ã«ã¯ãƒ¡ã‚½ãƒƒãƒ‰ã®æˆ»ã‚Šå€¤ã®åž‹ã‚’指定ã—ã¾ã™ã€‚<literal>params</literal> ãŠã‚ˆã³ <literal>returns</literal> ã«ãŠã„ã¦ã¯ã€ã‚¯ãƒ©ã‚¹åã¯å®Œå…¨ä¿®é£¾åã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚(例ãˆã°ã€å˜ã« "String" ã§ã¯ãªã "java.lang.String" ã¨ã—ã¦ãã ã•ã„。) <literal>params</literal> <literal>returns</literal> ã®ã©ã¡ã‚‰ã‹ä¸€æ–¹ã‚’指定ã—ãŸå ´åˆã¯ã€ã‚‚ã†ä¸€æ–¹ã®å±žæ€§ã®æŒ‡å®šã‚‚å¿…é ˆã§ã™ã€‚ãªãœãªã‚‰ã°ã€ãƒ¡ã‚½ãƒƒãƒ‰ã‚·ã‚°ãƒ‹ãƒãƒ£ãƒ¼ã‚’構築ã®ãŸã‚ã«å¿…è¦ã ã‹ã‚‰ã§ã™ã€‚<literal>name</literal> 属性ã€<literal>params</literal> 属性 ãŠã‚ˆã³ <literal>returns</literal> 属性ã¾ãŸã¯ 3 ã¤ã® 属性ã™ã¹ã¦ã€ã®ã©ã‚Œã‹ã‚’æ¡ä»¶ã¨ã™ã‚‹ã“ã¨ã§ãã‚‹ã“ã¨ã‚’æ„味ã—ã¦ã„ã¾ã™ã€‚ã“ã®ã‚ˆã†ã«ã€åå‰ã¨ã‚·ã‚°ãƒ‹ãƒãƒ£ãƒ¼ã«åŸºã¥ã様々ãªç¨®é¡žã®æ¡ä»¶ã‚’è¦å®šã§ãã¾ã™ã€‚</para></listitem> </varlistentry> <varlistentry> <term><literal><Field></literal></term> <listitem><para>ã“ã®è¦ç´ ã¯ã€ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’指定ã—ã¾ã™ã€‚<literal>name</literal> 属性を使用ã—ã¦ã€ç…§åˆã™ã‚‹ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰åをフィールドåãã®ã‚‚ã®ã‹ã€ã¾ãŸã¯ã€æ£è¦è¡¨ç¾ã§æŒ‡å®šã—ã¾ã™ã€‚ã¾ãŸã€ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®ã‚·ã‚°ãƒ‹ãƒãƒ£ãƒ¼ã«ç…§ã‚‰ã—ãŸãƒ•ã‚£ãƒ«ã‚¿ãƒªãƒ³ã‚°ã‚’ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ <literal>type</literal> 属性を使用ã—ã¦ã€ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®åž‹ã‚’完全修飾åã§æŒ‡å®šã—ã¦ãã ã•ã„。åå‰ã¨ã‚·ã‚°ãƒ‹ãƒãƒ£ãƒ¼ã«åŸºã¥ãæ¡ä»¶ã‚’è¦å®šã™ã‚‹ãŸã‚ã«ã€ãã®2ã¤ã®å±žæ€§ã‚’両方ã¨ã‚‚指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para></listitem> </varlistentry> <varlistentry> <term><literal><Local></literal></term> <listitem><para>ã“ã®è¦ç´ ã¯ã€ãƒãƒ¼ã‚«ãƒ«å¤‰æ•°ã‚’指定ã—ã¾ã™ã€‚<literal>name</literal> 属性を使用ã—ã¦ã€ç…§åˆã™ã‚‹ãƒãƒ¼ã‚«ãƒ«å¤‰æ•°åã‚’ãƒãƒ¼ã‚«ãƒ«å¤‰æ•°åãã®ã‚‚ã®ã‹ã€ã¾ãŸã¯ã€æ£è¦è¡¨ç¾ã§æŒ‡å®šã—ã¾ã™ã€‚ãƒãƒ¼ã‚«ãƒ«å¤‰æ•°ã¨ã¯ã€ãƒ¡ã‚½ãƒƒãƒ‰å†…ã§å®šç¾©ã—ãŸå¤‰æ•°ã§ã™ã€‚</para></listitem> </varlistentry> <varlistentry> <term><literal><Or></literal></term> <listitem><para>ã“ã®è¦ç´ ã¯ã€è«–ç†å’Œã¨ã—㦠<literal>Match</literal> æ¡é …ã‚’çµåˆã—ã¾ã™ã€‚ã™ãªã‚ã¡ã€2ã¤ã® <literal>Method</literal> è¦ç´ ã‚’ <literal>Or</literal> æ¡é …ã«å…¥ã‚Œã‚‹ã“ã¨ã§ã€ã©ã¡ã‚‰ã‹ä¸€æ–¹ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ãƒžãƒƒãƒã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para></listitem> </varlistentry> </variablelist> </sect1> <sect1> <title>Java è¦ç´ åマッãƒãƒ³ã‚°</title> <para><literal>Class</literal> 〠<literal>Method</literal> ã¾ãŸã¯ <literal>Field</literal> ã® <literal>name</literal> 属性ãŒæ–‡å— ~ ã§å§‹ã¾ã£ã¦ã„ã‚‹å ´åˆã¯ã€å±žæ€§å€¤ã®æ®‹ã‚Šã®éƒ¨åˆ†ã‚’ Java ã®æ£è¦è¡¨ç¾ã¨ã—ã¦è§£é‡ˆã—ã¾ã™ã€‚ãã†ã—ã¦ã€å½“該 Java è¦ç´ ã®åå‰ã«å¯¾ã—ã¦ã®ç…§åˆãŒè¡Œã‚ã‚Œã¾ã™ã€‚</para> <para>パターンã®ç…§åˆã¯è¦ç´ ã®åå‰å…¨ä½“ã«å¯¾ã—ã¦è¡Œã‚れるã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。ãã®ãŸã‚ã€éƒ¨åˆ†ä¸€è‡´ç…§åˆã‚’è¡Œã„ãŸã„å ´åˆã¯ãƒ‘ターン文å—列ã®å‰å¾Œã« .* ã‚’ä»˜åŠ ã—ã¦ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚</para> <para>パターンã®æ§‹æ–‡è¦å‰‡ã«é–¢ã—ã¦ã¯ã€ <ulink url="http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/regex/Pattern.html"><literal>java.util.regex.Pattern</literal></ulink> ã®ãƒ‰ã‚ュメントをå‚ç…§ã—ã¦ãã ã•ã„。</para> </sect1> <sect1> <title>ç•™æ„äº‹é …</title> <para> <literal>Match</literal> æ¡é …ã¯ã€ãƒã‚°æ¤œç´¢çµæžœã«å®Ÿéš›ã«å«ã¾ã‚Œã¦ã„ã‚‹æƒ…å ±ã«ã®ã¿ä¸€è‡´ã—ã¾ã™ã€‚ã™ã¹ã¦ã®ãƒã‚°æ¤œç´¢çµæžœã¯ã‚¯ãƒ©ã‚¹ã‚’æŒã£ã¦ã„ã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€ä¸€èˆ¬çš„ã«è¨€ã£ã¦ã€ãƒã‚°ã‚’除外ã™ã‚‹ãŸã‚ã«ã¯ã‚¯ãƒ©ã‚¹ã‚’用ã„ã¦è¡Œã†ã¨ã†ã¾ãã„ãã“ã¨ãŒå¤šã„ã§ã™ã€‚</para> <para>ãƒã‚°æ¤œç´¢çµæžœã®ä¸ã«ã¯ã€2個以上ã®ã‚¯ãƒ©ã‚¹ã‚’ä¿æŒã—ã¦ã„ã‚‹ã‚‚ã®ã‚‚ã‚ã‚Šã¾ã™ã€‚例ãˆã°ã€ DE (dropped exception : 例外ã®ç„¡è¦–) ãƒã‚°ã¯ã€ 例外ã®ç„¡è¦–ãŒç™ºç”Ÿã—ãŸãƒ¡ã‚½ãƒƒãƒ‰ã‚’æŒã£ã¦ã„るクラスã¨ã€ 無視ã•ã‚ŒãŸä¾‹å¤–ã®åž‹ã‚’表ã™ã‚¯ãƒ©ã‚¹ã®ä¸¡æ–¹ã‚’å«ã‚“ã å½¢ã§å ±å‘Šã•ã‚Œã¾ã™ã€‚<literal>Match</literal> æ¡é …ã¨ã¯ã€ <emphasis>1番目</emphasis> (主) ã®ã‚¯ãƒ©ã‚¹ã®ã¿ãŒç…§åˆã•ã‚Œã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€ä¾‹ãˆã°ã€ã‚¯ãƒ©ã‚¹ "com.foobar.A" 〠"com.foobar.B" é–“ã§ã® IC (initialization circularity : åˆæœŸåŒ–時ã®å‡¦ç†å¾ªç’°) ãƒã‚°å ±å‘Šã‚’抑æ¢ã—ãŸã„å ´åˆã€ä»¥ä¸‹ã«ç¤ºã™ã‚ˆã†ã« 2ã¤ã® <literal>Match</literal> æ¡é …を使用ã—ã¾ã™ :<programlisting> <Match> <Class name="com.foobar.A" /> <Bug code="IC" /> </Match> <Match> <Class name="com.foobar.B" /> <Bug code="IC" /> </Match> </programlisting>明示的ã«ä¸¡æ–¹ã®ã‚¯ãƒ©ã‚¹ã§ç…§åˆã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ã€å¾ªç’°ã—ã¦ã„ã‚‹ã©ã¡ã‚‰ã®ã‚¯ãƒ©ã‚¹ãŒãƒã‚°æ¤œç´¢çµæžœã® 1 番目ã«ãªã£ã¦ã„ã‚‹ã‹ã«é–¢ä¿‚ãªã一致ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚(ã‚‚ã¡ã‚ã‚“ã“ã®æ–¹æ³•ã¯ã€å‡¦ç†å¾ªç’°ãŒ "com.foobar.A" 〠"com.foobar.B" ã«åŠ ãˆã¦3番目ã®ã‚¯ãƒ©ã‚¹ã‚‚å«ã‚“ã§ã„ã‚‹å ´åˆã¯å›³ã‚‰ãšã‚‚失敗ã—ã¦ã—ã¾ã†æã‚ŒãŒã‚ã‚Šã¾ã™ã€‚)</para> <para>多ãã®ç¨®é¡žã®ãƒã‚°å ±å‘Šã¯ã€è‡ªèº«ãŒå‡ºç¾ã—ãŸãƒ¡ã‚½ãƒƒãƒ‰ã‚’å ±å‘Šã—ã¾ã™ã€‚ãれらã®ãƒã‚°æ¤œç´¢çµæžœã«å¯¾ã—ã¦ã¯ã€ <literal>Method</literal> æ¡é …ã‚’ <literal>Match</literal> è¦ç´ ã«åŠ ãˆã‚‹ã¨æœŸå¾…通りã®å‹•ä½œã‚’ã™ã‚‹ã§ã—ょã†ã€‚</para> </sect1> <sect1> <title>例</title> <para>1. 特定ã®ã‚¯ãƒ©ã‚¹ã«å¯¾ã™ã‚‹ã™ã¹ã¦ã®ãƒã‚°å ±å‘Šã«ä¸€è‡´ã•ã›ã¾ã™ã€‚<programlisting> <![CDATA[ <Match> <Class name="com.foobar.MyClass" /> </Match> ]]> </programlisting> </para> <para>2. ãƒã‚°ç•¥ç§°ã‚’指定ã—ã¦ã€ç‰¹å®šã®ã‚¯ãƒ©ã‚¹ã«å¯¾ã™ã‚‹ç‰¹å®šã®æ¤œæŸ»é …ç›®ã«ä¸€è‡´ã•ã›ã¾ã™ã€‚<programlisting> <![CDATA[ <Match> <Class name="com.foobar.MyClass"/ > <Bug code="DE,UrF,SIC" /> </Match> ]]> </programlisting> </para> <para>3. ãƒã‚°ç•¥ç§°ã‚’指定ã—ã¦ã€ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¹ã«å¯¾ã™ã‚‹ç‰¹å®šã®æ¤œæŸ»é …ç›®ã«ä¸€è‡´ã•ã›ã¾ã™ã€‚<programlisting> <![CDATA[ <Match> <Bug code="DE,UrF,SIC" /> </Match> ]]> </programlisting> </para> <para>4. ãƒã‚°ã‚«ãƒ†ã‚´ãƒªãƒ¼ã‚’指定ã—ã¦ã€ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¹ã«å¯¾ã™ã‚‹ç‰¹å®šã®æ¤œæŸ»é …ç›®ã«ä¸€è‡´ã•ã›ã¾ã™ã€‚<programlisting> <![CDATA[ <Match> <Bug category="PERFORMANCE" /> </Match> ]]> </programlisting> </para> <para>5. ãƒã‚°ç•¥ç§°ã‚’指定ã—ã¦ã€ç‰¹å®šã®ã‚¯ãƒ©ã‚¹ã®æŒ‡å®šã•ã‚ŒãŸãƒ¡ã‚½ãƒƒãƒ‰ã«å¯¾ã™ã‚‹ç‰¹å®šã®ãƒã‚°ç¨®åˆ¥ã«ä¸€è‡´ã•ã›ã¾ã™ã€‚<programlisting> <![CDATA[ <Match> <Class name="com.foobar.MyClass" /> <Or> <Method name="frob" params="int,java.lang.String" returns="void" /> <Method name="blat" params="" returns="boolean" /> </Or> <Bug code="DC" /> </Match> ]]> </programlisting> </para> <para>6. 特定ã®ãƒ¡ã‚½ãƒƒãƒ‰ã«å¯¾ã™ã‚‹ç‰¹å®šã®ãƒã‚°ãƒ‘ターンã«ä¸€è‡´ã•ã›ã¾ã™ã€‚<programlisting> <![CDATA[ <!-- open stream ã«é–¢ã™ã‚‹èª¤æ¤œå‡ºãŒã‚るメソッド。--> <Match> <Class name="com.foobar.MyClass" /> <Method name="writeDataToFile" /> <Bug pattern="OS_OPEN_STREAM" /> </Match> ]]> </programlisting> </para> <para>7. 特定ã®ãƒ¡ã‚½ãƒƒãƒ‰ã«å¯¾ã™ã‚‹ç‰¹å®šã®å„ªå…ˆåº¦ã‚’付与ã•ã‚ŒãŸç‰¹å®šã®ãƒã‚°ãƒ‘ターンã«ä¸€è‡´ã•ã›ã¾ã™ã€‚<programlisting> <![CDATA[ <!-- dead local store (優先度 (ä¸)) ã«é–¢ã™ã‚‹èª¤æ¤œå‡ºãŒã‚るメソッド。--> <Match> <Class name="com.foobar.MyClass" /> <Method name="someMethod" /> <Bug pattern="DLS_DEAD_LOCAL_STORE" /> <Priority value="2" /> </Match> ]]> </programlisting> </para> <para>8. AspectJ コンパイラーã«ã‚ˆã£ã¦å¼•ãèµ·ã“ã•ã‚Œã‚‹ãƒžã‚¤ãƒŠãƒ¼ãƒã‚°ã«ä¸€è‡´ã•ã›ã¾ã™ (AspectJ ã®é–‹ç™ºè€…ã§ã‚‚ãªã„é™ã‚Šã€ãれらã®ãƒã‚°ã«é–¢å¿ƒã‚’æŒã¤ã“ã¨ã¯ãªã„ã¨è€ƒãˆã¾ã™)。<programlisting> <![CDATA[ <Match> <Class name="~.*\$AjcClosure\d+" /> <Bug pattern="DLS_DEAD_LOCAL_STORE" /> <Method name="run" /> </Match> <Match> <Bug pattern="UUF_UNUSED_FIELD" /> <Field name="~ajc\$.*" /> </Match> ]]> </programlisting> </para> <para>9. 基盤コードã®ç‰¹å®šã®éƒ¨åˆ†ã«å¯¾ã™ã‚‹ãƒã‚°ã«ä¸€è‡´ã•ã›ã¾ã™<programlisting> <![CDATA[ <!-- ã™ã¹ã¦ã®ãƒ‘ッケージã«ã‚ã‚‹ Messages クラスã«å¯¾ã™ã‚‹ unused fields è¦å‘Šã«ä¸€è‡´ã€‚ --> <Match> <Class name="~.*\.Messages" /> <Bug code="UUF" /> </Match> <!-- ã™ã¹ã¦ã® internal パッケージ内㮠mutable statics è¦å‘Šã«ä¸€è‡´ã€‚ --> <Match> <Package name="~.*\.internal" /> <Bug code="MS" /> </Match> <!-- ui パッケージ階層内㮠anonymoous inner classes è¦å‘Šã«ä¸€è‡´ã€‚ --> <Match> <Package name="~com\.foobar\.fooproject\.ui.*" /> <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_ANON" /> </Match> ]]> </programlisting> </para> <para>10. 特定ã®ã‚·ã‚°ãƒ‹ãƒãƒ£ãƒ¼ã‚’æŒã¤ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¾ãŸã¯ãƒ¡ã‚½ãƒƒãƒ‰ã®ãƒã‚°ã«ä¸€è‡´ã•ã›ã¾ã™ã€‚<programlisting> <![CDATA[ <!-- ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¹ã® main(String[]) メソッドã«å¯¾ã™ã‚‹ System.exit(...) usage è¦å‘Šã«ä¸€è‡´ã€‚ --> <Match> <Method returns="void" name="main" params="java.lang.String[]" /> <Method pattern="DM_EXIT" /> </Match> <!-- ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¹ã® com.foobar.DebugInfo åž‹ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã«å¯¾ã™ã‚‹ UuF è¦å‘Šã«ä¸€è‡´ã€‚ --> <Match> <Field type="com.foobar.DebugInfo" /> <Bug code="UuF" /> </Match> ]]> </programlisting> </para> </sect1> <sect1> <title>完全ãªä¾‹</title> <programlisting> <![CDATA[ <FindBugsFilter> <Match> <Class name="com.foobar.ClassNotToBeAnalyzed" /> </Match> <Match> <Class name="com.foobar.ClassWithSomeBugsMatched" /> <Bug code="DE,UrF,SIC" /> </Match> <!-- XYZ é•åã«ä¸€è‡´ã€‚--> <Match> <Bug code="XYZ" /> </Match> <!-- "AnotherClass" ã®ç‰¹å®šã®ãƒ¡ã‚½ãƒƒãƒ‰ã® doublecheck é•åã«ä¸€è‡´ã€‚--> <Match> <Class name="com.foobar.AnotherClass" /> <Or> <Method name="nonOverloadedMethod" /> <Method name="frob" params="int,java.lang.String" returns="void" /> <Method name="blat" params="" returns="boolean" /> </Or> <Bug code="DC" /> </Match> <!-- dead local store (優先度 (ä¸)) ã«é–¢ã™ã‚‹èª¤æ¤œå‡ºãŒã‚るメソッド。--> <Match> <Class name="com.foobar.MyClass" /> <Method name="someMethod" /> <Bug pattern="DLS_DEAD_LOCAL_STORE" /> <Priority value="2" /> </Match> </FindBugsFilter> ]]> </programlisting> </sect1> </chapter> <!-- ************************************************************************** Analysis properties ************************************************************************** --> <chapter id="analysisprops"> <title>分æžãƒ—ãƒãƒ‘ティー</title> <para>&FindBugs; ã¯åˆ†æžã™ã‚‹å ´åˆã«ã„ãã¤ã‹ã®è¦³ç‚¹ã‚’æŒã£ã¦ã„ã¾ã™ã€‚ãã—ã¦ã€è¦³ç‚¹ã‚’カスタマイズã—ã¦å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚システムプãƒãƒ‘ティーを使ã£ã¦ã€ãれらã®ã‚ªãƒ—ションをè¨å®šã—ã¾ã™ã€‚ã“ã®ç« ã§ã¯ã€åˆ†æžã‚ªãƒ—ションã®è¨å®šæ–¹æ³•ã‚’説明ã—ã¾ã™ã€‚</para> <para>分æžã‚ªãƒ—ションã®ä¸»ãªç›®çš„ã¯ã€ 2 ã¤ã‚ã‚Šã¾ã™ã€‚1 番目ã¯ã€ &FindBugs; ã«å¯¾ã—ã¦åˆ†æžã•ã‚Œã‚‹ã‚¢ãƒ—リケーションã®ãƒ¡ã‚½ãƒƒãƒ‰ã®æ„味をä¼ãˆã‚‹ã“ã¨ã§ã™ã€‚ãã†ã™ã‚‹ã“ã¨ã§ &FindBugs; ãŒã‚ˆã‚Šæ£ç¢ºãªçµæžœã‚’出ã™ã“ã¨ãŒã§ãã€èª¤æ¤œå‡ºã‚’減らã™ã“ã¨ãŒã§ãã¾ã™ã€‚2 番目ã«ã€åˆ†æžã‚’è¡Œã†ã«å½“ãŸã‚Šãã®ç²¾åº¦ã‚’è¨å®šã§ãるよã†ã«ã™ã‚‹ã“ã¨ã§ã™ã€‚分æžã®ç²¾åº¦ã‚’è½ã¨ã™ã“ã¨ã§ã€ãƒ¡ãƒ¢ãƒªä½¿ç”¨é‡ã¨åˆ†æžæ™‚間を減らã™ã“ã¨ãŒã§ãã¾ã™ã€‚ãŸã ã—ã€æœ¬å½“ã®ãƒã‚°ã‚’見逃ã—ãŸã‚Šã€èª¤æ¤œå‡ºã®æ•°ãŒå¢—ãˆã‚‹ã¨ã„ã†ä»£å„ŸãŒã‚ã‚Šã¾ã™ã€‚</para> <para>コマンドラインオプション <command>-property</command> を使ã£ã¦ã€åˆ†æžã‚ªãƒ—ションをè¨å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚次ã«ã€ä¾‹ã‚’示ã—ã¾ã™:<screen> <prompt>$ </prompt><command>findbugs -textui -property "cfg.noprune=true" <replaceable>myApp.jar</replaceable></command> </screen> </para> <para>è¨å®šã™ã‚‹ã“ã¨ãŒã§ãる分æžã‚ªãƒ—ションã®ä¸€è¦§ã‚’ <xref linkend="analysisproptable"/> ã«ç¤ºã—ã¾ã™ã€‚</para> <table id="analysisproptable"> <title>è¨å®šå¯èƒ½ãªåˆ†æžãƒ—ãƒãƒ‘ティー</title> <tgroup cols="3" align="left"> <thead> <row> <entry>プãƒãƒ‘ティーå</entry> <entry>è¨å®šå€¤</entry> <entry>目的</entry> </row> </thead> <tbody> <!-- <row> <entry>cfg.noprune</entry> <entry>true or false</entry> <entry>If true, infeasible exception edges are not pruned from the control flow graphs of analyzed methods. This option increases the speed of the analysis (by about 20%-30%), but causes some detectors to produce more false warnings.</entry> </row> --> <row> <entry>findbugs.assertionmethods</entry> <entry>コンマ区切りã®å®Œå…¨ä¿®é£¾ãƒ¡ã‚½ãƒƒãƒ‰åリスト : 例〠"com.foo.MyClass.checkAssertion"</entry> <entry>ã“ã®ãƒ—ãƒãƒ‘ティーã«ã¯ã€ãƒ—ãƒã‚°ãƒ©ãƒ ãŒæ£ã—ã„ã“ã¨ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ãŸã‚ã«ä½¿ã‚れるメソッドを指定ã—ã¾ã™ã€‚ã“れらã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’指定ã™ã‚‹ã“ã¨ã§ã€ ãƒã‚§ãƒƒã‚¯ãƒ¡ã‚½ãƒƒãƒ‰ã§ç¢ºèªã—ãŸå€¤ã«å¯¾ã™ã‚‹ null å‚照アクセスディテクタã®èª¤æ¤œå‡ºã‚’回é¿ã§ãã¾ã™ã€‚</entry> </row> <row> <entry>findbugs.de.comment</entry> <entry>true ã¾ãŸã¯ false</entry> <entry>true ã«è¨å®šã™ã‚‹ã¨ã€ DroppedException (無視ã•ã‚ŒãŸä¾‹å¤–) ディテクタã¯ç©ºã® catch ブãƒãƒƒã‚¯ ã«ã‚³ãƒ¡ãƒ³ãƒˆãŒç„¡ã„ã‹æŽ¢ã—ã¾ã™ã€‚ãã—ã¦ã€ã‚³ãƒ¡ãƒ³ãƒˆãŒã¿ã¤ã‹ã£ãŸå ´åˆã«ã¯è¦å‘ŠãŒå ±å‘Šã•ã‚Œã¾ã›ã‚“。</entry> </row> <row> <entry>findbugs.maskedfields.locals</entry> <entry>true ã¾ãŸã¯ false</entry> <entry>true ã«è¨å®šã™ã‚‹ã¨ã€ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’éš è”½ã—ã¦ã„ã‚‹ãƒãƒ¼ã‚«ãƒ«å¤‰æ•°ã«å¯¾ã—ã¦å„ªå…ˆåº¦(低)ã®è¦å‘ŠãŒç™ºè¡Œã•ã‚Œã¾ã™ã€‚デフォルトã¯ã€ false ã§ã™ã€‚</entry> </row> <row> <entry>findbugs.nullderef.assumensp</entry> <entry>true ã¾ãŸã¯ false</entry> <entry>使用ã•ã‚Œã¾ã›ã‚“。 (æ„図 : true ã«è¨å®šã™ã‚‹ã¨ã€null å‚照アクセスディテクタã¯ãƒ¡ã‚½ãƒƒãƒ‰ã‹ã‚‰ã®æˆ»ã‚Šå€¤ã€ã¾ãŸã¯ã€ãƒ¡ã‚½ãƒƒãƒ‰ã«å—ã‘渡ã•ã‚Œã‚‹å¼•æ•°ã‚’ null ã§ã‚ã‚‹ã¨ä»®å®šã—ã¾ã™ã€‚デフォルトã¯ã€ false ã§ã™ã€‚ã“ã®ãƒ—ãƒãƒ‘ティーを有効ã«ã™ã‚‹ã¨ã€å¤§é‡ã®èª¤æ¤œå‡ºãŒç”Ÿæˆã•ã‚Œã‚‹ã§ã‚ã‚ã†ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。)</entry> </row> <row> <entry>findbugs.refcomp.reportAll</entry> <entry>true ã¾ãŸã¯ false</entry> <entry>true ã«è¨å®šã™ã‚‹ã¨ã€ == ãŠã‚ˆã³ != 演算åを使ã£ã¦ã„ã‚‹ç–‘ã‚ã—ã„å‚照比較ãŒã™ã¹ã¦å ±å‘Šã•ã‚Œã¾ã™ã€‚ false ã«è¨å®šã™ã‚‹ã¨ã€åŒæ§˜ã®è¦å‘Šã¯ 1 メソッドã«ã¤ã 1 ã¤ã—ã‹ç™ºè¡Œã•ã‚Œã¾ã›ã‚“。デフォルトã¯ã€ false ã§ã™ã€‚</entry> </row> <row> <entry>findbugs.sf.comment</entry> <entry>true ã¾ãŸã¯ false</entry> <entry>true ã«è¨å®šã™ã‚‹ã¨ã€ SwitchFallthrough ディテクタã¯ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã«ã€Œfallã€ã¾ãŸã¯ã€Œnobreakã€ã¨ã„ã†å˜èªžã‚’å«ã‚“ã コメントを記載ã—ã¦ã„ãªã„ caseラベル ã«é™ã‚Šè¦å‘Šã‚’å ±å‘Šã—ã¾ã™ã€‚(ã“ã®æ©Ÿèƒ½ãŒæ£ã—ã動作ã™ã‚‹ãŸã‚ã«ã¯ã€æ£ç¢ºãªã‚½ãƒ¼ã‚¹ãƒ‘スãŒå¿…è¦ã§ã™ã€‚) ã“ã‚Œã«ã‚ˆã‚Šã€æ„図的ã§ã¯ãªã„ switch 文㮠fallthrough を発見ã—易ããªã‚Šã¾ã™ã€‚</entry> </row> <!-- see others at src/doc/manual/sysprops.html <row> <entry></entry> <entry></entry> <entry></entry> </row> --> </tbody> </tgroup> </table> </chapter> <!-- ************************************************************************** Annotations *************************************************************************** --> <chapter id="annotations"> <title>アノテーション</title> <para>&FindBugs; ã¯ã„ãã¤ã‹ã®ã‚¢ãƒŽãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚開発者ã®æ„図を明確ã«ã™ã‚‹ã“ã¨ã§ã€ FindBugs ã¯ã‚ˆã‚Šçš„確ã«è¦å‘Šã‚’発行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚アノテーションを使用ã™ã‚‹ãŸã‚ã«ã¯ Java 5 ãŒå¿…è¦ã§ã‚り〠annotations.jar ãŠã‚ˆã³ jsr305.jar ファイルをコンパイル時ã®ã‚¯ãƒ©ã‚¹ãƒ‘スã«å«ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚</para> <variablelist> <varlistentry> <term><command>edu.umd.cs.findbugs.annotations.CheckForNull</command></term> <listitem> <command>[Target]</command> Field, Method, Parameter </listitem> <listitem> <para>アノテーションをã¤ã‘ãŸè¦ç´ ã¯ã€ null ã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€å½“該è¦ç´ を使用ã™ã‚‹éš›ã¯ null ãƒã‚§ãƒƒã‚¯ã‚’ã™ã‚‹ã¹ãã§ã™ã€‚ã“ã®ã‚¢ãƒŽãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‚’メソッドã«é©ç”¨ã™ã‚‹ã¨ã€ãƒ¡ã‚½ãƒƒãƒ‰ã®æˆ»ã‚Šå€¤ã«é©ç”¨ã•ã‚Œã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>edu.umd.cs.findbugs.annotations.CheckReturnValue</command></term> <listitem> <command>[Target]</command> Method, Constructor </listitem> <listitem> <variablelist> <varlistentry> <term><command>[Parameter]</command></term> <listitem> <para> <command>priority:</command> è¦å‘Šã®å„ªå…ˆåº¦ã‚’指定ã—ã¾ã™ (HIGH, MEDIUM, LOW, IGNORE) 。デフォルト値 :MEDIUM。</para> </listitem> <listitem> <para> <command>explanation:</command>戻り値をãƒã‚§ãƒƒã‚¯ã—ãªã‘ã°ãªã‚‰ãªã„ç†ç”±ã‚’テã‚ストã§èª¬æ˜Žã—ã¾ã™ã€‚デフォルト値 :""。</para> </listitem> </varlistentry> </variablelist> </listitem> <listitem> <para>ã“ã®ã‚¢ãƒŽãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‚’使用ã—ã¦ã€å‘¼å‡ºã—後ã«æˆ»ã‚Šå€¤ã‚’ãƒã‚§ãƒƒã‚¯ã™ã¹ãメソッドを表ã™ã“ã¨ãŒã§ãã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>edu.umd.cs.findbugs.annotations.DefaultAnnotation</command></term> <listitem> <command>[Target]</command> Type, Package </listitem> <listitem> <variablelist> <varlistentry> <term><command>[Parameter]</command></term> <listitem> <para> <command>value:</command>アノテーションクラスã®classオブジェクト。複数ã®ã‚¯ãƒ©ã‚¹ã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> </listitem> <listitem> <para> <command>priority:</command>çœç•¥æ™‚ã®å„ªå…ˆåº¦ã‚’指定ã—ã¾ã™ (HIGH, MEDIUM, LOW, IGNORE) 。デフォルト値 :MEDIUM。</para> </listitem> </varlistentry> </variablelist> </listitem> <listitem> <para> Indicates that all members of the class or package should be annotated with the default value of the supplied annotation classes. This would be used for behavior annotations such as @NonNull, @CheckForNull, or @CheckReturnValue. In particular, you can use @DefaultAnnotation(NonNull.class) on a class or package, and then use @Nullable only on those parameters, methods or fields that you want to allow to be null. </para> </listitem> </varlistentry> <varlistentry> <term><command>edu.umd.cs.findbugs.annotations.DefaultAnnotationForFields</command></term> <listitem> <command>[Target]</command> Type, Package </listitem> <listitem> <variablelist> <varlistentry> <term><command>[Parameter]</command></term> <listitem> <para> <command>value:</command>アノテーションクラスã®classオブジェクト。複数ã®ã‚¯ãƒ©ã‚¹ã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> </listitem> <listitem> <para> <command>priority:</command>çœç•¥æ™‚ã®å„ªå…ˆåº¦ã‚’指定ã—ã¾ã™ (HIGH, MEDIUM, LOW, IGNORE) 。デフォルト値 :MEDIUM。</para> </listitem> </varlistentry> </variablelist> </listitem> <listitem> <para> This is same as the DefaultAnnotation except it only applys to fields. </para> </listitem> </varlistentry> <varlistentry> <term><command>edu.umd.cs.findbugs.annotations.DefaultAnnotationForMethods</command></term> <listitem> <command>[Target]</command> Type, Package </listitem> <listitem> <variablelist> <varlistentry> <term><command>[Parameter]</command></term> <listitem> <para> <command>value:</command>アノテーションクラスã®classオブジェクト。複数ã®ã‚¯ãƒ©ã‚¹ã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> </listitem> <listitem> <para> <command>priority:</command>çœç•¥æ™‚ã®å„ªå…ˆåº¦ã‚’指定ã—ã¾ã™ (HIGH, MEDIUM, LOW, IGNORE) 。デフォルト値 :MEDIUM。</para> </listitem> </varlistentry> </variablelist> </listitem> <listitem> <para> This is same as the DefaultAnnotation except it only applys to methods. </para> </listitem> </varlistentry> <varlistentry> <term><command>edu.umd.cs.findbugs.annotations.DefaultAnnotationForParameters</command></term> <listitem> <command>[Target]</command> Type, Package </listitem> <listitem> <variablelist> <varlistentry> <term><command>[Parameter]</command></term> <listitem> <para> <command>value:</command>アノテーションクラスã®classオブジェクト。複数ã®ã‚¯ãƒ©ã‚¹ã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> </listitem> <listitem> <para> <command>priority:</command>çœç•¥æ™‚ã®å„ªå…ˆåº¦ã‚’指定ã—ã¾ã™ (HIGH, MEDIUM, LOW, IGNORE) 。デフォルト値 :MEDIUM。</para> </listitem> </varlistentry> </variablelist> </listitem> <listitem> <para> This is same as the DefaultAnnotation except it only applys to method parameters. </para> </listitem> </varlistentry> <varlistentry> <term><command>edu.umd.cs.findbugs.annotations.NonNull</command></term> <listitem> <command>[Target]</command> Field, Method, Parameter </listitem> <listitem> <para>アノテーションをã¤ã‘ãŸè¦ç´ ã¯ã€ null ã§ã‚ã£ã¦ã¯ã„ã‘ã¾ã›ã‚“。アノテーションをã¤ã‘ãŸãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯ã€æ§‹ç¯‰å®Œäº†å¾Œ null ã§ã‚ã£ã¦ã¯ã„ã‘ã¾ã›ã‚“。アノテーションをã¤ã‘ãŸãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ null ã§ã¯ãªã„値を戻り値ã¨ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。</para> </listitem> </varlistentry> <varlistentry> <term><command>edu.umd.cs.findbugs.annotations.Nullable</command></term> <listitem> <command>[Target]</command> Field, Method, Parameter </listitem> <listitem> <para>アノテーションをã¤ã‘ãŸè¦ç´ ã¯ã€ null ã§ã‚ã£ã¦ã¯ã„ã‘ã¾ã›ã‚“。In general, this means developers will have to read the documentation to determine when a null value is acceptable and whether it is neccessary to check for a null value. FindBugs will treat the annotated items as though they had no annotation.</para> <para> In pratice this annotation is useful only for overriding an overarching NonNull annotation. </para> </listitem> </varlistentry> <varlistentry> <term><command>edu.umd.cs.findbugs.annotations.OverrideMustInvoke</command></term> <listitem> <command>[Target]</command> Method </listitem> <listitem> <variablelist> <varlistentry> <term><command>[Parameter]</command></term> <listitem> <para> <command>value:</command>Specify when the super invocation should be performed (FIRST, ANYTIME, LAST). Default value:ANYTIME. </para> </listitem> </varlistentry> </variablelist> </listitem> <listitem> <para> Used to annotate a method that, if overridden, must (or should) be invoke super in the overriding method. Examples of such methods include finalize() and clone(). The argument to the method indicates when the super invocation should occur: at any time, at the beginning of the overriding method, or at the end of the overriding method. (This anotation is not implmemented in FindBugs as of September 8, 2006). </para> </listitem> </varlistentry> <varlistentry> <term><command>edu.umd.cs.findbugs.annotations.PossiblyNull</command></term> <listitem> <para> This annotation is deprecated. Use CheckForNull instead. </para> </listitem> </varlistentry> <varlistentry> <term><command>edu.umd.cs.findbugs.annotations.SuppressWarnings</command></term> <listitem> <command>[Target]</command> Type, Field, Method, Parameter, Constructor, Package </listitem> <listitem> <variablelist> <varlistentry> <term><command>[Parameter]</command></term> <listitem> <para> <command>value:</command>The name of the warning. More than one name can be specified. </para> </listitem> <listitem> <para> <command>justification:</command>Reason why the warning should be ignored. デフォルト値 :""。</para> </listitem> </varlistentry> </variablelist> </listitem> <listitem> <para> The set of warnings that are to be suppressed by the compiler in the annotated element. Duplicate names are permitted. The second and successive occurrences of a name are ignored. The presence of unrecognized warning names is <emphasis>not</emphasis> an error: Compilers must ignore any warning names they do not recognize. They are, however, free to emit a warning if an annotation contains an unrecognized warning name. Compiler vendors should document the warning names they support in conjunction with this annotation type. They are encouraged to cooperate to ensure that the same names work across multiple compilers. </para> </listitem> </varlistentry> <varlistentry> <term><command>edu.umd.cs.findbugs.annotations.UnknownNullness</command></term> <listitem> <command>[Target]</command> Field, Method, Parameter </listitem> <listitem> <para> Used to indicate that the nullness of the target is unknown, or my vary in unknown ways in subclasses. </para> </listitem> </varlistentry> <varlistentry> <term><command>edu.umd.cs.findbugs.annotations.UnknownNullness</command></term> <listitem> <command>[Target]</command> Field, Method, Parameter </listitem> <listitem> <para> Used to indicate that the nullness of the target is unknown, or my vary in unknown ways in subclasses. </para> </listitem> </varlistentry> </variablelist> <para>ã¾ãŸã€ &FindBugs; 次ã«ç¤ºã™ã‚¢ãƒŽãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‚‚サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚ :<itemizedlist> <listitem>net.jcip.annotations.GuardedBy</listitem> <listitem>net.jcip.annotations.Immutable</listitem> <listitem>net.jcip.annotations.NotThreadSafe</listitem> <listitem>net.jcip.annotations.ThreadSafe</listitem> </itemizedlist> </para> <para><ulink url="http://jcip.net/">Java Concurrency in Practice</ulink> ã® <ulink url="http://jcip.net/annotations/doc/index.html"> API ドã‚ュメント</ulink> ã‚’å‚ç…§ã—ã¦ãã ã•ã„。</para> </chapter> <!-- ************************************************************************** Using rejarForAnalysis ************************************************************************** --> <chapter id="rejarForAnalysis"> <title>rejarForAnalysis ã®ä½¿ç”¨æ–¹æ³•</title> <para>プãƒã‚¸ã‚§ã‚¯ãƒˆã«å¤šãã® jar ファイル ãŒã‚ã£ãŸã‚Šã€ jar ファイルãŒå¤šãã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ç‚¹åœ¨ã—ãŸã‚Šã™ã‚‹å ´åˆã¯ã€ <command>rejarForAnalysis </command> スクリプトを使用ã™ã‚‹ã¨ FindBugs ã®å®Ÿè¡ŒãŒæ¯”較的簡å˜ã«ãªã‚Šã¾ã™ã€‚ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã€æ•°å¤šã„ jar ファイルを集ã‚㦠1 ã¤ã®å¤§ã㪠jar ファイルã«çµåˆã—ã¾ã™ã€‚ãã†ã™ã‚‹ã¨ã€åˆ†æžæ™‚ã«FindBugs ã« jar ファイルをè¨å®šã™ã‚‹ã“ã¨ãŒæ¯”較的簡å˜ã«ãªã‚Šã¾ã™ã€‚ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã€ unix システム㮠'find' コマンドã¨çµ„ã¿åˆã‚ã›ã‚‹ã¨ã¨ã‚Šã‚ã‘有用ã«ãªã‚Šã¾ã™ ; 次ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚ <command>find . -name '*.jar' | xargs rejarForAnalysis </command>.</para> <para>ã¾ãŸã€ <command>rejarForAnalysis</command> スクリプトã¯å·¨å¤§ãªãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã‚’複数㮠jar ファイルã«åˆ†å‰²ã™ã‚‹ã“ã¨ã«ä½¿ç”¨ã§ãã¾ã™ã€‚プãƒã‚¸ã‚§ã‚¯ãƒˆã®ã‚¯ãƒ©ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€è¤‡æ•°ã® jar ファイルã«å‡ç‰ã«é…分ã•ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã€ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆå…¨ä½“ã«å¯¾ã—㦠FindBugs を実行ã™ã‚‹ã¨æ™‚é–“ã¨ãƒ¡ãƒ¢ãƒªæ¶ˆè²»ãŒè‘—ã—ã„å ´åˆã«æœ‰ç”¨ã§ã™ã€‚プãƒã‚¸ã‚§ã‚¯ãƒˆå…¨ä½“ã«å¯¾ã—㦠FindBugs を実行ã™ã‚‹ä»£ã‚ã‚Šã«ã€ <command> rejarForAnalysis</command> ã§ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¹ã‚’å«ã‚€å¤§ã㪠jar ファイルを構築ã—ã¾ã™ã€‚続ã„ã¦ã€ <command>rejarForAnalysis</command> ã‚’å†ã³å®Ÿè¡Œã—ã¦è¤‡æ•°ã® jar ファイルã«åˆ†å‰²ã—ã¾ã™ã€‚ãã—ã¦ã€å„々㮠jar ファイルã«å¯¾ã—ã¦é †ã« FindBugs を実行ã—ã¾ã™ã€‚ãã®éš›ã€ <command>-auxclasspath</command> ã«æœ€åˆã« 1 ã¤ã«ã¾ã¨ã‚㟠jar ファイルを指定ã—ã¦ãã ã•ã„。</para> <para><command>rejarForAnalysis</command> スクリプトã«æŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ãるオプションを以下ã«ç¤ºã—ã¾ã™ :</para> <variablelist> <varlistentry> <term><command>-maxAge</command> <replaceable>日数</replaceable></term> <listitem> <para>最後ã«æ›´æ–°ã•ã‚ŒãŸæ—¥ã‹ã‚‰ã®çµŒéŽæ™‚é–“ã‚’æ—¥å˜ä½ã§æŒ‡å®šã—ã¾ã™ (指定ã—ãŸæ—¥æ•°ã‚ˆã‚Šå¤ã„ jar ファイルã¯ç„¡è¦–ã•ã‚Œã¾ã™)。</para> </listitem> </varlistentry> <varlistentry> <term><command>-inputFileList</command> <replaceable>ファイルå</replaceable></term> <listitem> <para>jar ファイルåを記載ã—ãŸãƒ†ã‚ストファイルを指定ã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-maxClasses</command> <replaceable>クラス数</replaceable></term> <listitem> <para>analysis*.jar ファイル 1 ファイルã«å¯¾ã™ã‚‹ã‚¯ãƒ©ã‚¹ã®æœ€å¤§æ•°ã‚’指定ã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command>-prefix</command> <replaceable>プレフィックス</replaceable></term> <listitem> <para>分æžã™ã‚‹ã‚¯ãƒ©ã‚¹åã®ãƒ—レフィックスを指定ã—ã¾ã™ (例〠edu.umd.cs.) 。</para> </listitem> </varlistentry> </variablelist> </chapter> <!-- ************************************************************************** Data mining ************************************************************************** --> <chapter id="datamining"> <title>&FindBugs;™ ã«ã‚ˆã‚‹ãƒ‡ãƒ¼ã‚¿ãƒ»ãƒžã‚¤ãƒ‹ãƒ³ã‚°</title> <para>ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¸ã®é«˜æ©Ÿèƒ½ã®å•ã„åˆã‚ã›æ©Ÿèƒ½ã€ãŠã‚ˆã³ã€èª¿æŸ»å¯¾è±¡ã®ã‚³ãƒ¼ãƒ‰ã®è¤‡æ•°ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚ãŸã‚‹è¦å‘Šã®è¿½è·¡è¨˜éŒ²æ©Ÿèƒ½ã‚’〠FindBugs ã¯å†…蔵ã—ã¦ã„ã¾ã™ã€‚ã“れらを使ã£ã¦æ¬¡ã®ã‚ˆã†ãªã“ã¨ãŒã§ãã¾ã™ã€‚ã™ãªã‚ã¡ã€ã„ã¤ãƒã‚°ãŒæœ€åˆæŒã¡è¾¼ã¾ã‚ŒãŸã‹ã‚’æœã—出ã™ã“ã¨ã€æœ€çµ‚リリース以後æŒã¡è¾¼ã¾ã‚ŒãŸè¦å‘Šã®åˆ†æžã‚’è¡Œã†ã“ã¨ã€ã¾ãŸã¯ã€ç„¡é™å†èµ·ãƒ«ãƒ¼ãƒ—ã®æ•°ã‚’時間軸ã§ã‚°ãƒ©ãƒ•ã«ã™ã‚‹ã“ã¨ã§ã™ã€‚</para> <para>ã“れらã®æŠ€è¡“ã¯ã€ FindBugs ãŒè¦å‘Šã®ä¿å˜ã«ä½¿ã† XML 書å¼ã‚’使用ã—ã¾ã™ã€‚ã“れら㮠XML ファイルã¯ã€é€šå¸¸ã€ç‰¹å®šã® 1 分æžã«å¯¾ã™ã‚‹è¦å‘ŠãŒå…¥ã‚Œã‚‰ã‚Œã¦ã„ã¾ã™ã€‚ã—ã‹ã—ãれらã«ã¯ã€ä¸€é€£ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ“ルドやãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å¯¾ã™ã‚‹åˆ†æžçµæžœã‚’æ ¼ç´ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚</para> <para>ã™ã¹ã¦ã® FindBugs XML ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã¯ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³åã¨ã‚¿ã‚¤ãƒ ・スタンプ ãŒå…¥ã‚Œã‚‰ã‚Œã¦ã„ã¾ã™ã€‚FindBugs ã¯åˆ†æžãŒè¡Œã‚れるファイルã®æ›´æ–°æ™‚刻ã‹ã‚‰ã‚¿ã‚¤ãƒ ・スタンプを計算ã—ã¾ã™ (例ãˆã°ã€ã‚¿ã‚¤ãƒ ・スタンプã¯ã‚¯ãƒ©ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã®ç”Ÿæˆæ™‚刻ã«ãªã‚‹ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚分æžãŒè¡Œã‚ã‚ŒãŸæ™‚刻ã§ã¯ã‚ã‚Šã¾ã›ã‚“) 。å„々ã®ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã¯ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³åも入れられã¦ã„ã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³åã¨ã‚¿ã‚¤ãƒ ・スタンプã¯ã€ <command>setBugDatabaseInfo</command> (<xref linkend="setBugDatabaseInfo"/>) コマンドを使用ã—ã¦æ‰‹å‹•ã§è¨å®šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚</para> <para>複数ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’æ ¼ç´ã™ã‚‹ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ãŠã„ã¦ã¯ã€åˆ†æžã•ã‚Œã‚‹ã‚³ãƒ¼ãƒ‰ã®å„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã”ã¨ã«ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ç•ªå·ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚ã“れらã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ç•ªå·ã¯å˜ã« 0 ã‹ã‚‰å§‹ã¾ã‚‹é€£ç¶šã™ã‚‹æ•´æ•°å€¤ã§ã™ (例ãˆã°ã€ 4 ã¤ã®ã‚³ãƒ¼ãƒ‰ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’æ ¼ç´ã™ã‚‹ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã¯ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 0~3 ãŒå…¥ã‚Œã‚‰ã‚Œã¾ã™) 。ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã¯ã¾ãŸã€å„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®åå‰ã¨ã‚¿ã‚¤ãƒ ・スタンプãŒãã‚Œãžã‚Œè¨˜éŒ²ã•ã‚Œã¾ã™ã€‚<command>filterBugs</command> コマンドを使用ã™ã‚‹ã¨ã€ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ç•ªå·ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³åã¾ãŸã¯ã‚¿ã‚¤ãƒ ・スタンプã‹ã‚‰ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å‚ç…§ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> <para>1 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’æ ¼ç´ã™ã‚‹ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®é›†åˆã‹ã‚‰ã€ 1 個ã®è¤‡æ•°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€è¤‡æ•°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«å¯¾ã—ã¦ã€ãれ以後ã«ä½œæˆã•ã‚ŒãŸ 1 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’çµåˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> <para>ã“れらã®ã‚³ãƒžãƒ³ãƒ‰ã®ã„ãã¤ã‹ã¯ã€ ant タスクã¨ã—ã¦å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚コマンドã®å®Ÿè¡Œæ–¹æ³•ãŠã‚ˆã³å±žæ€§ãƒ»å¼•æ•°ã®è©³ç´°ã¯ã€ä»¥ä¸‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。以下ã®ã™ã¹ã¦ã®ä¾‹ã«ãŠã„ã¦ã¯ã€ <literal>findbugs.lib</literal> <literal>refid</literal> ãŒæ£ã—ãè¨å®šã•ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’å‰æã¨ã—ã¦ã„ã¾ã™ã€‚è¨å®šæ–¹æ³•ã®ä¸€ä¾‹ã‚’次ã«ç¤ºã—ã¾ã™ :</para> <programlisting> <![CDATA[ <!-- findbugs タスク定義 --> <property name="findbugs.home" value="/your/path/to/findbugs" /> <path id="findbugs.lib"> <fileset dir="${findbugs.home}/lib"> <include name="findbugs-ant.jar"/> </fileset> </path> ]]> </programlisting> <sect1 id="commands"> <title>コマンド</title> <para>FindBugs データ・マイニング ツールã¯ã™ã¹ã¦ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‹ã‚‰å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ã„ãã¤ã‹ã®ã‚ˆã‚Šæœ‰ç”¨ãªã‚³ãƒžãƒ³ãƒ‰ã¯ã€ ant ビルドファイルã‹ã‚‰å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> <para>コマンドラインツールã«ã¤ã„ã¦ç°¡å˜ã«èª¬æ˜Žã—ã¾ã™ :</para> <variablelist> <varlistentry> <term><command><link linkend="unionBugs">unionBugs</link></command></term> <listitem> <para>別ã®ã‚¯ãƒ©ã‚¹ã«å¯¾ã™ã‚‹åˆ¥å€‹ã®åˆ†æžçµæžœã‚’çµåˆã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command><link linkend="computeBugHistory">computeBugHistory</link></command></term> <listitem> <para>複数ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‹ã‚‰å¾—られãŸè¤‡æ•°ã®ãƒã‚°è¦å‘Šã‚’ã€ãƒžãƒ¼ã‚¸ã—㦠1 個ã®è¤‡æ•°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã—ã¾ã™ã€‚ã“れを使ã£ã¦ã€æ—¢å˜ã®è¤‡æ•°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«æ›´ã«ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’è¿½åŠ ã—ãŸã‚Šã€ 1 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’æ ¼ç´ã™ã‚‹ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®é›†åˆã‹ã‚‰ 1 個ã®è¤‡æ•°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’作æˆã—ãŸã‚Šã€ã§ãã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command><link linkend="setBugDatabaseInfo">setBugDatabaseInfo</link></command></term> <listitem> <para>リビジョンåやタイム・スタンプãªã©ã®æƒ…å ±ã‚’ XML データベースã«è¨å®šã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command><link linkend="listBugDatabaseInfo">listBugDatabaseInfo</link></command></term> <listitem> <para>XML データベースã«ã‚るリビジョンåやタイム・スタンプãªã©ã®æƒ…å ±ã‚’ä¸€è¦§è¡¨ç¤ºã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command><link linkend="filterBugs">filterBugs</link></command></term> <listitem> <para>ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®éƒ¨åˆ†é›†åˆã‚’é¸æŠžã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command><link linkend="mineBugHistory">mineBugHistory</link></command></term> <listitem> <para>複数ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®å„ãƒãƒ¼ã‚¸ãƒ§ãƒ³æ¯Žã®è¦å‘Šæ•°ã‚’一覧ã«ã—ãŸè¡¨ã‚’作æˆã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command><link linkend="defectDensity">defectDensity</link></command></term> <listitem> <para>プãƒã‚¸ã‚§ã‚¯ãƒˆå…¨ä½“ãŠã‚ˆã³ã‚¯ãƒ©ã‚¹æ¯Žãƒ»ãƒ‘ッケージ毎ã®ä¸è‰¯å¯†åº¦ (1000 NCSS 毎ã®è¦å‘Šæ•°) ã«é–¢ã™ã‚‹æƒ…å ±ã‚’ä¸€è¦§è¡¨ç¤ºã—ã¾ã™ã€‚</para> </listitem> </varlistentry> <varlistentry> <term><command><link linkend="convertXmlToText">convertXmlToText</link></command></term> <listitem> <para>XML å½¢å¼ã®ãƒã‚°è¦å‘Šã‚’〠1 è¡Œ 1 ãƒã‚°ã®ãƒ†ã‚スト形å¼ã€ã¾ãŸã¯ã€HTMLå½¢å¼ã«å¤‰æ›ã—ã¾ã™ã€‚</para> </listitem> </varlistentry> </variablelist> <sect2 id="unionBugs"> <title>unionBugs</title> <para>分æžã™ã‚‹ã®ã«ã‚¢ãƒ—リケーション㮠jar ファイルを分割ã—ã¦ã„ã‚‹å ´åˆã€ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã™ã‚‹ã“ã¨ã§ã€åˆ¥å€‹ã«ç”Ÿæˆã•ã‚ŒãŸ XML ãƒã‚°è¦å‘Šãƒ•ã‚¡ã‚¤ãƒ«ã‚’ã™ã¹ã¦ã®è¦å‘Šã‚’å«ã‚“ã§ã„ã‚‹ 1 ã¤ã® ファイルã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> <para>åŒã˜ãƒ•ã‚¡ã‚¤ãƒ«ã®ç•°ãªã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’分æžã—ãŸçµæžœã‚’çµåˆã™ã‚‹å ´åˆã¯ã€ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’<emphasis>使用ã—ãªã„ã§ãã ã•ã„</emphasis>。代ã‚ã‚Šã« <command>computeBugHistory</command> を使用ã—ã¦ãã ã•ã„。</para> <para>XML ファイルã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§æŒ‡å®šã—ã¦ãã ã•ã„。çµæžœã¯ã€æ¨™æº–出力ã«é€ã‚‰ã‚Œã¾ã™ã€‚</para> </sect2> <sect2 id="computeBugHistory"> <title>computeBugHistory</title> <para>ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã™ã‚‹ã“ã¨ã§ã€åˆ†æžã™ã‚‹ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ç•°ãªã‚‹ãƒ“ルドã¾ãŸã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®æƒ…å ±ã‚’å«ã‚€ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’生æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™å…¥åŠ›ã¨ã—ã¦æä¾›ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã® 1 番目ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‹ã‚‰å±¥æ´ãŒå–å¾—ã•ã‚Œã¾ã™ã€‚後ã«ç¶šãファイル㯠1 ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã§ã‚るよã†ã«ã—ã¦ãã ã•ã„ (ã‚‚ã—ã€å±¥æ´ã‚’æŒã£ã¦ã„ãŸã¨ã—ã¦ã‚‚無視ã•ã‚Œã¾ã™) 。</para> <para>デフォルトã§ã¯ã€çµæžœã¯æ¨™æº–出力ã«é€ã‚‰ã‚Œã¾ã™ã€‚</para> <para>ã“ã®æ©Ÿèƒ½ã¯ã€ ant ã‹ã‚‰ã‚‚使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãšæ¬¡ã«ç¤ºã™ã‚ˆã†ã«ã€ãƒ“ルドファイル㫠<command>computeBugHistory</command> ã‚’ taskdef ã§å®šç¾©ã—ã¾ã™ :</para> <programlisting> <![CDATA[ <taskdef name="computeBugHistory" classname="edu.umd.cs.findbugs.anttask.ComputeBugHistoryTask"> <classpath refid="findbugs.lib" /> </taskdef> ]]> </programlisting> <para>ã“ã® ant タスクã«æŒ‡å®šã§ãる属性をã€ä¸‹è¡¨ã«ä¸€è¦§ã§ç¤ºã—ã¾ã™ã€‚入力ファイルを指定ã™ã‚‹ã«ã¯ã€ <literal><datafile></literal> è¦ç´ を入れåã«ã—ã¦å…¥ã‚Œã¦ãã ã•ã„。次ã«ã€ä¾‹ã‚’示ã—ã¾ã™:</para> <programlisting> <![CDATA[ <computeBugHistory home="${findbugs.home}" ...> <datafile name="analyze1.xml"/> <datafile name="analyze2.xml"/> </computeBugHistory> ]]> </programlisting> <table id="computeBugHistoryTable"> <title>computeBugHistory コマンドã®ã‚ªãƒ—ション一覧</title> <tgroup cols="3" align="left"> <thead> <row> <entry>コマンドラインオプション</entry> <entry>Ant 属性</entry> <entry>目的</entry> </row> </thead> <tbody> <row><entry>-output <file></entry> <entry>output="<file>"</entry> <entry>出力çµæžœã‚’ä¿å˜ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«åを指定ã—ã¾ã™ã€‚ (åŒæ™‚ã«å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã«ã‚‚ãªã‚Šãˆã¾ã™)</entry></row> <row><entry>-overrideRevisionNames[:truth]</entry> <entry>overrideRevisionNames="[true|false]"</entry><entry>ファイルåã‹ã‚‰ç®—出ã•ã‚Œã‚‹ãã‚Œãžã‚Œã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³åを指定変更ã—ã¾ã™ã€‚</entry></row> <row><entry>-noPackageMoves[:truth]</entry> <entry>noPackageMoves="[true|false]"</entry><entry>パッケージを移動ã—ãŸã‚¯ãƒ©ã‚¹ãŒã‚ã‚‹å ´åˆã€å½“該クラスã®è¦å‘Šã¯åˆ¥ã®å˜åœ¨ã¨ã—ã¦æ‰±ã‚ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-preciseMatch[:truth]</entry> <entry>preciseMatch="[true|false]"</entry><entry>ãƒã‚°ãƒ‘ターンãŒæ£ç¢ºã«ä¸€è‡´ã™ã‚‹ã“ã¨ã‚’è¦æ±‚ã—ã¾ã™ã€‚</entry></row> <row><entry>-precisePriorityMatch[:truth]</entry> <entry>precisePriorityMatch="[true|false]"</entry><entry>優先度ãŒæ£ç¢ºã«ä¸€è‡´ã—ãŸå ´åˆã®ã¿è¦å‘ŠãŒåŒä¸€ã§ã‚ã‚‹ã¨åˆ¤æ–ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-quiet[:truth]</entry> <entry>quiet="[true|false]"</entry><entry>エラーãŒç™ºç”Ÿã—ãªã„é™ã‚Šã€æ¨™æº–出力ã«ã¯ä½•ã‚‚表示ã•ã‚Œã¾ã›ã‚“。</entry></row> <row><entry>-withMessages[:truth]</entry> <entry>withMessages="[true|false]"</entry><entry>出力 XML ã«äººé–“ãŒèªã‚€ã“ã¨ãŒã§ãã‚‹ãƒã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒå«ã¾ã‚Œã¾ã™ã€‚</entry></row> </tbody> </tgroup> </table> </sect2> <sect2 id="filterBugs"> <title>filterBugs</title> <para>ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã™ã‚‹ã“ã¨ã§ã€ FindBugs XML è¦å‘Šãƒ•ã‚¡ã‚¤ãƒ«ã‹ã‚‰ä¸€éƒ¨åˆ†ã‚’é¸ã³å‡ºã—ã¦æ–°è¦ FindBugs è¦å‘Šãƒ•ã‚¡ã‚¤ãƒ«ã«é¸æŠžã•ã‚ŒãŸéƒ¨åˆ†ã‚’書ã込むã“ã¨ãŒã§ãã¾ã™ã€‚</para> <para>ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã«ã¯ã€ã‚ªãƒ—ション群ã«ç¶šã„㦠0 個ã‹ã‚‰ 2 個㮠findbugs xml ãƒã‚°ãƒ•ã‚¡ã‚¤ãƒ«ã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> <para>ファイルåã‚’ã²ã¨ã¤ã‚‚指定ã—ãªã„å ´åˆã¯ã€æ¨™æº–入力ã‹ã‚‰èªã‚“ã§æ¨™æº–出力ã«å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚ファイルåã‚’ 1 個 指定ã—ãŸå ´åˆã¯ã€æŒ‡å®šã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‹ã‚‰èªã‚“ã§æ¨™æº–出力ã«å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚ファイルåã‚’ 2 個 指定ã—ãŸå ´åˆã¯ã€ 1 番目ã«æŒ‡å®šã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‹ã‚‰èªã‚“㧠2 番目ã«æŒ‡å®šã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã«å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</para> <para>ã“ã®æ©Ÿèƒ½ã¯ã€ ant ã‹ã‚‰ã‚‚使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãšæ¬¡ã«ç¤ºã™ã‚ˆã†ã«ã€ãƒ“ルドファイル㫠<command>filterBugs</command> ã‚’ taskdef ã§å®šç¾©ã—ã¾ã™ :</para> <programlisting> <![CDATA[ <taskdef name="filterBugs" classname="edu.umd.cs.findbugs.anttask.FilterBugsTask"> <classpath refid="findbugs.lib" /> </taskdef> ]]> </programlisting> <para>ã“ã® ant タスクã«æŒ‡å®šã§ãる属性をã€ä¸‹è¡¨ã«ä¸€è¦§ã§ç¤ºã—ã¾ã™ã€‚入力ファイルを指定ã™ã‚‹ã«ã¯ã€ <literal>input</literal> 属性を使用ã™ã‚‹ã‹ã€ <literal><datafile></literal> è¦ç´ を入れåã«ã—ã¦å…¥ã‚Œã¦ãã ã•ã„。次ã«ã€ä¾‹ã‚’示ã—ã¾ã™:</para> <programlisting> <![CDATA[ <filterBugs home="${findbugs.home}" ...> <datafile name="analyze.xml"/> </filterBugs> ]]> </programlisting> <table id="filterOptionsTable"> <title>filterBugs コマンドã®ã‚ªãƒ—ション一覧</title> <tgroup cols="3" align="left"> <thead> <row> <entry>コマンドラインオプション</entry> <entry>Ant 属性</entry> <entry>目的</entry> </row> </thead> <tbody> <row><entry/> <entry>input="<file>"</entry> <entry>入力ファイルを指定ã—ã¾ã™ã€‚</entry></row> <row><entry/> <entry>output="<file>"</entry> <entry>出力ファイルを指定ã—ã¾ã™ã€‚</entry></row> <row><entry>-not</entry> <entry>not="[true|false]"</entry> <entry>フィルターã®ã‚¹ã‚¤ãƒƒãƒã‚’å転ã—ã¾ã™ã€‚</entry></row> <row><entry>-withSource[:truth]</entry> <entry>withSource="[true|false]"</entry> <entry>ソースãŒå…¥æ‰‹å¯èƒ½ãªè¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-exclude <filter file></entry><entry>exclude="<filter file>"</entry> <entry>フィルターã«ä¸€è‡´ã™ã‚‹ãƒã‚°ãŒé™¤å¤–ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-include <filter file></entry><entry>include="<filter file>"</entry> <entry>フィルターã«ä¸€è‡´ã™ã‚‹ãƒã‚°ã®ã¿ã‚’å«ã¾ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-annotation <text></entry> <entry>annotation="<text>"</entry> <entry>手ã§å…¥åŠ›ã—ãŸæ³¨é‡ˆã«æŒ‡å®šã—ãŸæ–‡è¨€ã‚’å«ã‚€è¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-after <when></entry> <entry>after="<when>"</entry> <entry>指定ã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚ˆã‚Šå¾Œã«åˆã‚ã¦å‡ºç¾ã—ãŸè¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-before <when></entry> <entry>before="<when>"</entry> <entry>指定ã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚ˆã‚Šå‰ã«åˆã‚ã¦å‡ºç¾ã—ãŸè¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-first <when></entry> <entry>first="<when>"</entry> <entry>指定ã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«åˆã‚ã¦å‡ºç¾ã—ãŸè¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-last <when></entry> <entry>last="<when>"</entry> <entry>指定ã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå‡ºç¾ã—ãŸæœ€å¾Œã§ã‚ã‚‹è¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-fixed <when></entry> <entry>fixed="<when>"</entry> <entry>指定ã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å‰å›žã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå‡ºç¾ã—ãŸæœ€å¾Œã§ã‚ã‚‹è¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚ (<option>-last</option> ã«å„ªå…ˆã—ã¾ã™)。</entry></row> <row><entry>-present <when></entry> <entry>present="<when>"</entry> <entry>指定ã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å˜åœ¨ã™ã‚‹è¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-absent <when></entry> <entry>absent="<when>"</entry> <entry>指定ã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å˜åœ¨ã—ãªã„è¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-active[:truth]</entry> <entry>active="[true|false]"</entry> <entry>最終通番ã«å˜åœ¨ã™ã‚‹è¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-introducedByChange[:truth]</entry> <entry>introducedByChange="[true|false]"</entry><entry>å˜åœ¨ã™ã‚‹ã‚¯ãƒ©ã‚¹ã®å¤‰æ›´ã«ã‚ˆã£ã¦ã‚‚ãŸã‚‰ã•ã‚ŒãŸè¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-removedByChange[:truth]</entry> <entry>removedByChange="[true|false]"</entry> <entry>å˜åœ¨ã™ã‚‹ã‚¯ãƒ©ã‚¹ã®å¤‰æ›´ã«ã‚ˆã£ã¦é™¤åŽ»ã•ã‚ŒãŸè¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-newCode[:truth]</entry> <entry>newCode="[true|false]"</entry> <entry>新クラスã®è¿½åŠ ã«ã‚ˆã£ã¦ã‚‚ãŸã‚‰ã•ã‚ŒãŸè¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-removedCode[:truth]</entry> <entry>removedCode="[true|false]"</entry> <entry>クラスã®å‰Šé™¤ã«ã‚ˆã£ã¦é™¤åŽ»ã•ã‚ŒãŸè¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-priority <level></entry> <entry>priority="<level>"</entry> <entry>指定ã—ãŸå„ªå…ˆåº¦ä»¥ä¸Šã®å„ªå…ˆåº¦ã‚’ã‚‚ã¤è¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-class <pattern></entry> <entry>class="<class>"</entry> <entry>指定ã—ãŸãƒ‘ターンã«ä¸€è‡´ã™ã‚‹ä¸»ã‚¯ãƒ©ã‚¹ã‚’ã‚‚ã¤è¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-bugPattern <pattern></entry> <entry>bugPattern="<pattern>"</entry> <entry>指定ã—ãŸãƒ‘ターンã«ä¸€è‡´ã™ã‚‹ãƒã‚°ç¨®åˆ¥ã‚’ã‚‚ã¤è¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-category <category></entry> <entry>category="<category>"</entry> <entry>指定ã—ãŸæ–‡å—列ã§å§‹ã¾ã‚‹ã‚«ãƒ†ã‚´ãƒªãƒ¼ã®è¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-designation <designation></entry> <entry>designation="<designation>"</entry> <entry>指定ã—ãŸãƒã‚°åˆ†é¡žæŒ‡å®šã‚’ã‚‚ã¤è¦å‘Šã®ã¿å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚ (例〠-designation SHOULD_FIX)</entry></row> <row><entry>-withMessages[:truth] </entry> <entry>withMessages="[true|false]"</entry> <entry>テã‚ストメッセージをå«ã‚“ã XML ãŒç”Ÿæˆã•ã‚Œã¾ã™ã€‚</entry></row> </tbody> </tgroup> </table> </sect2> <sect2 id="mineBugHistory"> <title>mineBugHistory</title> <para>ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã™ã‚‹ã“ã¨ã§ã€è¤‡æ•°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®å„ãƒãƒ¼ã‚¸ãƒ§ãƒ³æ¯Žã®è¦å‘Šæ•°ã‚’一覧ã«ã—ãŸè¡¨ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> <para>ã“ã®æ©Ÿèƒ½ã¯ã€ ant ã‹ã‚‰ã‚‚使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãšæ¬¡ã«ç¤ºã™ã‚ˆã†ã«ã€ãƒ“ルドファイル㫠<command>mineBugHistory</command> ã‚’ taskdef ã§å®šç¾©ã—ã¾ã™ :</para> <programlisting> <![CDATA[ <taskdef name="mineBugHistory" classname="edu.umd.cs.findbugs.anttask.MineBugHistoryTask"> <classpath refid="findbugs.lib" /> </taskdef> ]]> </programlisting> <para>ã“ã® ant タスクã«æŒ‡å®šã§ãる属性をã€ä¸‹è¡¨ã«ä¸€è¦§ã§ç¤ºã—ã¾ã™ã€‚入力ファイルを指定ã™ã‚‹ã«ã¯ã€ <literal>input</literal> 属性を使用ã™ã‚‹ã‹ã€ <literal><datafile></literal> è¦ç´ を入れåã«ã—ã¦å…¥ã‚Œã¦ãã ã•ã„。次ã«ã€ä¾‹ã‚’示ã—ã¾ã™:</para> <programlisting> <![CDATA[ <mineBugHistory home="${findbugs.home}" ...> <datafile name="analyze.xml"/> </mineBugHistory> ]]> </programlisting> <table id="mineBugHistoryOptionsTable"> <title>mineBugHistory コマンドã®ã‚ªãƒ—ション一覧</title> <tgroup cols="3" align="left"> <thead> <row> <entry>コマンドラインオプション</entry> <entry>Ant 属性</entry> <entry>目的</entry> </row> </thead> <tbody> <row><entry/> <entry>input="<file>"</entry> <entry>入力ファイルを指定ã—ã¾ã™ã€‚</entry></row> <row><entry/> <entry>output="<file>"</entry> <entry>出力ファイルを指定ã—ã¾ã™ã€‚</entry></row> <row><entry>-formatDates</entry> <entry>formatDates="[true|false]"</entry> <entry>データãŒãƒ†ã‚スト形å¼ã§æç”»ã•ã‚Œã¾ã™ã€‚</entry></row> <row><entry>-noTabs</entry> <entry>noTabs="[true|false]"</entry> <entry>タブã®ä»£ã‚ã‚Šã«è¤‡æ•°ã‚¹ãƒšãƒ¼ã‚¹ã§ã‚«ãƒ©ãƒ ãŒåŒºåˆ‡ã‚‰ã‚Œã¾ã™ (下記å‚ç…§)。</entry></row> <row><entry>-summary</entry> <entry>summary="[true|false]"</entry> <entry>最新 10 件ã®å¤‰æ›´ã®è¦ç´„ãŒå‡ºåŠ›ã•ã‚Œã¾ã™ã€‚</entry></row> </tbody> </tgroup> </table> <para><option>-noTabs</option> 出力を使ã†ã“ã¨ã§ã€å›ºå®šå¹…フォントã®ã‚·ã‚§ãƒ«ã§èªã¿æ˜“ããªã‚Šã¾ã™ã€‚数値カラムã¯å³å¯„ã›ã•ã‚Œã‚‹ã®ã§ã€ã‚¹ãƒšãƒ¼ã‚¹ãŒã‚«ãƒ©ãƒ 値ã®å‰ã«æŒ¿å…¥ã•ã‚Œã¾ã™ã€‚ã¾ãŸã€ã“ã®ã‚ªãƒ—ションを使用ã—ãŸå ´åˆã€ <option>-formatDates</option> を指定ã—ãŸã¨ãã«è¦ç´„ã®æ—¥ä»˜ã‚’æç”»ã™ã‚‹ã®ã«ç©ºç™½ãŒåŸ‹ã‚è¾¼ã¾ã‚Œãªããªã‚Šã¾ã™ã€‚</para> <para>出力ã•ã‚Œã‚‹è¡¨ã¯ã€ (<option>-noTabs</option> ãŒç„¡ã‘ã‚Œã°) タブ区切りã§æ¬¡ã«ç¤ºã™ã‚«ãƒ©ãƒ ã‹ã‚‰æˆã‚Šã¾ã™ :</para> <table id="mineBugHistoryColumns"> <title>mineBugHistory 出力ã®ã‚«ãƒ©ãƒ 一覧</title> <tgroup cols="2" align="left"> <thead> <row> <entry>表題</entry> <entry>目的</entry> </row> </thead> <tbody> <row><entry>seq</entry><entry>ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ç•ªå· (0 始ã¾ã‚Šã®é€£ç¶šã—ãŸæ•´æ•°å€¤)</entry></row> <row><entry>version</entry><entry>ãƒãƒ¼ã‚¸ãƒ§ãƒ³å</entry></row> <row><entry>time</entry><entry>リリースã•ã‚ŒãŸæ—¥æ™‚</entry></row> <row><entry>classes</entry><entry>分æžã•ã‚ŒãŸã‚¯ãƒ©ã‚¹æ•°</entry></row> <row><entry>NCSS</entry><entry>コメント文を除ã„ãŸå‘½ä»¤æ•° (Non Commenting Source Statements)</entry></row> <row><entry>added</entry><entry>å‰å›žã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å˜åœ¨ã—ãŸã‚¯ãƒ©ã‚¹ã«ãŠã‘ã‚‹æ–°è¦è¦å‘Šæ•°</entry></row> <row><entry>newCode</entry><entry>å‰å›žã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å˜åœ¨ã—ãªã‹ã£ãŸã‚¯ãƒ©ã‚¹ã«ãŠã‘ã‚‹æ–°è¦è¦å‘Šæ•°</entry></row> <row><entry>fixed</entry><entry>ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å˜åœ¨ã™ã‚‹ã‚¯ãƒ©ã‚¹ã«ãŠã‘る除去ã•ã‚ŒãŸè¦å‘Šæ•°</entry></row> <row><entry>removed</entry><entry>ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å˜åœ¨ã—ãªã„クラスã®å‰å›žã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ãŠã‘ã‚‹è¦å‘Šæ•°</entry></row> <row><entry>retained</entry><entry>ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨å‰å›žã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ä¸¡æ–¹ã«å˜åœ¨ã™ã‚‹è¦å‘Šã®æ•°</entry></row> <row><entry>dead</entry><entry>以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å˜åœ¨ã—ãŸãŒç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚‚ç›´å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚‚å˜åœ¨ã—ãªã„è¦å‘Šã®æ•°</entry></row> <row><entry>active</entry><entry>ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«å˜åœ¨ã™ã‚‹è¦å‘Šç·æ•°</entry></row> </tbody> </tgroup> </table> </sect2> <sect2 id="defectDensity"> <title>defectDensity</title> <para>ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã™ã‚‹ã“ã¨ã§ã€ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆå…¨ä½“ãŠã‚ˆã³ã‚¯ãƒ©ã‚¹æ¯Žãƒ»ãƒ‘ッケージ毎ã®ä¸è‰¯å¯†åº¦ (1000 NCSS 毎ã®è¦å‘Šæ•°) ã«é–¢ã™ã‚‹æƒ…å ±ã‚’ä¸€è¦§è¡¨ç¤ºã§ãã¾ã™ã€‚標準入力ã‹ã‚‰èªã¿è¾¼ã‚€å ´åˆã¯ãƒ•ã‚¡ã‚¤ãƒ«æŒ‡å®šãªã—ã§ã€ãã†ã§ãªã‘ã‚Œã°ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ãƒ•ã‚¡ã‚¤ãƒ«ã‚’指定ã—ã¦ã€ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚</para> <para>出力ã•ã‚Œã‚‹è¡¨ã¯ã€æ¬¡ã«ç¤ºã™ã‚«ãƒ©ãƒ ã‹ã‚‰æˆã‚Šã¾ã™ã€‚ã¾ãŸã€ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆå…¨ä½“æƒ…å ±ã®è¡Œã€ãŠã‚ˆã³ã€4 個以上ã®è¦å‘Šã‚’å«ã‚“ã§ã„ã‚‹å„ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸æƒ…å ±ã¾ãŸã¯å„ã‚¯ãƒ©ã‚¹æƒ…å ±ã®è¡Œã‚‚出力ã•ã‚Œã¾ã™ã€‚</para> <table id="defectDensityColumns"> <title>defectDensity 出力ã®ã‚«ãƒ©ãƒ 一覧</title> <tgroup cols="2" align="left"> <thead> <row> <entry>表題</entry> <entry>目的</entry> </row> </thead> <tbody> <row><entry>kind</entry><entry>プãƒã‚¸ã‚§ã‚¯ãƒˆ (project)ã€ãƒ‘ッケージ (package) ã¾ãŸã¯ã‚¯ãƒ©ã‚¹ (class)</entry></row> <row><entry>name</entry><entry>プãƒã‚¸ã‚§ã‚¯ãƒˆã€ãƒ‘ッケージã¾ãŸã¯ã‚¯ãƒ©ã‚¹ã®åå‰</entry></row> <row><entry>density</entry><entry> 1000 NCSS 毎ã®è¦å‘Šæ•°</entry></row> <row><entry>bugs</entry><entry>è¦å‘Šæ•°</entry></row> <row><entry>NCSS</entry><entry>コメント文を除ã„ãŸå‘½ä»¤æ•° (Non Commenting Source Statements) </entry></row> </tbody> </tgroup> </table> </sect2> <sect2 id="convertXmlToText"> <title>convertXmlToText</title> <para>ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã™ã‚‹ã“ã¨ã§ã€XML å½¢å¼ã®ãƒã‚°è¦å‘Šã‚’〠1 è¡Œ 1 ãƒã‚°ã®ãƒ†ã‚スト形å¼ã€ã¾ãŸã¯ã€HTMLå½¢å¼ã«å¤‰æ›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</para> <para>ã“ã®æ©Ÿèƒ½ã¯ã€ ant ã‹ã‚‰ã‚‚使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãšæ¬¡ã«ç¤ºã™ã‚ˆã†ã«ã€ãƒ“ルドファイル㫠<command>convertXmlToText</command> ã‚’ taskdef ã§å®šç¾©ã—ã¾ã™ :</para> <programlisting> <![CDATA[ <taskdef name="convertXmlToText" classname="edu.umd.cs.findbugs.anttask.ConvertXmlToTextTask"> <classpath refid="findbugs.lib" /> </taskdef> ]]> </programlisting> <para>ã“ã® ant タスクã«æŒ‡å®šã§ãる属性をã€ä¸‹è¡¨ã«ä¸€è¦§ã§ç¤ºã—ã¾ã™ã€‚</para> <table id="convertXmlToTextTable"> <title>convertXmlToText コマンドã®ã‚ªãƒ—ション一覧</title> <tgroup cols="3" align="left"> <thead> <row> <entry>コマンドラインオプション</entry> <entry>Ant 属性</entry> <entry>目的</entry> </row> </thead> <tbody> <row><entry/> <entry>input="<filename>"</entry> <entry>入力ファイルを指定ã—ã¾ã™ã€‚</entry></row> <row><entry/> <entry>output="<filename>"</entry> <entry>出力ファイルを指定ã—ã¾ã™ã€‚</entry></row> <row><entry>-longBugCodes</entry> <entry>longBugCodes="[true|false]"</entry> <entry>2 æ–‡å—ã®ãƒã‚°ç•¥ç§°ã®ä»£ã‚ã‚Šã«ã€çœç•¥ãªã—ã®ãƒã‚°ãƒ‘ターンコードを使用ã—ã¾ã™ã€‚</entry></row> <row><entry/> <entry>format="text"</entry> <entry>プレーンテã‚ストã®å‡ºåŠ›ãŒä½œæˆã•ã‚Œã¾ã™ã€‚1 è¡Œã«ã¤ã 1 ã¤ã®ãƒã‚°ãŒå‡ºåŠ›ã•ã‚Œã¾ã™ã€‚コマンドライン時ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã™ã€‚</entry></row> <row><entry>-html[:stylesheet]</entry> <entry>format="html:<stylesheet>"</entry> <entry>指定ã•ã‚ŒãŸã‚¹ã‚¿ã‚¤ãƒ«ã‚·ãƒ¼ãƒˆã‚’使用ã—ã¦å‡ºåŠ›ãŒä½œæˆã•ã‚Œã¾ã™ (下記å‚ç…§) 。çœç•¥ã—ãŸå ´åˆã¯ã€ default.xsl ãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚</entry></row> </tbody> </tgroup> </table> <para>-html/format オプションã«ã¯ã€plain.xsl 〠default.xsl 〠fancy.xsl 〠fancy-hist.xsl ã¾ãŸã¯ ユーザ自身ãŒä½œæˆã—㟠XSL スタイルシートã®ã„ãšã‚Œã‹ã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚オプションåをよãã«ã€ html 以外ã®å½¢å¼ã‚’出力ã™ã‚‹ã‚¹ã‚¿ã‚¤ãƒ«ã‚·ãƒ¼ãƒˆã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚FindBugs ã«å«ã¾ã‚Œã¦ã„るスタイルシート(上述)以外ã®ã‚¹ã‚¿ã‚¤ãƒ«ã‚·ãƒ¼ãƒˆã‚’使用ã™ã‚‹å ´åˆã¯ã€ã‚ªãƒ—ション -html/format ã§å½“該スタイルシートã¸ã®ãƒ‘スã¾ãŸã¯ URL を指定ã—ã¦ãã ã•ã„。</para> </sect2> <sect2 id="setBugDatabaseInfo"> <title>setBugDatabaseInfo</title> <para>ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã™ã‚‹ã“ã¨ã§ã€æŒ‡å®šã—ãŸãƒã‚°è¦å‘Šã«ãƒ¡ã‚¿æƒ…å ±ã‚’è¨å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã«ã¯æ¬¡ã«ç¤ºã™ã‚ªãƒ—ションãŒã‚ã‚Šã¾ã™:</para> <para>ã“ã®æ©Ÿèƒ½ã¯ã€ ant ã‹ã‚‰ã‚‚使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãšæ¬¡ã«ç¤ºã™ã‚ˆã†ã«ã€ãƒ“ルドファイル㫠<command>setBugDatabaseInfo</command> ã‚’ taskdef ã§å®šç¾©ã—ã¾ã™ :</para> <programlisting> <![CDATA[ <taskdef name="setBugDatabaseInfo" classname="edu.umd.cs.findbugs.anttask.SetBugDatabaseInfoTask"> <classpath refid="findbugs.lib" /> </taskdef> ]]> </programlisting> <para>ã“ã® ant タスクã«æŒ‡å®šã§ãる属性をã€ä¸‹è¡¨ã«ä¸€è¦§ã§ç¤ºã—ã¾ã™ã€‚入力ファイルを指定ã™ã‚‹ã«ã¯ã€ <literal>input</literal> 属性を使用ã™ã‚‹ã‹ã€ <literal><datafile></literal> è¦ç´ を入れåã«ã—ã¦å…¥ã‚Œã¦ãã ã•ã„。次ã«ã€ä¾‹ã‚’示ã—ã¾ã™:</para> <programlisting> <![CDATA[ <setBugDatabaseInfo home="${findbugs.home}" ...> <datafile name="analyze.xml"/> </setBugDatabaseInfo> ]]> </programlisting> <table id="setBugDatabaseInfoOptions"> <title>setBugDatabaseInfo オプション一覧</title> <tgroup cols="3" align="left"> <thead> <row> <entry>コマンドラインオプション</entry> <entry>Ant 属性</entry> <entry>目的</entry> </row> </thead> <tbody> <row><entry/> <entry>input="<file>"</entry> <entry>入力ファイルを指定ã—ã¾ã™ã€‚</entry></row> <row><entry/> <entry>output="<file>"</entry> <entry>出力ファイルを指定ã—ã¾ã™ã€‚</entry></row> <row><entry>-name <name></entry> <entry>name="<name>"</entry> <entry>最新リビジョンã®åå‰ã‚’è¨å®šã—ã¾ã™ã€‚</entry></row> <row><entry>-timestamp <when></entry> <entry>timestamp="<when>"</entry> <entry>最新リビジョンã®ã‚¿ã‚¤ãƒ ・スタンプをè¨å®šã—ã¾ã™ã€‚</entry></row> <row><entry>-source <directory></entry> <entry>source="<directory>"</entry> <entry>ソースを検索ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’è¿½åŠ æŒ‡å®šã—ã¾ã™ã€‚</entry></row> <row><entry>-findSource <directory></entry> <entry>findSource="<directory>"</entry> <entry>指定ã—ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼å†…を検索ã—ã¦é–¢é€£ã™ã‚‹ã‚½ãƒ¼ã‚¹ã®å ´æ‰€ã‚’è¿½åŠ ã—ã¾ã™ã€‚</entry></row> <row><entry>-suppress <filter file></entry> <entry>suppress="<filter file>"</entry> <entry>指定ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã«ä¸€è‡´ã™ã‚‹è¦å‘Šã‚’抑æ¢ã—ã¾ã™ (以å‰ã«æŒ‡å®šã—ãŸæŠ‘æ¢è¨å®šã¯ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™)。</entry></row> <row><entry>-withMessages</entry> <entry>withMessages="[true|false]"</entry> <entry>XMLã«ãƒ†ã‚ã‚¹ãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’è¿½åŠ ã—ã¾ã™ã€‚</entry></row> <row><entry>-resetSource</entry> <entry>resetSource="[true|false]"</entry> <entry>ソース検索パスをã™ã¹ã¦å‰Šé™¤ã—ã¾ã™ã€‚</entry></row> </tbody> </tgroup> </table> </sect2> <sect2 id="listBugDatabaseInfo"> <title>listBugDatabaseInfo</title> <para>ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã®å®Ÿè¡Œã«ãŠã„ã¦ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ 0 個以上㮠xml ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«åを指定ã—ã¾ã™ã€‚ファイルåã‚’1ã¤ã‚‚指定ã—ãªã‘ã‚Œã°ã€æ¨™æº–出力ã‹ã‚‰èªã¿è¾¼ã¿ã‚’è¡Œã„テーブルã®ãƒ˜ãƒƒãƒ€ãƒ¼ã¯ç”Ÿæˆã•ã‚Œã¾ã›ã‚“。</para> <para>ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã«ã¯ 1 ã¤ã ã‘オプションãŒã‚ã‚Šã¾ã™ : <option>-formatDates</option> を指定ã™ã‚‹ã¨ãƒ†ã‚スト形å¼ã§ãƒ‡ãƒ¼ã‚¿ãŒæç”»ã•ã‚Œã¾ã™ã€‚</para> <para>出力ã•ã‚Œã‚‹è¡¨ã¯ã€å„ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã”ã¨ã«è¡Œã‚’æŒã¡ã€æ¬¡ã«ç¤ºã™ã‚«ãƒ©ãƒ ã‹ã‚‰æˆã‚Šã¾ã™ :</para> <table id="listBugDatabaseInfoColumns"> <title>listBugDatabaseInfo カラム一覧</title> <tgroup cols="2" align="left"> <thead> <row> <entry>カラム</entry> <entry>目的</entry> </row> </thead> <tbody> <row><entry>version</entry><entry>ãƒãƒ¼ã‚¸ãƒ§ãƒ³å</entry></row> <row><entry>time</entry><entry>リリースã•ã‚ŒãŸæ—¥æ™‚</entry></row> <row><entry>classes</entry><entry>分æžã•ã‚ŒãŸã‚¯ãƒ©ã‚¹æ•°</entry></row> <row><entry>NCSS</entry><entry>コメント文を除ã„ãŸå‘½ä»¤æ•° (Non Commenting Source Statements)</entry></row> <row><entry>total</entry><entry>å…¨è¦å‘Šæ•°</entry></row> <row><entry>high</entry><entry>優先度(高)ã®è¦å‘Šã®ç·æ•°</entry></row> <row><entry>medium</entry><entry>優先度(ä¸)ã®è¦å‘Šã®ç·æ•°</entry></row> <row><entry>low</entry><entry>優先度(低)ã®è¦å‘Šã®ç·æ•°</entry></row> <row><entry>filename</entry><entry>データベースã®ãƒ•ã‚¡ã‚¤ãƒ«å</entry></row> <!-- <row><entry></entry><entry></entry></row> <row><entry></entry><entry></entry></row> <row><entry></entry><entry></entry></row> <row><entry></entry><entry></entry></row> <row><entry></entry><entry></entry></row> <row><entry></entry><entry></entry></row> --> </tbody> </tgroup> </table> </sect2> </sect1> <sect1 id="examples"> <title>例</title> <sect2 id="unixscriptsexamples"> <title>æä¾›ã•ã‚ŒãŸã‚·ã‚§ãƒ«ãƒ»ã‚¹ã‚¯ãƒªãƒ—トを使用ã—ã¦ã®å±¥æ´ãƒžã‚¤ãƒ‹ãƒ³ã‚°</title> <para>以下ã¯ã™ã¹ã¦ã€ jdk1.6.0-b12, jdk1.6.0-b13, ..., jdk1.6.0-b60 ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«å¯¾ã—ã¦ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¦ã„ã¾ã™ã€‚</para> <para>以下ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¦ã¿ã¾ã™ :</para> <screen> computeBugHistory jdk1.6.0-b* | filterBugs -bugPattern IL_ | mineBugHistory -formatDates </screen> <para>ã™ã‚‹ã¨ã€æ¬¡ã®ã‚ˆã†ãªå‡ºåŠ›ãŒè¡Œã‚ã‚Œã¾ã™ :</para> <screen> seq version time classes NCSS added newCode fixed removed retained dead active 0 jdk1.6.0-b12 "Thu Nov 11 09:07:20 EST 2004" 13128 811569 0 4 0 0 0 0 4 1 jdk1.6.0-b13 "Thu Nov 18 06:02:06 EST 2004" 13128 811570 0 0 0 0 4 0 4 2 jdk1.6.0-b14 "Thu Dec 02 06:12:26 EST 2004" 13145 811786 0 0 2 0 2 0 2 3 jdk1.6.0-b15 "Thu Dec 09 06:07:04 EST 2004" 13174 811693 0 0 1 0 1 2 1 4 jdk1.6.0-b16 "Thu Dec 16 06:21:28 EST 2004" 13175 811715 0 0 0 0 1 3 1 5 jdk1.6.0-b17 "Thu Dec 23 06:27:22 EST 2004" 13176 811974 0 0 0 0 1 3 1 6 jdk1.6.0-b19 "Thu Jan 13 06:41:16 EST 2005" 13176 812011 0 0 0 0 1 3 1 7 jdk1.6.0-b21 "Thu Jan 27 05:57:52 EST 2005" 13177 812173 0 0 0 0 1 3 1 8 jdk1.6.0-b23 "Thu Feb 10 05:44:36 EST 2005" 13179 812188 0 0 0 0 1 3 1 9 jdk1.6.0-b26 "Thu Mar 03 06:04:02 EST 2005" 13199 811770 0 0 0 0 1 3 1 10 jdk1.6.0-b27 "Thu Mar 10 04:48:38 EST 2005" 13189 812440 0 0 0 0 1 3 1 11 jdk1.6.0-b28 "Thu Mar 17 02:54:22 EST 2005" 13185 812056 0 0 0 0 1 3 1 12 jdk1.6.0-b29 "Thu Mar 24 03:09:20 EST 2005" 13117 809468 0 0 0 0 1 3 1 13 jdk1.6.0-b30 "Thu Mar 31 02:53:32 EST 2005" 13118 809501 0 0 0 0 1 3 1 14 jdk1.6.0-b31 "Thu Apr 07 03:00:14 EDT 2005" 13117 809572 0 0 0 0 1 3 1 15 jdk1.6.0-b32 "Thu Apr 14 02:56:56 EDT 2005" 13169 811096 0 0 0 0 1 3 1 16 jdk1.6.0-b33 "Thu Apr 21 02:46:22 EDT 2005" 13187 811942 0 0 0 0 1 3 1 17 jdk1.6.0-b34 "Thu Apr 28 02:49:00 EDT 2005" 13195 813488 0 1 0 0 1 3 2 18 jdk1.6.0-b35 "Thu May 05 02:49:04 EDT 2005" 13457 829837 0 0 0 0 2 3 2 19 jdk1.6.0-b36 "Thu May 12 02:59:46 EDT 2005" 13462 831278 0 0 0 0 2 3 2 20 jdk1.6.0-b37 "Thu May 19 02:55:08 EDT 2005" 13464 831971 0 0 0 0 2 3 2 21 jdk1.6.0-b38 "Thu May 26 03:08:16 EDT 2005" 13564 836565 0 0 0 0 2 3 2 22 jdk1.6.0-b39 "Fri Jun 03 03:10:48 EDT 2005" 13856 849992 0 1 0 0 2 3 3 23 jdk1.6.0-b40 "Thu Jun 09 03:30:28 EDT 2005" 15972 959619 0 2 0 0 3 3 5 24 jdk1.6.0-b41 "Thu Jun 16 03:19:22 EDT 2005" 15972 959619 0 0 0 0 5 3 5 25 jdk1.6.0-b42 "Fri Jun 24 03:38:54 EDT 2005" 15966 958581 0 0 0 0 5 3 5 26 jdk1.6.0-b43 "Thu Jul 14 03:09:34 EDT 2005" 16041 960544 0 0 0 0 5 3 5 27 jdk1.6.0-b44 "Thu Jul 21 03:05:54 EDT 2005" 16041 960547 0 0 0 0 5 3 5 28 jdk1.6.0-b45 "Thu Jul 28 03:26:10 EDT 2005" 16037 960606 0 0 1 0 4 3 4 29 jdk1.6.0-b46 "Thu Aug 04 03:02:48 EDT 2005" 15936 951355 0 0 0 0 4 4 4 30 jdk1.6.0-b47 "Thu Aug 11 03:18:56 EDT 2005" 15964 952387 0 0 1 0 3 4 3 31 jdk1.6.0-b48 "Thu Aug 18 08:10:40 EDT 2005" 15970 953421 0 0 0 0 3 5 3 32 jdk1.6.0-b49 "Thu Aug 25 03:24:38 EDT 2005" 16048 958940 0 0 0 0 3 5 3 33 jdk1.6.0-b50 "Thu Sep 01 01:52:40 EDT 2005" 16287 974937 1 0 0 0 3 5 4 34 jdk1.6.0-b51 "Thu Sep 08 01:55:36 EDT 2005" 16362 979377 0 0 0 0 4 5 4 35 jdk1.6.0-b52 "Thu Sep 15 02:04:08 EDT 2005" 16477 979399 0 0 0 0 4 5 4 36 jdk1.6.0-b53 "Thu Sep 22 02:00:28 EDT 2005" 16019 957900 0 0 1 0 3 5 3 37 jdk1.6.0-b54 "Thu Sep 29 01:54:34 EDT 2005" 16019 957900 0 0 0 0 3 6 3 38 jdk1.6.0-b55 "Thu Oct 06 01:54:14 EDT 2005" 16051 959014 0 0 0 0 3 6 3 39 jdk1.6.0-b56 "Thu Oct 13 01:54:12 EDT 2005" 16211 970835 0 0 0 0 3 6 3 40 jdk1.6.0-b57 "Thu Oct 20 01:55:26 EDT 2005" 16279 971627 0 0 0 0 3 6 3 41 jdk1.6.0-b58 "Thu Oct 27 01:56:30 EDT 2005" 16283 971945 0 0 0 0 3 6 3 42 jdk1.6.0-b59 "Thu Nov 03 01:56:58 EST 2005" 16232 972193 0 0 0 0 3 6 3 43 jdk1.6.0-b60 "Thu Nov 10 01:54:18 EST 2005" 16235 972346 0 0 0 0 3 6 3 </screen> <para>次ã«ç¤ºã™ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã¨ã€db.xml ä¸é–“ファイルを生æˆã™ã‚‹ã“ã¨ãªã直接åŒã˜æƒ…å ±ã‚’ä½œæˆã§ãã¾ã™ã€‚</para> <screen> computeBugHistory jdk1.6.0-b*/jre/lib/rt.xml | filterBugs -bugPattern IL_ db.xml | mineBugHistory -formatDates </screen> <para>ã“ã®æƒ…å ±ã‚’ä½¿ã£ã¦ã€ Sun JDK1.6.0 ã®å„ビルドã«ãŠã„㦠FindBugs ã«ã‚ˆã£ã¦ç™ºè¦‹ã•ã‚ŒãŸç„¡é™å†èµ·ãƒ«ãƒ¼ãƒ—ã®æ•°ã‚’表ã™ã‚°ãƒ©ãƒ•ã‚’表示ã—ã¾ã™ã€‚é’色ã®é ˜åŸŸã¯ã€å½“該ビルドã«ãŠã‘ã‚‹ç„¡é™å†èµ·ãƒ«ãƒ¼ãƒ—ã®æ•°ã‚’表ã—ã¦ã„ã¾ã™ã€‚ãã®ä¸Šã«æã‹ã‚Œã¦ã„る赤色ã®é ˜åŸŸã¯ã€ä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã¯å˜åœ¨ã—ãŸãŒå½“該ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯é™¤åŽ»ã•ã‚ŒãŸç„¡é™å†èµ·ãƒ«ãƒ¼ãƒ—ã®æ•°ã‚’表ã—ã¦ã„ã¾ã™ã€‚ (ã—ãŸãŒã£ã¦ã€èµ¤è‰²ã®é ˜åŸŸã¨é’色ã®é ˜åŸŸã‚’足ã—åˆã‚ã›ãŸé«˜ã•ã¯æ±ºã—ã¦æ¸›å°‘ã—ãªã„ã“ã¨ãŒä¿è¨¼ã•ã‚Œã¦ã„ã¾ã™ã€‚ãã—ã¦ã€æ–°ãŸã«ç„¡é™å†èµ·ãƒ«ãƒ¼ãƒ—ã®ãƒã‚°ãŒæŒã¡è¾¼ã¾ã‚ŒãŸæ™‚点ã§å¢—åŠ ã—ã¾ã™) 。赤色ã®é ˜åŸŸã®é«˜ã•ã¯ã€å½“該ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ãŠã„ã¦ä¿®æ£ã¾ãŸã¯å‰Šé™¤ã•ã‚ŒãŸãƒã‚°æ•°ã®åˆè¨ˆã§ç®—出ã•ã‚Œã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 13 ãŠã‚ˆã³ 14 ã«ãŠã„ã¦è¦‹ã‚‰ã‚Œã‚‹æ¸›å°‘ã¯ã€ FindBugs を使用ã—ã¦è¦‹ã¤ã‹ã£ãŸ JDK ã®ãƒã‚°ã®å ±å‘Šã‚’ Sun ãŒå—ã‘å–ã£ãŸã“ã¨ã«ã‚ˆã‚‹ã‚‚ã®ã§ã™ã€‚</para> <mediaobject> <imageobject> <imagedata fileref="infiniteRecursiveLoops.png"/> </imageobject> </mediaobject> <para>db.xml ファイルã¯ã€ jdk1.6.0 ã®ã™ã¹ã¦ã®ãƒ“ルドã«å¯¾ã™ã‚‹æ¤œç´¢çµæžœã‚’ä¿æŒã—ã¦ã„ã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€æ¬¡ã«ç¤ºã™ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã“ã¨ã§ã€å„ªå…ˆåº¦(高)ã¾ãŸã¯å„ªå…ˆåº¦(低)ã®æ£ç¢ºæ€§ã«é–¢ã™ã‚‹è¦å‘Šã®å±¥æ´ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ :</para> <screen> filterBugs -priority M -category C db.xml | mineBugHistory -formatDates </screen> <para>作æˆã•ã‚Œã‚‹è¡¨ã®ä¾‹ :</para> <screen> seq version time classes NCSS added newCode fixed removed retained dead active 0 jdk1.6.0-b12 "Thu Nov 11 09:07:20 EST 2004" 13128 811569 0 1075 0 0 0 0 1075 1 jdk1.6.0-b13 "Thu Nov 18 06:02:06 EST 2004" 13128 811570 0 0 0 0 1075 0 1075 2 jdk1.6.0-b14 "Thu Dec 02 06:12:26 EST 2004" 13145 811786 3 0 6 0 1069 0 1072 3 jdk1.6.0-b15 "Thu Dec 09 06:07:04 EST 2004" 13174 811693 2 1 3 0 1069 6 1072 4 jdk1.6.0-b16 "Thu Dec 16 06:21:28 EST 2004" 13175 811715 0 0 1 0 1071 9 1071 5 jdk1.6.0-b17 "Thu Dec 23 06:27:22 EST 2004" 13176 811974 0 0 1 0 1070 10 1070 6 jdk1.6.0-b19 "Thu Jan 13 06:41:16 EST 2005" 13176 812011 0 0 0 0 1070 11 1070 7 jdk1.6.0-b21 "Thu Jan 27 05:57:52 EST 2005" 13177 812173 0 0 1 0 1069 11 1069 8 jdk1.6.0-b23 "Thu Feb 10 05:44:36 EST 2005" 13179 812188 0 0 0 0 1069 12 1069 9 jdk1.6.0-b26 "Thu Mar 03 06:04:02 EST 2005" 13199 811770 0 0 2 1 1066 12 1066 10 jdk1.6.0-b27 "Thu Mar 10 04:48:38 EST 2005" 13189 812440 1 0 1 1 1064 15 1065 11 jdk1.6.0-b28 "Thu Mar 17 02:54:22 EST 2005" 13185 812056 0 0 0 0 1065 17 1065 12 jdk1.6.0-b29 "Thu Mar 24 03:09:20 EST 2005" 13117 809468 3 0 8 26 1031 17 1034 13 jdk1.6.0-b30 "Thu Mar 31 02:53:32 EST 2005" 13118 809501 0 0 0 0 1034 51 1034 14 jdk1.6.0-b31 "Thu Apr 07 03:00:14 EDT 2005" 13117 809572 0 0 0 0 1034 51 1034 15 jdk1.6.0-b32 "Thu Apr 14 02:56:56 EDT 2005" 13169 811096 1 1 0 1 1033 51 1035 16 jdk1.6.0-b33 "Thu Apr 21 02:46:22 EDT 2005" 13187 811942 3 0 2 1 1032 52 1035 17 jdk1.6.0-b34 "Thu Apr 28 02:49:00 EDT 2005" 13195 813488 0 1 0 0 1035 55 1036 18 jdk1.6.0-b35 "Thu May 05 02:49:04 EDT 2005" 13457 829837 0 36 2 0 1034 55 1070 19 jdk1.6.0-b36 "Thu May 12 02:59:46 EDT 2005" 13462 831278 0 0 0 0 1070 57 1070 20 jdk1.6.0-b37 "Thu May 19 02:55:08 EDT 2005" 13464 831971 0 1 1 0 1069 57 1070 21 jdk1.6.0-b38 "Thu May 26 03:08:16 EDT 2005" 13564 836565 1 7 2 6 1062 58 1070 22 jdk1.6.0-b39 "Fri Jun 03 03:10:48 EDT 2005" 13856 849992 6 39 5 0 1065 66 1110 23 jdk1.6.0-b40 "Thu Jun 09 03:30:28 EDT 2005" 15972 959619 7 147 11 0 1099 71 1253 24 jdk1.6.0-b41 "Thu Jun 16 03:19:22 EDT 2005" 15972 959619 0 0 0 0 1253 82 1253 25 jdk1.6.0-b42 "Fri Jun 24 03:38:54 EDT 2005" 15966 958581 3 0 1 2 1250 82 1253 26 jdk1.6.0-b43 "Thu Jul 14 03:09:34 EDT 2005" 16041 960544 5 11 15 8 1230 85 1246 27 jdk1.6.0-b44 "Thu Jul 21 03:05:54 EDT 2005" 16041 960547 0 0 0 0 1246 108 1246 28 jdk1.6.0-b45 "Thu Jul 28 03:26:10 EDT 2005" 16037 960606 19 0 2 0 1244 108 1263 29 jdk1.6.0-b46 "Thu Aug 04 03:02:48 EDT 2005" 15936 951355 13 1 1 32 1230 110 1244 30 jdk1.6.0-b47 "Thu Aug 11 03:18:56 EDT 2005" 15964 952387 163 8 7 20 1217 143 1388 31 jdk1.6.0-b48 "Thu Aug 18 08:10:40 EDT 2005" 15970 953421 0 0 0 0 1388 170 1388 32 jdk1.6.0-b49 "Thu Aug 25 03:24:38 EDT 2005" 16048 958940 1 11 1 0 1387 170 1399 33 jdk1.6.0-b50 "Thu Sep 01 01:52:40 EDT 2005" 16287 974937 19 27 16 7 1376 171 1422 34 jdk1.6.0-b51 "Thu Sep 08 01:55:36 EDT 2005" 16362 979377 1 15 3 0 1419 194 1435 35 jdk1.6.0-b52 "Thu Sep 15 02:04:08 EDT 2005" 16477 979399 0 0 1 1 1433 197 1433 36 jdk1.6.0-b53 "Thu Sep 22 02:00:28 EDT 2005" 16019 957900 13 12 16 20 1397 199 1422 37 jdk1.6.0-b54 "Thu Sep 29 01:54:34 EDT 2005" 16019 957900 0 0 0 0 1422 235 1422 38 jdk1.6.0-b55 "Thu Oct 06 01:54:14 EDT 2005" 16051 959014 1 4 7 0 1415 235 1420 39 jdk1.6.0-b56 "Thu Oct 13 01:54:12 EDT 2005" 16211 970835 6 8 37 0 1383 242 1397 40 jdk1.6.0-b57 "Thu Oct 20 01:55:26 EDT 2005" 16279 971627 0 0 0 0 1397 279 1397 41 jdk1.6.0-b58 "Thu Oct 27 01:56:30 EDT 2005" 16283 971945 0 1 1 0 1396 279 1397 42 jdk1.6.0-b59 "Thu Nov 03 01:56:58 EST 2005" 16232 972193 6 0 5 0 1392 280 1398 43 jdk1.6.0-b60 "Thu Nov 10 01:54:18 EST 2005" 16235 972346 0 0 0 0 1398 285 1398 44 jdk1.6.0-b61 "Thu Nov 17 01:58:42 EST 2005" 16202 971134 2 0 4 0 1394 285 1396 </screen> </sect2> <sect2 id="incrementalhistory"> <title>増分履æ´ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹</title> <para>ä»®ã«ã€ db.xml ãŒãƒ“ルド b12 - b60 ã«å¯¾ã™ã‚‹ findbugs 実行çµæžœã‚’ä¿æŒã—ã¦ã„ã‚‹å ´åˆã€æ¬¡ã«ç¤ºã™ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã“ã¨ã§ã€ db.xml ã« b61 ã«å¯¾ã™ã‚‹å®Ÿè¡Œçµæžœã‚’è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ :</para> <screen> computeBugHistory -output db.xml db.xml jdk1.6.0-b61/jre/lib/rt.xml </screen> </sect2> </sect1> <sect1 id="antexample"> <title>Ant ã®ä¾‹</title> <para>findbugs ã®å®Ÿè¡Œã¨ãã®å¾Œã®ãƒ‡ãƒ¼ã‚¿ãƒ»ãƒžã‚¤ãƒ‹ãƒ³ã‚°ãƒ„ールã®æ´»ç”¨ã®ä¸¡æ–¹ã‚’実行ã—ã¦ã„ã‚‹ ant スクリプトã®å®Œå…¨ãªä¾‹ã‚’以下ã«ç¤ºã—ã¾ã™ :</para> <screen> <![CDATA[ <project name="analyze_asm_util" default="findbugs"> <!-- findbugs タスク定義 --> <property name="findbugs.home" value="/Users/ben/Documents/workspace/findbugs/findbugs" /> <property name="jvmargs" value="-server -Xss1m -Xmx800m -Duser.language=en -Duser.region=EN -Dfindbugs.home=${findbugs.home}" /> <path id="findbugs.lib"> <fileset dir="${findbugs.home}/lib"> <include name="findbugs-ant.jar"/> </fileset> </path> <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"> <classpath refid="findbugs.lib" /> </taskdef> <taskdef name="computeBugHistory" classname="edu.umd.cs.findbugs.anttask.ComputeBugHistoryTask"> <classpath refid="findbugs.lib" /> </taskdef> <taskdef name="setBugDatabaseInfo" classname="edu.umd.cs.findbugs.anttask.SetBugDatabaseInfoTask"> <classpath refid="findbugs.lib" /> </taskdef> <taskdef name="mineBugHistory" classname="edu.umd.cs.findbugs.anttask.MineBugHistoryTask"> <classpath refid="findbugs.lib" /> </taskdef> <!-- findbugs タスク定義 --> <target name="findbugs"> <antcall target="analyze" /> <antcall target="mine" /> </target> <!-- 分æžã‚’è¡Œã†ã‚¿ã‚¹ã‚¯--> <target name="analyze"> <!-- asm-util ã«å¯¾ã—㦠findbugs を実行ã™ã‚‹ --> <findbugs home="${findbugs.home}" output="xml:withMessages" timeout="90000000" reportLevel="experimental" workHard="true" effort="max" adjustExperimental="true" jvmargs="${jvmargs}" failOnError="true" outputFile="out.xml" projectName="Findbugs" debug="false"> <class location="asm-util-3.0.jar" /> </findbugs> </target> <target name="mine"> <!-- 最新ã®åˆ†æžçµæžœã«æƒ…å ±ã‚’è¨å®šã™ã‚‹ --> <setBugDatabaseInfo home="${findbugs.home}" withMessages="true" name="asm-util-3.0.jar" input="out.xml" output="out-rel.xml"/> <!-- å±¥æ´ãƒ•ã‚¡ã‚¤ãƒ« (out-hist.xml) ãŒæ—¢ã«å˜åœ¨ã™ã‚‹ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹ --> <condition property="mining.historyfile.available"> <available file="out-hist.xml"/> </condition> <condition property="mining.historyfile.notavailable"> <not> <available file="out-hist.xml"/> </not> </condition> <!-- ã“ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¯ã€å±¥æ´ãƒ•ã‚¡ã‚¤ãƒ«ãŒå˜åœ¨ã—ãªã„ã¨ã (åˆå›ž) ã ã‘実行ã•ã‚Œã¾ã™ --> <antcall target="history-init"> <param name="data.file" value="out-rel.xml" /> <param name="hist.file" value="out-hist.xml" /> </antcall> <!-- 上記以外ã®å ´åˆã«å®Ÿè¡Œã•ã‚Œã¾ã™ --> <antcall target="history"> <param name="data.file" value="out-rel.xml" /> <param name="hist.file" value="out-hist.xml" /> <param name="hist.summary.file" value="out-hist.txt" /> </antcall> </target> <!-- å±¥æ´ãƒ•ã‚¡ã‚¤ãƒ«ã‚’åˆæœŸåŒ–ã—ã¾ã™ --> <target name="history-init" if="mining.historyfile.notavailable"> <copy file="${data.file}" tofile="${hist.file}" /> </target> <!-- ãƒã‚°å±¥æ´ã‚’算出ã—ã¾ã™ --> <target name="history" if="mining.historyfile.available"> <!-- ${data.file} ã‚’ ${hist.file} ã«ãƒžãƒ¼ã‚¸ã—ã¾ã™ --> <computeBugHistory home="${findbugs.home}" withMessages="true" output="${hist.file}"> <dataFile name="${hist.file}"/> <dataFile name="${data.file}"/> </computeBugHistory> <!-- å±¥æ´ã‚’算出ã—㦠${hist.summary.file} ã«å‡ºåŠ›ã—ã¾ã™ --> <mineBugHistory home="${findbugs.home}" formatDates="true" noTabs="true" input="${hist.file}" output="${hist.summary.file}"/> </target> </project> ]]> </screen> </sect1> </chapter> <!-- ************************************************************************** License ************************************************************************** --> <chapter id="license"> <title>ライセンス</title> <para>å称「FindBugsã€ãŠã‚ˆã³ FindBugs ã®ãƒã‚´ã¯ã€ãƒ¡ãƒªãƒ¼ãƒ©ãƒ³ãƒ‰å¤§å¦ã®ç™»éŒ²å•†æ¨™ã§ã™ã€‚FindBugs ã¯ãƒ•ãƒªãƒ¼ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã§ã‚り〠<ulink url="http://www.gnu.org/licenses/lgpl.html">Lesser GNU Public License</ulink> ã®æ¡ä»¶ã§é…布ã•ã‚Œã¦ã„ã¾ã™ã€‚使用承諾書を入手ã—ãŸã„å ´åˆã¯ã€ &FindBugs; é…布物ã«å«ã¾ã‚Œã‚‹ <filename>LICENSE.txt</filename> ファイルをå‚ç…§ã—ã¦ãã ã•ã„。</para> <para>最新ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® FindBugs ãŠã‚ˆã³ ãã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã¯ <ulink url="http://findbugs.sourceforge.net">FindBugs web ページ</ulink> ã§å…¥æ‰‹ã§ãã¾ã™ã€‚</para> </chapter> <!-- ************************************************************************** Acknowledgments ************************************************************************** --> <chapter id="acknowledgments"> <title>è¬è¾ž</title> <sect1> <title>貢献者</title> <para>&FindBugs; was originally written by Bill Pugh (<email>pugh@cs.umd.edu</email>). David Hovemeyer (<email>daveho@cs.umd.edu</email>) implemented some of the detectors, added the Swing GUI, and is a co-maintainer.</para> <para>Mike Fagan (<email>mfagan@tde.com</email>) contributed the &Ant; build script, the &Ant; task, and several enhancements and bug fixes to the GUI.</para> <para>Germano Leichsenring contributed Japanese translations of the bug summaries.</para> <para>David Li contributed the Emacs bug report format.</para> <para>Peter D. Stout contributed recursive detection of Class-Path attributes in analyzed Jar files, German translations of text used in the Swing GUI, and other fixes.</para> <para>Peter Friese wrote the &FindBugs; Eclipse plugin.</para> <para>Rohan Lloyd contributed several Mac OS X enhancements, bug detector improvements, and maintains the Fink package for &FindBugs;.</para> <para>Hiroshi Okugawa translated the &FindBugs; manual and more of the bug summaries into Japanese.</para> <para>Phil Crosby enhanced the Eclipse plugin to add a view to display the bug details.</para> <para>Dave Brosius fixed a number of bugs, added user preferences to the Swing GUI, improved several bug detectors, and contributed the string concatenation detector.</para> <para>Thomas Klaeger contributed a number of bug fixes and bug detector improvements.</para> <para>Andrei Loskutov made a number of improvements to the Eclipse plugin.</para> <para>Brian Goetz contributed a major refactoring of the visitor classes to improve readability and understandability.</para> <para> Pete Angstadt fixed several problems in the Swing GUI.</para> <para>Francis Lalonde provided a task resource file for the FindBugs Ant task.</para> <para>Garvin LeClaire contributed support for output in Xdocs format, for use by Maven.</para> <para>Holger Stenzhorn contributed improved German translations of items in the Swing GUI.</para> <para>Juha Knuutila contributed Finnish translations of items in the Swing GUI.</para> <para>Tanel Lebedev contributed Estonian translations of items in the Swing GUI.</para> <para>Hanai Shisei (ruimo) contributed full Japanese translations of bug messages, and text used in the Swing GUI.</para> <para>David Cotton contributed Fresh translations for bug messages and for the Swing GUI.</para> <para>Michael Tamm contributed support for the "errorProperty" attribute in the Ant task.</para> <para>Thomas Kuehne improved the German translation of the Swing GUI.</para> <para>Len Trigg improved source file support for the Emacs output mode.</para> <para>Greg Bentz provided a fix for the hashcode/equals detector.</para> <para>K. Hashimoto contributed internationalization fixes and several other bug fixes.</para> <para> Glenn Boysko contributed support for ignoring specified local variables in the dead local store detector. </para> <para> Jay Dunning contributed a detector to find equality comparisons of floating-point values, and overhauled the analysis summary report and its representation in the saved XML format. </para> <para> Olivier Parent contributed updated French translations for bug descriptions and Swing GUI. </para> <para> Chris Nappin contributed the <filename>plain.xsl</filename> stylesheet. </para> <para> Etienne Giraudy contributed the <filename>fancy.xsl</filename> and <filename>fancy-hist.xsl</filename> stylesheets, and made improvements to the <command>-xml:withMessages</command> option. </para> <para> Takashi Okamoto fixed bugs in the project preferences dialog in the Eclipse plugin, and contributed to its internationalization and localization. </para> <para>Thomas Einwaller fixed bugs in the project preferences dialog in the Eclipse plugin.</para> <para>Jeff Knox contributed support for the warningsProperty attribute in the Ant task.</para> <para>Peter Hendriks extended the Eclipse plugin preferences, and fixed a bug related to renaming the Eclipse plugin ID.</para> <para>Mark McKay contributed an Ant task to launch the findbugs frame.</para> <para>Dieter von Holten (dvholten) contributed some German improvements to findbugs_de.properties.</para> <para>If you have contributed to &FindBugs;, but aren't mentioned above, please send email to <email>findbugs@cs.umd.edu</email> (and also accept our humble apologies).</para> </sect1> <sect1> <title>使用ã—ã¦ã„るソフトウェア</title> <para>&FindBugs; ã¯ã€ã„ãã¤ã‹ã®ã‚ªãƒ¼ãƒ—ンソースソフトウェアパッケージを使用ã—ã¦ã„ã¾ã™ã€‚ã“れらãŒãªã‘ã‚Œã°ã€ &FindBugs; ã®é–‹ç™ºã¯ã€ã‚ˆã‚Šä¸€å±¤å›°é›£ãªã‚‚ã®ã«ãªã£ãŸã“ã¨ã§ã—ょã†ã€‚</para> <sect2> <title>BCEL</title> <para>&FindBugs; includes software developed by the Apache Software Foundation (<ulink url="http://www.apache.org/">http://www.apache.org/</ulink>). Specifically, it uses the <ulink url="http://jakarta.apache.org/bcel/">Byte Code Engineering Library</ulink>.</para> </sect2> <sect2> <title>ASM</title> <para>&FindBugs; uses the <ulink url="http://asm.objectweb.org/">ASM</ulink> bytecode framework, which is distributed under the following license:</para> <blockquote> <para> Copyright (c) 2000-2005 INRIA, France Telecom All rights reserved. </para> <para> Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: </para> <orderedlist numeration="arabic"> <listitem><para> Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. </para></listitem> <listitem><para> Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. </para></listitem> <listitem><para> Neither the name of the copyright holders nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. </para></listitem> </orderedlist> <para> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. </para> </blockquote> </sect2> <sect2> <title>DOM4J</title> <para>&FindBugs; uses <ulink url="http://dom4j.org">DOM4J</ulink>, which is distributed under the following license:</para> <blockquote> <para> Copyright 2001 (C) MetaStuff, Ltd. All Rights Reserved. </para> <para> Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met: </para> <orderedlist numeration="arabic"> <listitem><para> Redistributions of source code must retain copyright statements and notices. Redistributions must also contain a copy of this document. </para></listitem> <listitem><para> Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. </para></listitem> <listitem><para> The name "DOM4J" must not be used to endorse or promote products derived from this Software without prior written permission of MetaStuff, Ltd. For written permission, please contact <email>dom4j-info@metastuff.com</email>. </para></listitem> <listitem><para> Products derived from this Software may not be called "DOM4J" nor may "DOM4J" appear in their names without prior written permission of MetaStuff, Ltd. DOM4J is a registered trademark of MetaStuff, Ltd. </para></listitem> <listitem><para> Due credit should be given to the DOM4J Project (<ulink url="http://dom4j.org/">http://dom4j.org/</ulink>). </para></listitem> </orderedlist> <para> THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. </para> </blockquote> </sect2> </sect1> </chapter> </book>