Software and Tools

CSA faculty, students, and project staff have developed software prototypes, tools, code libraries, and applications as a part of various research projects. The following is a selected list of softwares and tools developed in the department’s research labs.

Note to CSA researchers: If you would like to add an entry to this list, please contact the web team.

PageModeler: Analysis of JSP-based web applications
Programming Languages Lab

Web applications are difficult to analyze using code-based tools because data flow and control flow through the application occurs via both server-side code and client-side web pages. To address this challenge we propose a static-analysis approach that automatically constructs a “model” of each view/page in a given application from the given view specifications. The server-side code in conjunction with the page models becomes a standard (non-web) program, thus amenable to analysis using standard code-based tools. This work is described in our paper accepted in ISSTA 2017.

We have implemented our approach in the context of J2EE applications that use JSP for view specifications. We demonstrate the versatility and usefulness of our approach by applying three standard analysis tools on the resultant programs from our approach: a concolic-execution based model checker (JPF), a dynamic fault localization tool (Zoltar), and a static slicer (Wala).

more…

DFAS: Static analysis of asynchronous systems
Programming Languages Lab

Asynchronous message-passing systems are employed frequently to implement distributed mechanisms, protocols, and processes. This work addresses the problem of precise data flow analysis for such systems. To obtain good precision, data flow analysis of message-passing systems needs to somehow skip execution paths that read more messages than the number of messages sent so far in the path, as such paths are infeasible at run time. Current data flow analysis techniques for such systems either compromise on precision by traversing infeasible paths in addition to feasible paths, or traverse only feasible paths but admit only finite abstract analysis domains. Our approach elides a large class of infeasible paths, and generalizes upon the state of art by admitting infinite abstract analysis domains (such as constant propagation). An application of data flow analysis, namely, verification of assertions, is also supported by our implementation.

more…

Ross
Programming Languages Lab
Ross is a tool that uses refinement-based points-to analysis to conservatively verify safety of Java programs from low-level errors. Specifically, the tool identifies all potentially unsafe downcast sites in a given program, and identifies all allocation sites that allocate immutable objects only. The underlying approach, as well empirical results obtained by applying the approach on real Java programs, are described in this publication.

more…

NPEDetector
Programming Languages Lab
NPEDetector is a tool for sound, demand-driven, scalable null-dereference analysis for Java programs. The tool uses a backwards abstract-interpretation-based weakest-preconditions analysis. The underlying approach, as well empirical results obtained by applying the tool on real Java programs, are described in this publication.

more…

Pegasus
Scalable Software Systems Lab
Stable Multithreaded Systems ensure that the schedule of the multithreaded programs remains unaffected by minor changes. Unfortunately, determinism in these systems can potentially serialize the execution imposing the penalty on performance. Pegasus takes program source as input and automatically derives programmer hints in the form of soft barriers. These soft barriers when inserted in the program improve the performance. Pegasus can be seamlessly adapted to infer barriers for multiple versions of a source program. The memory and time overheads associated with the usage of Pegasus is also negligible making it crucial in building scalable Stable Multithreaded Systems.

more…

Glider
Scalable Software Systems Lab
Redundant traversal of loops in the context of other loops has been recently identified as a source of performance bugs in many Java libraries. Glider takes a java library and initial set of coverage-driven randomly generated tests as an input and generates tests which enable detection of redundant traversal of loops automatically. We achieve this in three phases – analysis of the execution of random tests to generate method summaries, identification of methods with potential nested loops along with the appropriate context to expose the problem, and test generation to invoke the identified methods with the appropriate parameters. The generated tests can be analyzed to detect possible performance issues.

more…

PolyMage
Multicore Computing Lab
PolyMage is a domain-specific language and compiler for automatic parallelization and optimization of image processing pipelines. PolyMage takes an image processing pipeline expressed by the user in a high-level language (embedded in Python) and generates a C++ implementation of the pipeline optimized using the polyhedral framework as the intermediate representation. It uses OpenCV for image I/O handling, islpy/ISL for integer set operations, ‘cgen’ for AST code generation and ‘OpenMP’ to mark parallel loops. PolyMage uses an asymmetric overlapped tiling technique (overlapped tiling extended for heterogeneous accesses and non-constant dependence vectors) to exploit locality and parallelism simultaneously. It uses a model-driven approach to automatically fuse image processing pipeline stages for tiling, and employs an in-built autotuner to find the best performing code within a small well-defined search space.

