見出し画像

プログラムの単体テストという「カードゲームの効果発動条件」

システムエンジニアがやる仕事の中には「設計」「開発」の他に「テスト」というものがある。単体テストというのは、システムを構成する最小単位のプログラムに対して行うテストのことだ。

設計書やソースコードを参照しながら、「こういうデータを入れたら、こういう結果が起こるだろう」というケースを考えて、プログラムが正しく作られているかというのをチェックする。この単体テストというのはシステムの品質担保に必要なプロセスであり、開発期間の大半を占めることになるが、それゆえ同時に「最もめんどくさい仕事」でもある。

テスト作業の全てがめんどくさいわけではない。例えば、テストで実際に全パターンを動作させてみる作業は割と楽しいし、たまにテストケースにはないめちゃくちゃな動きをさせてみて処理が止まるケースを意図的に見つけると、意外にもストレス解消になったりする。問題は、いちばん最初のテストケースを列挙する段階にある。入力値として想定されるパターンを全て洗い出して、予想結果を書き出す。書き出し作業とその下準備となるデータ作成は、最も単調で退屈なものだ。ケース作成を自動化するツールは世の中に存在しているらしいが、ぼくがそれを使ったことはない。そんなツールが使えるプロジェクトはとても幸福だと思う。テストケース作成作業に時間を取られているときのモチベーションの低下は、なかなかきつい。

さて、この厳しい現実に少しでも価値を与えるために考えた結果、「今、自分はカードゲームのルールを作っているのだ」という自己暗示を思いついた。「バトルフェイズで発動:相手の場にドラゴンがいるとき、自分の場の魔術師の攻撃力が500アップする」みたいなアレ。カードゲームのテキストというのは、条件と効果が明確に分かれて書かれていて、実にシステマチックなのだ。

自己暗示の結果はなかなか良いものだった。テストケースがカードゲームの1枚の効果テキストだと思うことによって、作業が少し楽しくなったし、それだけでなく、文体が整えられて読みやすい仕様書が出来上がるようになった。システム開発とトレーディングカードのデッキ作りのこれほどまでの親和性は、きっと偶然ではないのだろう。こうしてみると1枚1枚のカードがメソッドを持ったクラスオブジェクトのようだ。これでこの作成した"カードセット"で遊ぶのがぼくひとりでないのであれば、これほど有意義な仕事はないのであろう。