Reuse-Oriented Code Recommendation Systems



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.


Search Engine Context Awareness Software Reuse Query Formulation Code Reuse 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


  1. 1.
    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_4CrossRefGoogle Scholar
  2. 2.
    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.1985932Google Scholar
  3. 3.
    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.1176671Google Scholar
  4. 4.
    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.1806821Google Scholar
  5. 5.
    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.1595728Google Scholar
  6. 6.
    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.1882375Google Scholar
  7. 7.
    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.1431435Google Scholar
  8. 8.
    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.130658Google Scholar
  9. 9.
    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.310671CrossRefGoogle Scholar
  10. 10.
    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.2377657Google Scholar
  11. 11.
    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.117CrossRefGoogle Scholar
  12. 12.
    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_5Google Scholar
  13. 13.
    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)Google Scholar
  14. 14.
    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.110CrossRefGoogle Scholar
  15. 15.
    Janjic, W.: Realising high-precision component recommendations for software-development environments. Diploma thesis, University of Mannheim (2007)Google Scholar
  16. 16.
    Janjic, W., Atkinson, C.: Utilizing software reuse experience for automated test recommendation. In: Proceedings of the International Workshop on Automation of Software Test (2013)Google Scholar
  17. 17.
    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.1809181Google Scholar
  18. 18.
    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)Google Scholar
  19. 19.
    Krueger, C.W.: Software reuse. ACM Comput. Surv. 24(2), 131–183 (1992). doi:10.1145/130844.130856CrossRefMathSciNetGoogle Scholar
  20. 20.
    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.67465Google Scholar
  21. 21.
    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.009CrossRefGoogle Scholar
  22. 22.
    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.1065018Google Scholar
  23. 23.
    McIlroy, M.D.: Mass-produced software components. In: Software Engineering: Report on a Conference by the NATO Science Committee, pp. 138–155 (1968)Google Scholar
  24. 24.
    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)
  25. 25.
    Mili, A., Mili, R., Mittermeir, R.T.: A survey of software reuse libraries. Ann. Software Eng. 5, 349–414 (1998). doi:10.1023/A:1018964121953CrossRefGoogle Scholar
  26. 26.
    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)
  27. 27.
    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.5070525Google Scholar
  28. 28.
    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.161CrossRefGoogle Scholar
  29. 29.
    Seacord, R.: Software engineering component repositories. In: Proceedings of the International Workshop on Component-Based Software Engineering (1999)Google Scholar
  30. 30.
    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_21Google Scholar
  31. 31.
    Ye, Y.: Supporting component-based software development with active component repository systems. Ph.D. thesis, Department of Computer Science, University of Colorado, Boulder (2001)Google Scholar
  32. 32.
    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.581402Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2014

Authors and Affiliations

  1. 1.Software-Engineering GroupUniversity of MannheimMannheimGermany
  2. 2.Institute for Program Structures and Data OrganizationKarlsruhe Institute of TechnologyKarlsruheGermany

Personalised recommendations