Um fator de atendimento de programa para Java, com base no gráfico de dependência do sistema (SDG). O fatiamento do programa é uma técnica de análise de software para extrair o subconjunto de declarações relevantes para o valor de uma variável em uma declaração específica (o critério de fatiamento ). O subconjunto de declarações é chamado de fatia e pode ser usado para depuração, paralelização, detecção de clones, etc. Este repositório contém dois módulos:
sdg-core , uma biblioteca que obtém fatias do código-fonte Java através do ODS, uma estrutura de dados que representa declarações como nós e suas dependências como arcos.sdg-cli , um cliente da linha de comando do sdg-core , que toma como entrada um programa Java e o critério de fatiamento, e gera a fatia correspondente. Aviso: todas as chamadas de método devem resolver uma declaração de método. Se o seu programa Java exigir bibliotecas adicionais, o código -fonte deles deverá estar disponível e incluído na análise com a opção -i . Qualquer chamada de método que não possa ser resolvida resultará em um erro de tempo de execução.
Javasdgslicer gerencia suas dependências através do Maven, então você precisa ter o JDK (≥11) e o Maven instalado, depois execute
mvn package -Dmaven.test.skip
Um frasco de gordura que contém todas as dependências do projeto pode ser localizado em ./sdg-cli/target/sdg-cli-{version}-jar-with-dependencies.jar {version }-jar-with-dependencies.jar.
O critério de corte pode ser especificado com o flag -c {file}#{line}:{var} , onde o arquivo, a linha e a variável podem ser especificados. Se a variável aparecer várias vezes na linha fornecida, todas elas serão selecionadas.
Se desejarmos cortar o seguinte programa em relação à sum variável na linha 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);
}
}
O programa pode ser salvo em Example.java , e o Slicer Run with:
java -jar sdg-cli.jar -c Example.java#11:sum
Uma descrição mais detalhada das opções disponíveis pode ser vista com:
java -jar sdg-cli.jar --help
Nosso fatador exige que o programa Java de entrada seja compilável, para que todas as bibliotecas sejam fornecidas usando o sinalizador -i . Para os casos em que o código -fonte não está disponível, você pode incluir as bibliotecas necessárias no Java ClassPath usando a seguinte chamada:
java -cp your-libraries.jar -jar sdg-cli.jar -c Example.java#11:sum
Essa abordagem produz fatias de menor qualidade, pois o conteúdo das chamadas da biblioteca é desconhecido.
Um bom exemplo de uso do sdg-core para obter uma fatia do código-fonte está disponível em slicer.java#slice (), onde as etapas a seguir são executadas:
CompilationUnit s.SlicingCriterion é criado a partir dos argumentos de entrada, e a fatia é obtida.CompilationUnit (cada uma representando um arquivo).CompilationUnit é despejado no arquivo correspondente. Se o gráfico for interessante, ele poderá ser emitido no formato dot ou PDF via SDGLog#generateImages() , como pode ser visto em phpslice.java#124 (esta classe apresenta um front -end para um slicer de java web não lançado).