Qacover는 Java 또는 .NET 응용 프로그램에서 실행되는 SQL 쿼리와 관련하여 테스트 데이터 범위를 평가하는 구성 요소입니다. 적용 범위는 SQL Full Pretice Coverage (SQLFPC) 기준에 따라 SQL 쿼리에 맞춰진 MCDC의 변형에 따라 측정됩니다. 이 기준은 테스트 데이터베이스에 대한 SQL 쿼리를 테스트하기 위해 관심있는 상황 (테스트 범위 항목)을 결정합니다. 이러한 상황은 일련의 적용 범위 규칙 으로 표시됩니다. SQL 쿼리에 대한 돌연변이 체 의 적용 범위를 측정하는 옵션도 있습니다 (SQLMATUTION CRITERION).
애플리케이션이 쿼리를 실행할 때마다 Qacover는 쿼리 실행을 가로 채고, 적용 범위 규칙을 생성하고 평가하며, 결과를 로컬 개발 환경에 저장합니다.
테스트가 끝나면 테스트 데이터 적용 범위에 대한 요약 및 세부 보고서를 얻을 수 있습니다. 이것은 테스트 세션의 요약 보고서의 예입니다.

Java의 예 :
qacover-core 추가하십시오qacover.properties and 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 (버전으로 이동 한 다음 선택한 버전을 탐색하여 다운로드 할 수 있음)를 다운로드하십시오.java -jar qacover-model- < VERSION > -report.jar target/qacover/rules target/qacover/reportstarget/qacover/reports 폴더에서 찾을 수있는 index.html 을 엽니 다. 클래스 이름이 쿼리를 실행하는 상호 작용 지점에 있지 않다는 것을 알게되면 패키지에 대한 몇 가지 제외를 포함시키기 위해 구성을 조정해야합니다 (나중에 참조) target/qacover 폴더를 제거하고 다시 반복하십시오.
테스트 패키지 Qacoversample이있는 폴더에는 커버리지 정보를 사용하여 테스트 데이터 및 테스트 사례를 개선하여 숨겨진 버그를 드러내는 방법의 예가 포함되어 있습니다. 세 가지 순차적 시나리오가 포함되어 있습니다.
Java Artifacts (Java 8 이상)의 릴리스는 Maven Central에서 ID io.github.giis-uniovi 그룹에 의해 게시됩니다. 두 가지 다른 유물이 있습니다.
qacover-core : 응용 프로그램에서 AA 의존성으로 사용하는 메인 아티팩트 (빠른 시작에 표시된대로).qacover-model :보고하고 보장 규칙을 검사 할 모델 및 클래스 만 포함합니다. 이전에 생성 된 적용 범위 규칙에만 액세스 해야하는 경우 (예 : 프로그램에서 보고서를 생성하기 위해) 만 사용하십시오.그들 각각은 추가 예선을 포함하는 또 다른 다운로드 가능한 항아리에 있습니다.
qacover-core Uber Jar. 여기에는 필요한 모든 의존성 ( slf4j 제외)이 포함되어 있으며 그늘이 나옵니다 (즉, 종속성 충돌을 피하기 위해 다른 네임 스페이스로 이름이 바뀌 었습니다).-uber 응용 프로그램의 종속성으로 사용할 수없는 경우 (예 : 응용 프로그램 서버에 배포). JAR을 서버 라이브러리에 넣고 Qacover를 사용하도록 구성을 설정하면됩니다.<qualifier>uber</qualifier> 추가하십시오.qacover-model 독립형 리포터 : 빠른 시작에 표시된대로 명령 줄에서 보고서를 생성하려면 -report 한정자로 아티팩트를 다운로드하십시오..NET 플랫폼 용 릴리스는 NUGET에 게시됩니다. Java와 마찬가지로 두 가지 패키지가 있습니다.
QACover : 프로젝트 구성에 패키지 참조로 포함 할 기본 패키지 (Netstandard2.9) (예 : C#을 사용하는 경우 .csproj 파일).QACoverReport : 명령 줄에서 보고서를 생성하기위한 DOTNET 도구 (NetCore2.0) : dotnet tool install QACoverReport 명령으로 실행하고 QACoverReport <rules folder> <reports folder> 로 실행하십시오. Java에는 qacover.properties and spy.properties 의 범위를 평가하고 JDBC 드라이버를 사용자 정의하려면 두 개의 구성 파일이 필요합니다. .NET에서 쿼리를 가로 채기 위해 첫 번째 코드와 함께 첫 번째 코드 만 있으면됩니다.
Qacover는 qacover.properties 를 찾습니다.
이 repo의 qacover-core 모듈에서 사용 가능한 qacover.properties 에는 일반적인 시나리오에 적합한 일반 구성이 포함되어 있지만 때로는 사용자 정의해야합니다. 각 구성 매개 변수에 대한 자세한 내용은 파일을 참조하십시오. 다음으로, 우리는 포함 및 제외 기준 인 가장 중요한 것들을 강조합니다.
응용 프로그램의 메소드 라인이 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 Class에있는 상호 작용 지점을 찾기 위해 건너 뛰려는 프레임 워크 클래스를 제거합니다.
그러나이 특별한 경우, 상호 작용 지점은 org.springframework 아래에 있습니다. org.springframework.samples. 제외되지 않습니다.
qacover.stack.inclusions=org.springframework.samples.
패키지에 대한 포함 기준을 구성하는 다른 매개 변수와 클래스 이름 또는 테이블 이름에 대한 제외 기준이 있습니다. 자세한 내용은 qacover.properties 참조하십시오.
이 repo의 qacover-core 폴더에서 사용 가능한 spy.properties 에는 p6spy가 요구하는 최소 구성이 포함됩니다.
modulelist=giis.qacover.driver.InterceptorFactory p6spy가 컨트롤을 qacover로 전달하는 지점을 나타내려면 항상 존재해야합니다. 자세한 내용은 spy.properties 파일 또는 P6Spy documentation 참조하십시오.
qacover.properties 프로젝트 구성 spy.properties 대신 코딩이 필요합니다.
DbContext 에서 상속되는 사용자 정의 컨텍스트, 예를 들어 EG EF2InterceptorContext.cs를 참조하십시오. giis.qacover. :
표준 로그 외에도 다른 폴더 log-* rules 폴더에 생성되어 평가 된 쿼리, 데이터베이스 스키마 및 범위 규칙에 대한 추가 디버그 정보를 표시합니다.
보고서 생성은 지정된 폴더에 정적 HTML 파일 세트를 생성하여 적용 범위 데이터의 요약 및 세부 사항을 쉽게 검사합니다.
보고서를 생성하려면 세 가지 옵션이 있습니다.
qacover-model 독립형 리포터를 다운로드하십시오. java -jar qacover-model- < VERSION > -report.jar target/qacover/rules target/qacover/reportsqacover-model 포함하는 프로그램 또는 테스트에서 : new giis . qacover . report . ReportManager (). run ( "target/qacover/rules" , "target/qacover/rules" );qacover-model 종속성으로 선언되면 exec-maven-plugin 사용하여 ReportMain 메소드를 실행하십시오. < 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 파일에는 각 클래스의 테스트 데이터 적용 요약이 포함되어 있습니다.
어디:
각 클래스 이름은 클릭하여 평가 된 쿼리에 대한 세부 정보가 포함 된 보고서를 표시 할 수 있습니다. 수업의 보고서는 다음과 같습니다.
... 
쿼리의 퍼센트 범위 근처에서 아래쪽 화살표를 클릭하면 각 커버리지 규칙의 세부 사항이 확장됩니다 (녹색으로 덮여, 노란색으로 덮여 있음).
보고서 생성기의 일반적인 구문에는 4 개의 매개 변수가 있습니다 (테스트중인 클래스의 소스 코드를 포함하지 않으면 첫 번째 두 가지만 필요합니다).
<rules-folder> <reports-folder> [<source-folders> [<project-folder>]]
Java에서는 보고서에 소스 코드를 포함하려면 소스를 찾기 위해 쉼표로 구분 된 경로 목록을 포함하려면 세 번째 매개 변수 <source-folders> 에 대한 값을 설정해야합니다. 예를 들어:
src/main/java 설정하십시오.module1/src/main/java,module2/src/main/java 설정하십시오. .NET에서는 세 번째 및 <source-folders> <project-folder> 매개 변수에 대한 값을 설정해야합니다. 그 이유는 .NET 소스 파일의 위치가 네임 스페이스와 정확히 일치하지 않기 때문에 FPC 적용 규칙은 보고서 생성 전에 상대 경로로 해결되어야하는 클래스 소스 파일의 절대 경로를 저장하기 때문입니다. 예를 들어:
.../../../.. 로 설정하십시오 (테스트가 실행되는 기본 디렉토리는 솔루션 폴더의 4 단계이기 때문에)/app 폴더 아래에서 서버 응용 프로그램을 실행하는 컨테이너 내부에서 생성 된 보고서가 매개 변수를 다음과 같이 설정하십시오 . /app ( /app 값은 프로젝트 폴더에서 각 소스 파일의 상대 경로를 해결할 수 있음). Giis-Uniovi 의 일반적인 기여 정책 및 지침을 참조하십시오.
이제 우리는 몇 가지 추가 배경 기술 정보를 포함합니다.
Qacover는 P6SPY를 사용하여 JDBC 호출을 가로 채고 TDRULES, 데이터베이스 스키마를 가져오고 SQLRULES 서비스를 호출하여 적용 규칙을 생성합니다. 모든 것의 실행은 연결 문자열에 구성된 데이터베이스에 대해 로컬에서 이루어집니다.
기본 Qacover 패키지의 내부 구조 (Prefix giis.qacover. )는 아래에 나와 있습니다 (접두사는 단순성을 위해 생략됩니다).
core 모듈 : driver , core 및 core.sevices 패키지를 포함합니다.model 모듈 : model , storage , reader 및 report 패키지를 포함합니다.패키지 간의 종속성입니다.
흐름도 TD
드라이버 -> 코어
Core-> 서비스 (Core.Services)
서비스 -> 스토리지
스토리지 -> 모델
핵심 -> 모델
서비스 -> 모델
보고서 -> 리더
보고서 -> 모델
독자 -> 모델
독자 -> 스토리지