Qacover เป็นองค์ประกอบในการประเมินความครอบคลุมข้อมูลการทดสอบที่เกี่ยวข้องกับการสืบค้น SQL ที่ดำเนินการในแอปพลิเคชัน Java หรือ. NET ความครอบคลุมถูกวัดตามเกณฑ์ SQL Full Predicate Coverage (SQLFPC) ซึ่งเป็นตัวแปรของ MCDC ที่เหมาะกับการสืบค้น SQL เกณฑ์กำหนดสถานการณ์ที่น่าสนใจ (รายการครอบคลุมการทดสอบ) เพื่อทดสอบการสืบค้น SQL กับฐานข้อมูลทดสอบ สถานการณ์เหล่านี้แสดงเป็นชุดของ กฎความคุ้มครอง นอกจากนี้ยังมีตัวเลือกในการวัดความครอบคลุมของ การกลายพันธุ์สำหรับการสืบค้น SQL (เกณฑ์ SQLMutation)
ทุกครั้งที่แอปพลิเคชันดำเนินการแบบสอบถาม QACOVER จะสกัดกั้นการดำเนินการแบบสอบถามสร้างและประเมินกฎความครอบคลุมและเก็บผลลัพธ์ในสภาพแวดล้อมการพัฒนาท้องถิ่น
ในตอนท้ายของการทดสอบคุณจะได้รับรายงานสรุปและรายละเอียดของการครอบคลุมข้อมูลการทดสอบ นี่คือตัวอย่างของรายงานสรุปของเซสชันการทดสอบ:

