자신의 계산기와 일치하지 않았던 작업 예시
저는 주택 개보수 비용 계산기를 제공하는 웹사이트를 운영하고 있습니다.
각 페이지는 동일한 비용을 다음 네 곳에 표시합니다:
- 대화형 위젯.
- 정적 참조 표.
- 서술형 예시.
- FAQ 섹션.
버그를 발견했습니다. 서술형 예시에서는 프로젝트 비용이 $62,300라고 되어 있었는데, 계산기 위젯에서는 동일한 프로젝트 비용이 $56,779라고 나왔습니다.
차액은 $5,500였습니다.
오류의 원인은 숫자를 직접 손으로 입력했기 때문이었습니다. 텍스트에 사용한 가정과 코드에 사용한 가정이 서로 달랐습니다. 텍스트는 새로운 HVAC 유닛을 가정했고, 코드는 기존 시스템을 가정했습니다. 둘 다 타당한 가정이었지만, 서로 일치하지 않았습니다.
이는 흔히 발생하는 실패 사례입니다. 동일한 사실을 두 곳에 저장하면, 데이터는 서로 어긋나기 마련입니다.
저는 두 가지 규칙으로 이 문제를 해결했습니다.
규칙 1: 소스 우선 로직(Source-first logic).
계산기 함수는 숫자가 생성되는 유일한 장소입니다. 더 이상 표나 문단에 숫자를 직접 입력하지 않습니다. 대신, 빌드 시점에 함수를 사용하여 표와 예시를 생성합니다.
함수가 변경되면 페이지 전체가 변경됩니다. 표와 위젯은 동일한 로직을 사용하므로 항상 일치하게 됩니다.
규칙 2: 출처(provenance) 추가하기.
숫자는 그 출처를 알 때만 유용합니다. 이제 모든 계산에는 다음 내용이 포함됩니다:
- 사용된 특정 시나리오.
- 데이터 소스.
- 데이터에 접근한 날짜.
- 데이터 만료일.
비용 데이터는 영구적인 사실이 아닙니다. 이는 유효 기간이 있는(perishable) 사실입니다. 검토 날짜를 추가함으로써 데이터가 틀리기 전에 업데이트해야 한다는 사실을 상기할 수 있습니다.
단일 진실 공급원(Single source of truth)은 일관성을 유지하게 해줍니다. 출처를 추가하는 것은 정직함을 더해줍니다.
동일한 숫자를 두 곳에 표시해야 한다면, 다시 입력하지 마세요. 가져오기(Import) 하세요. 중복 처리는 빌드 프로세스에 맡기세요.
출처: https://dev.to/mark_b5f4ffdd8e7cd58/the-worked-example-that-disagreed-with-its-own-calculator-4cp9