Zhiqiang Zang

dblp:242/3959 · DBLP profile ↗
← Back
3ranked-venue papers
2as first author
2since 2021 · last 2023
0000-0001-7285-7677ORCID · corroborated

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

Software engineering, systems software and programming languages · 3 · 2 first-author · 2 since 2021

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
3 papers
Software testing · 32% Runtime systems and virtual machines · 27% Compilers and program optimization · 18%

Topics — the 9 heaviest of 11, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Software testing
compiler testing
1.222023
Pattern-Based Peephole Optimizations with Java JIT Tests · ISSTA 2023
Compiler Testing using Template Java Programs · ASE 2022
Runtime systems and virtual machines › dynamic compilation
just-in-time compilation
0.712023
Pattern-Based Peephole Optimizations with Java JIT Tests · ISSTA 2023
Compilers and program optimization › compiler optimization › local optimization
peephole optimization
0.712023
Pattern-Based Peephole Optimizations with Java JIT Tests · ISSTA 2023
Runtime systems and virtual machines › dynamic compilation › just-in-time compilation
JIT compiler testing
0.612022
Compiler Testing using Template Java Programs · ASE 2022
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
Program synthesis and code generation › generative programming
template-based code generation
0.212022
Compiler Testing using Template Java Programs · ASE 2022
Software testing › test generation
random test generation
0.112020
Unifying execution of imperative generators and declarative specifications · Proc. ACM Program. Lang. 2020
Software testing
test generation
0.112020
Unifying execution of imperative generators and declarative specifications · Proc. ACM Program. Lang. 2020

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

pattern matching · 0.7template-based generation · 0.6random testing · 0.6domain-specific language · 0.6search-based solving · 0.4first-order relational logic · 0.4constraint solving · 0.4
YearPublicationVenuePosition
2023 Pattern-Based Peephole Optimizations with Java JIT Tests
abstract
We present JOG, a framework that facilitates developing Java JIT peephole optimizations alongside JIT tests. JOG enables developers to write a pattern, in Java itself, that specifies desired code transformations by writing code before and after the optimization, as well as any necessary preconditions. Such patterns can be written in the same way that tests of the optimization are already written in OpenJDK. JOG translates each pattern into C/C++ code that can be integrated as a JIT optimization pass. JOG also generates Java tests for optimizations from patterns. Furthermore, JOG can automatically detect possible shadow relation between a pair of optimizations where the effect of the shadowed optimization is overridden by another. Our evaluation shows that JOG makes it easier to write readable JIT optimizations alongside tests without decreasing the effectiveness of JIT optimizations. We wrote 162 patterns, including 68 existing optimizations in OpenJDK, 92 new optimizations adapted from LLVM, and two new optimizations that we proposed. We opened eight pull requests (PRs) for OpenJDK, including six for new optimizations, one on removing shadowed optimizations, and one for newly generated JIT tests; seven PRs have already been integrated into the master branch of OpenJDK.
Zhiqiang Zang, Aditya Thimmaiah, Milos Gligoric 0001
ISSTA1
2022 Compiler Testing using Template Java Programs
abstract
We present JAttack, a framework that enables template-based testing for compilers. Using JAttack, a developer writes a template program that describes a set of programs to be generated and given as test inputs to a compiler. Such a framework enables developers to incorporate their domain knowledge on testing compilers, giving a basic program structure that allows for exploring complex programs that can trigger sophisticated compiler optimizations. A developer writes a template program in the host language (Java) that contains holes to be filled by JAttack. Each hole, written using a domain-specific language, constructs a node within an extended abstract syntax tree (eAST). An eAST node defines the search space for the hole, i.e., a set of expressions and values. JAttack generates programs by executing templates and filling each hole by randomly choosing expressions and values (available within the search space defined by the hole). Additionally, we introduce several optimizations to reduce JAttack’s generation cost. While JAttack could be used to test various compiler features, we demonstrate its capabilities in helping test just-in-time (JIT) Java compilers, whose optimizations occur at runtime after a sufficient number of executions. Using JAttack, we have found six critical bugs that were confirmed by Oracle developers. Four of them were previously unknown, including two unknown CVEs (Common Vulnerabilities and Exposures). JAttack shows the power of combining developers’ domain knowledge (via templates) with random testing to detect bugs in JIT compilers.
Zhiqiang Zang, Nathan Wiatrek, Milos Gligoric 0001, August Shi
ASE1
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.3