Una cortadora de programa para Java, basada en el gráfico de dependencia del sistema (SDG). El corte del programa es una técnica de análisis de software para extraer el subconjunto de declaraciones que son relevantes para el valor de una variable en una declaración específica (el criterio de corte ). El subconjunto de declaraciones se llama corte , y se puede utilizar para la depuración, la paralelización, la detección de clones, etc. Este repositorio contiene dos módulos:
sdg-core , una biblioteca que obtiene rebanadas del código fuente Java a través del SDG, una estructura de datos que representa declaraciones como nodos y sus dependencias como ARC.sdg-cli , un cliente de línea de comandos para sdg-core , que toma como entrada un programa Java y el criterio de corte, y genera el corte correspondiente. ADVERTENCIA: Todas las llamadas de método deben resolver a una declaración de método. Si su programa Java requiere bibliotecas adicionales, su código fuente debe estar disponible e incluido en el análisis con la opción -i . Cualquier llamada de método que no se pueda resolver dará como resultado un error de tiempo de ejecución.
Javasdgslicer administra sus dependencias a través de Maven, por lo que debe tener instalado el JDK (≥11) y Maven, luego ejecutar
mvn package -Dmaven.test.skip
Luego se puede ubicar un frasco gordo que contenga todas las dependencias del proyecto en ./sdg-cli/target/sdg-cli-{version}-jar-with-dependencies.jar .
El criterio de corte se puede especificar con el flag -c {file}#{line}:{var} , donde se puede especificar el archivo, la línea y la variable. Si la variable aparece varias veces en la línea dada, se seleccionarán todas ellas.
Si deseamos cortar el siguiente programa con respecto a sum variable en la línea 11,
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);
}
}
El programa se puede guardar en Example.java , y el Slicer se ejecuta con:
java -jar sdg-cli.jar -c Example.java#11:sum
Se puede ver una descripción más detallada de las opciones disponibles con:
java -jar sdg-cli.jar --help
Nuestra cortadora requiere que el programa Java de entrada sea compilable, por lo que todas las bibliotecas deben proporcionarse utilizando el indicador -i . Para los casos en que el código fuente no está disponible, puede incluir las bibliotecas requeridas en el Java ClassPath utilizando la siguiente llamada:
java -cp your-libraries.jar -jar sdg-cli.jar -c Example.java#11:sum
Este enfoque produce rebanadas de menor calidad, ya que se desconoce el contenido de las llamadas de la biblioteca.
Un buen ejemplo de uso de sdg-core para obtener una porción del código fuente está disponible en slticer.java#slice (), donde se realizan los siguientes pasos:
CompilationUnit .SlicingCriterion , a partir de los argumentos de entrada, y se obtiene el corte.CompilationUnit (cada uno que representa un archivo).CompilationUnit se descarga a su archivo correspondiente. Si el gráfico es de interés, se puede emitir en formato dot o PDF a través de SDGLog#generateImages() , como se puede ver en phpslice.java#124 (esta clase presenta un frontend para una Slicer Java Web inédita).