ตัวอย่างสำหรับ Java:
qacover-core ลงใน pom.xml ของคุณqacover.properties และ spy.properties จากโฟลเดอร์ qacover-core ไปยังรูทของโครงการของคุณ:p6spy AFER jdbc (เช่นถ้าสตริงการเชื่อมต่อของคุณคือ jdbc:sqlite:./target/TestDB.db มันจะต้องกลายเป็น jdbc:p6spy:sqlite:./target/TestDB.db ) สิ่งนี้จะสร้าง target/qacover/rules ที่มีข้อมูลภายในเกี่ยวกับการประเมินความครอบคลุม เพื่อสร้างรายงาน HTML:
qacover-model-<VERSION>-report.jar จาก Maven Central (ไปที่เวอร์ชันแล้วเรียกดูเวอร์ชันที่เลือกเพื่อดาวน์โหลด)java -jar qacover-model- < VERSION > -report.jar target/qacover/rules target/qacover/reportsindex.html ที่คุณจะพบในโฟลเดอร์ target/qacover/reports หากคุณพบว่าชื่อคลาสไม่ใช่ชื่อที่จุดโต้ตอบที่ดำเนินการแบบสอบถามคุณจะต้องปรับแต่งการกำหนดค่าเพื่อรวมการยกเว้นบางอย่างสำหรับแพ็คเกจของพวกเขา (ดูในภายหลัง) ลบโฟลเดอร์ target/qacover และทำซ้ำอีกครั้ง
โฟลเดอร์ที่มีแพ็คเกจทดสอบ Qacoversample มีตัวอย่างของวิธีการใช้ข้อมูลความครอบคลุมเพื่อปรับปรุงข้อมูลการทดสอบและกรณีทดสอบเพื่อเปิดเผยข้อบกพร่องที่ซ่อนอยู่ มันมีสามสถานการณ์ตามลำดับ:
การเผยแพร่ของสิ่งประดิษฐ์ Java (Java 8 หรือสูงกว่า) ได้รับการตีพิมพ์ใน Maven Central ภายใต้ ID กลุ่ม io.github.giis-uniovi มีสองสิ่งประดิษฐ์ที่แตกต่างกัน:
qacover-core : สิ่งประดิษฐ์หลักที่ใช้เป็นการพึ่งพา AA ในแอปพลิเคชันของคุณ (ดังแสดงในการเริ่มต้นอย่างรวดเร็ว)qacover-model : มีเฉพาะโมเดลและคลาสที่จะทำการรายงานและเพื่อตรวจสอบกฎความครอบคลุม ใช้ถ้าคุณต้องการเข้าถึงกฎความคุ้มครองที่สร้างขึ้นก่อนหน้านี้ (เช่นเพื่อสร้างรายงานจากโปรแกรม)แต่ละอันมีขวดที่สามารถดาวน์โหลดได้อีกขวดที่มีคุณสมบัติเพิ่มเติม:
qacover-core uber jar มันรวมถึงการพึ่งพาที่จำเป็นทั้งหมด (ไม่รวม slf4j ) และพวกเขาจะ ถูกแรเงา (เช่นเปลี่ยนชื่อในเนมสเปซที่แตกต่างกันเพื่อหลีกเลี่ยงความขัดแย้งในการพึ่งพา):-uber Qualifier ถ้าด้วยเหตุผลใดก็ตามที่คุณไม่สามารถใช้มันเป็นการพึ่งพาในแอปพลิเคชันของคุณ (เช่นการปรับใช้ในแอปพลิเคชันเซิร์ฟเวอร์) คุณเพียงแค่ต้องใส่ JAR ในไลบรารีเซิร์ฟเวอร์ของคุณและตั้งค่าการกำหนดค่าให้ใช้ QACOVER<qualifier>uber</qualifier> ไปยังการประกาศการพึ่งพาqacover-model standalone: ดาวน์โหลดสิ่งประดิษฐ์ด้วย -report Qualifier เพื่อสร้างรายงานจากบรรทัดคำสั่งดังที่แสดงในการเริ่มต้นอย่างรวดเร็วการเผยแพร่สำหรับ. NET แพลตฟอร์มถูกเผยแพร่ใน NUGET เช่นเดียวกับ Java มีสองแพ็คเกจที่แตกต่างกัน:
QACover : แพ็คเกจหลัก (NetStandard2.9) เพื่อรวมเป็นข้อมูลอ้างอิงแพ็คเกจในการกำหนดค่าโครงการของคุณ (เช่นไฟล์. csproj หากคุณใช้ C#)QACoverReport : เครื่องมือ DOTNET (NETCORE2.0) เพื่อสร้างรายงานจากบรรทัดคำสั่ง: ติดตั้งเครื่องมือด้วย dotnet tool install QACoverReport และดำเนินการเป็นคำสั่ง QACoverReport <rules folder> <reports folder> บน Java คุณต้องมีไฟล์การกำหนดค่าสองไฟล์เพื่อประเมินความครอบคลุม: qacover.properties และ spy.properties และเพื่อปรับแต่งไดรเวอร์ JDBC บน. NET คุณต้องการเพียงรหัสแรกพร้อมกับรหัสเพิ่มเติมบางส่วนเพื่อสกัดกั้นการสืบค้น
QACOVER มองหา qacover.properties ในลำดับนี้:
qacover.properties ที่มีอยู่ในโมดูล qacover-core ของ repo นี้มีการกำหนดค่าทั่วไปที่เหมาะสมสำหรับสถานการณ์ทั่วไป แต่บางครั้งมันจะต้องปรับแต่ง ดูไฟล์สำหรับรายละเอียดเกี่ยวกับพารามิเตอร์การกำหนดค่าแต่ละตัว ต่อไปเราเน้นสิ่งที่สำคัญที่สุดที่เป็นเกณฑ์การรวมและการยกเว้น
เมื่อบรรทัดของวิธีการในแอปพลิเคชันของคุณดำเนินการสืบค้น SQL ( จุดปฏิสัมพันธ์ ) ห่วงโซ่การโทรไปยังวิธีการของเฟรมเวิร์กของคุณจะถูกดำเนินการจนกว่าจะถึงวิธีไดรเวอร์ที่ดำเนินการค้นหาจริง นี่คือจุดที่ตรวจพบการดำเนินการแบบสอบถามจริง แต่สิ่งที่เราต้องการคือการกำหนดจุดปฏิสัมพันธ์ในแอปพลิเคชัน เพื่อให้บรรลุสิ่งนี้ QACOVER ตรวจสอบสแต็กการโทร ณ จุดของการดำเนินการจริงและไม่รวมทุกการโทรทุกครั้งในแพ็คเกจเฟรมเวิร์กใด ๆ จนกว่าจะหาจุดของการโต้ตอบฐานข้อมูลในวิธีการของคุณ
Qacover ไม่รวมแพ็คเกจระบบเช่น Java, System, P6SPY หรือแพ็คเกจ QAcover แต่ขึ้นอยู่กับเฟรมเวิร์กคุณต้องกำหนดค่าการยกเว้นเพิ่มเติมโดยการตั้งค่าคุณสมบัติ qacover.stack.exclusions ในไฟล์ qacover.properties
ตัวอย่าง : โฟลเดอร์ it/spring-petclinic-main มีตัวอย่างทั่วไปจาก Spring Boot การยกเว้นจะประกาศเป็น:
qacover.stack.exclusions=org.springframework.,org.hibernate.,com.zaxxer.hikari.,com.sun.,sun.reflect.
นั่นเป็นการลบคลาสเฟรมเวิร์กที่เราต้องการข้ามเพื่อค้นหาจุดปฏิสัมพันธ์ที่อยู่ที่ org.springframework.samples.petclinic.PetclinicIntegrationTests คลาส
อย่างไรก็ตามในกรณีนี้จุดปฏิสัมพันธ์อยู่ภายใต้ org.springframework เราต้องเพิ่มพารามิเตอร์การรวมเพื่อให้แน่ใจว่า org.springframework.samples. ไม่ได้รับการยกเว้น:
qacover.stack.inclusions=org.springframework.samples.
มีพารามิเตอร์อื่น ๆ ในการกำหนดค่าเกณฑ์การรวมสำหรับแพ็คเกจและเกณฑ์การยกเว้นสำหรับชื่อคลาสหรือชื่อตาราง ดู qacover.properties สำหรับรายละเอียดเพิ่มเติม
spy.properties ที่มีอยู่ในโฟลเดอร์ qacover-core ของ repo นี้มีการกำหนดค่าน้อยที่สุดที่ต้องใช้โดย P6SPY:
modulelist=giis.qacover.driver.InterceptorFactory จะต้องมีอยู่เสมอเพื่อระบุจุดที่ p6spy ผ่านการควบคุมไปยัง qacover ดูไฟล์ spy.properties หรือ P6Spy documentation สำหรับรายละเอียดเพิ่มเติม
การกำหนดค่าสำหรับ. NET Project ใช้ qacover.properties เดียวกันกว่า Java แต่ไม่ได้ใช้ spy.properties มันต้องใช้การเข้ารหัสบางอย่าง:
DbContext ดูเช่น eF2InterceptorContext.cs การบันทึกสามารถกำหนดค่าสำหรับแพ็คเกจเริ่มต้นด้วย giis.qacover. -
นอกเหนือจากบันทึกมาตรฐานแล้วโฟลเดอร์อื่น ๆ log-* ถูกสร้างขึ้นในโฟลเดอร์ rules เพื่อแสดงข้อมูลการดีบักเพิ่มเติมเกี่ยวกับการสอบถามที่ได้รับการประเมินสคีมาฐานข้อมูลและกฎความครอบคลุม
การสร้างรายงานสร้างชุดไฟล์ HTML แบบคงที่ในโฟลเดอร์ที่กำหนดเพื่อตรวจสอบสรุปและรายละเอียดของข้อมูลความครอบคลุมได้อย่างง่ายดาย
ในการสร้างรายงานคุณมีสามตัวเลือก:
qacover-model standalone ดังแสดงในการเริ่มต้นอย่างรวดเร็วและดำเนินการ: java -jar qacover-model- < VERSION > -report.jar target/qacover/rules target/qacover/reportsqacover-model ใน ClassPath: new giis . qacover . report . ReportManager (). run ( "target/qacover/rules" , "target/qacover/rules" );qacover-model ถูกประกาศว่าเป็นการพึ่งพาให้ดำเนินการวิธี ReportMain โดยใช้ exec-maven-plugin : < plugin >
< groupId >org.codehaus.mojo</ groupId >
< artifactId >exec-maven-plugin</ artifactId >
< version >1.6.0</ version >
< executions >
< execution >
< id >qacover-report</ id >
< phase >post-integration-test</ phase >
< goals >
< goal >java</ goal >
</ goals >
< configuration >
< classpathScope >test</ classpathScope >
< classpath />
< mainClass >giis.qacover.report.ReportMain</ mainClass >
< arguments >
< argument >target/qacover/rules</ argument >
< argument >target/qacover/reports</ argument >
</ arguments >
</ configuration >
</ execution >
</ executions >
</ plugin > ไฟล์ index.html มีบทสรุปของการครอบคลุมข้อมูลการทดสอบสำหรับแต่ละคลาส:
ที่ไหน:
ชื่อคลาสแต่ละชั้นสามารถคลิกเพื่อแสดงรายงานที่มีรายละเอียดสำหรับการสอบถามที่ได้รับการประเมินแล้ว รายงานสำหรับชั้นเรียนดูเหมือนว่า:
- 
การคลิกลูกศรลงใกล้กับการครอบคลุมเปอร์เซ็นต์ที่การสอบถามจะขยายรายละเอียดของกฎการครอบคลุมแต่ละกฎ (ครอบคลุมเป็นสีเขียวเปิดเป็นสีเหลือง):
ไวยากรณ์ทั่วไปของตัวสร้างรายงานมีสี่พารามิเตอร์ (เฉพาะสองตัวแรกเท่านั้นที่จำเป็นหากคุณไม่รวมซอร์สโค้ดของคลาสภายใต้การทดสอบ):
<rules-folder> <reports-folder> [<source-folders> [<project-folder>]]
ใน Java หากคุณต้องการรวมซอร์สโค้ดในรายงานคุณต้องตั้งค่าสำหรับพารามิเตอร์ที่สาม <source-folders> เพื่อรวมรายการที่คั่นด้วยเครื่องหมายจุลภาคของเส้นทางเพื่อค้นหาแหล่งที่มา ตัวอย่างเช่น:
src/main/javamodule1/src/main/java,module2/src/main/java บน. NET คุณต้องตั้งค่าสำหรับพารามิเตอร์ทั้งที่สามและสี่: <source-folders> และ <project-folder> เหตุผลก็คือที่ตั้งของไฟล์ต้นฉบับ. NET ไม่ตรงกับเนมสเปซอย่างแน่นอนดังนั้นกฎการครอบคลุม FPC จะจัดเก็บเส้นทางสัมบูรณ์ของไฟล์ต้นฉบับคลาสที่จะต้องแก้ไขไปยังเส้นทางสัมพัทธ์ก่อนที่จะสร้างรายงาน ตัวอย่างเช่น:
.../../../.. (เนื่องจากไดเรกทอรีเริ่มต้นที่การทดสอบทำงานคือสี่ระดับลงโฟลเดอร์โซลูชัน)/app ให้ตั้งค่าพารามิเตอร์ . /app (ค่า /app อนุญาตให้แก้ไขเส้นทางสัมพัทธ์ของแต่ละไฟล์ต้นฉบับจากโฟลเดอร์โครงการ) ดูนโยบายและแนวทางการบริจาคทั่วไปสำหรับ Giis-Uniovi ที่มีส่วนร่วม
ตอนนี้เรารวมข้อมูลทางเทคนิคพื้นหลังเพิ่มเติมบางอย่าง:
QAcover ใช้ P6SPY เพื่อสกัดกั้นการโทร JDBC, tdrules เพื่อรับสคีมาฐานข้อมูลและเรียกใช้บริการ SQLRULES เพื่อสร้างกฎความครอบคลุม การดำเนินการของทุกอย่างนั้นเกิดขึ้นในท้องถิ่นกับฐานข้อมูลที่กำหนดค่าในสตริงการเชื่อมต่อ
โครงสร้างภายในของแพ็คเกจ qacover หลัก (คำนำหน้า giis.qacover. ) แสดงอยู่ด้านล่าง (คำนำหน้าถูกละไว้เพื่อความเรียบง่าย):
core Module : มีแพ็คเกจ driver , core และ core.sevicesmodel : มีแพ็คเกจ model storage reader และ reportนี่คือการพึ่งพาระหว่างแพ็คเกจ:
ผังงาน TD
ไดรเวอร์ -> หลัก
Core -> บริการ (Core.Services)
บริการ -> ที่เก็บข้อมูล
ที่เก็บ -> รุ่น
Core -> รุ่น
บริการ -> รุ่น
รายงาน -> ผู้อ่าน
รายงาน -> รุ่น
ผู้อ่าน -> รุ่น
ผู้อ่าน -> ที่เก็บข้อมูล