연구 과제가 끝나서 결과물을 정리해 넘겨야 했다. 코드와 문서만 넘기면 되는 줄 알았는데 아니었다.
Table of contents
Open Table of contents
재현이 안 됐다
받는 쪽에서 make 가 중간에 죽는다는 연락이 왔는데 내 자리에서는 잘 되던 것이었다.
원인을 찾아보니 하나가 아니었다.
- 특정 판의 컴파일러가 필요했다
- 환경 변수 하나가 설정돼 있어야 했다
- 라이브러리 중에
make install로 손수 넣은 것이 있었다 - 경로가 내 계정 자리인
/home/아래로 박혀 있었다
전부 내 환경에만 있는 것들이었고 오래전에 설정해 두고 잊은 것이라 문서에 적힐 리가 없었다.
원인 — 내 환경에만 있던 것들
문서를 쓸 때 나는 내 자리에서 그것을 읽는데 필요한 것이 이미 다 깔려 있으니 무엇이 빠졌는지가 안 보인다.
몇 해 동안 쌓인 것 중에 어느 것이 이 과제에 필요한지를 나도 모르고 있었다. PATH 에 들어 있는 도구도 LD_LIBRARY_PATH 가 가리키는 라이브러리도 그냥 원래 있는 것으로 느껴진다.
그래서 내 자리에서 문서를 아무리 다시 읽어도 이 목록은 안 나온다. 빠진 것은 읽어서 찾는 것이 아니라 없는 자리에서 부딪혀야 나온다.
깨끗한 환경에서 해 봤다
아무것도 안 깔린 환경을 만들어 저장소에서 받아 ./configure 와 make 까지 그대로 밟았다. 여러 번 막혔고 막힐 때마다 문서에 한 줄씩 추가했다.
[빌드 환경]
컴파일러 X 버전 N (다른 버전에서 오류 확인됨)
필요 라이브러리: A, B, C
환경변수: TOOL_PATH=...
[빌드]
$ ./configure --with-...
$ make
gcc 는 판까지 적었고 다른 판에서 오류가 나는 것을 확인했으므로 그 사실도 괄호에 적어 뒀다. TOOL_PATH 처럼 값이 내 계정 자리를 가리키던 환경 변수도 이름과 함께 적었다.
이 과정을 안 밟았으면 주고받는 연락이 계속 이어졌을 것이다. 내 자리에서는 된다는 답만 반복하게 된다.
실행 조건도 적었다
make 가 끝나도 실행이 안 되는 경우가 따로 있었다. USB 장비가 연결돼 있어야 하고 설정 파일이 있어야 하고 장치를 여는 권한이 필요했다.
조건을 적으면서 그것이 없을 때 무슨 오류가 나는지도 같이 적었다.
장비 미연결 시: "device not found" → USB 연결 확인
설정 없음: "config missing" → config.example 복사
받는 쪽은 조건을 먼저 읽는 것이 아니라 오류를 먼저 만난다. device not found 라는 문구가 README 에 있으면 그것을 검색해서 해당 항목으로 바로 간다.
무엇이 필요한지만 적으면 그 연결이 안 만들어진다. config missing 옆에 config.example 을 복사하라고 적어 두니 질문이 눈에 띄게 줄었다.
검증 — 시험 방법과 원본 자료
이 과제는 수치 목표가 있었다. 그러면 결과 숫자만이 아니라 그 숫자를 어떻게 쟀는지도 넘겨야 한다.
- 시험 환경 구성
- 실행 순서
- 측정 스크립트
- 결과 해석 방법
넷 중에 측정 스크립트가 특히 중요했는데 그것이 없으면 같은 조건에서 다시 잴 방법이 없다.
그리고 내가 측정한 원본 CSV 도 같이 넘겼다. 나중에 다시 쟀을 때 비교할 기준이 있어야 값이 달라졌는지를 안다.
재현할 수 없는 숫자는 근거가 아니라 주장에 그친다. 받는 쪽이 스스로 재서 같은 값을 얻어야 그 숫자가 자기 것이 된다.
안 된 것도 적었다
해 봤다가 안 됐던 방법도 문서에 남겼다.
[검토했으나 채택하지 않음]
방법 A — 이론상 더 빠르나 X 제약으로 불가
방법 B — 구현했으나 Y 조건에서 불안정. 코드는 branch/exp-b 에 있음
이유까지 적어야 쓸모가 있는데 안 된다고만 적으면 다음 사람이 같은 것을 처음부터 다시 해 본다.
방법 B는 코드를 지우지 않고 svn 의 branch/exp-b 에 남겨 뒀다. 불안정했던 조건이 달라지면 쓸 수 있을지도 모른다.
주의 — 남은 제약
완성했다고 말하기 어려운 자리가 있었다. 그것을 숨기지 않고 적었다.
[알려진 제약]
- 온도 N도 이상에서 오차 증가 (보정 미적용)
- 동시 연결 M개 이상에서 미검증
- 장시간 운영 시험 미실시 (최대 연속 K시간까지만 확인)
여기서 미검증과 안 됨을 구분해 적는 것이 중요했는데 앞의 것은 해 보면 될 수도 있고 뒤의 것은 다른 길을 찾아야 한다.
안 해 본 것을 안 된다고 적지도 않고 될 것이라고 적지도 않았다. 어디까지 확인했는지를 숫자로 적으면 받는 쪽이 그 선 밖을 스스로 판단한다.
넘기고 나서
넘긴 뒤에는 그 일을 들여다보지 않았는데 잘 쓰이는지 문제는 없는지 궁금하기는 했다.
그런데 계속 보고 있으면 받은 쪽이 그것을 자기 것으로 못 만들고 무엇을 고칠 때마다 물어보게 된다.
그리고 나도 다음 일에 집중을 못 하게 되므로 질문이 오면 답하는 정도로 뒀다.
정리
- 깨끗한 환경에서 처음부터 빌드해 본다
- 내 자리에서 문서를 다시 읽어서는 빠진 것을 못 찾는다
- 컴파일러는 판까지 적고 다른 판에서 나는 오류도 적는다
- 실행 조건과 그것이 없을 때 나는 오류 문구를 같이 적는다
- 오류에서 원인으로 가는 길이 있으면 질문이 줄어든다
- 수치 목표가 있으면 측정 스크립트와 원본 자료를 함께 넘긴다
- 재현할 수 없는 숫자는 근거가 아니라 주장이다
- 안 된 방법과 그 이유를 적고 코드는
branch/exp-b에 남긴다 - 미검증과 안 됨을 구분해 적고 어디까지 확인했는지를 숫자로 쓴다
- 넘긴 뒤에는 들여다보지 않고 질문이 오면 답한다