第8回 UnitTestをする理由(再び) - テスト講座

PHP基礎編

TOM先生のテスト講座

Lecutures on PHP

第8回 UnitTestをする理由(再び) (その3)

 このエントリーをはてなブックマークに追加

変更を恐れるな

開発者の中で以前からよく次のような言葉が言われます。

TOM先生

ちゃんと動いてるんだからその部分は触るな

これはある意味正しいのですが、しかしそれを続けていくと何かがあったときにも触れないモノになっていき、いつかはバグを生み出す部分となっていく可能性を秘めています。

自分の開発しているコードに対して、テストを書いたり、コメントを書いたり、ドキュメントを書いたりして、どのような仕様になっているかを残しておく努力をしましょう。これもよく言われることですが、「数ヶ月後の自分は他人」です。誰かのためではなく自分のためにテストコードを書く習慣をつけていきましょう。

"きれいで動作するコード"を目指そう

我々開発者が目指すべきコードは"きれいで動作するコード"です。これは何を表しているかというと、コードには"きれい/汚い""動作する/動作しない"の2×2の状態があるということであり、最終的には"きれいでかつ、動作するコード"を目指さなければなりません。

とは言っても一足飛びにそこには辿り着けません。前回と今回でやったものというのは次のようなサイクルを辿っていたことになります。

  • (1) 最初テストだけを書く。これはまだ"動作しない"。これは「このように動作して欲しい」という仕様を書いているということでもある。
  • (2) とりあえず"動作する"ようにする。しかしまだ"汚い"
  • (3) さらにテストを追加する。また"動作しない"状態になる。
  • (4) "動作する"ようにコードを修正する。
  • (5) "動作する"ようになったコードを少し洗練させる。これで少し"きれい"になる。
  • (6) このサイクルを繰り返して"きれいで動作するコード"にしていく。

今回の例でいえば最後に正規表現をひとまとめにするというのが(5)の部分にあたります。テストコードがあれば、洗練するときにコードを少々大胆に変えても安心です。なぜかといえば間違った修正をすれば今まで書いてきたテストコードが間違いを指摘してくれるからです。

どうですか? テストコードのある開発スタイルが楽しそうなものに見えてきませんか?

今回のまとめ

  • バグがあったときにはそのバグのパターンをテストとして追加して対応する。
  • 仕様変更があった場合もテストを追加して対応する。
  • テストコードが増えるとその後の修正は安心して行える。テストが機能追加/修正をする勇気を与えてくれる。
  • 最終的に目指すべきは"きれいで動作するコード"である。

最後に

TOM先生8回に渡ってテストについて解説してきましたがいかがだったでしょうか? 今まで他人事であったり、やらされていると感じていたものが身近なものとして感じられたり、やってみようと思われましたでしょうか?

実際にやってみると、まだまだ準備されているツールがかゆいところに手が届かないものであったり、時間に追われておろそかになったりと色々壁にぶつかります。しかし、テストを行うことは最終的には自分の利益になるものです。

少しずつでもいいので、テストと共にある開発スタイルに移行してみてください。世界が少し変わるかもしれませんよ。

  • TOM先生

本名:小林智樹

ソリッド・ブルー株式会社 代表取締役CTO http://solidblue.jp/
Mapleプロジェクト コミッター http://kunit.jp/maple/

SI企業にて、運用保守担当として大手企業や各省庁の大規模システムを支える。
その後、起業・独立し、現在はソリッド・ブルー株式会社のCTOとして、PHPを中心とした技術戦略の立案などを行っている。また、PHPフレームワークMapleプロジェクトの一員として、RESTfulやTDDについて普及活動を展開している。

ご意見・感想フォーム

今回の「TOM先生のテスト講座」への評価・ご意見があればご記入下さい。

評価:
ご意見・感想:



Pick Up Q&A

Q
array_mergeの再帰処理の動作について
 このエントリーをはてなブックマークに追加 
A
>1個になったとき$leftを返しますが、 >このとき、最終的な$leftはnullになるかと思います。 いいえ、最後は「渡された配列をそのまま」返します。要素が2以上あるときとの違いは(並べ替えずに戻るので...

>>続きを読む

再帰関数は最初の内は混乱しますが、非常に上手く使える場面もいずれ出てきます。これを機会に学んでいけるといいですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)