TestPilot เป็นเครื่องมือสำหรับการสร้างการทดสอบหน่วยโดยอัตโนมัติสำหรับแพ็คเกจ NPM ที่เขียนใน JavaScript/TypeScript โดยใช้รูปแบบภาษาขนาดใหญ่ (LLM)
โปรดทราบว่า TestPilot แสดงถึงการสำรวจระยะแรกในการใช้ LLMs สำหรับการสร้างการทดสอบและได้รับการจัดทำขึ้นในโอเพ่นซอร์สเพื่อเป็นพื้นฐานสำหรับการวิจัยและการสำรวจ สำหรับการใช้งานคุณลักษณะการสร้างการทดสอบแบบวันต่อวันในการแชท Copilot มีแนวโน้มที่จะให้ผลลัพธ์ที่ดีขึ้น
TestPilot สร้างการทดสอบสำหรับฟังก์ชั่น f ที่กำหนดโดยแจ้งให้ LLM มีโครงกระดูกของการทดสอบ f รวมถึงข้อมูลเกี่ยวกับ f ที่ฝังอยู่ในความคิดเห็นของรหัสเช่นลายเซ็น, Body of f และตัวอย่างการใช้งานของ f โดยอัตโนมัติจากเอกสารโครงการ การตอบสนองของโมเดลจะถูกแยกวิเคราะห์และแปลเป็นการทดสอบหน่วยที่เรียกใช้ได้ ทางเลือกการทดสอบจะถูกเรียกใช้และหากล้มเหลวโมเดลจะได้รับแจ้งอีกครั้งพร้อมข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบที่ล้มเหลวทำให้มีโอกาสปรับแต่งการทดสอบ
ซึ่งแตกต่างจากระบบอื่น ๆ สำหรับการสร้างการทดสอบที่ใช้ LLM TestPilot ไม่จำเป็นต้องมีการฝึกอบรมเพิ่มเติมหรือการเรียนรู้การเสริมแรงและไม่จำเป็นต้องมีตัวอย่างของฟังก์ชั่นและการทดสอบที่เกี่ยวข้อง
รายงานการวิจัยที่อธิบายถึงการทดสอบในรายละเอียดมีอยู่ใน Arxiv และ IEEExplore
โดยทั่วไปเพื่อให้สามารถเรียกใช้ TestPilot คุณต้องเข้าถึง LLM สไตล์ Codex ด้วย API ที่สมบูรณ์ ตั้งค่าตัวแปรสภาพแวดล้อม TESTPILOT_LLM_API_ENDPOINT เป็น URL ของจุดสิ้นสุด LLM API ที่คุณต้องการใช้และ TESTPILOT_LLM_AUTH_HEADERS ไปยังวัตถุ JSON ที่มีส่วนหัวที่คุณต้องการตรวจสอบสิทธิ์ด้วย API
ค่าทั่วไปสำหรับตัวแปรเหล่านี้อาจเป็น:
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>"}'อย่างไรก็ตามโปรดทราบว่าคุณสามารถเรียกใช้ TestPilot ในโหมดการทำซ้ำโดยไม่ต้องเข้าถึง LLM API ซึ่งการตอบสนองของแบบจำลองจะถูกนำมาจากผลลัพธ์ของการรันก่อนหน้า ดูรายละเอียดด้านล่าง
คุณสามารถติดตั้ง TestPilot จากแพ็คเกจที่สร้างไว้ล่วงหน้าหรือจากแหล่งที่มา
TestPilot เป็นแพ็คเกจ NPM ที่สร้างไว้ล่วงหน้าแม้ว่าจะยังไม่ได้เผยแพร่ไปยังรีจิสทรี NPM คุณสามารถดาวน์โหลด tarball จากที่เก็บและติดตั้งได้ตามปกติ โปรดทราบว่าการแจกแจงนี้มีเพียงส่วนหลักของ TestPilot ไม่ใช่สายรัดการเปรียบเทียบ
ไดเรกทอรี src/ มีซอร์สโค้ดสำหรับ TestPilot ซึ่งเขียนใน typeScript และได้รับการรวบรวมลงใน dist/ DIRECTORY การทดสอบอยู่ใน test/ ; benchmark/ ไดเรกทอรีมีสายรัดการเปรียบเทียบสำหรับการใช้งาน TestPilot บนแพ็คเกจ NPM หลายชุด และ 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 >โปรดทราบว่าโดยการเล่นซ้ำเริ่มต้นจะล้มเหลวหากไม่พบพรอมต์ใด ๆ ในไฟล์การตอบสนอง โดยทั่วไปจะเกิดขึ้นหาก TestPilot กำลังปรับการทดสอบที่ล้มเหลวเนื่องจากในกรณีนี้พรอมต์ไปยังโมเดลขึ้นอยู่กับข้อความความล้มเหลวที่แน่นอนซึ่งอาจเป็นระบบเฉพาะ (เช่นที่มีพา ธ ระบบไฟล์ท้องถิ่น) หรือขึ้นอยู่กับรุ่น node.js หรือปัจจัยอื่น ๆ
ในการแก้ไขข้อ จำกัด เหล่านี้คุณสามารถผ่าน --strictResponses false ที่จัดการการแจ้งเตือนที่ขาดหายไปโดยการรักษาพวกเขาว่าไม่ได้รับการตอบสนองจากโมเดล โดยทั่วไปจะไม่ให้ผลลัพธ์เช่นเดียวกับการวิ่งครั้งแรก แต่พอเพียงในหลายกรณี
CodeQL แบบสอบถามใน ql/queries สามารถใช้เพื่อวิเคราะห์ผลลัพธ์ของการเรียกใช้การทดสอบ ดู ql/CodeQL.md สำหรับคำแนะนำเกี่ยวกับวิธีการตั้งค่า codeql และเรียกใช้แบบสอบถาม
โครงการนี้ได้รับใบอนุญาตภายใต้ข้อกำหนดของใบอนุญาตโอเพ่นซอร์ส MIT โปรดดู MIT สำหรับข้อกำหนดทั้งหมด
TestPilot เป็นต้นแบบการวิจัยและไม่ได้รับการสนับสนุนอย่างเป็นทางการ อย่างไรก็ตามหากคุณมีคำถามหรือข้อเสนอแนะโปรดยื่นปัญหาและเราจะพยายามอย่างเต็มที่เพื่อตอบสนอง
เราขอขอบคุณ Aryaz Eghbali (@aryaze) สำหรับงานของเขาใน TestPilot เวอร์ชันเริ่มต้น