실패 테스트를 이용한 AI 코드 수정, 먼저 재생성과 비교하라

실패 테스트로 수정 위치를 좁히는 자동 수정 루프의 적용 조건과 재생성 대비 효과를 평가하는 방법을 설명한다.

2026-09-27

수정 위치를 찾기 전에 실패 신호부터 확인한다

실패 테스트로 코드의 의심 구간을 좁히려면, 자동 수정 루프가 볼 수 있는 테스트 중 적어도 하나가 실패해야 한다. 그 테스트를 실행해 줄 단위 실행 범위도 얻어야 한다. 이 조건이 없으면 결함 국소화는 시작할 수 없다.

연구 초록에 따르면, 세 모델과 세 벤치마크에서 나온 실패 후보 488건 중 공개 테스트만으로 국소화할 수 있었던 후보는 44건, 즉 9.0%였다. 가장 큰 이유는 후보 212건이 공개 테스트를 모두 통과하고 숨겨진 테스트에서만 실패했기 때문이다. 실무에서 먼저 측정할 값은 국소화 알고리즘의 정확도보다 운영 중 보이는 테스트가 실패 신호를 제공하는 비율이다.

연구는 증강 테스트까지 사용하면 국소화 가능한 후보가 177건으로 늘어난다고 보고한다. 그러나 이 강한 테스트 신호는 배포된 수정 루프가 사용할 수 없는 조건이며, 연구도 이를 적용 가능한 방법이 아닌 신호의 상한으로 다룬다. 따라서 177건에서 얻은 수정 성과를 공개 테스트만 가진 루프의 예상 성과로 옮겨서는 안 된다.

⤢✕ 실패 후보 488건에서 국소화 가능한 범위 전체 실패 후보 488건 공개 테스트의 적용 가능 범위 공개 테스트만으로 국소화 가능한 후보 44건(9.0%) 공개 테스트를 모두 통과하고 숨겨진 테스트에서만 실패한 후보 212건 증강 테스트를 사용한 신호의 상한 증강 테스트까지 사용하면 국소화 가능한 후보 177건 배포된 수정 루프가 사용할 수 없는 강한 테스트 신호의 결과

국소 수정의 기준선을 전체 재생성으로 둔다

실패 테스트가 가리킨 줄을 고친 뒤 테스트가 통과했다고 해서 위치 정보가 도움이 됐다고 결론 내릴 수는 없다. 모델을 한 번 더 호출한 효과일 수도 있다. 이를 구분하려면 같은 실패 후보와 같은 시도 횟수에서 원래 문제만 보고 해답 전체를 다시 생성한 결과를 기준선으로 둬야 한다.

이 연구의 실험 설계와 결과 전문은 전체 재생성, Ochiai 점수가 가장 높은 구간의 수정, 그리고 같은 길이지만 무관한 코드 구간의 수정을 비교한다. 각 방식에는 최대 16회의 시도가 주어졌다. 강한 테스트 신호로 국소화가 가능한 177건에서, 같은 시도 횟수로 비교한 국소 수정은 전체 재생성에 3:40으로 뒤졌다. 별도로 평가한 다른 계열의 24B 모델에서도 국소 수정의 성과가 11.3%포인트 낮았다.

⤢✕같은 실패 후보전체 재생성Ochiai 점수가 가장 높은구간의 수정같은 길이지만 무관한 코드구간의 수정같은 시도 횟수로 비교

따라서 자동 수정 루프에 구간 수정을 넣기 전에는, 실제 루프가 접근할 수 있는 테스트로 후보를 고르고 전체 재생성과 나란히 평가해야 한다. 연구의 결론 범위는 시험한 24~32B 모델이다.

위치 정보의 효과는 위약군으로 분리한다

전체 재생성보다 뒤지더라도, 실패 테스트가 지목한 위치 자체에는 가치가 있을 수 있다. 이를 확인하는 대조군이 무관한 코드 구간을 같은 길이로 수정하는 위약군이다. 두 구간 수정 방식에 같은 채우기 절차를 적용하면, 의심 위치를 골랐다는 차이를 살펴볼 수 있다.

연구에서 국소 수정은 모델 결과를 합친 분석에서는 위약군보다 앞섰다(11:1, Holm 보정 p=.019). 하지만 사전에 주 분석으로 정한 모델별 시도 단위 분석에서는 어느 모델에서도 차이가 확정되지 않았다(가장 작은 Holm 보정 p=.087). 이 결과를 근거로 “실패 테스트가 지목한 위치의 효과가 입증됐다”고 운영 결정을 내려서는 안 된다. 위치 효과는 시사적이며, 전체 재생성보다 낫다는 결론과도 별개다.

비용은 시도 횟수와 토큰으로 각각 본다

구간 수정은 한 번에 생성하는 코드가 짧다. 연구에서 구간 수정은 시도당 평균 21.7개의 생성 토큰, 전체 재생성은 371.1개였다. 그러나 생성 토큰 평균으로 비용을 다시 매겨도, 국소 수정 16회의 성공률은 6.8%였고 전체 재생성 첫 시도는 이미 10.1%였다.

⤢✕ 국소 수정과 전체 재생성의 생성 토큰 및 성공률 시도당 생성 토큰 · 시도 횟수별 성공률 국소 수정 시도당 평균 생성 토큰 21.7개 성공률 6.8% 16회 VS 전체 재생성 시도당 평균 생성 토큰 371.1개 성공률 10.1% 첫 시도

이 수치를 서비스의 고정 예산으로 쓰기는 어렵다. 연구의 토큰 비교는 시도별 평균 생성 토큰을 이용했고 프롬프트와 사전 처리 비용은 포함하지 않았다. 실행 시간도 체계적으로 기록하지 않았다. 자체 루프를 평가할 때는 시도 횟수와 생성 토큰을 함께 기록하고, 실제 비용 판단에는 프롬프트 비용과 실행 시간도 측정해야 한다.

반복 수정이 같은 코드를 되쓰는지 확인한다

국소 수정에 시도를 더 배정하기 전에, 결과물이 실제로 달라지는지 봐야 한다. 연구에서는 국소 수정 시도의 48.9%가 지운 구간을 글자 그대로 다시 생성했다. 시도당 서로 다른 프로그램 수도 국소 수정은 0.23개, 전체 재생성은 0.83개였다. 동일한 코드를 반복 생성한다면 시도 횟수를 늘려도 새로운 수정 후보가 그만큼 늘지 않는다.

연구는 수정 범위를 넓혀 중간 구간의 중앙값을 1줄에서 5줄로 바꿔 보았다. 그대로 재생성하는 현상은 줄었지만, 넓힌 구간 수정도 전체 재생성보다 뒤졌다. 수정 범위를 넓히는 실험은 해볼 수 있어도, 그것만으로 재생성 대비 성과가 뒤집힌다고 전제해서는 안 된다.

이 글의 근거는 arXiv:2609.00854다. 이 연구를 자동 수정 루프에 적용할 때의 출발점은 분명하다. 먼저 공개 테스트로 국소화할 수 있는 실패의 비율을 세고, 그 후보에서 전체 재생성과 같은 예산으로 비교한다. 그다음 무관한 구간을 고치는 위약군을 통해 수정 위치의 효과를 따로 확인한다.

AI 코드 수정실패 테스트결함 국소화코드 생성평가 설계