Master ThesisSupervisor: Leonhard Lichtschlag Title: "Code Mixer: A Visual Approach to Code Comprehension and Information Foraging"
A software maintenance task can typically be divided into two phases: code com- prehension and information foraging. During the former, developers try to grasp the rationale behind source code, while in the latter developers performs code mod- ification, which is often accomplished by integrating others’ code examples that are found on the Web. Many problems arises during this period, and accordingly, plenty of tools have been proposed to solve them. However, most of these tools only deal with one of the aforementioned phases, forcing developers to utilize a lot of tools to fix different kinds of problems. To this end, in this thesis work we present the design for Code Mixer, a tool that should help developers throughout the entirety of the maintenance period. At the center of Code Mixer are compositions, which is a concept that we utilize to represent both the problems that developers face and the pieces of information that they share among one another. Further- more, Code Mixer is based on three design principles (visual emphasis, portability and task orientation), further ensuring its effectiveness as a help tool. To formu- late the design, we underwent a progressive design period that spans four phases. Code Mixer stared off as a web-based environment that differentiates between two user roles, composers and consumers. However, it ended up being a system that combines a desktop interface and a central repository, with unified user experience for all users, making it possible to grow into a thriving community where users can share ideas in the form of compositions. To evaluate our design we conducted a set of qualitative users studies, where users gave unanimously positive reactions re- garding Code Mixer’s ability to provide assistance for developers during the main- tenance period. Ultimately, what separate Code Mixer from the other help tools is the way it bridges the gap between code comprehension and information for- aging. It addresses information foraging by supplying a standardized format for task description in the form of design patterns-like structure, on top of providing lightweight creation, distribution and reuse of compositions. Meanwhile, it helps code comprehension by providing a task-oriented outlook of source code, as well as allowing for an efficient navigation through code that focuses on the current task.