외부 생성 요청을 반복하지 않고도 고친 코드의 일부는 확인할 수 있었다. 이미 받은 거절 응답이나 저장된 이미지, 전송 기록이 재현 자료가 되기 때문이다. 다만 그 검수가 답하는 질문은 새 원격 생성 전체의 성공과 다르다. 이번에는 그 차이를 어떻게 근거에 남겼는지 정리한다.
기존 답변이 알려 주는 것은 그 답변의 상태다
실제 Gemini 이미지 편집 요청은 새 이미지를 만들지 못하고 제공자 거절로 끝났다. 실행기는 그 문구를 인식하지 못해 없는 이미지를 더 기다리는 오류가 있었다. 같은 요청을 다시 보내야만 이 분류 함수를 시험할 수 있는 것은 아니다. 실제 읽은 응답을 소유 fixture에 넣어 재현할 수 있다.
이때 재현 자료가 된 것은 거절 응답의 구조와 상태다. 계정이 앞으로도 항상 거절할지, 다른 모델이나 시점에서 생성될지는 이 시험의 질문이 아니다. 과거 응답을 현재 제공 범위의 영구적인 선언으로 만들지 않는다. 원래 요청의 실패와 실행기의 잘못된 대기를 나눠야 수정할 코드도 좁아진다.
수정 전 실패와 반대 경우를 함께 둔다
저장된 수정 전 검사에서는 기대한 MEDIA_UNAVAILABLE 대신 RESULT_NOT_COMPLETE가 나 한 항목이 실패했다. 최종 시험에는 같은 거절 문구·새 매체 없음 조건에서 일찍 끝나는 경우와, 같은 단어가 있어도 실제 새 이미지가 있으면 완료하는 반례가 있다. 문구만 보고 이미지를 무조건 거절하지 않도록 한 것이다.
이 시험은 정의한 관찰 자료를 실행기에 공급하는 단위 시험이다. 실제 생성 서버가 새 이미지를 만든 실증과는 다르다. 수정 뒤 전체 회귀 통과 기록도 그 차이를 지우지 않는다. 나는 성공 조건과 거절 조건을 함께 묶어야 분류가 넓어지면서 다른 정상 결과를 막는 일을 찾을 수 있다고 봤다.
새 요청 없이 읽을 수 있는 결과는 먼저 읽는다
생성이 길어 관찰 실행기를 취소했어도 외부 사이트의 생성은 계속될 수 있다. 기존 결과를 읽고 실제 준비된 매체와 새 응답 관계를 대조한 뒤 다운로드를 확인하는 경로가 있다. 관찰을 다시 시작했다고 생성 요청도 다시 시작할 필요는 없다.
그렇다고 예전 이미지를 다시 내려받아 새 편집 이미지 성공이라고 부르지는 않는다. Gemini 기록에서는 새 편집 이미지와 영상이 없어서 해당 다운로드를 실행하지 않았다. 기존 파일의 재확인, 이전 생성물의 저장과 새 생성 완료는 세 가지 다른 결과다. 실패한 요청을 예전 성공 결과로 대신하지 않는 것이 이 구분의 실무적인 이유다.
어느 버전이 무엇을 했는지 문장에 넣는다
파일 선택과 전송 수리를 최종판의 독립 HTTP 수신으로 시험했지만 같은 최종판으로 실제 서비스에 다시 올리지 않은 기록도 있다. 이전 버전의 실사이트 읽기와 생성, 최종 코드의 로컬 수정 근거를 따로 쓴다. 둘 다 유용하지만 하나의 전 과정 재시험으로 합치지 않는다.
현재의 질문이 분류 함수라면 기존 응답과 반례로 상당 부분을 검토할 수 있다. 반면 계정 메뉴, 실제 업로드 수신이나 새 영상 완성이 질문이면 그에 맞는 별도 실증이 필요하다. 재사용한 근거가 충분한지를 먼저 판단해야 외부 요청을 불필요하게 반복하지 않으면서도 확인하지 않은 단계를 완료로 보고하지 않을 수 있다.
아직 하지 않은 시험을 남기는 것도 결과다
이 글의 집필은 과거 보고서·수정 전 결과와 현재 시험 코드를 대조한 작업이다. 원래 외부 생성이나 거절 요청을 새로 보내지 않았다. 공개 실패 실험실은 같은 원칙을 메모리의 합성 전달과 읽기 결과로 보여 주며 실제 매체를 만들지 않는다.
최신 버전의 신규 생성 전체를 아직 확인하지 않았다면 그 빈칸을 남긴다. 다음에 제공 상태나 목적이 바뀌면 현재 입력과 권한을 다시 보고 필요한 시험을 정할 수 있다. 기존 근거를 재사용하는 목적은 미완료를 숨기는 것이 아니라 이미 한 일을 반복하지 않으면서 남은 질문을 더 정확하게 만드는 데 있다. 이런 구분까지 노하우로 공개하고 싶었다.