最後に何が得られますか? antビルドスクリプトを使用したJavaプロジェクト。 アセンブリの結果は、コンパイルされたプロジェクトと一連のメトリックになります。junitテストに関するレポート、テストによるコードカバレッジの割合、および潜在的なエラーに関するレポートです。 さらに、ビルドプロセス全体が自動モードで毎日行われ、メトリックの履歴全体がグループレポート用に保存されます。
      ソース素材
出発点として、任意のJavaプロジェクトを取り上げます。 プロジェクトには、少なくともいくつかのクラスと、いくつかの単体テストが含まれている必要があります。 同時に、レポートで絶対値が表示されないように、コードの100%をカバーする必要はありません。
完成したプロジェクトの例はこちらからダウンロードできます
必要なものとダウンロードする場所
Javaが既にある場合は、パッケージをインストールします。
antをインストールします。 こちらをダウンロードして、解凍し、パスをant / binに追加します
JUnitはこちらからダウンロードし、ant / libにjunit.jarを配置します
Findbugsをここからダウンロードし 、ant / libにfinbugs-ant.jarを解凍して追加します
コベルチュラはこちらから 、ネジで開梱してください。
ビルド設定
最初に、コマンドラインからプロジェクトを構成します。 これを行うには、プロジェクトルートにbuild.xmlを作成し、そこに配置します
<target name="compile" depends="init"> 
      
        
        
        
      
     <javac destdir="bin" debug="yes"> 
      
        
        
        
      
     <src path="src" /> 
      
        
        
        
      
     </javac> 
      
        
        
        
      
     </target> 
      
        
        
        
      
    
      
      ターゲット「コンパイル」を定義し、コマンドラインを呼び出すことでそれを実現できます
ant compile
      
      depend属性により、initターゲットがコンパイル前に実行されます。 予備ターゲットは、必要なすべてのディレクトリを作成します。
テストを追加する
多くの人がすでに知っているように、現代のソフトウェア開発の世界では、単体テストなしでは不可能です。 私たちのテストプロジェクトも例外ではありません。 機能の一部のためのいくつかのJUnitテストが含まれています。
自動アセンブリは、すべてのテストを実行し、レポートを作成する必要があります。テストの合計数、成功したテストの数。
大規模な顧客と協力する場合、テストでのコードカバレッジの割合についての要件があります。 このメトリックを計算するには、coberturaを使用します。
Coberturaはスタンドアロンアプリケーションとして動作し、htmlレポートを生成できます。 ただし、自動テストでは、AntプラグインとXML形式のレポートを使用します。
カバレッジ計算メカニズムに関するいくつかの言葉。
まず、2つのタイプのカバーリングがあります。コード行のカバーとブランチのカバーです。 ラインカバレッジは、プロジェクト内のラインの総数と、テストの影響を受けたラインの数を単純にカウントします。 分岐カバレッジでは、コード分岐が考慮されます。
カバレッジ統計を計算するには、特別な方法でコードをコンパイルして、coberturaがマーカーを追加する必要があります。 junitの実行中、これらのマーカーはカバレッジを計算します。
マーカーの追加は非常に簡単なプロセスで、coberturaライブラリをクラスパスに追加するだけです。
やってみましょう。
前のantターゲットは単にプロジェクトをコンパイルし、trackターゲットも同じことを行いますが、マーカーを使用してクラスを別のフォルダーに保存します。
<target name="cobertura" depends="compile"> 
      
        
        
        
      
     <javac destdir="bin-cob" debug="yes"> 
      
        
        
        
      
     <classpath refid="cobertura.classpath" /> 
      
        
        
        
      
     <src path="src" /> 
      
        
        
        
      
     </javac> 
      
        
        
        
      
     <cobertura-instrument> 
      
        
        
        
      
     <fileset dir="./bin-cob"> 
      
        
        
        
      
     <include name="**/*.class" /> 
      
        
        
        
      
     <exclude name="**/*Test.class" /> 
      
        
        
        
      
     </fileset> 
      
        
        
        
      
     </cobertura-instrument> 
      
        
        
        
      
     </target> 
      
        
        
        
      
    
      
      さらに、テストクラスをカバレッジカウントから除外します。
