Aleksandar Milicevic

dblp:74/1958 · DBLP profile ↗
← Back
16ranked-venue papers
6as first author
1since 2021 · last 2026
0000-0003-4615-8789ORCID · reported

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 14 · 4 first-authorArtificial intelligence and machine learning · 1 · 1 first-author · 1 since 2021Theory of computation · 1 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
11 papers
Software testing · 50% Program analysis · 14% Program verification · 12%
Theoretical computer science
2 papers
Automated reasoning and model checking · 100%
Network and information security
1 paper
Cryptographic primitives and cryptanalysis · 100%

Topics — the 22 heaviest of 25, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Software testing › regression testing
regression test selection
0.622017
File-level vs. module-level regression test selection for .NET · ESEC/SIGSOFT FSE 2017
Regression test selection across JVM boundaries · ESEC/SIGSOFT FSE 2017
Program analysis
constraint solving
0.412020
Unifying execution of imperative generators and declarative specifications · Proc. ACM Program. Lang. 2020
Program verification
contract verification
0.412020
Unifying execution of imperative generators and declarative specifications · Proc. ACM Program. Lang. 2020
Software testing › test maintenance
test isolation
0.412020
Debugging the performance of Maven's test isolation: experience report · ISSTA 2020
Software testing
regression testing
0.312017
File-level vs. module-level regression test selection for .NET · ESEC/SIGSOFT FSE 2017
Cryptographic primitives and cryptanalysis
security analysis
0.212016
Multi-representational security analysis · SIGSOFT FSE 2016
Program synthesis and code generation
constraint-based synthesis
0.212015
Alloy*: A General-Purpose Higher-Order Relational Constraint Solver · ICSE (1) 2015
Automated reasoning and model checking
constraint solving
0.212015
Alloy*: A General-Purpose Higher-Order Relational Constraint Solver · ICSE (1) 2015
Software testing
test generation
0.222020
Unifying execution of imperative generators and declarative specifications · Proc. ACM Program. Lang. 2020
Parallel test generation and execution with Korat · ESEC/SIGSOFT FSE 2007
Software testing › test generation
constraint-based test generation
0.122007
Parallel test generation and execution with Korat · ESEC/SIGSOFT FSE 2007
Korat: A Tool for Generating Structurally Complex Test Inputs · ICSE 2007
Software maintenance and evolution
build systems
0.112020
Debugging the performance of Maven's test isolation: experience report · ISSTA 2020
Software testing › test generation
random test generation
0.112020
Unifying execution of imperative generators and declarative specifications · Proc. ACM Program. Lang. 2020
Requirements engineering and software design
assurance case
0.112011
A lightweight code analysis and its role in evaluation of a dependability case · ICSE 2011
Programming languages and type systems › language design
declarative and imperative language integration
0.112011
Unifying execution of imperative and declarative code · ICSE 2011
Software testing
dependability case
0.112011
A lightweight code analysis and its role in evaluation of a dependability case · ICSE 2011
Program analysis
static analysis
0.112011
A lightweight code analysis and its role in evaluation of a dependability case · ICSE 2011
Programming languages and type systems
object-oriented programming
0.112009
Equality and hashing for (almost) free: Generating implementations from abstraction functions · ICSE 2009
Software maintenance and evolution
software evolution
0.112017
File-level vs. module-level regression test selection for .NET · ESEC/SIGSOFT FSE 2017
Software testing › combinatorial testing
bounded exhaustive testing
0.112007
Korat: A Tool for Generating Structurally Complex Test Inputs · ICSE 2007
Software testing
test input generation
0.112007
Korat: A Tool for Generating Structurally Complex Test Inputs · ICSE 2007
Parallel and multicore computing
parallel computing
0.112007
Parallel test generation and execution with Korat · ESEC/SIGSOFT FSE 2007
Program verification
SMT-based verification
0.012012
Program extrapolation with jennisys · OOPSLA 2012

Methods — techniques the papers use, named apart from their topics

