Notice and Invitation Oral Defense of Doctoral Dissertation College of Engineering and Computing, George Mason University Sahar Mehrpour Bachelor of Science, Sharif University of Technology, 2011 Master of Science, University of Manitoba, 2016 Helping Developers Work with Design Decisions Tuesday, May 28, 2024, 11:00am-1:00pm Engineering Building, Room 4201 https://gmu.zoom.us/j/91272054513?pwd=a3pPZHlyN3VDNTRudlB1T1ZQQVBlQT09 All are invited to attend. Committee Dr. Thomas LaToza, Chair Dr. Paul Ammann Dr. Brittany Johnson Dr. Sungsoo Ray Hong Dr. George Fairbanks Abstract When writing code, developers make design decisions by choosing between alternatives. Design decisions are the foundation of software, outlining the functional and non-functional attributes of the software. Developers constantly work with design decisions when they identify or choose alternatives, document or reason about design decisions, or hypothesize a design decision and test it against the code. Subsequent work with code requires reasoning about these design decisions, ensuring their code is consistent, and answering rationale questions about why they were made. To understand design decisions, developers traditionally use design documentation. Traditional approaches to documentation rely on developers to write down design decisions and update them as the code evolves. Unfortunately, documentation is often incomplete, outdated, and untrustworthy, pushing developers to learn design decisions directly from code. Moreover, learning decisions from code is challenging as developers may become disoriented and confused, and have difficulty understanding the design rationale. To address these problems, I introduced an innovative approach to documentation called `active documentation,' which makes design decisions explicit, making them checkable against the code and providing instant feedback on any divergences between the code and the documentation. This approach helps developers understand design decisions through detailed explanations and code examples that demonstrate how to follow a design decision. Based on this concept, I developed and evaluated a tool named ActiveDocumentation, which is shown to expedite and enhance the ability of developers to work with unfamiliar codebases. To simplify the creation and upkeep of active documentation, new methods are essential for generating and modifying checkable design decisions. Therefore, I proposed two new methods: snippet-based authoring and semi-natural language authoring, which allow the authoring of checkable decisions in simple and expressive formats. I incorporated these approaches into a new tool named RulePad, whose evaluation indicates it enables developers to author design rules more quickly and with greater precision. Additionally, to assist developers in finding undocumented design rules within a codebase, I developed and evaluated a tool called DesignRuleMiner. This tool leverages frequent itemset mining techniques to identify potential design rules. The evaluation of DesignRuleMiner shows its effectiveness in supporting developers to comprehend the design rules of an unfamiliar codebase more rapidly.