캐릭터를 자전거에 태우는 작업을 했다. 발이 페달에, 손이 핸들에 닿아야 한다.
숫자는 완벽했다. 발과 페달 사이 0.00cm. 소수점 아래까지 0이었다.
그런데 화면을 보면 발이 페달에서 한참 떨어져 있었다.
같은 것을 두 번 적어놓고 뺐다
측정 코드를 열어봤다. 이렇게 돼 있었다.
“발이 가야 할 목표 = 페달 위치”라고 적어두고, 그다음 줄에서 “목표와 페달 사이 거리”를 쟀다.
같은 값을 두 이름으로 부르고 그 둘의 차이를 잰 것이다. 당연히 0이다. 페달이 어디에 있든, 발이 어디에 있든 영원히 0이다.
더 웃긴 건 그 줄 바로 위에 내가 쓴 주석이 있었다는 거다. “같은 값을 두 번 적어 비교하면 안 된다”고. 경고를 써놓고 그 아래 줄에서 정확히 그 짓을 했다.
0.00cm은 통과가 아니라 미측정이었다
이런 지표는 실패를 못 잡는다. 아예 아무것도 재지 않기 때문이다. 그런데 화면에는 초록불이 켜진다. “검사 없음”보다 나쁘다. 검사가 없으면 사람이 의심이라도 하는데, 0.00cm이 찍히면 아무도 안 본다.
고치고 다시 재니 손은 8.41cm, 엉덩이는 3.15cm 벌어져 있었다. 원래 있던 결함이 그제야 보였다.
“대조 불가”라고 쓰게 만들었다
비교 대상이 없으면 0을 찍지 말고 “대조 불가”라고 적게 바꿨다. 화면에 n/a가 뜨는 게 훨씬 정직하다. 못 쟀다는 사실 자체가 정보다.
그리고 목표값은 이제 만든 쪽이 파일에 기록한다. 검사하는 쪽은 그 기록을 읽기만 한다. 검사기가 목표를 다시 계산하면, 같은 식을 두 번 푸는 것이지 검사가 아니다.
재발방지 체크리스트
① 결과가 정확히 0.00이면 계산이 맞은 게 아니라 같은 값을 뺐을 가능성부터 본다.
② 비교 대상이 없으면 0이 아니라 “대조 불가”로 적는다.
③ 만드는 쪽과 검사하는 쪽은 다른 출처를 봐야 한다. 검사기가 목표를 다시 만들면 자기 채점이다.
④ 경고 주석을 써두는 것으로는 안 막힌다. 코드가 막게 만든다.
① 결과가 정확히 0.00이면 계산이 맞은 게 아니라 같은 값을 뺐을 가능성부터 본다.
② 비교 대상이 없으면 0이 아니라 “대조 불가”로 적는다.
③ 만드는 쪽과 검사하는 쪽은 다른 출처를 봐야 한다. 검사기가 목표를 다시 만들면 자기 채점이다.
④ 경고 주석을 써두는 것으로는 안 막힌다. 코드가 막게 만든다.