Publications Projects Experience Awards About Me


PraPR: Practical Program Repair via Bytecode Mutation

Ali Ghanbari and Lingming Zhang

Proceedings of the 34th IEEE/ACM International Conference on Automated Software Engineering (ASE'19)

Demo Track, pages to appear, 2019. [pdf, website, video]

Toward Practical Automatic Program Repair

Ali Ghanbari

Proceedings of the 34th IEEE/ACM International Conference on Automated Software Engineering (ASE'19)

SRC Track, pages to appear, 2019. [pdf]

Practical Program Repair via Bytecode Mutation

Ali Ghanbari, Samuel Benton, and Lingming Zhang

Proceedings of the 28th ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA'19)

pp. 19--30, 2019. [pdf]

Defexts: A Curated Dataset of Reproducible Real-world Bugs for Modern JVM Languages

Samuel Benton, Ali Ghanbari, and Lingming Zhang

Proceedings of the 41st ACM/IEEE International Conference on Software Engineering (ICSE'19)

Demo Track, pp. 47--50, 2019. [pdf]

Microprocessors and Assembly Language (ریزپردازنده و زبان اسمبلی)

Mohammad M. Homayounpour, Farzad Hessar, Amir Asghari, and Ali Ghanbari

Sheikh Bahaii Publication, ISBN 978-6005473063, Isfahan, 2015. [link]

Technical Reports

Validation of Automatically Generated Patches: An Appetizer

Ali Ghanbari

CoRR abs/1912.00117

arXiv, 2019. [pdf]

Can Automated Program Repair Refine Fault Localization?

Yiling Lou, Ali Ghanbari, Xia Li, Lingming Zhang, Dan Hao, and Lu Zhang

CoRR abs/1910.01270

arXiv, 2019. [pdf]

A Language-based Approach to Datarace Prevention

A. Ghanbari and Mehran S. Fallah

MSc Thesis (Amirkabir University of Technology), 2014. [link]

Object-Oriented Design, Formal Verification, and Implementation of a Microkernel

A. Ghanbari and Alireza Bagheri

BSc Project (Amirkabir University of Technology), 2012. [link]



PraPR (Practical Program Repair) is a mutation-based automated program repair (APR) tool operating at the level of JVM bytecode. PraPR is based on simple mutation operators derived from mining thousands of real-world bug-fix commits. Being based on simplistic bytecode-level program transformations, PraPR has two main advantages over state-of-the-art APR techniques: (1) the burden of producing syntactically correct mutants, and compilation overhead (which at least involves parsing and type checking), is eliminated so the tool is able to explore a huge search space within a reasonable amount of time; (2) it is a JVM-language-agnostic APR tool that can be applied to more than 6 popular JVM-based languages. PraPR has been able to correctly fix 43 and 9 bugs from real-world Java (from Defects4J V1.4.0) and Kotlin (from Defexts), resp., projects while being over 10X faster than the state-of-the-art APR techniques. PraPR is publicly available in Maven Central Repo and can be applied to arbitrary Maven/Gradle-based Java, or Kotlin, projects.

[website, video]

Object Utils

A Java library for (de)serializing and dynamically defining comparison functions for aribitrary Java objects.

Fix Patterns Miner

A scalable GumTree-based framework for mining bug-fix patterns from large datasets of bug-fix commits.


Yet another (but faster!) static analysis framework based on ASM. This framework computes call graphs, control flow graphs, and does dataflow analysis.


A Soot-based datarace detection system for Java. Camelspider does summary-based analysis and summarizes the effects of each method in the program in a reverse pseudo-topological order of the call graph. The aggregated summary is then analyzed for finding conflicting events without any happened-before relation between them. Camelspider is proven to be sound, and being summary-based (and thanks to its compact graph representation), it is scalable.


My first self-motivated, large-scale programming project done from 2005 to 2006, when I was in high-school. CCS is a simple, yet novel, disk operating system fully developed in x86 assembly.




Sole Instructor

CS/SE 4348.0U2.19U - Operating Systems Concepts, Summer 2019, The University of Texas at Dallas

I had the unique experience of teaching to 19 bright students. My goal was not just to familiarize my students with the basic operating system concepts, rather I made them practice the concepts by assigning two non-trivial programming tasks. My goal was to prepare them for real-world responsibilities in advanced industry or academia. In the first programming task, the students were asked to implement a simple distributed file system and in the second assignment, they were asked to implement a word count program using the simplistic map-reduce framework that they had constructed.

Teaching Assistant

CS/SE/CE 6367 - Software Testing Validation and Verification, Spring 2018, The University of Texas at Dallas

CS/SE/CE 3354 - Software Engineering, Spring 2018, The University of Texas at Dallas

CS/CE 4337 - Organization of Programming Languages, Fall 2017, The University of Texas at Dallas

Principles of Database Systems, 2012, Amirkabir University of Technology

Principles of Microprocessors, 2012, Amirkabir University of Technology


ACM Student Research Competition

IEEE/ACM International Conference on Automated Software Engineering

Third Place, 2019.

IEEE Softwate Testing Contest

First Place, 2019.

First Place, 2018.

UBER Technologies, Inc.

Offered Ph.D. Software Engineer Internship

Summer 2019.

Huawei Research

Offered Intern-Analysis Tool

Summer 2019.

Kharazmi Award

Design and Implementation of CCS-OS


About Me

I am a Ph.D. student at UT Dallas and I am doing my Ph.D. in Software Engineering. I joined Prof. Lingming Zhang's team in Fall 2017. Currently, I am working as a Research Assistant under the supervision of Prof. Zhang. I received my BSc. and MSc. degrees both in Software Engineering from Amirkabir University of Technology in 2012 and 2014, respectively.

I started reading research papers and pursuing research goals in software engineering since 2012. My long-term goal is to make the life easier for programmers: this can be in the form of bringing formal methods to everyday life (to make programs bug-free or more reliable) or automating common debugging tasks. I started with simplifying formal specification by proposing an algorithm for translating UML(+OCL) models into B formal specifications. In my Master's thesis, I worked on automatic detection of dataraces for Java programs in a sound, scalable, and precise way. Currently, I am working on automated program repair.

© 2019 Ali Ghanbari. Powered by w3.css