テストの自動実行で見える化を図る

こんにちは、mi2yo4です。あっという間にクリスマス、年末が近くなってきました。
この時期になると、私の住んでいる地域では風が強い日が多くなるので困りますね。外の風の音を聞くだけで外出する気が無くなってしまいます。

スクリーンショット(2014-12-17 11.34.47)

さて、今日はソフトウェアテストの自動実行について少し書いてみます。
後半は具体的な設定方法の話なので、その分野に興味が無ければ読み飛ばして貰って構いません(^^;

自分たちのソフトウェア開発環境状況を計測できているか

まずは私たちが生産者さんに提供している、あぐりログから話を展開させてみましょう。
あぐりログのサービスを使うことで、生産者さんはハウス栽培環境に関する様々な計測値を「自動的に可視化した状態で見る」ことができます。

なかなかいい感じです。
これをソフト屋さん業界に置き換えてみると、下のような事になるかと思います。

〇〇〇×××を使うことで、ソフト開発者はソフトウェアシステム開発に関する様々な状況を「自動的に可視化した状態で見る」ことができます。

そう、ソフト屋さんだってシステムの開発環境状況を可視化したいのです (^^

特に、
・自分の書いたプログラムのソースコードが、既存のコードをぶち壊すこと無くうまく調和してシステムとして動くこと
が知りたいですね。

「君の書いたコードを適用したら、何かエラーが起きて動かなくなったんだけど」

などと言われると、何とも胃が重くなりそうな気分になります。
通常は、そうならないように本番用のコードを試験する、ちょっとしたテストコードを書いて、既存のコードに悪影響を及ぼしていないかチェックします。
(そこまではやっていたのですが…)

テストを自動実行していなかった

システムを開発していくにつれ、テストコードもどんどんと増えていきます。それを手作業で一つずつ実行させてテストする、という行為はシステム開発当初はいいかもしれませんが、直に破綻します。単純作業の上、テストする時間もどんどんと増えていきますから…

その問題を解決する一つとして「テスト自動化」という技術があります。
それを上手く活用すると下のようになります。

「ソフト開発者がプログラムソースの登録→ビルド用PCがシステムのソース取得→文法チェック、重複チェック、(回帰)テスト実行→結果表示」

つまり、「ソフト開発者がプログラムソースを登録さえすれば、後は自動的にテストまで行って上手く行ったかどうか結果を知らせてくれる」わけですね。これがあるとかなり便利です。

今回、このような話をしているのはテスト実行、それも既存のコードに悪影響を及ぼすかどうかを確認する回帰テストを自動的に行なっておらず、手動で行っていたために社内試験にて「君の書いたコードを適用したら、何かエラーが起きて動かなくなったんだけど」状態が起こっていたのでした。
(胃が重い…orz)

テストを自動実行させる

ここから具体的な手法の話です。
テストコードは書いていたのに、自動的に実行させる環境が無いのが問題だったために対策を施しました。
社内ではPHPUnitを使っていましたが、Jenkins上のPhingから実行させようとするとPHPUnitをインストールしている筈なのに認識しない…orz
(以前はここで詰まってしまい、放置していたのです)

エラーメッセージ内になる「PHPUnitTask requires PHPUnit to be installed」をキーに検索してみると以下のページに辿り着きました。

Phing can’t see PHPUnit

リンク先の事例のように、PhingをPearを使ってインストール、PHPUnitをPharを使ってインストールすると上手く認識してくれないようです。まさにこの事象と同じでした。

        <phpunit haltonfailure="true" printsummary="true" pharlocation="/usr/bin/phpunit">
            <formatter type="xml" outfile="reports/phpunit.xml"/>
            <batchtest>
                <fileset dir="./test">
                    <include name="**/*Test.php"/>
                </fileset>
            </batchtest>
        </phpunit>

pharlocationにphpunitへのパスを追加して実行してみると…無事に実行できました!
これで冒頭の画像のように自動的にテスト実行→結果表示までPCが行ってくれます。

まとめ

今回の対策を通じて、自動的に可視化まで行う重要性というのを改めて認識した次第です。
また、農業とソフト産業、ジャンルは違いますが、いかに手間を省いて現状の把握(見える化)を図るか、という点では両者とも同じ構図と言えるのではないかな、と思いました。

と言うことは、私たちソフト屋さんが思っている事を一般化できると、ある程度生産者さんのやりたい事と言うのも想像できるかもしれません。
これについてはまた別の機会にでも考えてみたいですね。

それではまた〜。