「今こうなっている」を書き写したら、間違いも一緒に正解になった

目次

テストを書くというのは、記録を残すこと

作っているアプリに、入力チェックの決まりがあります。

  • リンクを登録するときは、URL が無いと登録できない
  • メモを登録するときは、本文が無いと登録できない

この決まりが本当に効いているかを確かめるコードを書きました。これがテストと呼ばれるもので、
「こういう入力ならこう振る舞うはず」を1件ずつ書いていきます。

書いていて気づきました。登録できる種類はもう1つあって、そちらだけ何のチェックも無い。
URL も本文も、両方空っぽで通ってしまいます。

そのまま書きかけて、手が止まった

素直に書けばこうなります。

「3つ目の種類は、URL も本文も無しで登録できる」

間違ってはいません。実際そう動きます。

ただ、これを書いた瞬間に、それが「そう決めた」という記録になる。

半年後に誰かがチェックを足そうとしたら、このテストが赤くなります。
その人はこう思うはずです。「わざわざテストで固定してあるってことは、意図してこうしたんだな」。

そこで手が止まりました。

調べたら、意図と違っていた

要件を書いた文書を開きました。3つ目の種類は外部から情報を取ってくるもので、
取ってくる先を指定しないと成立しません。 URL が要ります。

初期データも見ました。3件入っていて、3件とも URL が入っています。

つまりURL は必須のはずでした。 チェックが抜けていただけです。

それでも、今は直さないと決めた

この機能は今の段階ではまだ使いません。 器だけ用意して、中身は後の段階で作る。
そう決めてありました。

「バグを見つけたら直す」が常に正しいわけではないと思っています。
今の段階の範囲を広げてしまうと、終わらないものが増えます。

だから直さず、後の工程へ申し送りにしました。

問題は、テストがどっちも同じ顔で残ること

ここが厄介なところで、テストは緑になったかどうかしか教えてくれません。

  • 「こう決めたから、こう動く」→ 緑
  • 「間違っているけど、今こう動く」→ これも緑

見分けがつきません。

なので、テストの名前のほうに「今はこうなっている」と分かる印を付けました。
名前は人間が読むものなので、ここに区別を書けます。

これはテストだけの話ではなさそう

今の状態を書き写しただけの記録は、間違いも一緒に正解として固定します。

  • 手順書を「今やっている通り」に書き起こす
  • チェックリストを「現状の運用」から作る
  • 設定ファイルのコメントに「こうなっています」と書く

どれも同じで、書いた時点で「これが正しい」に見えるようになります。
書いた本人は「今はこう」のつもりでも、読む人には区別がつきません。

分けるのは簡単で、「決めたこと」と「今こうなっていること」を別の言葉で書くだけです。
決めたことには理由が書けます。今こうなっていることには理由が書けません。
理由が書けないものに印を付ける、でもいいと思います。

目次