Abstract
Effective software reuse has long been regarded as an important foundation for a more engineering-like approach to software development. Proactive recommendation systems that have the ability to unobtrusively suggest immediately applicable reuse opportunities can become a crucial step toward realizing this goal and making reuse more practical. This chapter focuses on tools that support reuse through the recommendation of source code—reuse-oriented code recommendation systems (ROCR). These support a large variety of common code reuse approaches from the copy-and-paste metaphor to other techniques such as automatically generating code using the knowledge gained by mining source code repositories. In this chapter, we discuss the foundations of software search and reuse, provide an overview of the main characteristics of ROCR systems, and describe how they can be built.
This is a preview of subscription content, log in via an institution.
Buying options
Tax calculation will be finalised at checkout
Purchases are for personal use only
Learn about institutional subscriptionsNotes
- 1.
The acronym ROCR is meant to be pronounced “rocker.”
- 2.
The Merobase repository of reusable assets contains approximately 2.5 million Java source files with around 22 million methods [18].
References
Atkinson, C., Bostan, P., Brenner, D., Falcone, G., Gutheil, M., Hummel, O., Juhasz, M., Stoll, D.: Modeling components and component-based systems in KobrA. In: Rausch, A., Reussner, R., Mirandola, R., Plášil, F. (eds.) The Common Component Modeling Example. Lecture Notes in Computer Science, vol. 5153, pp. 54–84. Springer, Heidelberg (2008). doi:10.1007/978-3-540-85289-6_4
Atkinson, C., Hummel, O., Janjic, W.: Search-enhanced testing. In: Proceedings of the ACM/IEEE International Conference on Software Engineering, pp. 880–883 (2011). doi:10.1145/1985793.1985932
Bajracharya, S., Ngo, T., Linstead, E., Dou, Y., Rigor, P., Baldi, P., Lopes, C.: Sourcerer: a search engine for open source code supporting structure-based search. In: Companion to the ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, pp. 681–682 (2006). doi:10.1145/1176617.1176671
Begel, A., Phang, K.Y., Zimmermann, T.: Codebook: discovering and exploiting relationships in software repositories. In: Proceedings of the ACM/IEEE International Conference on Software Engineering, pp. 125–134 (2010). doi:10.1145/1806799.1806821
Bruch, M., Monperrus, M., Mezini, M.: Learning from examples to improve code completion systems. In: Proceedings of the European Software Engineering Conference/ACM SIGSOFT International Symposium on Foundations of Software Engineering, pp. 213–222 (2009). doi:10.1145/1595696.1595728
Brun, Y., Holmes, R., Ernst, M.D., Notkin, D.: Speculative analysis: exploring future development states of software. In: Proceedings of the FSE/SDP Workshop on the Future of Software Engineering Research, pp. 59–64 (2010). doi:10.1145/1882362.1882375
de Almeida, E.S., Alvaro, A., Lucrédio, D., Garcia, V., de Lemos Meira, S.R.: RiSE project: towards a robust framework for software reuse. In: Proceedings of the IEEE International Conference on Information Reuse and Integration, pp. 48–53 (2004). doi:10.1109/IRI.2004.1431435
Fischer, G., Henninger, S., Redmiles, D.: Cognitive tools for locating and comprehending software objects for reuse. In: Proceedings of the ACM/IEEE International Conference on Software Engineering, pp. 318–328 (1991). doi:10.1109/ICSE.1991.130658
Frakes, W.B., Pole, T.: An empirical study of representation methods for reusable software components. IEEE Trans. Software Eng. 20(8), 617–630 (1994). doi:10.1109/32.310671
Holmes, R., Walker, R.J.: Systematizing pragmatic software reuse. ACM Trans. Software Eng. Meth. 21(4), 20:1–20:44 (2012). doi:10.1145/2377656.2377657
Holmes, R., Walker, R.J., Murphy, G.C.: Approximate structural context matching: an approach to recommend relevant examples. IEEE Trans. Software Eng. 32(12), 952–970 (2006). doi:10.1109/TSE.2006.117
Hummel, O., Atkinson, C., Schumacher, M.: Artifact representation techniques for large-scale software search engines. In: Sim, S.E., Gallardo-Valencia, R.E. (eds.) Finding Source Code on the Web for Remix and Reuse. Springer, Heidelberg (2013). doi:10.1007/978-1-4614-6596-6_5
Hummel, O., Janjic, W., Atkinson, C.: Evaluating the efficiency of retrieval methods for component repositories. In: Proceedings of the International Conference on Software Engineering and Knowledge Engineering, pp. 404–409 (2007)
Hummel, O., Janjic, W., Atkinson, C.: Code Conjurer: pulling reusable software out of thin air. IEEE Software 25(5), 45–52 (2008). doi:10.1109/MS.2008.110
Janjic, W.: Realising high-precision component recommendations for software-development environments. Diploma thesis, University of Mannheim (2007)
Janjic, W., Atkinson, C.: Utilizing software reuse experience for automated test recommendation. In: Proceedings of the International Workshop on Automation of Software Test (2013)
Janjic, W., Hummel, O., Atkinson, C.: More archetypal usage scenarios for software search engines. In: Proceedings of the Workshop on Search-Driven Development: Users, Infrastructure, Tools, and Evaluation, pp. 21–24 (2010). doi:10.1145/1809175.1809181
Janjic, W., Hummel, O., Schumacher, M., Atkinson, C.: An unabridged source code dataset for research in software reuse. In: Proceedings of the International Working Conference on Mining Software Repositories, pp. 339–342 (2013)
Krueger, C.W.: Software reuse. ACM Comput. Surv. 24(2), 131–183 (1992). doi:10.1145/130844.130856
Lange, B.M., Moher, T.G.: Some strategies of reuse in an object-oriented programming environment. In: Proceedings of the ACM SIGCHI Conference on Human Factors in Computing Systems, pp. 69–73 (1989). doi:10.1145/67449.67465
Lazzarini Lemos, O.A., Bajracharya, S., Ossher, J., Masiero, P.C., Lopes, C.: A test-driven approach to code search and its application to the reuse of auxiliary functionality. Inform. Software Tech. 53(4), 294–306 (2011). doi:10.1016/j.infsof.2010.11.009
Mandelin, D., Xu, L., Bodík, R., Kimelman, D.: Jungloid mining: helping to navigate the API jungle. In: Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation, pp. 48–61 (2005). doi:10.1145/1065010.1065018
McIlroy, M.D.: Mass-produced software components. In: Software Engineering: Report on a Conference by the NATO Science Committee, pp. 138–155 (1968)
Menzies, T.: Data mining: a tutorial. In: Robillard, M., Maalej, W., Walker, R.J., Zimmermann, T. (eds.) Recommendation Systems in Software Engineering, Springer, Heidelberg, Chap. 3 (2014)
Mili, A., Mili, R., Mittermeir, R.T.: A survey of software reuse libraries. Ann. Software Eng. 5, 349–414 (1998). doi:10.1023/A:1018964121953
Murphy-Hill, E., Murphy, G.C.: Recommendation delivery: getting the user interface just right. In: Robillard, M., Maalej, W., Walker, R.J., Zimmermann, T. (eds.) Recommendation Systems in Software Engineering, Springer, Heidelberg, Chap. 9 (2014)
Reiss, S.P.: Semantics-based code search. In: Proceedings of the ACM/IEEE International Conference on Software Engineering, pp. 243–253 (2009). doi:10.1109/ICSE.2009.5070525
Robillard, M.P., Walker, R.J., Zimmermann, T.: Recommendation systems for software engineering. IEEE Software 27(4), 80–86 (2010). doi:10.1109/MS.2009.161
Seacord, R.: Software engineering component repositories. In: Proceedings of the International Workshop on Component-Based Software Engineering (1999)
Umarji, M., Sim, S.E., Lopes, C.V.: Archetypal internet-scale source code searching. In: Proceedings of the IFIP World Computer Conference, IFIP—The International Federation for Information Processing, vol. 275, pp. 257–263. Springer, Heidelberg (2008). doi:10.1007/978-0-387-09684-1_21
Ye, Y.: Supporting component-based software development with active component repository systems. Ph.D. thesis, Department of Computer Science, University of Colorado, Boulder (2001)
Ye, Y., Fischer, G.: Supporting reuse by delivering task-relevant and personalized information. In: Proceedings of the ACM/IEEE International Conference on Software Engineering, pp. 513–523 (2002). doi:10.1145/581339.581402
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2014 Springer-Verlag Berlin Heidelberg
About this chapter
Cite this chapter
Janjic, W., Hummel, O., Atkinson, C. (2014). Reuse-Oriented Code Recommendation Systems. In: Robillard, M., Maalej, W., Walker, R., Zimmermann, T. (eds) Recommendation Systems in Software Engineering. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-642-45135-5_14
Download citation
DOI: https://doi.org/10.1007/978-3-642-45135-5_14
Published:
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-642-45134-8
Online ISBN: 978-3-642-45135-5
eBook Packages: Computer ScienceComputer Science (R0)