constraint solving · 0.8first-order relational logic · 0.7SMT solving · 0.6model finding · 0.4SAT solving · 0.4search-based solving · 0.4regression test selection · 0.3dynamic analysis · 0.3model composition · 0.2sample-based extrapolation · 0.1concrete model extraction · 0.1korat algorithm · 0.1
YearPublicationVenuePosition
2026 Numerical simulation-driven machine learning and particle swarm optimization of burner fuel distribution for cleaner combustion in a thermal power plant
abstract
Coal-fired power plants remain important energy source in many countries, but releasing significant nitrogen oxides (NO x ) emissions with serious environmental and health impacts. This study focuses on optimizing lignite combustion in a large utility boiler to minimize NO x emission by adjusting fuel distribution over the burner tiers. The proposed methodology integrates an in-house developed numerical code, correlation analysis, Extreme Gradient Boosting (XGBoost) model and Particle Swarm Optimization (PSO) algorithm. A database of computational fluid dynamics (CFD) simulations was generated to develop machine learning (ML) models for predicting NO x emission and furnace exit gas temperature (FEGT). Based on the ML models, PSO was applied to minimize NO x emissions while maintaining FEGT close to reference case. The framework is applied to a real scale utility boiler, demonstrating practical applicability and measurable environmental impact. Its multidisciplinary significance lies in the synergistic combination of CFD, artificial intelligence, and PSO for combustion control in large-scale energy system. Numerical simulation confirmed the accuracy of the PSO-based optimization, showing excellent agreement between predicted and simulated NO x emission and FEGT. The optimized case corresponds to a 30% reduction in NO x emission compared to the reference scenario. The results also indicated risk of localized overheating and slagging at the furnace walls and possible problems with ascending flame, highlighting the importance of adjusting the operating conditions and flame control to ensure stable boiler performance. The presented comprehensive method provides a novel and effective solution to improve the environmental performance of thermal power plants through intelligent optimization of combustion parameters.
Aleksandar Milicevic, Srdan Belosevic, Ivan Tomanovic, Nenad Crnomarkovic, Defu Che
Eng. Appl. Artif. Intell.1
2020 Debugging the performance of Maven's test isolation: experience report
abstract
Testing is the most common approach used in industry for checking software correctness. Developers frequently practice reliable testing-executing individual tests in isolation from each other-to avoid test failures caused by test-order dependencies and shared state pollution (e.g., when tests mutate static fields). A common way of doing this is by running each test as a separate process. Unfortunately, this is known to introduce substantial overhead. This experience report describes our efforts to better understand the sources of this overhead and to create a system to confirm the minimal overhead possible. We found that different build systems use different mechanisms for communicating between these multiple processes, and that because of this design decision, running tests with some build systems could be faster than with others. Through this inquiry we discovered a significant performance bug in Apache Maven’s test running code, which slowed down test execution by on average 350 milliseconds per-test when compared to a competing build system, Ant. When used for testing real projects, this can result in a significant reduction in testing time. We submitted a patch for this bug which has been integrated into the Apache Maven build system, and describe our ongoing efforts to improve Maven’s test execution tooling.
Pengyu Nie 0001, Ahmet Çelik, Matthew Coley, Aleksandar Milicevic, Jonathan Bell 0001, Milos Gligoric 0001
ISSTA4
2020 Unifying execution of imperative generators and declarative specifications
abstract
We present Deuterium---a framework for implementing Java methods as executable contracts. Deuterium introduces a novel, type-safe way to write method contracts entirely in Java, as a combination of imperative generators and declarative specifications (written in a first-order relational logic with transitive closure). Existing approaches are typically based on encoding both the specification and the program heap into a constraint language, and then using an off-the-shelf constraint solver---without any additional guidance---to search for a new program heap that satisfies the specification. Deuterium takes advantage of user-provided generators to prune the search space and reduce incurred overhead of constraint solving. Deuterium supports two ways of solving declarative constraints: SAT-based and search-based with in-memory state exploration. We evaluate our approach on a suite of data structures, established as a standard benchmark by prior work. Furthermore, we use random and sequence-based test generation to create a new benchmark designed to mimic realistic execution scenarios. Our results show that generators improve the performance of executable contracts and that in-memory state exploration is the algorithm of choice when heap sizes are small.
Pengyu Nie 0001, Marinela Parovic, Zhiqiang Zang, Sarfraz Khurshid, Aleksandar Milicevic, Milos Gligoric 0001
Proc. ACM Program. Lang.5
2019 Alloy*: a general-purpose higher-order relational constraint solver
Aleksandar Milicevic, Joseph P. Near, Eunsuk Kang, Daniel Jackson 0001
Formal Methods Syst. Des.1
2017 Regression test selection across JVM boundaries
abstract
Modern software development processes recommend that changes be integrated into the main development line of a project multiple times a day. Before a new revision may be integrated, developers practice regression testing to ensure that the latest changes do not break any previously established functionality. The cost of regression testing is high, due to an increase in the number of revisions that are introduced per day, as well as the number of tests developers write per revision. Regression test selection (RTS) optimizes regression testing by skipping tests that are not affected by recent project changes. Existing dynamic RTS techniques support only projects written in a single programming language, which is unfortunate knowing that an open-source project is on average written in several programming languages.
Ahmet Çelik, Marko Vasic, Aleksandar Milicevic, Milos Gligoric 0001
ESEC/SIGSOFT FSE3
2017 File-level vs. module-level regression test selection for .NET
abstract
Regression testing is used to check the correctness of evolving software. With the adoption of Agile development methodology, the number of tests and software revisions has dramatically increased, and hence has the cost of regression testing. Researchers proposed regression test selection (RTS) techniques that optimize regression testing by skipping tests that are not impacted by recent program changes. Ekstazi is one such state-of-the art technique; Ekstazi is implemented for the Java programming language and has been adopted by several companies and open-source projects.
Marko Vasic, Zuhair Parvez, Aleksandar Milicevic, Milos Gligoric 0001
ESEC/SIGSOFT FSE3
2016 Build system with lazy retrieval for Java projects
abstract
In the modern-day development, projects use Continuous Integration Services (CISs) to execute the build for every change in the source code. To ensure that the project remains correct and deployable, a CIS performs a clean build each time. In a clean environment, a build system needs to retrieve the project's dependencies (e.g., guava.jar). The retrieval, however, can be costly due to dependency bloat: despite a project using only a few files from each library, the existing build systems still eagerly retrieve all the libraries at the beginning of the build.
Ahmet Çelik, Alex Knaust, Aleksandar Milicevic, Milos Gligoric 0001
SIGSOFT FSE3
2016 Multi-representational security analysis
abstract
Security attacks often exploit flaws that are not anticipated in an abstract design, but are introduced inadvertently when high-level interactions in the design are mapped to low-level behaviors in the supporting platform. This paper proposes a multi-representational approach to security analysis, where models capturing distinct (but possibly overlapping) views of a system are automatically composed in order to enable an end-to-end analysis. This approach allows the designer to incrementally explore the impact of design decisions on security, and discover attacks that span multiple layers of the system. This paper describes Poirot, a prototype implementation of the approach, and reports on our experience on applying Poirot to detect previously unknown security flaws in publicly deployed systems.
Eunsuk Kang, Aleksandar Milicevic, Daniel Jackson 0001
SIGSOFT FSE2
2015 Alloy*: A General-Purpose Higher-Order Relational Constraint Solver
abstract
The last decade has seen a dramatic growth in the use of constraint solvers as a computational mechanism, not only for analysis of software, but also at runtime. Solvers are available for a variety of logics but are generally restricted to first-order formulas. Some tasks, however, most notably those involving synthesis, are inherently higher order; these are typically handled by embedding a first-order solver (such as a SAT or SMT solver) in a domain-specific algorithm. Using strategies similar to those used in such algorithms, we show how to extend a first-order solver (in this case Kodkod, a model finder for relational logic used as the engine of the Alloy Analyzer) so that it can handle quantifications over higher-order structures. The resulting solver is sufficiently general that it can be applied to a range of problems; it is higher order, so that it can be applied directly, without embedding in another algorithm; and it performs well enough to be competitive with specialized tools. Just as the identification of first-order solvers as reusable backends advanced the performance of specialized tools and simplified their architecture, factoring out higher-order solvers may bring similar benefits to a new class of tools.
Aleksandar Milicevic, Joseph P. Near, Eunsuk Kang, Daniel Jackson 0001
ICSE (1)1
2014 Preventing arithmetic overflows in Alloy
Aleksandar Milicevic, Daniel Jackson 0001
Sci. Comput. Program.1
2012 Program extrapolation with jennisys
abstract
The desired behavior of a program can be described using an abstract model. Compiling such a model into executable code requires advanced compilation techniques known as synthesis. This paper presents an object-based language, called Jennisys, where programming is done by introducing an abstract model, defining a concrete data representation for the model, and then being aided by automatic synthesis to produce executable code. The paper also presents a synthesis technique for the language. The technique is built on an automatic program verifier that, via an underlying SMT solver, is capable of providing concrete models to failed verifications. The technique proceeds by obtaining sample input/output values from concrete models and then extrapolating programs from the sample points. The synthesis aims to produce code with assignments, branching structure, and possibly recursive calls. It is the first to synthesize code that creates and uses objects in dynamic data structures or aggregate objects. A prototype of the language and synthesis technique has been implemented.
K. Rustan M. Leino, Aleksandar Milicevic
OOPSLA2
2011 Unifying execution of imperative and declarative code
abstract
We present a unified environment for running declarative specifications in the context of an imperative object-Oriented programming language. Specifications are Alloy-like, written in first-order relational logic with transitive closure, and the imperative language is Java. By being able to mix imperative code with executable declarative specifications, the user can easily express constraint problems in place, i.e., in terms of the existing data structures and objects on the heap. After a solution is found, the heap is updated to reflect the solution, so the user can continue to manipulate the program heap in the usual imperative way. We show that this approach is not only convenient, but, for certain problems can also outperform a standard imperative implementation. We also present an optimization technique that allowed us to run our tool on heaps with almost 2000 objects.
Aleksandar Milicevic, Derek Rayside, Kuat Yessenov, Daniel Jackson 0001
ICSE1
2011 A lightweight code analysis and its role in evaluation of a dependability case
abstract
A dependability case is an explicit, end-to-end argument, based on concrete evidence, that a system satisfies a critical property. We report on a case study constructing a dependability case for the control software of a medical device. The key novelty of our approach is a lightweight code analysis that generates a list of side conditions that correspond to assumptions to be discharged about the code and the environment in which it executes. This represents an unconventional trade-off between, at one extreme, more ambitious analyses that attempt to discharge all conditions automatically (but which cannot even in principle handle environmental assumptions), and at the other, flow- or context-insensitive analyses that require more user involvement. The results of the analysis suggested a variety of ways in which the dependability of the system might be improved.
Joseph P. Near, Aleksandar Milicevic, Eunsuk Kang, Daniel Jackson 0001
ICSE2
2009 Equality and hashing for (almost) free: Generating implementations from abstraction functions
abstract
In an object-oriented language such as Java, every class requires implementations of two special methods, one for determining equality and one for computing hash codes. Although the specification of these methods is usually straightforward, they can be hard to code (due to subclassing, delegation, cyclic references, and other factors) and often harbor subtle faults. A technique is presented that simplifies this task. Instead of writing code for the methods, the programmer gives, as a brief annotation, an abstraction function that defines an abstract view of an object's representation, and sometimes an additional observer in the form of an iterator method. Equality and hash codes are then computed in library code that uses reflection to read the annotations. Experiments on a variety of programs suggest that, in comparison to writing the methods by hand, our technique requires less text from the programmer and results in methods that are more often correct.
Derek Rayside, Zev Benjamin, Rishabh Singh, Joseph P. Near, Aleksandar Milicevic, Daniel Jackson 0001
ICSE5
2007 Korat: A Tool for Generating Structurally Complex Test Inputs
abstract
This paper describes the Korat tool for constraint-based generation of structurally complex test inputs for Java programs. Korat takes: (1) an imperative predicate that specifies the desired structural integrity constraints and (2) a finitization that bounds the desired test input size. Korat generates all inputs (within the bounds) for which the predicate returns true. To do so, Korat performs a systematic search of the predicate's input space. The inputs that Korat generates enable bounded-exhaustive testing for programs ranging from library classes to stand-alone applications.
Aleksandar Milicevic, Sasa Misailovic, Darko Marinov, Sarfraz Khurshid
ICSE1
2007 Parallel test generation and execution with Korat
abstract
We present novel algorithms for parallel testing of code that takes structurally complex test inputs. The algorithms build on the Korat algorithm for constraint-based generation of structurally complex test inputs. Given an imperative predicate that specifies the desired structural constraints and a finitization that bounds the desired input size, Korat performs a systematic search to generate all test inputs (within the bounds) that satisfy the constraints. We present how to generate test inputs with a parallel search in Korat and how to execute test inputs in parallel, both off-line (when the inputs are saved on disk) and on-line (when execution immediately follows generation).
Sasa Misailovic, Aleksandar Milicevic, Nemanja Petrovic, Sarfraz Khurshid, Darko Marinov
ESEC/SIGSOFT FSE2