日々動いていて、例えばコミットのたびにテストやPHPMDが動くようにして、動作しないコードや、警告がでるようなコードを検知するために使うからだ。直接ファイルを置くようにしたが、本来であれば、SCMからファイルを取ってきて、かつ、SCMの変更を検知してテストやPHPMDのビルドを行うほうが良いと思われる。SCMの設定とビルドの設定は[ソースコード管理システム]と[ビルド・トリガ]で行う。Jenkinsのプラグインを入れることでgitやmercurialなどといったSCMを使うことができる。ビルドが走るということを理解しておいて欲しい。何はともあれ、テストが落ちている状態はまずいので、いの一番にテストを修正する。今回の例では以下のテストが落ちている。2));}plusというメソッドは、その名のとおり足し算、つまり、1+2=3という処理をするメソッドのつもりである。<integer:3>.3を予期していたのに、2が実際には返ってきたと言われている。テストを実行するために、workspaceに移動してPHPUnitコマンドを実行しよう。FooTest.phpそうすると以下のような表示になるはずである。$b;}となっている。単純な話でplusなハズなのに、掛け算になっている。コマンドを実行しよう。assertions)と全てのテストが通ったことを確認できるだろう。動かすと、テストのエラーが無くなっており、結果画面が青くなっていることが確認できるだろう。次に、PHPCPDの警告を消そう。警告がでたらエラーとしよう。先程の画面のように青い画面にはならないようにしよう。高度な設定画面で、[ビルド結果の閾値]を設定しよう。あったらーとか、新規に増えたらーとか細かく設定できるが、単純に「全ての合計が0より多いとき」という設定をおすすめする。レガシーと戦っているんだとしたら、PHPCPDとか後で説明するPHPMDの警告が0になるのは遠い未来かもしれない。したら例えば閾値をある程度の数で設定するのがいい。あまりに多すぎて見向きもされない指標は意味がない。フォルダ以下は警告0を目指すというのもアリだ(僕のプロジェクトではそうだ)。フォルダ以下だけを実行するジョブを作るのがいいと思う。再度ビルドすると黄色くなるはずである。消す前にJenkins以外から警告を見るようにしよう(なんどもなんども言うが本来はJenkinsのワークスペースでは作業しない)。デフォルトのbuild.xml内のphpcpdタスクを実行せよという命令を行っている。</duplication>というような出力になっているハズである。Jenkinsの画面でも確認できうるように、Foo.phpの11行目からとHoge.phpの4行目からが12行重複してるという出力である。PHPCPDの修正は僕はあんまりパターンがなくて楽なんじゃないかと思う。新しいファイルに共通してる処理を書くか、重複してる二つ以上のコードの親クラスが同一なのであれば、そのコードを親コードに持っていき、元のコードからそれを呼び出すようにすればいいと思う。1;」の行をミスして書くのを忘れてしまったとしよう。その場合でもFooTest.phpとHogeTest.phpというPHPUnitのテストがあり、エラーになるので安心して重複コードを減らすというリファクタリングを行うことができる。修正が終わったらテストを動かし、phpunit.xmlを確認しエラーが0になってるのを確認しよう。言うが今回はworkspaceで作業しているが通常であれば、エラーがないことを確認し、コミットし、Jenkinsで確認しよう。動かすと、PHPCPDのエラーが無くなり、結果画面が青くなっていることが確認できるだろう。対するテストを書き、もともとのHogeTest.phpとFooTest.phpはリファクタリングすべきだと考える。テストをリファクタリングしたときにテストが正しいことを証明するにはどうしたらいいんですかね。次に、PHPMDの警告を消そう。警告がでたらエラーとしよう。先程の画面のように青い画面にはならないようにしよう。設定とほぼ一緒なので、詳しい設定の方法ははぶく。PMDの高度な設定で[ビルド結果の閾値]で全ての合計の閾値を0にしよう。$useParameter;}から、使ってないパラメーターを削除すれば良い。phpcpdpmd.xmlにエラーが出力されている。見づらいし、通常のプロジェクトであると警告の数が多くなることが多いので、実行環境によって、pmdの出力形式が変わるようにしよう。いうプロパティを足そう。phpmd」を実行すると、workspaceにpmd.htmlが出力される。人間には見やすくなったはずである。UnusedFormalParameterの警告は無くなっているのが分かるであろう。JenkinsのPMDプラグインではhtml形式では扱えないので、プロパティの設定を以下のようにpmdformat=xmlと上書きしよう。phpunitテストファイルのほうも修正しておく。通常であればコミットしておこう。次の警告は、Hoge.phpがCyclomaticComplexityと言われて怒られている。これはコードが複雑すぎるという警告である。for文をメソッドに切り出したり、クラス化して委譲するのがいいと思う。やり方はいくつかあるね。Hoge.phpは以下のとおりになっている。$val;}}}}これで、CyclomaticComplexityの警告は消えたはずである。これもテストを実行して確認しよう。本来であればコミットしておこう。TooManyMethodsの警告を消す(@SuppressWarningsバージョン)さて最後にTooManyMethodsの警告を消そう。TooManyMethodsの警告が出ているのはCommonUtilである。CommonUtilは共通で使われるUtilなので、TooManyMethodsなのはしょうがないとしよう。警告を無視するようにしよう。@SuppressWarningsというアノテーションを使えば警告を無視することができる。TooManyMethodsはクラスにつく警告なのでクラスのコメントに、UnusedFormalParameterを無視したかったらメソッドにつく警告なのでメソッドのコメントに入れる。具体的には以下のとおりとなる。エラーが消え、全てのテストエラー、PHPCPDの警告、PHPMDの警告が消え、ジョブの状態が青い状態になったはずである。インストールと設定、cloverでのカバレッジ率の表示さて、みなさん、プロダクトがテストツールとかでテストできるようになってきたらカバレッジ率はかりたいよね。