환급액 590,800원 틀린 채 나갈 뻔했다
check_agent는 내가 만들고 있는 자동화 프로그램이다(이하 이 프로그램). 사람이 화면을 하나하나 눌러보며 확인하던 일을 대신 시켜, 다른 서비스가 제대로 작동하는지 봐주는 역할이다. 지금까지는 화면이 다음으로 잘 넘어가기만 하면 그걸로 "정상"이라 판정해왔다.
최근 이 판정 방식에 대해 7점짜리 진단을 받았다. 이유는 짧았다. 클릭하는 기계지, 검사하는 기계가 아니다.
맞는 말이었다. 화면이 다음으로 넘어갔다는 것과, 그 화면에 적힌 숫자가 맞는 숫자라는 것은 다른 문제다. 택배가 문 앞에 도착했다고 상자 안에 주문한 물건이 제대로 들어있는지는 별개인 것과 같다. 이 프로그램은 그동안 상자가 도착했는지만 보고 있었다.
그래서 시나리오마다 정답을 미리 적어두고, 실행 결과를 그 정답과 하나씩 맞춰보게 고쳤다. 항목을 다 더하면 표시된 합계와 맞는지, 저장한 값을 다시 불러와도 그대로인지, 입력값을 한계까지 밀어붙여도 버티는지 같은 검산 규칙도 같이 넣었다.
바꾸고 나서 열두 번째 실행에서 처음으로 진짜 결함 하나를 잡았다. 어떤 서비스의 해지 화면에서, 환급 총액이 항목별 금액을 다 더한 값과 590,800원 차이가 났다. 들여다보니 환급액이 비어 있는 경우를 시스템이 0원으로 채워 넣고, 그 0원을 진짜 계산값처럼 취급하고 있었다. 값이 없는 것과 0원인 것을 같은 걸로 본 셈이다. 이런 유형의 실수를 고친 기록이 이미 한 번 있었다. 고쳤다고 끝난 게 아니라 다른 자리에서 되풀이된 것이다. 이 값 그대로 화면에 나갔다면, 해지하는 사람이 실제로 받는 환급액이 590,800원만큼 틀린 채로 찍혔을 것이다. 같은 화면에서 목록 위 탭에는 13건이라 적혀 있는데 실제 목록에는 11건만 보이는 것도 같이 걸렸다. 상태가 다른 항목들이 한데 섞여 들어간 탓이었다.
클릭만 확인하던 열한 번의 실행에서는 못 보고 지나간 것들이다. 예전 판정 방식 그대로였다면 이 화면도 "정상"이라는 도장을 받고 다음으로 넘어갔을 것이다.