Table of Contents
Fetching ...

Combining Static Analysis Techniques for Program Comprehension Using Slicito

Robert Husák, Jan Kofroň, Filip Zavoral

TL;DR

The paper tackles the challenge of reconciling scalability and precision in static program analysis for program comprehension. It introduces Slicito, a Visual Studio extension that uses slice-based scope restriction to apply interprocedural data-flow analysis followed by symbolic execution on the reduced code. The architecture is modular, with language-agnostic IR and a set of visualization tools (call graphs, API endpoint catalog, structure browser) built as NuGet packages. A real industrial case on Spotflow IoT demonstrates the workflow, and the authors discuss future work including broader language support and potential LLM-assisted interfaces.

Abstract

While program comprehension tools often use static program analysis techniques to obtain useful information, they usually work only with sufficiently scalable techniques with limited precision. A possible improvement of this approach is to let the developer interactively reduce the scope of the code being analyzed and then apply a more precise analysis technique to the reduced scope. This paper presents a new version of the tool SLICITO that allows developers to perform this kind of exploration on C# code in Visual Studio. A common usage of SLICITO is to use interprocedural data-flow analysis to identify the parts of the code most relevant for the given task and then apply symbolic execution to reason about the precise behavior of these parts. Inspired by Moldable Development, SLICITO provides a set of program analysis and visualization building blocks that can be used to create specialized program comprehension tools directly in Visual Studio. We demonstrate the full scope of features on a real industrial example both in the text and in the following video: https://www.slicito.com/icpc2025video.mp4

Combining Static Analysis Techniques for Program Comprehension Using Slicito

TL;DR

The paper tackles the challenge of reconciling scalability and precision in static program analysis for program comprehension. It introduces Slicito, a Visual Studio extension that uses slice-based scope restriction to apply interprocedural data-flow analysis followed by symbolic execution on the reduced code. The architecture is modular, with language-agnostic IR and a set of visualization tools (call graphs, API endpoint catalog, structure browser) built as NuGet packages. A real industrial case on Spotflow IoT demonstrates the workflow, and the authors discuss future work including broader language support and potential LLM-assisted interfaces.

Abstract

While program comprehension tools often use static program analysis techniques to obtain useful information, they usually work only with sufficiently scalable techniques with limited precision. A possible improvement of this approach is to let the developer interactively reduce the scope of the code being analyzed and then apply a more precise analysis technique to the reduced scope. This paper presents a new version of the tool SLICITO that allows developers to perform this kind of exploration on C# code in Visual Studio. A common usage of SLICITO is to use interprocedural data-flow analysis to identify the parts of the code most relevant for the given task and then apply symbolic execution to reason about the precise behavior of these parts. Inspired by Moldable Development, SLICITO provides a set of program analysis and visualization building blocks that can be used to create specialized program comprehension tools directly in Visual Studio. We demonstrate the full scope of features on a real industrial example both in the text and in the following video: https://www.slicito.com/icpc2025video.mp4

Paper Structure

This paper contains 6 sections, 4 figures.

Figures (4)

  • Figure 1: Integration of Slicito into Visual Studio.
  • Figure 2: Creating a customized interactive tool window with Slicito.
  • Figure 3: Using symbolic execution in Slicito.
  • Figure 4: Dependencies between the components of Slicito.