Software engineering recommendation systems assist developers so that they can almost automatically find: 1) code snippets that match their programs, 2) appropriate APIs and libraries, 3) bug fixes, and 4) code changes. These systems are particularly important because they can help developers to handle large amounts of information and write stable programs. In this post, we briefly categorize existing recommendation approaches and tools.
Code completion
Modern integrated software environments on the fly suggest to developers code hints about typos or programming mistakes improving developers’ productivity. There is a large research body and related tools regarding code completion and program synthesis. For instance, WitchDoctor is a tool that offers real-time auto-complete refactoring suggestions [1]. CodeHint is another tool that synthesizes code snippets, dynamically [2]. In addition, there are tools that suggest API usage examples (see for example [3]). Intelligent software environments and tools, also, automatically suggest coding conventions and standards to developers, when they write their programs [4].
Software Testing
Testing helps developers to reduce the number of application execution failures and increase systems’ maintainability. In order to facilitate testing modern testing approaches and tools recommend appropriate test inputs and constrains. For instance, in [5] authors propose and approach for high test coverage. In addition, there is a significant research interest concerning the automation of the selection of test inputs for the evaluation of mobile applications [6]. Finally, there are approaches regarding the prioritization of test reports for the prevention of applications from crucial execution failures [7].
Bug Fixing
Efficient debugging and bug fixing can contribute to applications high responsiveness. Bug localization and prioritization refer to important tasks that ensure program stability. Many researchers have developed tools in order to facilitate these tasks. For instance, consider the CrashLocator tool for bug localization assistance [8]. Also, Kim et al. have developed a method that ranks types of software crashes to help developers to prioritize their debugging efforts [9].
Code Changes
Developers can make changes to their programs regarding new features and bug fixes. Rose is a tool that predicts code changes based on sets of existing code changes [10]. Another tool is called Chianti and it is a change impact analysis tool that identifies error-prone code changes [11]. Finally, Azurity is an Eclipse plug-in that allows programmers to selectively undo code changes made in their code editor [12].
References
[1] Stephen R. Foster, William G. Griswold, and Sorin Lerner. 2012. WitchDoctor: IDE support for real-time auto-completion of refactorings. In Proceedings of the 34th International Conference on Software Engineering (ICSE ’12). IEEE Press, Piscataway, NJ, USA, 222-232.
[2] Joel Galenson, Philip Reames, Rastislav Bodik, Björn Hartmann, and Koushik Sen. 2014. CodeHint: dynamic and interactive synthesis of code snippets. In Proceedings of the 36th International Conference on Software Engineering (ICSE 2014). ACM, New York, NY, USA, 653-663. DOI=http://dx.doi.org/10.1145/2568225.2568250
[3] Raymond P. L. Buse and Westley Weimer. 2012. Synthesizing API usage examples. In Proceedings of the 34th International Conference on Software Engineering (ICSE ’12). IEEE Press, Piscataway, NJ, USA, 782-792.
[4] Miltiadis Allamanis, Earl T. Barr, Christian Bird, and Charles Sutton. 2014. Learning natural coding conventions. In Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering (FSE 2014). ACM, New York, NY, USA, 281-293. DOI=http://dx.doi.org/10.1145/2635868.2635883
[5] Suresh Thummalapenta, Tao Xie, Nikolai Tillmann, Jonathan de Halleux, and Zhendong Su. 2011. Synthesizing method sequences for high-coverage testing. In Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications (OOPSLA ’11). ACM, New York, NY, USA, 189-206. DOI=http://dx.doi.org/10.1145/2048066.2048083
[6] Shauvik Roy Choudhary, Alessandra Gorla, Alessandro Orso:Automated Test Input Generation for Android: Are We There Yet? (E). ASE 2015: 429-440
[7] Yang Feng, Zhenyu Chen, James A. Jones, Chunrong Fang, and Baowen Xu. 2015. Test report prioritization to assist crowdsourced testing. In Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering (ESEC/FSE 2015). ACM, New York, NY, USA, 225-236. DOI=http://dx.doi.org/10.1145/2786805.2786862
[8] Rongxin Wu, Hongyu Zhang, Shing-Chi Cheung, and Sunghun Kim. 2014. CrashLocator: locating crashing faults based on crash stacks. In Proceedings of the 2014 International Symposium on Software Testing and Analysis (ISSTA 2014). ACM, New York, NY, USA, 204-214. DOI=http://dx.doi.org/10.1145/2610384.2610386
[9] Dongsun Kim, Xinming Wang, Sunghun Kim, Andreas Zeller, S. C. Cheung, and Sooyong Park. 2011. Which Crashes Should I Fix First?: Predicting Top Crashes at an Early Stage to Prioritize Debugging Efforts. IEEE Trans. Softw. Eng. 37, 3 (May 2011), 430-447. DOI=http://dx.doi.org/10.1109/TSE.2011.20
[10] Thomas Zimmermann, Peter Weisgerber, Stephan Diehl, and Andreas Zeller. 2004. Mining Version Histories to Guide Software Changes. In Proceedings of the 26th International Conference on Software Engineering (ICSE ’04). IEEE Computer Society, Washington, DC, USA, 563-572.
[11] Xiaoxia Ren, Fenil Shah, Frank Tip, Barbara G. Ryder, and Ophelia Chesley. 2004. Chianti: a tool for change impact analysis of java programs. In Proceedings of the 19th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (OOPSLA ’04). ACM, New York, NY, USA, 432-448. DOI=http://dx.doi.org/10.1145/1028976.1029012
[12] Young Seok Yoon and Brad A. Myers. 2015. Supporting selective undo in a code editor. In Proceedings of the 37th International Conference on Software Engineering – Volume 1 (ICSE ’15), Vol. 1. IEEE Press, Piscataway, NJ, USA, 223-233.