評価方法の考察(第1回)


ども山中です。👦


今回は、評価方法(テスト方法)を考えてみます。
主に単体テストについて考えます。✨



評価方法

評価方法を説明する前に、「何を評価したら良いのか?」を考えて見ます。


評価とは、「現実の結果=期待の結果」を試す事です。
この記事で言う「現実の結果」は、プログラム(実装)の事ですが、
期待の結果」の「期待」は、プログラム(実装)以外で期待する場合があります。



評価対象を関数とした時の、評価方法


関数の評価方法として、ドライバスタブを使う方法があります。
ドライバスタブも、初めて名前を聞く人は良く分からないと思いますが、

飲食店の客と裏方スタッフみたいなものです。
客がドライバで、裏方スタッフがスタブで、ウェイターが関数です。




テストなので、客も裏方スタッフもニセモノですが、それっぽく動きます。👆

(例)

 客「パスタ(食べないけど)をくれ」 → ウェイター「パスタ作って」 → 裏方スタッフ「パスタ(食べられないけど)作るよ」

 裏方スタッフ「パスタ(食品サンプル)作ったよ」 → ウェイター「パスタです」 → 客「ありがとう(食べないけど)」





評価方法の指針

あえて、間違うという事の利点。


評価、テストを始める時、「正しい期待結果」を先に書きますか?
正しくない期待結果」を先に書きますか?

もし、「正しい期待結果」だけを書いたとして、テストし、テストOKが出たとします。
でも、待ってください。この場合、「そのテストの正しさ」はどのぐらい期待できますか?



テストの期待結果は、テスト対象の正しさを保証するものです。
テスト自体の正しさは保証されない」という事実があります。


もしも、「テスト自体が正しくない場合」、「テストOK」は信用できません。

例えば、「実はテストコードを通っていなかった場合」であっても、
テスティングフレームワークはOKとしてしまう可能性があります。



いまいちピンと来ない人のために、会話で表現してみましょう。👆
 
(例)
 
 1. テスティングフレームワーク君「ここで問題ですっ、4307171713 + 24783801 =?」

 2. テストコードさん「4331855514」

 3. テスティングフレームワーク君「正解!」

 4. テストコードさん「いや、違うよ。4331955514が正解だよ」

  5. テスティングフレームワーク君「えっ(汗」




上記の会話は、
テスティングフレームワークが評価コードを評価せずに、テストコードをOKとした場合
を表現したものです。


テスティングフレームワークが、会話の中の評価コード(2.)を評価した場合、
不正解になるはずですが、上記の会話では正解になっています。

先にわざとNGになるコードを書く事は、テストコード自体のバグを検出する事が可能になりますのでお勧めです。



以上、今回は評価方法についてのお話でした。😄👌

記事にしたい事をチラホラ書いていたのですが、
風呂敷が広がりすぎて収集しない場合が多いため、今回の記事は短めです。

次回の評価方法のお話は、組合せ問題について書く予定です。


閲覧ありがとうございました。😎😎✨