Abstract: |
As modern software systems are becoming more and more complex, the difficulty of their development increases as well. In order to maintain the development complexity, it is crucial to help software developers perform their tasks efficiently and correctly. While developers take part in multiple different tasks, studies have shown that the most challenging problem is the comprehension of existing code. Xia et al. have discovered that developers spend as much as 58% of their time on program comprehension activities. The study of LaToza et al. shows that the knowledge of different parts of the code is distributed between multiple teams and developers. Therefore, when a developer works on a task spanning multiple code parts, other colleagues are often asked to share their related knowledge, causing interruptions and fragmentation of their work. Development teams usually tackle these problems by adjusting the development process. For example, if developers ask too often about the same part of the system, it may be efficient to explicitly capture its most essential features into written documentation. To reduce the influence of work interruptions, developers can plan explicit meetings, e.g., morning stand-up meetings. When applied successfully, these activities can indeed make software development more efficient. However, they still bring non-negligible overhead, such as the maintenance of the documentation or extra time regularly spent on scheduled meetings. A possibly more efficient way to help developers with program comprehension might be to equip them with better tools which empower them to distribute their knowledge more easily. For example, it is possible to create novel integrated development environments (IDE) which utilise the recent trends from the field of human-computer interaction (HCI). However, these tools usually originate from academia and rarely gain any significant adoption in practice. Also, most of them do not use automated code analysis techniques, leaving the actual code exploration and reasoning to developers themselves. On the other hand, there is a plethora of automated code analysis techniques, for example, data-flow analysis, abstract interpretation, constraint-based analysis or symbolic execution. The academic community is very active in developing these techniques and creating new ones. Regrettably, the research is usually focused mainly on their technical qualities and not on the improvement of their practical usability by a wide audience. As a result, their adoption in practice is limited to specific domains where the increase in code quality justifies the time investment, e.g. in embedded software development. My research aims to discover whether it is possible to combine HCI and code analysis knowledge to create practically usable program comprehension tools. |