Producing Productive Programmers: A Tool (Mis)communication Theory and Adaptive Approach for Supporting Developer Tool Use
Software development and maintenance is an important part of the software engineering process. It is during these phases of the software engineering process that developers complete actions to ensure quality software, such as finding and resolving software defects and refactoring. Many of the actions involved in writing and maintaining software are manual, tedious and, as a result, error-prone. Program analysis tools, including those that find and resolve defects, provide feedback to and automate tasks for developers. Research has found, however, that developers use these tools infrequently in practice. Multiple studies have explored developers' usage of program analysis tools and cumulatively found that developers encounter various challenges when attempting to understand and resolve problems in their code.
Our research explored developer tool usage and information needs when understanding and resolving notifications. Based on my exploration so far, we propose a theory that suggests developers have difficulty with tool output because of gaps and mismatches between how much developers know and how tools communicate. One potential solution to this kind of problem is for tools to adapt their output based on what a given developer knows about concepts relevant to the tool output. We evaluated our theory by using developer experiences to classify developer programming knowledge and expertise-based information needs to determine potentially effective tool adaptations. Along with our findings, we discuss some possible directions for future work in this area.
Speaker Bio: Dr. Brittany Johnson is a Postdoctoral Fellow in the College of Information and Computer Sciences. She received her Ph.D. in Computer Science from North Caroline State University (2017). Her research interests lie at the intersection of software engineering, human-computer interaction, and artificial intelligence. Her work focuses on both the needs of the developer and ways that systems can effectively fulfill those needs.