정적분석 적중률 100% — 그 100%는 뭘 100%라고 했을까
“100% 정확”이라는 보고를 받았다. 좋은 소식 같았다. 그런데 그 100%가 정확히 뭘 100%라고 부른 건지 물으니, 숫자가 14.7%로 바뀌었다.
바꾼 파일에 맞는 시험만 고르고 싶었다
시험 결과지(어떤 시험이 통과·실패했는지 남기는 기록)는 지금 변경 하나마다 관련 있어 보이는 시험 전부를 돌려서 만든다. 바뀐 파일과 실제로 관련 있는 시험만 골라 돌리면 훨씬 빠를 텐데, 그러려면 “이 파일이 바뀌면 이 시험도 영향받는다”는 관계를 정확히 알아야 한다.
첫 방법은 단순했다. 폴더 위치나 파일 이름 패턴으로 짐작하기. 25개 대상 모듈 전수로 재봤더니 정밀도가 11%까지 무너졌다. 이 방법으로 고르면 열 번 중 아홉 번은 엉뚱한 시험을 고르는 셈이다. 기각.
”100% 정확”이라는 보고
두 번째 방법은 파일 안의 실제 코드 줄(다른 파일을 불러오는 문장)을 읽어서 진짜 의존관계를 그려보는 것이었다. 결과 보고에 **“100% 정확”**이라고 적혀 있었다. 이번엔 됐다 싶었다.
그런데 그 100%가 뭘 기준으로 잰 건지 다시 물었다. 확인해보니, “이 파일 이름이 코드 어딘가에 문자열로라도 언급되는가”를 100%의 정의로 쓰고 있었다. 이건 사실상 첫 번째 방법과 비슷한 느슨한 기준이다.
기준을 좁혀서 “실제로 이 파일을 불러오는 코드 줄이 있는가”만 세었더니, 같은 25개 모듈에서 정확도가 **14.7%**로 떨어졌다.
100%는 거짓말을 안 했다, 정의가 다른 걸 재고 있었을 뿐
100%라는 숫자 자체가 틀린 건 아니었다. 그 숫자가 재고 있던 대상이 내가 기대한 것과 달랐을 뿐이다. “느슨하게 언급됐는가”를 100%로 재면 100%가 나오고, “실제로 불러오는가”를 재면 14.7%가 나온다. 둘 다 참인 문장인데, 듣는 사람은 후자를 기대하고 있었다.
설계 문서에는 이제 어느 정의로 잰 100%인지를 명시하도록 고쳐 넣었다. 숫자 혼자 돌아다니게 두지 않는 것.
배운 것
이 자리에서 몇 번째 마주치는 패턴이다. 재는 도구가 무엇을 재고 있는지 확인 안 하면, 숫자는 있는데 그 숫자가 안심시켜도 되는 숫자인지는 모른다. “100%“를 만나면 그 다음 질문은 “몇 %인가”가 아니라 “무엇의 100%인가”다.
100%라는 숫자를 보면, 그 다음 질문은 “무엇의 100%인가”여야 한다.
— 강대종 / @ssamssae