次のステップはテストです:
<target name="test" depends="cobertura"> 
      
        
        
        
      
     <junit fork="yes" printsummary="yes"> 
      
        
        
        
      
     <sysproperty key="net.sourceforge.cobertura.datafile" file="cobertura.ser" /> 
      
        
        
        
      
     <classpath refid="cobertura.classpath" /> 
      
        
        
        
      
     <!-- Note! Test are run against classes compiled with cobertura marks --> 
      
        
        
        
      
     <classpath refid="classpath.bin-cob" /> 
      
        
        
        
      
     <formatter type="xml"/> 
      
        
        
        
      
     <batchtest fork="yes" todir="reports"> 
      
        
        
        
      
     <fileset dir="./src"> 
      
        
        
        
      
     <include name="**/*Test.java"/> 
      
        
        
        
      
     </fileset> 
      
        
        
        
      
     </batchtest> 
      
        
        
        
      
     </junit> 
      
        
        
        
      
     <!-- make xml report --> 
      
        
        
        
      
     <cobertura-report srcdir="${src.dir}" destdir="reports" format="xml" /> 
      
        
        
        
      
     <!-- make html report --> 
      
        
        
        
      
     <cobertura-report destdir="coveragehtml"> 
      
        
        
        
      
     <fileset dir="./src"> 
      
        
        
        
      
     <include name="**/*.java"/> 
      
        
        
        
      
     </fileset> 
      
        
        
        
      
     </cobertura-report> 
      
        
        
        
      
     </target> 
      
        
        
        
      
    
      
      このターゲットは2つのステップを実行します。コードをテストし、カバレッジレポートを生成します。
マーカーのおかげで、coberturaはテスト実行プロセスをcobertura.serファイルに書き込みます。 次の手順では、serを使用して、レポートフォルダーにxmlレポートを生成します。 htmlレポートも生成されます。
エラーディテクターの追加
テストとカバレッジはすでに、開発の品質について間接的に言及する非常に重要な指標です。 次のプラグインは情報レポートを提供するだけでなく、プログラミングエラーを回避するのに役立ちます。
Findbugsは、プログラミングエラーのコードを分析するためのシステムです。コードの重複、メソッドの誤った設計などに気づきます。
別のターゲットを追加します。
<target name="findbugs" depends="test"> 
      
        
        
        
      
     <findbugs home="${findbugs.home}" 
      
        
        
        
      
     output="xml" 
      
        
        
        
      
     outputFile="reports/findbugs.xml" > 
      
        
        
        
      
     <sourcePath path="./src/" /> 
      
        
        
        
      
     <class location="./bin/" /> 
      
        
        
        
      
     </findbugs> 
      
        
        
        
      
     </target> 
      
        
        
        
      
    
      
      作業の結果は、潜在的な問題に関するxmlレポートになります。 出力としてhtmlが指定されている場合、レポートはより読みやすい形式で表示されます。
履歴を保存する
この時点で、プロジェクトアセンブリとメトリックを含む既製のbuild.xmlが作成されました。 ビルドごとに、システムは新しいビルドを行い、レポートを書き換えます。 変更の履歴を保持するためのシステムを構成します。 これを行うには、 codemetric.org Webサービスを使用し、レポートはdemo.codemetric.orgの形式で利用できます。
      まず、 www.codemetric.orgに登録し、スペース、グループを作成してビルドする必要があります。 その後、ビルドの名前、ID、およびトークンがプロファイルに表示されます。 次のantプラグインを設定するには、これらの番号とIDが必要です
最初に、レポートサービスのプラグインをダウンロードし、アリのライブラリに書き込みます。
http://www.codemetric.org/codemet.jar
別のターゲットを追加します。
<taskdef name="publish" classname="org.codemetric.ant.Publish"/> 
      
        
        
        
      
     <target name="success"> 
      
        
        
        
      
     <publish 
      
        
        
        
      
     user="123456" 
      
        
        
        
      
     build="234567" 
      
        
        
        
      
     token="345678" 
      
        
        
        
      
     reports="reports" 
      
        
        
        
      
     /> 
      
        
        
        
      
     </target> 
      
        
        
        
      
    
      
      プロファイルからユーザー、ビルド、およびトークンの値を指定します。 レポートは、以前に生成されたレポートへのパスです。
目標を達成する
ant success
      
      スクリプトは、履歴がサーバーに保存されたことを確認する必要があります。その後、.codemetric.orgで履歴を確認できます
