Dev Study
← 研修トップ

開発の実務

テスト・履歴・デバッグ・レビュー・CI。名前は別々でも、やっていることは同じ「比較」です。何を基準にして、何と比べているのか。基準を用意するのは人の仕事で、比べる相手を取り違えると、緑のまま壊れます。一次ソースの逐語と、手元で再現した実演から積み上げます。

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