LaToza, ThomasAlaboudi, Abdulaziz2023-06-092023-06-092023-05-19https://hdl.handle.net/20.500.14154/68306Debugging has traditionally been described as a process of formulating and testing hypotheses about defects, but there has been a lack of tools to assist developers in this crucial process. While prior work has mainly focused on fault localization, developing tools that automatically locate buggy code, the effectiveness of these tools compared to those that may help developers find and test hypotheses remain unclear. I conducted a randomized controlled experiment to address this question. The results showed that a tool that helped identify the correct hypothesis improved developers' success in fixing defects six times compared to a fault localization tool. This finding underscores the potential effectiveness of debuggers that assist in finding and testing hypotheses. To design effective debuggers to support formulating and testing hypotheses, a deeper understanding of debugging behavior is required. To fill this knowledge gap, I created a new dataset of debugging work using live-streamed programming videos. I used it to study two behaviors based on the hypothesis debugging model: the broader activities developers engage in during debugging and the edit-run cycle behavior developers engage in while testing hypotheses. These studies revealed several interesting findings about debugging behavior, suggesting that debuggers should aim to reduce the amount of work spent switching between activities and rerunning the program to find and test hypotheses in debugging. This dissertation introduces the concept of hypothesis-based debuggers, representing a new type of debugger designed to streamline identifying and testing hypotheses. Unlike traditional debuggers that require manual switching between activities to gather information about the defect, hypothesis-based debuggers automate gathering all necessary information about the defect and use it to identify relevant hypotheses. Instead of ineffectively testing multiple hypotheses, hypothesis-based debuggers rank hypotheses based on their relevance and offer a step-by-step testing plan for each relevant hypothesis. To validate the effectiveness of hypothesis-based debuggers, I implemented and evaluated a debugger named Hypothesizer. Results showed that Hypothesizer significantly improves the success rate of fixing defects compared to traditional debuggers and Stack Overflow. Hypothesizer simplifies the process of observing defect behavior, assists developers in identifying the correct hypothesis, and helps them effectively verify or refute relevant hypotheses, even with limited knowledge of the codebase.159en-USSoftware EngineeringDebuggingEmpirical Software EngineeringDevelopers ToolsHypothesis-Based DebuggersThesis