クルーズに行こう
だから。 現時点では、テストを実行し、メトリックを計算し、履歴を保存するビルドスクリプトを備えたJavaプロジェクトがあります。 唯一の不便は、これが手動モードで発生することです。
このプロセスを自動化しましょう。
継続的インテグレーションは、スケジュールに基づいて、たとえば1日に1回、プロジェクトを自動的に組み立てる方法です。 T.O. チーム全体がコミットを成功させ、サーバーは一日の終わりに競合などをチェックできます。
ウィキペディアでCIの詳細をお読みください。
プロジェクトを毎分チェックするようにCruiseControlをセットアップします。
シナリオは次のとおりです。
- リポジトリから変更をプルする
 - 変更を確認する
 - 建てる
 - 成功した場合、レポートを送信します
 
プロジェクトがあること、ビルドスクリプトがあること、レポートを公開する目的があることを思い出してください。 そして、私たちにはいくつかの中央リポジトリがありません。
原則として、任意のscmシステムが適していますが、gitを試します。
すでにGitがインストールされていると思われます
プロジェクトをディスクのルートにコピーします。
/ testprojectに移動して実行しましょう
git init
      
      -これにより、新しいリポジトリが作成されます。 プロジェクトには、srcフォルダーとbuild.xmlのみを含める必要があります
すべてのプロジェクトファイルを追加します。
git add 
      
        
        
        
      
     git commit -m "init import"
      
      これで、プロジェクトが内部にあるリポジトリが作成されました。 cruisecontrolのセットアップに移りましょう。
まず、 ここからダウンロードして解凍します。
projectsフォルダーで、gitを使用してプロジェクトの作業用コピーを作成する必要があります。 プロジェクトフォルダーで実行する
git clone /testpoject
      
      新しい作業コピーが表示されます。 これで、クルーズの構成を直接作成できます。
cruiseフォルダー内のconfig.xmlファイルを開き、デフォルトのプロジェクトを削除またはコメント化します。 結果の構成ファイルは次のとおりです。
<cruisecontrol> 
      
        
        
        
      
     
      
        
        
        
      
     <project name="testproject"> 
      
        
        
        
      
     
      
        
        
        
      
     <bootstrappers> 
      
        
        
        
      
     <gitbootstrapper localWorkingCopy="projects/${project.name}/" /> 
      
        
        
        
      
     </bootstrappers> 
      
        
        
        
      
     
      
        
        
        
      
     <modificationset quietperiod="30"> 
      
        
        
        
      
     <git LocalWorkingCopy="projects/${project.name}"/> 
      
        
        
        
      
     </modificationset> 
      
        
        
        
      
     
      
        
        
        
      
     <schedule interval="60"> 
      
        
        
        
      
     <ant anthome="/home/andrew/temp/apache-ant-1.7.1" antWorkingDir="projects/${project.name}/"/> 
      
        
        
        
      
     </schedule> 
      
        
        
        
      
     
      
        
        
        
      
     <publishers> 
      
        
        
        
      
     <onsuccess> 
      
        
        
        
      
     <antpublisher anthome="/home/andrew/temp/apache-ant-1.7.1" target="success" antWorkingDir="projects/${project.name}/" /> 
      
        
        
        
      
     </onsuccess> 
      
        
        
        
      
     </publishers> 
      
        
        
        
      
     
      
        
        
        
      
     </project> 
      
        
        
        
      
     </cruisecontrol> 
      
        
        
        
      
    
      
      各グループの役割を説明しましょう:
ブートストラップはビルドサイクルの前に実行され、ネイティブリポジトリから実際に変更をプルします。
その後、修正セットは、ローカルコピー内のファイルが修正されているかどうかを確認します。 変更がない場合、アセンブリは遅延します。
スケジュールは実際のスケジューラです。スケジュールに記載されている手順の前に、ブートストラップと修正セットが自動的に実行されます。
最後のグループは出版社です。 アセンブリの結果に依存し、成功した場合に実行されます。 理想的には、エラーを報告するためのロジック(たとえば、チームリードレター)を記述する必要があります。
PS
別のscm(cvs、svn)を使用する場合は、ブートストラップとモディフィケーションセットをマークします。
すべてのクルーズオプションの詳細については、 こちらをご覧ください 。
アンドリュー・ロマネンコ
www.romanenco.com