🧪 Software Testing · 6/8 · 약 8분
서로 다른 문서 형식을 직접 비교하면 파일 내부의 표현 차이가 실제 내용 변경처럼 보이기 쉽다. 같은 문장도 줄바꿈과 스타일 정보가 다르게 저장될 수 있고, 표 셀 하나의 수정이 문단 전체 변경으로 잡힐 수도 있다.
비교의 출발점을 파일 형식에서 의미 단위로 옮기기 위해 공통 중간 표현(IR)을 두는 방식을 정리했다. 모든 정보를 합치기보다 검토에 필요한 공통점과 형식별 차이의 경계를 정했다.
#DocumentDiff · #IntermediateRepresentation · #Parsing · #Architecture
형식 A 문서 ── 전용 파서 ─┐
├─ 공통 IR ─ 비교 ─ 검토 가능한 차이
형식 B 문서 ── 전용 파서 ─┘
각 형식의 파서는 저장 방식과 문법을 알고, 공통 IR은 비교할 문서 개념만 표현한다. 비교 단계가 형식의 세부 사항을 모르도록 경계를 둔다.
| 계층 | 책임 | 알아야 하는 것 | 몰라도 되는 것 |
|---|---|---|---|
| 형식별 파서 | 원본을 공통 구조로 변환 | 해당 형식의 문법과 예외 | 다른 형식의 저장 방식 |
| 공통 IR | 문서의 비교 단위를 표현 | 문단, 표, 셀, 목록, 식별자 | 압축·태그 등 형식 내부 표현 |
| 비교 단계 | 대응 항목을 찾고 차이를 계산 | 동일성 규칙과 변경 분류 | 원본 파일을 읽는 방법 |
| 결과 표현 | 사람이 검토할 근거를 제공 | 무엇이 왜 매칭됐는지 | 파서 내부 구현 |
IR이 너무 얇으면 의미를 잃고, 너무 두꺼우면 형식별 예외가 비교 단계로 새어 나온다. 다음 단위를 후보로 둘 수 있다.
| IR 단위 | 보존할 정보 | 비교에서의 역할 |
|---|---|---|
| 문서 | 순서가 있는 블록 묶음 | 전체 구조와 이동 범위 |
| 문단 | 정규화된 텍스트와 제한된 속성 | 내용 추가·삭제·수정 |
| 표 | 행·열·병합 관계 | 셀 단위 의미 비교 |
| 목록 | 항목과 계층 | 순서와 깊이 변경 |
| 식별자 | REQ-001 같은 가상 키와 문맥 | 위치가 바뀐 항목의 대응 단서 |
| 스타일 | 업무 의미가 있는 제한된 표현 | 강조나 상태 표현의 변화 |
모든 서식보다 검토 목적에 영향을 주는 스타일을 먼저 정한다. 장식 차이를 내용 변경으로 과대 표시하지 않으면서 의미 있는 강조는 남긴다.
정규화는 형식 차이에서 생긴 불필요한 노이즈를 줄이는 과정이다. 그러나 지나치게 적용하면 실제 변경도 사라질 수 있다.
| 후보 규칙 | 기대 효과 | 위험 |
|---|---|---|
| 연속 공백 통일 | 저장 방식에서 생긴 차이 감소 | 공백이 의미인 영역까지 바꿀 수 있음 |
| 줄바꿈 표현 통일 | 같은 문단의 불필요한 변경 감소 | 문단 경계를 합치면 구조 변화 누락 |
| 식별자 표기 규칙 통일 | 같은 대상을 쉽게 매칭 | 서로 다른 식별자를 잘못 합칠 수 있음 |
| 일부 장식 속성 제외 | 시각 노이즈 감소 | 업무 의미가 있는 강조 누락 |