more…

MSComplex
Visualization and Graphics Lab
MSComplex is a collection of software tools for computing the Morse-Smale complex of a scalar field defined on a triangle mesh and 3D structured grid. The Morse-Smale complex is a topological data structure that partitions a spatial domain based on the gradient of an input scalar function. It has been used for visualization and analysis of scalar data from a wide range of disciplines including combustion analysis, cosmology, structural biology, climate studies, and medical imaging.

more…

Pluto/Pluto+
Multicore Computing Lab
Pluto/Pluto+ is a source-to-source parallelization and optimization tool based on the polyhedral compiler framework. It can automatically optimize affine loop nests (sequences of imperfectly nested loops with regular data access patterns) for parallelism and locality using affine transformations. It can target both shared-memory multicore architectures (by generating code with OpenMP parallel pragmas) and distributed-memory architectures (by generating message passing MPI code). Pluto/Pluto+ is extensively used for advanced experimentation with loop optimization and parallelization, optimization of scientific stencil computations, and in university courses teaching loop transformations.

more…

ChExVis
Visualization and Graphics Lab
Understanding channel structures that lead to active sites or traverse a protein is important in the study of molecular functions such as ion, ligand, and small molecule transport. ChExVis implements an efficient algorithm for automatic identification of significant channels in a protein. The ChExVis web-server also supports interactive visual exploration of multiple channels together with their geometric and physico-chemical properties thereby enabling the understanding of the basic biology of transport through protein channels.

more…

Omen+
Scalable Software Systems Laboratory
Designing thread-safe libraries without concurrency defects can be a challenging task. Detecting deadlocks while invoking methods in these libraries concurrently is hard due to the possible number of method invocation combinations, the object assignments to the parameters and the associated thread interleavings. OMEN+ takes a multithreaded library as the input and detects true deadlocks in a scalable manner. We achieve this by automatically synthesizing relevant multithreaded tests and analyze the associated execution traces using a precise deadlock detector.

more…

CODD Metadata Processor
Database Systems Lab
The effective design and testing of database engines and applications is predicated on the ability to easily construct alternative scenarios with regard to the database contents. A limiting factor, however, are the time and space overheads incurred in creating and maintaining these databases. CODD is a Java-based tool that implements a unified visual interface through which databases with the desired metadata characteristics can be efficiently simulated without persistently generating and/or storing their contents. That is, it supports the construction of “dataless databases”

more…

Picasso Database Query Optimizer Visualizer
Database Systems Lab
Picasso is a visualization tool for graphically profiling and analyzing the behavior of database query optimizers on complex declarative SQL queries. The tool is operational on a rich suite of industrial-strength database engines, including both commercial and public-domain offerings. Picasso is freely downloadable and is currently in use at leading industrial and academic institutions worldwide. It has been employed as (1) a query optimizer analysis, debugging, and redesign aid by system developers; (2) a query optimization test-bed by database researchers; and (3) a query optimizer pedagogical support by database instructors and students. Picasso received the Best Software Demonstration award in VLDB 2010.

more…

ReCon
Visualization and Graphics Lab
ReCon is a library that computes the Reeb graph of a scalar function. The Reeb graph is a topological structure that finds applications in scientific visualization, computer graphics, and computer vision. ReCon implements an efficient algorithm that constructs the Reeb graph as a union of trees and works for large data sizes. Both Java and C++ versions of the library supports 2D, 3D, and higher dimensional meshes as input.

more…

MathFinder
Software Engineering and Analysis Lab
MathFinder is an Eclipse plugin supported by a unit test mining backend for discovering and migrating math APIs. It is intended to make (re)implementing math algorithms in Java easier. Given a math expressions (see the syntax below), it returns a pseudo-code involving calls to suitable Java APIs. At present, it supports programming tasks that require use of matrix and linear algebra APIs. The underlying technique is however general and can be extended to support other math domains.

more…