소프트웨어는 자연어 명세(natural language specification)로부터 구현체를 생성하는 AI 에이전트에 의해 작성되는 경우가 증가하고 있으며, 이는 에이전트 기반 코딩(agentic coding)으로 알려진 관행입니다. 코드는 이제 검토 속도보다 빠르게 생성되며, 고유한 실패 패턴을 보이는 것으로 나타났습니다.
프로그램의 불변 속성(invariant properties)을 많은 생성된 입력값에 대해 확인하는 오랜 기술인 Property-based testing (PBT)은 최근 LLM 에이전트가 속성을 작성하면서 재조명되었습니다. 이는 오랫동안 PBT 채택을 방해했던 높은 노력도의 불변 속성 도출 과정을 제거했습니다.
하지만 기존 방법들은 이러한 속성들을 구현체 자체에서만 도출합니다 (Code-driven PBT). 동시에, 제품 요구사항 문서(product requirements document)와 같은 철저한 명세는 에이전트 기반 코딩 내에서 일상화되었지만, 결과 코드 테스트에서의 그 역할은 여전히 충분히 탐구되지 않았습니다.
우리는 에이전트가 작성한 코드를 테스트하기 위한 속성의 출처로서 명세의 가치를 연구합니다. 우리의 핵심 통찰은 명세가 구현체와 달리 코드의 의도된 기능을 기록하며, 여기서 도출된 불변 속성들은 특정 구현 선택에 의해 편향되지 않는다는 것입니다.
우리는 Spec-Driven PBT를 제안합니다. 이는 명세로부터 먼저 불변 속성을 자연어로 표현하고, 그 후에만 구현체를 검사하여 이를 구체적인 테스트로 변환하는 에이전트입니다. ViBench의 25개 애플리케이션에 걸쳐, Spec-Driven PBT는 Code-driven PBT가 놓치는 새로운 일련의 버그를 발견하며, 속성 테스트는 2.4배 적게 작성합니다.
두 접근 방식 모두 대략적으로 동등한 수의 버그를 발견하지만, 중복은 거의 없습니다. 총 169개의 버그 중 거의 60%가 오직 한 가지 방법으로만 발견됩니다. 질적으로 볼 때, Spec-Driven PBT 고유의 버그는 문서화된 제품 워크플로우(product workflows)를 위반하는 경향이 있는 반면, Code-driven PBT의 버그는 구현체의 견고성(implementation robustness)에 집중하여 에이전트가 작성한 코드의 버그 발견에 상호 보완적인 가치를 제공합니다.