21. 버그는 사람을 죽이고, 회사를 망하게 한다
3- 1999년 NASA Mars Climate Orbiter: 미터법 ↔ 야드법 단위 변환 버그 → 1억 2,500만 달러짜리 우주선 소멸 (Stephenson et al., 1999)
4- 2012년 Knight Capital: 배포 스크립트 오류로 45분 만에 4억 4,000만 달러 손실 → 회사 매각 (SEC, 2013)
5- 2014년 Heartbleed (OpenSSL): 경계 검사 누락 한 줄 → 전 세계 서버 30%의 개인키 노출 (Durumeric et al., 2014)
6- 공통점: 자동화된 테스트가 있었다면 배포 전에 잡을 수 있던 버그
72. Why — 버그 수정 비용은 기하급수적으로 증가한다
8- IBM Systems Sciences Institute 연구에 따르면, 버그 수정 비용은 발견 시점에 따라 급증한다 (Boehm & Basili, 2001):
9 - 요구사항 단계에서 발견: 1×
10 - 설계 단계: 5×
11 - 코딩 단계: 10×
12 - 테스트 단계: 20×
13 - 운영(프로덕션) 단계: 100× 이상
14- 핵심 통찰: "버그를 늦게 잡을수록 비용이 지수적으로 증가" → 따라서 가능한 빨리, 자동으로 잡아야 한다
15- 이것이 "Shift Left Testing" — 테스트를 개발 초기로 당기는 — 철학의 근거 (Smith, 2001)
163. AI/ML 코드에서 테스트가 특히 중요한 이유
17- 일반 소프트웨어 버그: 프로그램이 크래시 → 눈에 보임
18- ML 버그: 모델이 "조용히 잘못 학습" → 정확도가 살짝 떨어지지만 아무도 모름
19- 예시: 전처리에서 feature 순서가 뒤바뀜 → 모델은 여전히 학습되지만 성능 10% 하락
20- "ML 버그는 침묵하기 때문에, 테스트가 유일한 방어선" (Sculley et al., 2015)
214. How — Python 현대 테스트 도구 체인
22- pytest: 테스트 실행 프레임워크 — 함수 하나로 테스트 작성, 자동 발견·실행
23- mypy: 정적 타입 검사 — 실행 전에 타입 불일치 버그 사전 차단
24- ruff: 초고속 린터+포매터 — 코딩 스타일 오류·잠재적 버그 패턴 감지 (Rust 기반, flake8 대비 100배 빠름)
25- CI (Continuous Integration): GitHub Actions 등으로 커밋마다 자동 테스트 실행
26- 이 4가지가 현대 Python 프로젝트의 최소 품질 보장 스택
275. 핵심 명제
28- Michael Feathers의 정의: "테스트가 없는 코드는 레거시 코드다" (Feathers, 2004)
29- 레거시 = 수정하기 무서운 코드 → 테스트가 있어야 리팩토링·기능 추가가 가능
30- 테스트는 비용이 아니라 보험이다 — 작성할 때 10분, 없으면 디버깅에 10시간
31정리: 테스트·디버깅 학습의 3가지 이유
32- ① 경제적 이유: 버그를 일찍 잡을수록 수정 비용이 100배 절감
33- ② ML 특수성: 침묵하는 버그를 잡는 유일한 수단
34- ③ 프로 개발자 표준: pytest + mypy + ruff + CI는 이제 선택이 아닌 필수