Abstract
Refactoring is a widely used development practice, available in mainstream IDEs. A previous work conducted a survey with developers, and finds that most of them use their experience to define refactoring mechanics for each refactoring type. However, we do not know whether a similar scenario happens in the context of refactoring tool developers. In this work, we conduct a study to compare refactoring mechanics implemented by tool developers. We apply 10 types of refactorings to 157,339 programs using 27 refactoring implementations from three tools, and compare the outputs. The refactoring implementations of Eclipse, NetBeans, and JRRT have different mechanics in all refactoring types.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Notes
- 1.
It is a distributed transaction solution with high performance and ease of use for microservices architecture.
- 2.
It is a reliable distributed configuration system to manage applications’ configurations in different environments and different clusters.
- 3.
It is a database connection pool written in Java that provides monitoring functionalities.
- 4.
The Spring Framework is an open source application framework for building web Java applications.
References
Beck, K.: Extreme Programming Explained: Embrace Change. Addison-Wesley Longman Publishing Company Inc., Boston (2000)
Daniel, B., Dig, D., Garcia, K., Marinov, D.: Automated testing of refactoring engines. In: Proceedings of the Foundations of Software Engineering, pp. 185–194. ACM (2007)
Eclipse.org.: Eclipse Project (2018). http://www.eclipse.org
Falleri, J., Morandat, F., Blanc, X., Martinez, M., Monperrus, M.: Fine-grained and accurate source code differencing. In: Proceedings of the Automated Software Engineering, ASE, pp. 313–324 (2014)
Fluri, B., Wuersch, M., PInzger, M., Gall, H.: Change distilling: tree differencing for fine-grained source code change extraction. IEEE Trans. Softw. Eng. 33(11), 725–743 (2007)
Fowler, M., Beck, K., Brant, J., Opdyke, W., Roberts, D.: Refactoring: Improving the Design of Existing Code. Addison-Wesley Professional, Boston (1999)
Gligoric, M., Behrang, F., Li, Y., Overbey, J., Hafiz, M., Marinov, D.: Systematic testing of refactoring engines on real software projects. In: Castagna, G. (ed.) ECOOP 2013. LNCS, vol. 7920, pp. 629–653. Springer, Heidelberg (2013). https://doi.org/10.1007/978-3-642-39038-8_26
Gligoric, M., Gvero, T., Jagannath, V., Khurshid, S., Kuncak, V., Marinov, D.: Test generation through programming in UDITA. In: Proceedings of the International Conference on Software Engineering, ICSE, pp. 225–234. ACM (2010)
Jackson, D.: Software Abstractions: Logic, Language, and Analysis. The MIT Press, Cambridge (2012)
Jackson, D., Schechter, I., Shlyahter, H.: Alcoa: the alloy constraint analyzer. In: Proceedings of the International Conference on Software Engineering, pp. 730–733. ICSE (2000)
JetBrains: IntelliJ IDEA (2018). https://www.jetbrains.com/idea/
Kerievsky, J.: Refactoring to Patterns. Pearson Higher Education, London (2004)
Kim, M., Zimmermann, T., Nagappan, N.: A field study of refactoring challenges and benefits. In: Proceedings of the International Symposium on the Foundations of Software Engineering, pp. 50:1–50:11. FSE (2012)
Kim, M., Zimmermann, T., Nagappan, N.: An empirical study of refactoring challenges and benefits at microsoft. IEEE Trans. Software Eng. 40(7), 633–649 (2014)
Mens, T., Tourwé, T.: A survey of software refactoring. IEEE Trans. Software Eng. 30(2), 126–139 (2004)
Mongiovi, M., Gheyi, R., Soares, G., Ribeiro, M., Borba, P., Teixeira, L.: Detecting overly strong preconditions in refactoring engines. IEEE Trans. Software Eng. 44(5), 429–452 (2018)
Mongiovi, M., Gheyi, R., Soares, G., Teixeira, L., Borba, P.: Making refactoring safer through impact analysis. Sci. Comput. Program. 93, 39–64 (2014)
Mongiovi, M., Mendes, G., Gheyi, R., Soares, G., Ribeiro, M.: Scaling testing of refactoring engines. In: Proceedings of the International Conference on Software Maintenance and Evolution, ICSME, pp. 371–380 (2014)
Murphy, G., Kersten, M., Findlater, L.: How are java software developers using the eclipse IDE? IEEE Softw. 23(4), 76–83 (2006)
Murphy-Hill, E., Ayazifar, M., Black, A.P.: Restructuring software with gestures. In: Proceedings of the Symposium on Visual Languages and Human-Centric Computing, VL/HCC, pp. 165–172 (2011)
Murphy-Hill, E., Parnin, C., Black, A.P.: How we refactor, and how we know it. IEEE Trans. Software Eng. 38(1), 5–18 (2012)
Oliveira, J., Gheyi, R., Mongiovi, M., Soares, G., Ribeiro, M., Garcia, A.: Revisiting the refactoring mechanics. Inf. Softw. Technol. 110, 136–138 (2019)
Opdyke, W.: Refactoring object-oriented frameworks. Ph.D. thesis, University of Illinois at Urbana-Champaign (1992)
Oracle: Netbeans IDE (2018). http://www.netbeans.org
Roberts, D.: Practical analysis for refactoring. Ph.D. thesis, University of Illinois at Urbana-Champaign (1999)
Schäfer, M., Ekman, T., Moor, O.: Challenge proposal: verification of refactorings. In: Proceedings of the 3rd Workshop on Programming Languages Meets Program Verification, pp. 67–72. ACM (2008)
Schäfer, M., de Moor, O.: Specifying and implementing refactorings. In: Proceedings of the International Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA, pp. 286–301 (2010)
Soares, G., Gheyi, R., Massoni, T.: Automated behavioral testing of refactoring engines. IEEE Trans. Software Eng. 39(2), 147–162 (2013)
Soares, G., Gheyi, R., Serey, D., Massoni, T.: Making program refactoring safer. IEEE Softw. 27(4), 52–57 (2010)
Soares, G., Mongiovi, M., Gheyi, R.: Identifying overly strong conditions in refactoring implementations. In: Proceedings of the International Conference on Software Maintenance, ICSM, pp. 173–182 (2011)
Steimann, F., Thies, A.: From public to private to absent: refactoring java programs under constrained accessibility. In: Proceedings of the European Conference on Object-Oriented Programming, ECOOP, pp. 419–443 (2009)
Tempero, E., Gorschek, T., Angelis, L.: Barriers to refactoring. Commun. ACM 60(10), 54–61 (2017)
Tokuda, L., Batory, D.: Evolving object-oriented designs with refactorings. Autom. Softw. Eng. 8, 89–120 (2001)
Vakilian, M., Chen, N., Negara, S., Rajkumar, B.A., Bailey, B.P., Johnson, R.E.: Use, disuse, and misuse of automated refactorings. In: Proceedings of the International Conference on Software Engineering, ICSE, pp. 233–243 (2012)
Acknowledgments
We would like to thank the anonymous reviewers, Gustavo Soares, Augusto Sampaio, Paulo Borba, and Leopoldo Teixeira for their insightful suggestions. This work was partially supported by CNPq (426005/2018-0 and 311442/2019-6) and CAPES (117875 and 175956) grants.
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2020 Springer Nature Switzerland AG
About this paper
Cite this paper
Oliveira, J., Gheyi, R., Pontes, F., Mongiovi, M., Ribeiro, M., Garcia, A. (2020). Revisiting Refactoring Mechanics from Tool Developers’ Perspective. In: Carvalho, G., Stolz, V. (eds) Formal Methods: Foundations and Applications. SBMF 2020. Lecture Notes in Computer Science(), vol 12475. Springer, Cham. https://doi.org/10.1007/978-3-030-63882-5_3
Download citation
DOI: https://doi.org/10.1007/978-3-030-63882-5_3
Published:
Publisher Name: Springer, Cham
Print ISBN: 978-3-030-63881-8
Online ISBN: 978-3-030-63882-5
eBook Packages: Computer ScienceComputer Science (R0)