第2回 テストの目的と種類 - テスト講座

PHP基礎編

TOM先生のテスト講座

Lecutures on PHP

第2回 テストの目的と種類 (その1)

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

テストって"なぜ"やるの?

TOM先生何かをするということには必ず理由があるはずです。「決められているから」「ただなんとなく」ではあまり意味がありませんよね。前回も説明した通り、テストについて、テストをすること自体の目的が普段軽視されているのではないでしょうか?

普段皆さんが行っているプログラム開発は以下の流れになっていると思います。

  • プログラムが欲しいと思っている人から要望を聞く(要件定義)

これが無いと始まらないはずですね。もしかしたら自分自身が欲しいと思ったものを作るということもあるかもしれません。その場合でも自分がどういうものが欲しいかということはある程度まとめることから始めますよね?
この"誰かが持っている要望を満たすものを作る"というのがプログラム開発の最終的な目的となります。これ以降、要望を持っている人のことを"クライアント"と呼びます。


  • 要望をうまく実現するための仕様を検討する(設計)

クライアントの要望は様々なものが複雑に絡み合っている場合がほとんどです。使い勝手も考慮して、それらを整理整頓する作業が設計作業になります。
ここで大枠としての仕様がクライアントの要望とかけ離れている場合は後で痛い目に遭いますので、しっかり決めることが重要です。 このフェーズでは最初は"なぜ作るのか"が重要で、そこから"何を作るのか"に移って、最後に"どのように作るか"が重要になります。(よく最初から"どのように作るか"という話になっちゃいますけどね。)
この段階では文章や図を使って仕様をまとめると思いますが、その文章や図に矛盾が無いかということを確認する作業もある意味"テスト"と呼んでいいのではないでしょうか?(この部分は今回の範囲外なのでこれ以上は言及しません。)


  • 仕様通りに動作するものを作る(開発)

開発というのはいきなり始まるのではなくて、"なぜ"・"何を"・"どのように"ということを決めた設計フェーズを受けて行われる作業ということになります。ここでは黙々とPHPのコードを書いていくという方も多いと思いますが、この開発フェーズでも行うテストがあります。それについては後で説明します。


  • 開発したものが要望通りになっているかを確認する(テスト)

皆さんが普段行っているテストはこのフェーズの作業のことを指していることがほとんどだと思います。
要件定義フェーズにあるように、最終的な目的はクライアントの要望を満たすことですから、この目的を満たしていないと意味がありません。きちんとそれを満たしていることを確認する必要があります。
その確認作業が"テスト"となるわけです。


プログラム開発に限らず、何かを行う場合以下のようなサイクルを取るとスムーズに進みます。("PDCAサイクル"というのを聞いたことがある人もいるのではないでしょうか?)

  • 計画する(Plan)
  • 実行する(Do)
  • 評価する(Check)
  • 改善する(Act)

TOM先生プログラム開発というのは、全体がこのサイクルで行われていて、さらに各フェーズもこのサイクルで行って、各フェーズを細分化して細分化したものも・・・といった形で行うとよりよいものになります。

"テスト"というのはこの"評価(Check)"のことであり、何をするにしても必ず行っておくべき作業です。逆に言うと評価を行っていないものには何か問題が残っている可能性があるということになります。

「一度も通っていない箇所にはバグがある」というのはこの業界でよく言われることですが、そのような箇所を無くすために"テスト"という作業を行うことになるわけです。

テストって"誰のために"やるの?

さてテストは誰のために行う作業でしょうか?

"プログラム開発=クライアントの要望を実現する"という切り口で見ると、作ったものがきちんと要望通りに動いていることが最重要になります。つまりテストを行うのは"クライアントのため"ということになります。「誰のために行うの?」という問いに対して、まずはこれが思いつくのではないでしょうか?

次に"仕事として開発を行う"という切り口で見ると、クライアントの要望に応えることによって利益を得ているわけですから、それがきちんと実行されないと会社が困ってしまいます。つまり"会社のため"ということも言えるでしょう。

またプログラム開発を一人ではなく複数の人で行う場合も多いはずです。複数のメンバーが力を合わせて一つのものを作り上げていくには、それぞれのメンバーが作ったものが合わさってきちんと動くことが重要です。自分の作った部分が原因で問題が発生すると他のメンバーにも迷惑が掛かります。このような切り口で見ると"チームのため"ということもできますね。

しかし、今回の講座で一番強調したいのは"自分のため"という切り口です。

開発者が抱える不安にはたくさんのものがありますが、その根源には次のようなものがあるのではないでしょうか?

「今作ったものはきちんと動くのだろうか?」
「今作ったものは要望通りのものなんだろうか?」

TOM先生もちろん動かないものを作ろうとしている人はいないはずですが、時と場合によっては動かないものができてしまいます。また動いていたとしても「それ欲しいものじゃないよ。」ということになってしまうことがあります。

それが後から発生するかもしれないというのは開発者が抱えている不安だと思います。その不安を解消する作業がテストだと考えられないでしょうか?

細かい単位でテストを行っていくことによって、「よし、ここはちゃんと動いている。」「よし、ここは要望通りだ。」と確認をしながら進むことができ、不安を解消していくことができます。不安が取り除かれればより良い仕事ができると思います。

  • 1
  • 2


Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

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