실패한 적 없는 안전장치는 안전장치가 아니라 안심시키는 장치다
테스트·경보·dry-run·fallback 같은 안전장치를 만들거나 믿을 때는, 일부러 한 번 망가뜨려 빨간불이 뜨는지 확인한다.
이럴 때
테스트·린트·CI 게이트·경보·fallback 을 새로 달 때. "설치는 해뒀으니까", "문서에 주의라고 적어 두자"는 말이 나올 때. 초록불만 본 장치를 "있으니까 괜찮다"고 믿고 싶어질 때.
이렇게
- 구현을 틀리게 바꿔 빨간불을 보고 원복한다.
- 장치가 못 보는 것을 만들 때 같이 적는다.
- 경보에는 꺼지는 조건을 같이 정한다.
- 도구를 설치했으면 그걸 실제로 부르는 배선이 있는지 본다. fallback 은 실패 경로를 일부러 밟아 본다.
멈출 신호·예외
문서에 "주의해야 한다"를 쓰고 있다면, 그 순간이 테스트나 정적 검사로 막을 시점이다.
설명
안전장치는 빨간불이 된 적이 있어야 안전장치다. 테스트가 0개라 통과하는 러너, 구조적으로 0 이 될 수 없는 경보, 기본값이 부재를 삼켜 한 번도 발동하지 않는 가드는 모두 초록불이었다. 초록불은 "문제가 없다"와 "보지 않았다"를 같은 모양으로 보여 준다.
도구를 설치하는 것과 그 도구가 실제로 불리는 것도 다르다. 테스트 파일이 있는데 실행할 스크립트가 없거나, 가장 강한 훅이 "테스트 없음"을 통과로 치고 있으면 장치는 안심만 준다.
반례
모든 장치에 파괴 검증을 붙이면 작업이 두 배가 된다. 그 장치가 막으려는 사고의 비용으로 가른다. 경보를 지나치게 예민하게 만들면 매번 켜지는 경보가 되고, 결말은 꺼질 수 없는 경보와 같다.
판별법
"이 장치가 빨간불이 된 적이 있나?"
셋 중 하나라도 "모른다"면 아직 검증 전이다. 빨간불이 된 적이 있나, 이 장치가 못 보는 것은 무엇인가, 이 장치가 0 이 되는 상태가 실제로 존재하나.