← 研修トップ
開発の実務
テスト・履歴・デバッグ・レビュー・CI。名前は別々でも、やっていることは同じ「比較」です。何を基準にして、何と比べているのか。基準を用意するのは人の仕事で、比べる相手を取り違えると、緑のまま壊れます。一次ソースの逐語と、手元で再現した実演から積み上げます。
- 1約 9 分テストの「期待する出力」は、どこから来たのかテストは、実際の出力を「期待する出力」と比べる作業です。テストランナーが判定するのは一致したかどうかだけで、どちらが正しいかは判定しません。
- 2約 8 分一度も落ちたことのないテストは、落ちられるか分からない「壊れていない」は何と比べたかでしか言えません。テストの緑が意味を持つのは、わざと壊した版を用意し、その版では赤になると確かめたときだけです。この回の比較相手はその壊した版です。
- 3約 8 分テストダブルは、相手についての仮定を書き込んだもの「壊れていない」は、何と比べたかでしか言えません。テストダブル(本物の代わりに置く偽物)を使ったテストが比べている相手は本物ではなく、書いた人が仮定した相手です。
- 4約 9 分時々落ちるテストには、書かれていない入力があるGoogle Testing Blog(2016)は、同じコードで成功と失敗の両方を示すテスト結果を "flaky" と呼びます。この回で比べるのは、期待する出力ではなく、同じコードを走らせた実行同士です。
- 5約 9 分直す前に「壊れている」と判定できる手順を作る「壊れていない」は何と比べたかでしか言えません。「直った」も同じで、比べる相手は、直す前に「壊れている」と答えた判定手順です。それが無いまま直すと、直ったかどうかを何とも比べられません。
- 6約 9 分落ちた場所と、壊れた場所は違うこのコースの芯は「『壊れていない』は、何と比べたかでしか言えない」でした。今回比べるのは、症状(外に見えた誤り)と原因(コードの誤り)です。
- 7約 8 分コミットの粒度は、後で遡る道具の解像度git bisect も git blame も、答えを「コミット」で返します。返ってきたコミットと、その親(1つ前)との違いが、道具が言える最も細かい答えです。
- 8約 8 分レビューが見ているのは、プログラムではなく差分このコースの芯は「『壊れていない』は、何と比べたかでしか言えない」です。レビューが比べているのは変更前後のプログラム全体ではなく、git diff が切り出した差分です。
- 9約 9 分CIは、きれいな別の機械で同じ手順をもう一度走らせること「壊れていない」は、何と比べたかでしか言えません。この回で比べるのは、自分の手元の機械と、リポジトリの中身だけから組み立てた「きれいな機械」です。
- 10約 9 分緑は「その基点に載せたとき」の結果ブランチのテストが緑でも、それは分かれた元のコミット(基点)にそのブランチの変更だけを載せた版の結果です。
- 11約 8 分git revert が戻すのはコードで、データではない前の版に戻したコードが「壊れていない」と言えたのは、当時の形のデータと組み合わせたときの話です。この回が比べるのは、戻した旧コードと、そのあいだに形の変わった新しいデータです。
- 12約 9 分期待する出力が書けないとき、何と比べるか正しい出力を人が前もって書けない処理があります。そのとき比べられるのは、1回の実行の入力と出力の関係と、複数回の実行同士の関係です。