Golden-Master a Tangled Script Before the Cleanup Diff

개요

복잡하게 얽힌 스크립트의 동작을 먼저 파악하고, 실제 동작에 대한 테스트 코드를 작성한 후, 최소한의 안전한 변경을 적용하는 것이 중요하며, AI 도구는 이러한 검증 과정을 대체할 수 없습니다.

주요 내용

* 문제점: 복잡한 스크립트는 계산, I/O, 포맷팅이 혼합되어 있으며, 테스트가 부족하거나 모킹이 과도하게 사용되어 AI 도구로 인한 미묘한 변경이 다운스트림 작업의 오류를 유발할 수 있습니다. 핵심은 실제 동작을 나타내는 '행동 오라클'의 부재입니다.
* 해결 과정 (6단계):
1. 현황 파악 (Inventory the tangle): 변경 전 실제 실행되는 명령어, 읽고 쓰는 파일, 표준 출력/에러, 종료 코드, 환경 변수 등 네 가지 사실을 기록합니다.
2. 고정점 설정 (Isolate a fixture): 테스트할 입력의 작은 복사본을 준비하되, 실제 환경과 유사하게 '추악한' 행을 유지합니다.
3. 기준값 기록 (Record goldens once): 실제 진입점을 실행하여 표준 출력, 에러, 종료 코드, 파일 내용을 덤프하는 기록기(recorder)를 작성하고, 커밋 전에 모든 기준값 파일을 수동으로 검토합니다.
4. 동작 검증 (Assert the dirt): 기록기와 동일한 구조를 사용하여 실제 실행 결과를 기준값과 정확히 비교하는 테스트를 작성합니다.
5. 변경 분류 (Classify each edit): 모든 의도된 변경 사항을 기준값에 대한 영향 여부로 분류하고, 기준값에 영향을 미치지 않는 변경과 영향을 미치는 변경을 분리하여 처리합니다.
6. 최소 변경 적용 (Apply one safe line): 산술 연산 추출과 같이 기준값에 영향을 미치지 않는 가장 작은 안전한 변경을 먼저 적용하고, 테스트가 통과하는지 확인합니다.
* AI 도구 활용: AI 모델은 기록기나 간단한 추출 코드 초안 작성에 도움을 줄 수 있지만, 오라클이나 행동 분류를 대체할 수는 없습니다. AI 도구 사용 시, 테스트 우선, 재작성 거부, 자체 머신에서의 실행, 기준값 파일 비교 등의 규칙을 준수해야 합니다.
* 제한 사항: 골든 마스터는 버그도 고정하며, 타임스탬프, 랜덤 ID, 순서 없는 집합 등에 의해 실패할 수 있습니다. 대규모 바이너리 출력이나 라이브 네트워크 호출은 별도 처리가 필요하며, 줄 끝 문자나 로케일 차이는 주의해야 합니다.
* 적용 시점: 스펙이 명확한 신규 코드, 불안전하거나 파괴적인 현재 동작, 비밀 정보 포함 시에는 이 프로토콜을 건너뛸 수 있습니다.

시사점

복잡하고 얽힌 스크립트의 안정적인 리팩토링을 위해서는 실제 동작을 '골든 마스터'로 삼아 검증하는 체계적인 테스트 과정이 필수적이며, AI 도구는 이러한 검증 프로세스를 보조하는 역할을 수행할 때 가장 효과적입니다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions