Jonathan Dorn

Contact Info

  • GrammaTech, Inc.
    531 Esty Street
    Ithaca, NY 14850

I am a Senior Scientist at GrammaTech, Inc. I research automated software engineering, software evolution, binary analysis, and binary optimization. My research interests also include the way developers read, understand, and interact with programs.


Jonathan Dorn, Connelly Barnes, Jason Lawrence, Westley Weimer. Towards Automatic Band-Limited Procedural Shaders, Pacific Graphics. 2015. [PDF] [video (160 MB)] [supplemental material] [slides (17 MB)]
Ermira Daka, Jose Campos, Gordon Fraser, Jonathan Dorn, Westley Weimer. Modeling Readability to Improve Unit Tests, Foundations of Software Engineering (ESEC/FSE). 2015. [PDF]
ACM SIGSOFT Distinguished Paper Award
SSBSE Ermira Daka, Jose Campos, Jonathan Dorn, Gordon Fraser, Westley Weimer. Generating Readable Unit Tests for Guava, Symposium on Search Based Software Engineering (SSBSE). 2015. [PDF]
Eric Schulte, Jonathan Dorn, Stephen Harding, Stephanie Forrest, Westley Weimer. Post-compiler Software Optimization for Reducing Energy, Architectural Support for Programming Languages and Operating Systems (ASPLOS). 2014. [PDF]


TSE Jonathan Dorn, Jeremy Lacomis, Westley Weimer, Stephanie Forrest. Automatically Exploring Tradeoffs Between Software Output Fidelity and Energy Costs Transactions on Software Engineering. 45(3): 219-236. 2019. [PDF]


HotPar Chris Gregg, Jonathan Dorn, Kim Hazelwood, Kevin Skadron. Fine-Grained Resource Sharing for Concurrent GPGPU Kernels, 4th USENIX Workshop on Hot Topics in Parallelism (HotPar'12). 2012. [PDF]

Book Chapter

Jeremy Lacomis, Jonathan Dorn, Westley Weimer, Stephanie Forrest. Automatically Reducing Energy Consumption of Software. The Energetics of Computing in Life and Machines, 2019. [PDF]


In this project, we use lightweight program transformations and genetic search to reduce the energy requirements of data center applications. We leverage mutational robustness (small changes to programs often retain the original program's functionality) along with insights from profile-guided optimization to effectively transform the program to use less energy. In our experiments, we reduce energy by 20% on average while retaining the original functionality and by almost 30% with human-acceptable levels of error.


Developers spend an order of magnitude more time reading and maintaining code than writing new code. This project aims to understand what factors control the readability of source code and investigates automatic techniques to improve readability. In an IRB-approved human study, users were able to answer questions 14% more quickly (with no loss of accuracy) about automatically generated tests when they were optimized for readability than when they were not.

Program Repair

Existing approaches to automatic program repair require a specification of the desired program behavior, either explicit (e.g., pre- and post-conditions) or implicit (e.g., inferred from a test suite). Although many bug reports include a failing test case that specifies the desired missing behavior, many real-world programs lack sufficient passing tests to describe the desired existing behavior. In this project, we investigate the applicability of specification mining and automatic test-case generation techniques to capture existing behavior for use in program repair.

Shader Simplification

Many modern rendering systems use small programs called shaders to specify the properties of elements of the scene being rendered. The development of these shaders is complicated by aliasing artifacts, when the features encoded in the shader change too rapidly relative to the pixels of the image. In this project, we apply local light-weight transformations and heuristic search to existng shader programs to introduce the pixel size as a parameter. We find that our approach produces images with similar quality to state-of-the-art computationally intensive approaches, but with significantly lower runtime.

I taught a compilers practicum to 9 students in the spring semester of 2014. [lecture slides]

This course was an optional companion to CS 4610 Programming Languages, for advanced students to apply PL concepts to implement an optimizing compiler for a small object-oriented language. The assignments were designed by the CS 4610 instructor to reduce redundancy between assignments in both classes, while I was responsible for the content and presentation of the lectures, answering questions, and providing guidance to the student teams. The lectures covered basic code generation for a byte code virtual machine and x86_64, object layout, calling conventions, boxing and unboxing of primitives, peephole optimizations, register allocation, and dataflow analysis.