Advertisement

Source Code-Based Recommendation Systems

  • Kim Mens
  • Angela Lozano
Chapter

Abstract

Although today’s software systems are composed of a diversity of software artifacts, source code remains the most up-to-date artifact and therefore the most reliable data source. It provides a rich and structured source of information upon which recommendation systems can rely to provide useful recommendations to software developers. Source code-based recommendation systems provide support for tasks such as how to use a given API or framework, provide hints on things missing from the code, suggest how to reuse or correct an existing code, or help novices learn a new project, programming paradigm, language, or style. This chapter highlights relevant decisions involved in developing source code-based recommendation systems. An in-depth presentation of a particular system we developed serves as a concrete illustration of some of the issues that can be encountered and of the development choices that need to be made when building such a system.

Keywords

Source Code Association Rule Recommendation System Application Programming Interface Association Rule Mining 
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.

References

  1. 1.
    Ashok, B., Joy, J., Liang, H., Rajamani, S.K., Srinivasa, G., Vangala, V.: DebugAdvisor: A recommender system for debugging. In: Proceedings of the European Software Engineering Conference/ACM SIGSOFT International Symposium on Foundations of Software Engineering, pp. 373–382 (2009). doi: 10.1145/1595696.1595766Google Scholar
  2. 2.
    Avazpour, I., Pitakrat, T., Grunske, L., Grundy, J.: Dimensions and metrics for evaluating recommendation systems. In: Robillard, M., Maalej, W., Walker, R.J., Zimmermann, T. (eds.) Recommendation Systems in Software Engineering, Chap. 10. Springer, New York (2014)Google Scholar
  3. 3.
    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
  4. 4.
    Bruch, M., Schäfer, T., Mezini, M.: FrUiT: IDE support for framework understanding. In: Proceedings of the Eclipse Technology eXchange, pp. 55–59 (2006). doi: 10.1145/1188835.1188847Google Scholar
  5. 5.
    Castro, S., De Roover, C., Kellens, A., Lozano, A., Mens, K., D’Hondt, T.: Diagnosing and correcting design inconsistencies in source code with logical abduction. Sci. Comput. Program. 76(12), 1113–1129 (2011). doi: 10.1016/j.scico.2010.09.001CrossRefGoogle Scholar
  6. 6.
    Cottrell, R., Walker, R.J., Denzinger, J.: Semi-automating small-scale source code reuse via structural correspondence. In: Proceedings of the ACM SIGSOFT International Symposium on Foundations of Software Engineering, pp. 214–225 (2008). doi: 10.1145/1453101.1453130Google Scholar
  7. 7.
    Čubranić, D., Murphy, G.C., Singer, J., Booth, K.S.: Hipikat: A project memory for software development. IEEE Trans. Software Eng. 31(6), 446–465 (2005). doi: 10.1109/TSE.2005.71CrossRefGoogle Scholar
  8. 8.
    Dagenais, B., Robillard, M.P.: Recommending adaptive changes for framework evolution. ACM Trans. Software Eng. Meth. 20(4), 19:1–19:35 (2011). doi: 10.1145/2000799.2000805Google Scholar
  9. 9.
    Duala-Ekoko, E., Robillard, M.P.: Using structure-based recommendations to facilitate discoverability in APIs. In: Proceedings of the European Conference on Object-Oriented Programming, pp. 79–104 (2011). doi: 10.1007/978-3-642-22655-7_5Google Scholar
  10. 10.
    Felfernig, A., Jeran, M., Ninaus, G., Reinfrank, F., Reitererand, S., Stettinger, M.: Basic approaches in recommendation systems. In: Robillard, M., Maalej, W., Walker, R.J., Zimmermann, T. (eds.) Recommendation Systems in Software Engineering, Chap. 2. Springer, New York (2014)Google Scholar
  11. 11.
    German, D.M., Čubranić, D., Storey, M.A.D.: A framework for describing and understanding mining tools in software development. In: Proceedings of the International Workshop on Mining Software Repositories, pp. 7:1–7:5 (2005). doi: 10.1145/1082983.1083160Google Scholar
  12. 12.
    Hill, E., Pollock, L., Vijay-Shanker, K.: Exploring the neighborhood with Dora to expedite software maintenance. In: Proceedings of the IEEE/ACM International Conference on Automated Software Engineering, pp. 14–23 (2007). doi: 10.1145/1321631.1321637Google Scholar
  13. 13.
    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
  14. 14.
    Inozemtseva, L., Holmes, R., Walker, R.J.: Recommendation systems in-the-small. In: Robillard, M., Maalej, W., Walker, R.J., Zimmermann, T. (eds.) Recommendation Systems in Software Engineering, Chap. 4. Springer, New York (2014)Google Scholar
  15. 15.
    Kersten, M., Murphy, G.C.: Mylar: A degree-of-interest model for IDEs. In: Proceedings of the International Conference on Aspect-Oriented Software Deveopment, pp. 159–168 (2005). doi: 10.1145/1052898.1052912Google Scholar
  16. 16.
    Li, Z., Zhou, Y.: PR-Miner: Automatically extracting implicit programming rules and detecting violations in large software code. In: Proceedings of the European Software Engineering Conference/ACM SIGSOFT International Symposium on Foundations of Software Engineering, pp. 306–315 (2005). doi: 10.1145/1081706.1081755Google Scholar
  17. 17.
    Long, F., Wang, X., Cai, Y.: API hyperlinking via structural overlap. In: Proceedings of the European Software Engineering Conference/ACM SIGSOFT International Symposium on Foundations of Software Engineering, pp. 203–212 (2009). doi: 10.1145/1595696.1595727Google Scholar
  18. 18.
    Lozano, A., Kellens, A., Mens, K.: Mendel: Source code recommendation based on a genetic metaphor. In: Proceedings of the IEEE/ACM International Conference on Automated Software Engineering, pp. 384–387 (2011). doi: 10.1109/ASE.2011.6100078Google Scholar
  19. 19.
    Lozano, A., Kellens, A., Mens, K.: Usage contracts: Offering immediate feedback on violations of structural source-code regularities. Sci. Comput. Program. (2013). Under reviewGoogle Scholar
  20. 20.
    Lozano, A., Kellens, A., Mens, K., Arévalo, G.: MEntoR: Mining entities to rules. In: Proceedings of the Belgian–Netherlands Evolution Workshop (2010a)Google Scholar
  21. 21.
    Lozano, A., Kellens, A., Mens, K., Arévalo, G.: Mining source code for structural regularities. In: Proceedings of the Working Conference on Reverse Engineering, pp. 22–31 (2010b). doi: 10.1109/WCRE.2010.12Google 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.
    McCarey, F., Ó Cinnéide, M., Kushmerick, N.: RASCAL: A recommender agent for agile reuse. Artif. Intell. Rev. 24(3–4), 253–276 (2005). doi: 10.1007/s10462-005-9012-8Google Scholar
  24. 24.
    Mens, K., Kellens, A., Krinke, J.: Pitfalls in aspect mining. In: Proceedings of the Working Conference on Reverse Engineering, pp. 113–122 (2008). doi: 10.1109/WCRE.2008.10Google Scholar
  25. 25.
    Mens, K., Kellens, A., Pluquet, F., Wuyts, R.: Co-evolving code and design with intensional views: A case study. Comput. Lang. Syst. Struct. 32(2–3), 140–156 (2006). doi: 10.1016/j.cl.2005.09.002zbMATHGoogle Scholar
  26. 26.
    Mens, K., Michiels, I., Wuyts, R.: Supporting software development through declaratively codified programming patterns. Expert Syst. Appl. 23(4), 405–431 (2002). doi: 10.1016/S0957-4174(02)00076-3CrossRefGoogle Scholar
  27. 27.
    Mens, K., Tourwé, T.: Delving source code with formal concept analysis. Comput. Lang. Syst. Struct. 31(3–4), 183–197 (2005). doi: 10.1016/j.cl.2004.11.004Google Scholar
  28. 28.
    Menzies, T.: Data mining: A tutorial. In: Robillard, M., Maalej, W., Walker, R.J., Zimmermann, T. (eds.) Recommendation Systems in Software Engineering, Chap. 3. Springer, New York (2014)Google Scholar
  29. 29.
    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, Chap. 9. Springer, New York (2014)Google Scholar
  30. 30.
    Robillard, M.P.: Topology analysis of software dependencies. ACM Trans. Software Eng. Meth. 17(4), 18:1–18:36 (2008). doi: 10.1145/13487689.13487691Google Scholar
  31. 31.
    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
  32. 32.
    Said, A., Tikk, D., Cremonesi, P.: Benchmarking: A methodology for ensuring the relative quality of recommendation systems in software engineering. In: Robillard, M., Maalej, W., Walker, R.J., Zimmermann, T. (eds.) Recommendation Systems in Software Engineering, Chap. 11. Springer, New York (2014)Google Scholar
  33. 33.
    Sillito, J., Murphy, G.C., De Volder, K.: Asking and answering questions during a programming change task. IEEE Trans. Software Eng. 34(4), 434–451 (2008). doi: 10.1109/TSE.2008.26CrossRefGoogle Scholar
  34. 34.
    Tosun Mısırlı, A., Bener, A., Çağlayan, B., Çalıklı, G., Turhan, B.: Field studies: A methodology for construction and evaluation of recommendation systems in software engineering. In: Robillard, M., Maalej, W., Walker, R.J., Zimmermann, T. (eds.) Recommendation Systems in Software Engineering, Chap. 13. Springer, New York (2014)Google Scholar
  35. 35.
    Tourwé, T., Mens, K.: Mining aspectual views using formal concept analysis. In: Proceedings of the IEEE International Workshop on Source Code Analysis and Manipulation, pp. 97–106 (2004). doi: 10.1109/SCAM.2004.15Google Scholar
  36. 36.
    Walker, R.J., Holmes, R.: Simulation: A methodology to evaluate recommendation systems in software engineering. In: Robillard, M., Maalej, W., Walker, R.J., Zimmermann, T. (eds.) Recommendation Systems in Software Engineering, Chap. 12. Springer, New York (2014)Google Scholar
  37. 37.
    Xie, T., Pei, J.: MAPO: Mining API usages from open source repositories. In: Proceedings of the International Workshop on Mining Software Repositories, pp. 54–57 (2006). doi: 10.1145/1137983.1137997Google Scholar
  38. 38.
    Ye, Y., Fischer, G.: Reuse-conducive development environments. Automat. Software Eng. Int. J. 12(2), 199–235 (2005). doi: 10.1007/s10515-005-6206-xCrossRefGoogle Scholar
  39. 39.
    Zhang, C., Yang, J., Zhang, Y., Fan, J., Zhang, X., Zhao, J., Ou, P.: Automatic parameter recommendation for practical API usage. In: Proceedings of the ACM/IEEE International Conference on Software Engineering, pp. 826–836 (2012). doi: 10.1109/ICSE.2012.6227136Google Scholar
  40. 40.
    Zhong, H., Thummalapenta, S., Xie, T., Zhang, L., Wang, Q.: Mining API mapping for language migration. In: Proceedings of the ACM/IEEE International Conference on Software Engineering, vol. 1, pp. 195–204 (2010). doi: 10.1145/1806799.1806831Google Scholar
  41. 41.
    Zimmermann, T., Weißgerber, P., Diehl, S., Zeller, A.: Mining version histories to guide software changes. IEEE Trans. Software Eng. 31(6), 429–445 (2005). doi: 10.1109/TSE.2005.72CrossRefGoogle Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2014

Authors and Affiliations

  1. 1.ICTEAMUniversité catholique de LouvainLouvain-la-NeuveBelgium

Personalised recommendations