ABSTRACT
To build new tools and programming languages that make it easier for professional software developers to create, debug, and understand code, it is helpful to better understand the questions that developers ask during coding activities. We surveyed professional software developers and asked them to list hard-to-answer questions that they had recently asked about code. 179 respondents reported 371 questions. We then clustered these questions into 21 categories and 94 distinct questions. The most frequently reported categories dealt with intent and rationale -- what does this code do, what is it intended to do, and why was it done this way? Many questions described very specific situations -- e.g., what does the code do when an error occurs, how to refactor without breaking callers, or the implications of a specific change on security. These questions revealed opportunities for both existing research tools to help developers and for developing new languages and tools that make answering these questions easier.
- Abadi, M., Flanagan, C., and Freund, S. N. (2006.) Types for safe locking: Static race detection for Java. In TOPLAS, 28(2), 207--255. Google ScholarDigital Library
- Anvik, J, Hiew, L, and Murphy, G. C. (2006). Who should fix this bug? In Proc. of the Int'l Conf. on Soft. Eng. (ICSE). Google ScholarDigital Library
- Burdy, L., Cheon, Y, Cok, D., Ernst, M., Kiniry, J., Leavens, G. T., Leino, K. R. M., and Poll, E. (2003). An overview of JML tools and applications. In International Journal on Software Tools for Technology Transfer, 7(3), 212--232. Google ScholarDigital Library
- Cook, B., Gotsman, A., Podelski, A., Rybalchenko, A., and Vardi, M. (2007). Proving that programs eventually do something good. In Principles of Programming Languages (POPL). Google ScholarDigital Library
- Dietl, W. and Muller, P. (2005). Universes: lightweight ownership for JML. In Journal of Object Technology, 4(8).Google Scholar
- Erickson, C. (2003). Memory leak detection in C++. In Linux J., 110 (Jun. 2003), 8. Google ScholarDigital Library
- Fritz, T., and Murphy, G. C. (2010). Using information fragments to answer the questions developers ask. In Proc ICSE, 175--184. Google ScholarDigital Library
- Gamma, E., Helm, R., Johnson, R., and Vlissides, J. (2003) Design patterns: elements of reusable object-oriented software. Addison -- Wesley.Google Scholar
- Godefroid, P., Klarlund, N, and Sen, K. (2005). DART: directed automated random testing. In PLDI. Google ScholarDigital Library
- Goodenough, J. B. (1975). Exception handling: issues and a proposed notation. In Communications of the ACM (CACM), 18(12), 683--693. Google ScholarDigital Library
- Hoffmann, R., Fogarty, J., and Weld, D. S. (2007). Assieme: finding and leveraging implicit references in a web search interface for programmers. In UIST, 13--22. Google ScholarDigital Library
- Holmes, R., and Begel, A. (2008). Deep intellisense: a tool for rehydrating information. In Proc. Mining Software Repositories (MSR). Google ScholarDigital Library
- Jordan, E., Sangal, N., Sinha, V., and Jackson, D. (2005). Using dependency models to manage complex software architecture. In Proc. OOPSLA. Google ScholarDigital Library
- Kamiya, T., Kusumoto, S., and Inoue, K. (2002). CCFinder: a multi-linguistic token-based code clone detection system for large scale source code. In TSE, 28(7). Google ScholarDigital Library
- Ko, A. J., DeLine, R., and Venolia, G. (2007). Information needs in collocated software development teams. In ICSE, 344--353. Google ScholarDigital Library
- Ko, A. J., and Myers, B. A. (2008). Debugging reinvented: asking and answering why and why not questions about program behavior. In Proc. of the Int'l Conf. on Soft. Eng. (ICSE). Google ScholarDigital Library
- Kollmann, R., Selonen, P., Stroulia, E., Systä, T., and Zündorf, A. (2002). A study on the current state of the art in tool-supported UML-based static reverse engineering. In WCRE. Google ScholarDigital Library
- LaToza, T. D., Garlan, D., Herbsleb, J. D., and Myers, B. A. (2007). Program comprehension as fact finding. In FSE. Google ScholarDigital Library
- LaToza, T. D., Myers, B. A. (2010). Developers ask reachability questions. In Proc. of the Int'l Conf. on Soft. Eng. (ICSE). Google ScholarDigital Library
- LaToza, T. D., Venolia, G., and DeLine, R. (2006). Maintaining mental models: a study of developer work habits. In Proc. ICSE. Google ScholarDigital Library
- Letovsky, S. (1986). Cognitive processes in program comprehension. In Empirical Studies of Programmers. Google ScholarDigital Library
- Mockus, A., and Herblseb, J. (2002). Expertise browser: a quantitative approach to identifying expertise. In Proc ICSE. Google ScholarDigital Library
- Moran, T. P. and Carroll, J. M., Eds. (1996). Design rationale: concepts, techniques, and use. Lawrence Erlbaum Associates, Inc. Google ScholarDigital Library
- Sillito, J., Murphy, G. C., and De Volder, K. (2008). Asking and answering questions during a programming change task. In Transactions on Software Engineering (TSE), 34(4). Google ScholarDigital Library
- Sridharan, M., Fink, S. J., and Bodik, R. (2007). Thin slicing. In Programming Language Design & Implementation (PLDI). Google ScholarDigital Library
- Strom, R. E., Yemini, S. (1986). Typestate: a programming language concept for enhancing software reliability. In Transactions on Software Engineering (TSE), 12(1), 157--171. Google ScholarDigital Library
- Sullivan, K. J., Griswold, W. G., Cai, Y., and Hallen, B. (2001). The structure and value of modularity in design. In Proc. FSE. Google ScholarDigital Library
- Sutherland, D. (2008). The code of many colors: semi-automated reasoning about multi-thread policy for Java. Dissertation, Carnegie Mellon University Google ScholarDigital Library
Index Terms
- Hard-to-answer questions about code
Recommendations
CODES: mining source code descriptions from developers discussions
ICPC 2014: Proceedings of the 22nd International Conference on Program ComprehensionProgram comprehension is a crucial activity, preliminary to any software maintenance task. Such an activity can be difficult when the source code is not adequately documented, or the documentation is outdated. Differently from the many existing ...
Slicing and replaying code change history
ASE '12: Proceedings of the 27th IEEE/ACM International Conference on Automated Software EngineeringChange-aware development environments have recently become feasible and reasonable. These environments can automatically record fine-grained code changes on a program and allow programmers to replay the recorded changes in chronological order. However, ...
Code Clone Graph Metrics for Detecting Diffused Code Clones
APSEC '09: Proceedings of the 2009 16th Asia-Pacific Software Engineering ConferenceCode clones (duplicated source code in a software system) are one of the major factors in decreasing maintainability. Many code clone detection methods have been proposed to find code clones automatically from large-scale software. However, it is still ...
Comments