2016年の発売直後から大きな話題を呼び、中国・ドイツ・韓国・ブラジル・ロシア・ベトナムなど世界各国にも広がった「学び直し本」の圧倒的ロングセラーシリーズ「Big Fat Notebook」の日本版が刊行された。藤原和博氏(朝礼だけの学校 校長)「プログラミングは新しい言語の獲得だ」、野田クリスタル氏(お笑い芸人・マヂカルラブリー)「プログラミングがやりたくなる! まるでゲームの攻略本みたい!」、尾原和啓氏(元グーグル・IT評論家)「プログラミングを通して、ビジネスにも応用できる考え方が見えてくる!」と絶賛されている。本記事では、全世界700万人が感動した同シリーズのプログラミング編『アメリカの中学生が学んでいる 14歳からのプログラミング』より、本文の一部を抜粋・掲載します。
テストは、エンジニアリングプロセスのなかでも、特に大事な部分といえるだろう。エンジニアリング設計プロセスと同じで、テストがいちばん長い時間を占める。
プログラムには、いろんな不具合が生じることがある。プログラマは、これから紹介する方法を使って、プログラムに起こりうる問題の数をおさえ、プログラムをスムーズに実行できるようにしているのだ。
防御的プログラミング
防御的プログラミングとは、たとえ予想外の出来事が起きたとしても、プログラムがちゃんと機能しつづけるよう、プログラムを設計すること。
そのために、わざとプログラムにエラーを起こして、どうすれば問題が解決するかを調べるなんてケースまであるのだ。
たとえば、ユーザーにメールアドレスの入力を求めるプログラムをきみが書いているとする。それなら、メールアドレス以外の文字列を入力して、わざとエラーを発生させてみるというわけだ。
そのうえで、こんな疑問について考えるのだ。
・ユーザーがメールアドレスの入力フィールドに、まちがって電話番号や名前を入力しても、プログラムは正しく実行されるか?
・ユーザーがまちがった情報を入力できないようにするにはどうすればいい?
ユースケースとテストケースは、プログラムのどの部分に調整が必要なのかを確かめるために、防御的プログラミングで使われる手法だ。
そのリストは、ものすごく細かいフローチャートのこともあるし、きみがパッと思いついたいくつかのアイデアのこともある。
大事なのは、とにかくユーザーがエラーなくプログラムを実行できることだ。
たとえば、きみがゲームのプログラミングを終えたとしたら、そのゲームをはじめから終わりまで、自分でプレイしてみて、思いどおりに動くかどうかを確かめたほうがいいだろう。
テストケース
ユースケースは、ユーザーがプログラムを最後まで完了できるかどうかを確かめるものだけれど、ひとつのユースケースは、たくさんのテストケースからなる。
テストケースとは、ユースケースよりも具体的で、ずっと細かいテストのこと。テストケースでは、きみのプログラムが実行されるときの「条件」をテストに使う。
ユースケースは、必要な機能を定義するのに使われるけれど、テストケースでは、その機能自体をテストするというわけだ。
たとえば、きみがゲームをつくろうとしているなら、スペースキーを押したとき、キャラクターが本当にジャンプするかどうかを確かめるテストケースをつくるのがいい。
そのテストに合格したら、次はどうしよう?
スペースキーを1回だけじゃなく、ずっと押しつづけたらどうなるかをテストするのがいいだろう。
防御的プログラミングがきちんとできていれば、キャラクターは1回しかジャンプしないはずだ。
でも、防御的プログラミングがうまくできていなかったり、スペースキーを長押しした場合のテストを忘れていたりしたら、どうなるだろう?
キャラクターがきみの思ってもみない動きをしてしまうかもしれない。
例をもうひとつ。きみが入力した数値を、10で割り算する電卓アプリをプログラミングしたとする。その場合、テストケースでは、どんな種類の数値を入力しても、プログラムが問題なく機能するかどうかを確かめるといい。1や0を入力しても、プログラムがクラッシュしたりはしないか?
大事なのは、いろんな種類の入力データを使ったテストケースを選ぶということ。
たとえば、電卓アプリなら、1~9の数値だけでテストするんじゃなくて、正の整数、負の整数、有理数、0でもテストしてみよう。