소프트웨어 개발 과정에서 기획, 요구사항, 구현, 검증은 각기 다른 도구와 방식으로 진행되어 단절되기 쉽습니다. 이러한 단절은 시간이 지남에 따라 코드와 명세(specification) 간의 불일치를 야기하고, 개발 의사결정의 배경이나 '왜(why)'를 잃어버리게 만듭니다. Provenance는 이 문제를 해결하기 위해 소프트웨어의 요구사항 추적성(traceability)을 처음부터 끝까지 확보하고, 코드와 함께 명세가 진화하도록 돕는 새로운 접근 방식을 제시합니다.
Provenance는 '규칙(Rule)'이라는 개념을 도입하여 개발의 핵심적인 행동 의무를 정의합니다. 예를 들어, 특정 기능이 '1분 안에 각 내보내기를 완료해야 한다'는 규칙을 설정할 수 있습니다. 개발자는 코드에 `#[rule("rule_id")]`와 같은 어노테이션(annotation)을 추가하여 이 규칙이 구현되었음을 명시하고, `#[verifies("rule_id", method)]`를 통해 해당 규칙이 검증되었음을 연결합니다. 이처럼 코드 레벨에서 요구사항과 검증을 직접 연결함으로써, 개발자는 언제든 특정 기능이 어떤 요구사항을 충족하며 어떻게 검증되었는지 쉽게 파악할 수 있습니다. Provenance는 TypeScript 및 Rust 프로젝트를 지원하며, `npx @quality-sh/create-provenance` 또는 `cargo provenance init` 명령어로 쉽게 설치하고 초기화할 수 있습니다.
이 도구는 개발팀이 소프트웨어의 '왜'를 잃지 않고, 코드 베이스가 성장함에 따라 명세도 함께 발전할 수 있도록 돕습니다. 요구사항, 구현, 검증 간의 직접적인 연결은 개발 과정의 투명성을 높이고, 새로운 팀원이 프로젝트에 합류했을 때 코드의 맥락을 빠르게 이해하는 데 기여합니다. 또한, 변경 사항이 발생했을 때 어떤 요구사항에 영향을 미치는지 즉각적으로 파악할 수 있어, 유지보수 비용을 절감하고 소프트웨어 품질을 향상시키는 데 중요한 역할을 할 것입니다. Provenance는 단순히 문서를 관리하는 것을 넘어, 코드 자체에 명세의 생명주기를 통합하려는 시도로, 소프트웨어 개발의 효율성과 신뢰성을 높이는 데 기여할 잠재력을 가지고 있습니다.