다른 브라우저가 편해 보인다는 인상만으로 화면과 동작을 전부 똑같이 만들 필요는 없었다. 나는 같은 입력과 완료 조건으로 비교한 뒤 북극성이 실제로 뒤처진 부분을 찾고 싶었다. 비슷하게 보이는 것보다 같은 업무를 정확히 끝내는지가 중요했다.
비교 전에 성공의 뜻부터 맞췄다
과거 비교는 같은 소유 HTML과 UTF-8 입력으로 읽기·선택·입력·첨부·다운로드 같은 작업을 각각 세 번 수행했다. 이름이 같은 버튼을 눌렀다는 수준이 아니라 실제 값과 저장 횟수, 파일 바이트와 해시를 확인했다. 완료 조건이 달라지면 성공 숫자도 비교할 수 없다.
페이지 제목을 찾는 시험과 글을 외부에 발행하는 시험을 같은 능력으로 묶지 않았다. 이 비교에서 계정 로그인이나 외부 게시는 하지 않았다. 무엇을 잘하는지 말하기 전에 어떤 일까지 시험했는지 제한해야 결과가 다음 구현의 근거가 된다.
새 탭을 만들지 않아도 같은 결과일 수 있다
비교 대상은 특정 링크를 새 탭으로 열었고 북극성은 사용자의 기본 선택에 따라 현재 탭에서 이동했다. 화면 모양을 같게 만들려면 북극성도 새 탭을 만들어야 했겠지만 시험의 질문은 올바른 목적지와 원래 탭 내용의 보존이었다.
둘 다 그 완료 조건을 만족한다면 차이는 곧바로 결함이 아니다. 기존 동작을 무조건 바꾸면 사용자가 익숙하게 쓰던 규칙이 깨질 수 있다. 다만 이 결과를 이름 있는 팝업이나 POST 창의 모든 호환성으로 넓히지도 않았다. 같게 만든 결과와 시험하지 않은 창 동작을 구분했다.
실패한 공개 읽기는 작은 경합 문제였다
수정 전 공개 페이지 읽기는 DOCUMENT_CHANGED로 실패했다. 관찰 도중 광고 같은 하위 프레임이 이동하면서 문서 세대가 바뀌어 전체 결과를 버리는 경로였다. 단순히 다른 브라우저가 더 똑똑하다고 설명했다면 실제 수정 지점을 찾지 못했을 것이다.
원인을 문서 교체 중 읽기로 좁히자 변경도 작아졌다. observe에서 문서·실행 문맥 교체 오류에만 짧은 간격의 제한 재관찰을 넣었다. 정상 읽기는 한 번이고 다른 오류는 그대로 전달한다. 비교의 가치는 우열 선언보다 고쳐야 할 구체적인 경계를 얻는 데 있었다.
읽기 재시도와 행동 재전송을 섞지 않았다
관찰을 다시 읽는다고 클릭이나 제출도 다시 해도 되는 것은 아니다. 수정은 읽기 경로에만 들어갔고 입력·클릭의 조건과 권한, 참조 검사는 유지했다. 전달 결과가 불확실한 행동을 읽기 오류와 같은 정책으로 반복하면 중복 저장이 생길 수 있다.
실제 회귀 시험은 읽기 중 iframe 탐색을 발생시켜 최신 본문과 대상을 얻는지 봤다. 행동 전달 횟수는 0이었다. 어떤 실패를 재현했고 무엇을 반복하지 않았는지 함께 남겨야, 나중에 재시도 로직을 다른 경로로 복사할 때도 원래 의도를 이해할 수 있다.
성공 숫자를 모델 능력으로 바꾸지 않는다
소유 fixture의 14개 작업을 세 번씩 수행한 최종 결과는 양쪽 모두 42/42였다. 하지만 결정적인 시험 제어기가 도구를 호출한 결과다. AI가 자연어 요청을 해석하고 계획한 답변 품질을 비교한 시험은 아니었다.
공개 읽기에서도 프로필과 프로토콜, 검증 단계가 달랐다. 시간과 호출 수를 기록할 수 있어도 그 숫자만으로 모든 사이트에서 더 빠르다고 말할 수 없다. 나는 확인한 완료 조건에서의 동등성과 제품 전체의 우수성을 구별했다. 제한을 적어 두어야 이후 더 어려운 시험을 추가할 자리가 남는다.
차이를 줄이되 잘 되던 기준은 유지한다
다른 제품을 참고하는 일은 같은 화면을 만드는 주문으로 끝나기 쉽다. 나는 비교를 실제 업무의 질문으로 바꾸고 싶었다. 우리 프로그램의 어떤 결과가 부족한지 확인하고, 그 부분을 고친 뒤 이미 통과한 동작과 기존 사용자 작업을 함께 지키는 방식이다.
여기서는 해당 버전의 비교 보고서와 수정 범위를 읽어 설명했다. 지금 다른 브라우저를 다시 실행한 결과가 아니다. 회사에 맞는 업무 프로그램도 비슷하다. 남의 기능 목록을 모두 옮기기보다 필요한 결과와 검증 기준을 정하고, 차이가 있는 곳에 변경을 집중해야 개선의 이유를 설명할 수 있다.