最後に何が得られますか? 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