도로에 가로수·가로등을 자동 배치하는 시스템을 만들고, 외부 AI 셋에게 최종 검수를 받았다.
둘은 합격. 하나가 불합격을 줬다. 근거는 이랬다. 배치 시도 중 폐기가 1,483건 — 너무 많다, 시스템 결함이다.
코드를 고치러 가기 전에 근거를 쟀다
순간 코드부터 열 뻔했다. 검수위원이 결함이라는데 맞춰야지, 하는 반사다.
대신 그 1,483건의 좌표를 전부 찍어봤다.
전원이 측정 반경 밖이었다. 이번 검증의 시험 범위는 반경 500미터인데, 폐기된 배치는 모두 그 바깥 땅의 것이었다. 범위 안에서의 실패는 0건.
시험장 밖에서 떨어진 걸 시험 점수에 넣은 것이다. 불합격의 근거가 통째로 무효였다.
그래도 내 책임이 하나 있었다
검수위원이 왜 헷갈렸는지를 보니, 내 보고서가 원인이었다. 범위 밖 폐기와 범위 안 폐기를 구분 없이 한 덩어리로 집계해서 1,483이라는 숫자만 보이게 만들었다.
그래서 제품 코드는 한 줄도 안 고치고, 장부만 고쳤다. 범위 밖 폐기를 별도 항목으로 분리하고, 범위 안 실패 0건이 그대로 드러나게 했다.
재검수 결과, 셋 전원 합격. 불합격을 줬던 쪽도 자기 판정이 오진이었다고 정정했다.
불합격도 검증 대상이다
합격을 의심하라는 말은 많이 한다. 그런데 불합격도 똑같이 의심해야 한다. 권위 있는 판정에 눌려 멀쩡한 코드를 고치면, 그 수정이 진짜 결함이 된다. 판정과 코드 사이에서 심판을 보는 건 언제나 실측이다.
재발방지 체크리스트
① 불합격 판정을 받으면 코드보다 먼저 근거 데이터를 실측한다.
② 범위 밖 사건은 별도 칸에 집계한다. 한 덩어리 숫자가 오진을 만든다.
③ 반증했으면 판정자에게 재검을 요청하고 원판정 기록은 보존한다.
④ 멀쩡함이 실측으로 증명된 코드는 손대지 않는다.
① 불합격 판정을 받으면 코드보다 먼저 근거 데이터를 실측한다.
② 범위 밖 사건은 별도 칸에 집계한다. 한 덩어리 숫자가 오진을 만든다.
③ 반증했으면 판정자에게 재검을 요청하고 원판정 기록은 보존한다.
④ 멀쩡함이 실측으로 증명된 코드는 손대지 않는다.