TestPilot은 대형 언어 모델 (LLM)을 사용하여 JavaScript/TypeScript로 작성된 NPM 패키지에 대한 단위 테스트를 자동으로 생성하는 도구입니다.
TestPilot은 테스트 생성에 LLM을 사용하는 데 초기 탐사를 나타내며 연구 및 탐사의 기초로 오픈 소스로 제공되었습니다. 일상적인 사용의 경우 Coplot Chat의 테스트 생성 기능은 더 나은 결과를 얻을 수 있습니다.
TestPilot은 서명, f 본체 및 프로젝트 문서에서 자동으로 채굴 된 f f 예제 사용에 대한 정보를 포함하여 f 에 대한 테스트의 골격으로 LLM을 F에 대한 테스트의 골격으로 LLM에 프롬프트하여 주어진 기능 f 에 대한 테스트를 생성합니다. 그런 다음 모델의 응답은 구문 분석하고 런닝 가능한 단위 테스트로 변환됩니다. 선택적으로 테스트가 실행되며 실패한 경우 실패한 테스트에 대한 추가 정보로 모델이 다시 프롬프트되어 테스트를 개선 할 수 있습니다.
LLM 기반 테스트 생성을위한 다른 시스템과 달리 TestPilot은 추가 교육 또는 강화 학습이 필요하지 않으며 기능의 예와 관련 테스트는 필요하지 않습니다.
TestPilot을 자세히 설명하는 연구 논문은 Arxiv 및 Ieexplore에서 제공됩니다.
일반적으로 TestPilot을 실행하려면 완료 API가있는 Codex 스타일 LLM에 액세스해야합니다. 사용하려는 LLM API 엔드 포인트의 URL로 TESTPILOT_LLM_API_ENDPOINT 환경 변수를 설정하고 API로 인증하는 데 필요한 헤더가 포함 된 JSON 객체로 TESTPILOT_LLM_AUTH_HEADERS api 엔드 포인트의 URL로 설정하십시오.
이러한 변수의 일반적인 값은 다음과 같습니다.
TESTPILOT_LLM_API_ENDPOINT='https://api.openai.com/v1/engines/code-cushman-001/completions'TESTPILOT_LLM_AUTH_HEADERS='{"Authorization": "Bearer <your API key>", "OpenAI-Organization": "<your organization ID>"}'그러나 이전 실행의 출력에서 모델 응답이 가져 오는 LLM API에 액세스하지 않고 재생 모드에서 TestPilot을 실행할 수 있습니다. 자세한 내용은 아래를 참조하십시오.
사전 제작 된 패키지 또는 소스에서 TestPilot을 설치할 수 있습니다.
TestPilot은 사전 구축 된 NPM 패키지로 제공되지만 현재 NPM 레지스트리에 게시되지는 않습니다. 저장소에서 Tarball을 다운로드하여 일반적인 방식으로 설치할 수 있습니다. 이 분포에는 벤치마킹 하네스가 아닌 TestPilot의 핵심 부분 만 포함됩니다.
src/ 디렉토리에는 TestPilot의 소스 코드가 포함되어 있으며 TypeScript로 작성되어 dist/ Directory로 컴파일됩니다. 테스트는 test/ ; benchmark/ 디렉토리에는 여러 NPM 패키지에서 TestPilot을 실행하기위한 벤치마킹 하네스가 포함되어 있습니다. ql/ 결과를 분석하는 데 사용되는 CodeQL 쿼리를 포함합니다.
이 저장소 체크 아웃의 루트 디렉토리에서 npm build 실행하여 종속성을 설치하고 패키지를 빌드하십시오.
또한 npm run build:watch 수도 있습니다. 그러나 이것은 종속성을 자동으로 설치하지 않으며 벤치마킹 하네스를 구축하지 않습니다.
npm run test 사용하여 테스트를 실행하십시오. 편의를 위해 이것은 종속성을 설치하고 빌드를 실행합니다.
소스에서 TestPilot을 설치하면 벤치마킹 하네스를 사용하여 여러 패키지에서 TestPilot을 실행하고 결과를 분석 할 수 있습니다. 사전 구축 된 패키지에서 TestPilot을 설치하는 경우 현재 사용할 수 없습니다.
기본 사용량은 다음과 같습니다.
node benchmark/run.js --outputDir < report_dir > --package < package_dir > 이렇게하면 <package_dir> 의 패키지에서 내보낸 모든 기능에 대한 테스트를 생성하고 검증하고 결과를 <report_dir> 에 씁니다.
이는 패키지 종속성이 설치되고 빌드 단계가 실행되었다고 가정합니다 (예 : npm i 및 npm run build 사용하여). TestPilot은 또한 mocha 에 의존하므로 테스트중인 패키지가 아직 의존하지 않으면 npm i --no-save mocha 명령을 사용하여 별도로 설치해야합니다.
run-experiment.yml 워크 플로는 GitHub 동작에 대한 실험을 실행하여 최종 보고서를 다운로드 할 수있는 인공물로 생성합니다. results-all 아티팩트에는 모든 패키지의 결과가 포함되어 있으며 다른 아티팩트에는 각 패키지의 개별 결과가 포함되어 있습니다.
TestPilot의 결과는 비 결정적이므로 동일한 기계의 동일한 패키지에서 여러 번 실행하더라도 다른 결과를 얻을 수 있습니다. 그러나 벤치마킹 하네스는 많은 경우 벤치 마크 실행을 재생할 수있는 충분한 데이터를 기록합니다.
이렇게하려면 --api 및 --responses 옵션을 사용하여 이전 실행에서 API 목록 및 응답을 재사용하십시오.
node benchmark/run.js --outputDir < report_dir > --package < package_dir > --api < api.json > --responses < prompts.json >응답 파일에 프롬프트가없는 경우 기본적으로 재생이 실패합니다. 테스트 필로트가 실패한 테스트를 정제하는 경우 일반적으로 발생합니다.이 경우 모델에 대한 프롬프트는 정확한 실패 메시지에 따라 시스템 별 (예 : 로컬 파일 시스템 경로를 포함 함)에 의존하거나 Node.js 버전 또는 기타 요인에 따라 다릅니다.
이러한 한계를 해결하기 위해 --strictResponses false 플래그 핸들 프롬프트를 모델로부터 응답하지 않는 것으로 취급하여 누락 된 프롬프트를 전달할 수 있습니다. 이것은 일반적으로 초기 실행과 동일한 결과를 생성하지는 않지만 많은 경우에 충분합니다.
ql/queries 의 CodeQL 쿼리를 사용하여 실험 실행 결과를 분석 할 수 있습니다. CodeQL을 설정하고 쿼리를 실행하는 방법에 대한 지침은 ql/CodeQL.md 참조하십시오.
이 프로젝트는 MIT 오픈 소스 라이센스의 조건에 따라 라이센스가 부여됩니다. 전체 용어는 MIT를 참조하십시오.
TestPilot은 연구 프로토 타입이며 공식적으로 지원되지 않습니다. 그러나 질문이나 피드백이 있으면 문제를 제기하시면 최선을 다해 응답 할 것입니다.
TestPilot의 초기 버전에 대한 그의 작업에 대해 Aryaz Eghbali (@aryaze)에게 감사드립니다.