시스템 의존성 그래프 (SDG)를 기반으로 Java의 프로그램 슬라이서. 프로그램 슬라이싱은 특정 문 ( 슬라이싱 기준 )에서 변수 값과 관련된 문의 하위 집합을 추출하는 소프트웨어 분석 기술입니다. 문의 하위 집합을 슬라이스 라고하며 디버깅, 병렬화, 클론 감지 등에 사용할 수 있습니다.이 저장소는 두 가지 모듈을 포함합니다.
sdg-core , SDG를 통해 Java 소스 코드에서 슬라이스를 얻는 라이브러리, 명령문을 노드로 나타내고 종속성을 ARC로 나타내는 데이터 구조입니다.sdg-core 의 명령 줄 클라이언트 인 sdg-cli 는 Java 프로그램 및 슬라이싱 기준을 입력하고 해당 슬라이스를 출력합니다. 경고 : 모든 메소드 호출은 메소드 선언으로 해결해야합니다. Java 프로그램에 추가 라이브러리가 필요한 경우 소스 코드를 사용할 수 있고 -i 옵션을 사용하여 분석에 포함시켜야합니다. 해결할 수없는 모든 메소드 호출로 인해 런타임 오류가 발생합니다.
JavasdgsLicer는 Maven을 통해 의존성을 관리하므로 JDK (≥11)와 Maven이 설치된 다음 실행해야합니다.
mvn package -Dmaven.test.skip
그런 다음 모든 프로젝트 의존성을 포함하는 뚱뚱한 항아리는 ./sdg-cli/target/sdg-cli-{version}-jar-with-dependencies.jar {version }-jar-with-dependencies.jar에 위치 할 수 있습니다.
슬라이싱 기준은 플래그 -c {file}#{line}:{var} 로 지정할 수 있으며 여기서 파일, 줄 및 변수를 지정할 수 있습니다. 주어진 라인에 변수가 여러 번 나타나면 모두가 선택됩니다.
11 행의 가변 sum 와 관련하여 프로그램을 따라 가려면
public class Example {
public static void main(String[] args) {
int sum = 0;
int prod = 0;
int i;
int n = 10;
for (i = 0; i < 10; i++) {
sum += 1;
prod += n;
}
System.out.println(sum);
System.out.println(prod);
}
}
프로그램은 Example.java 에 저장 될 수 있으며 슬라이서는 다음과 같이 실행됩니다.
java -jar sdg-cli.jar -c Example.java#11:sum
사용 가능한 옵션에 대한 자세한 설명은 다음과 같이 볼 수 있습니다.
java -jar sdg-cli.jar --help
당사의 슬라이서는 입력 자바 프로그램을 편집 할 수 있어야하므로 모든 라이브러리는 -i 플래그를 사용하여 제공해야합니다. 소스 코드를 사용할 수없는 경우 다음 호출을 사용하여 Java ClassPath에 필요한 라이브러리를 포함시킬 수 있습니다.
java -cp your-libraries.jar -jar sdg-cli.jar -c Example.java#11:sum
이 접근법은 라이브러리 통화의 내용이 알려져 있지 않기 때문에 품질이 낮은 슬라이스를 생성합니다.
소스 코드에서 슬라이스를 얻기위한 sdg-core 의 좋은 사용 예는 Slicer.java#slice ()에서 사용할 수 있으며 다음 단계가 수행됩니다.
CompilationUnit 목록을 작성하기 위해 구문 분석됩니다.SlicingCriterion 생성되고 슬라이스가 얻어진다.CompilationUnit 목록 (각각 파일을 나타내는)으로 변환됩니다.CompilationUnit 의 내용은 해당 파일에 덤프됩니다. 그래프가 관심이있는 경우 phpslice.java#124에서 볼 수 있듯이 SDGLog#generateImages() 통해 dot 또는 PDF 형식으로 출력 할 수 있습니다 (이 클래스는 미공개 웹 Java 슬라이서에 대한 프론트 엔드를 제시합니다).