| 研究生: |
馬立偉 Mar, Lee Wei |
|---|---|
| 論文名稱: |
用以制定軟體重構程序之領域特定語言的設計與實現 A Domain-Specific Language for Refactoring Process Execution: Design and Implementation |
| 指導教授: |
焦惠津
Jiau, Hewijin Christine |
| 學位類別: |
博士 Doctor |
| 系所名稱: |
電機資訊學院 - 電腦與通信工程研究所 Institute of Computer & Communication Engineering |
| 論文出版年: | 2013 |
| 畢業學年度: | 101 |
| 語文別: | 英文 |
| 論文頁數: | 207 |
| 中文關鍵詞: | 軟體演進 、重構程序 、重構執行最佳化 、領域特定語言 |
| 外文關鍵詞: | Software evolution, refactoring process, optimal refactoring execution, domain-specific language |
| 相關次數: | 點閱:101 下載:5 |
| 分享至: |
| 查詢本校圖書館目錄 查詢臺灣博碩士論文知識加值系統 勘誤回報 |
軟體系統在其生命週期中,為滿足新的系統需求或是適應所處環境的變化,而須持續演進。然而,考量到開發者規劃系統演進之時間與資源有限,演進中的軟體系統,往往隨時間之增長而逐漸背離原先之設計考量,而使系統日益複雜,漸難維護。為了妥善處理此一系統演進複雜化難題,開發者在物件導向軟體開發過程中,廣泛使用軟體重構(software refactoring) ,以期在不破壞系統功能性的前提下,逐步調整並改善演進中軟體系統之設計。
軟體重構雖已具備一般化的程序模型(refactoring process model),用以引導開發者完成重構,但實務上,具體的重構執行程序(refactoring process) 仍因不同的專案特性、開發程序、或重構目標而有所差異。肇因於這些差異,各開發團隊常需量身打造專屬的重構執行程序(dedicated refactoring process),以應對特定專案演進時所遭遇之挑戰。然而,在當前開發環境中,開發團隊因缺乏實際的工具或是語言支持,並無法精準的制定專屬重構執行程序。此一重構程序的制定難題,正是當前軟體專案難以有效執行重構並將之標準化(standardization) 之主因。
本論文之研究主旨,即在於建立一組領域特定語言(domain-specific language, DSL),以使軟體開發團隊能夠精確制定並有效執行專屬重構執行程序。為達此一目的,本論文之研究始於重構程序模型的實地觀察和分析。在觀察與分析的過程中,本論文提出了兩組協助開發者進行重構的方法論:Mavis 和Obey。其中,Mavis 透過軟體視覺化呈現,協助開發者檢視當前軟體設計中的潛在設計結構缺陷,並提呈相對應的重構計畫;Obey 則讓開發者能預覽重構計畫對軟體設計改善之果效,並確保重構計畫執行之最佳化。本研究將Mavis 和Obey 直接使用於數個實際的開放原始碼專案進行評量,而評量的結果皆為兩組方法論的有效性提供了有力的佐證。
基於開發Mavis 和Obey 所獲得之領域知識,本研究定義了一組能夠制定專屬重構執行程序的領域特定語言。開發者能透過此一領域特定語言,表達重構執行程序中的各項具體動作,亦能串接這些動作以制定整體重構執行程序。本研究針對此一領域特定語言開發了相對應的執行環境:RefactoringCommando。此一執行環境已與Eclipse 軟體開發環境直接整合,開發者能直接在Eclipse 軟體開發環境中,使用RefactoringCommando 為Java 專案制定與執行專屬重構執行程序。本研究採用案例研究(case study) 實際評估此一領域特定語言,而評估結果表明,在數個典型的重構執行程序案例中,使用本研究所定義之領域特定語言,皆能精確且簡明的制定該重構執行程序,並可透過RefactoringCommando 有效執行之。
Successful software systems must evolve continuously for incorporating new requirements and for adapting environmental changes during their development life cycles. As evolutionary changes are incrementally introduced into a software system, the evolving software design becomes more complex and drifts away from the original software design. In this context, software refactoring is a widely adopted practice for systematically adjust the design structure of a software system while preserving its observable behaviors. In principle, the application of refactoring follows a general refactoring process model. However, the actual execution process of applying refactoring varies due to the fact that refactoring is carried out with different objectives in different project settings. This variety leads to the derivation of various dedicated refactoring processes from the general refactoring process model for fitting the specific evolution context of the particular software projects. To ensure the systematic execution and effective outcomes of a dedicated refactoring process, specifying the standard procedure for the refactoring process execution becomes vital for software development teams. However, limited support is provided for developers to precisely specify the standard procedure of a dedicated refactoring process.
This thesis aims at establishing a basis for the specification of dedicated refactoring processes. To this end, we start the thesis work from the identification of the major difficulties that developers faced at different stages of the refactoring process model. Two different refactoring methodologies for resolving these difficulties, Mavis and Obey, are proposed accordingly. Mavis assists developers in inspecting potential problematic design structure and in proposing refactoring plans, whereas Obey allows for the effect assessment of the proposed plans and ensures the optimal execution of these plans. We have conducted empirical studies on practical open source software (OSS) projects to confirm the effectiveness of Mavis and Obey. Based on the insights gained from the development of Mavis and Obey, we define a domain-specific language (DSL) for addressing the developers’ specification needs at different stages of the refactoring process model. The DSL allows developers to specify a dedicated refactoring process by defining individual refactoring actions in a process as well as the overall execution procedure of these actions. A runtime environment for our defined DSL, RefactoringCommando, is developed in the Eclipse IDE for executing the specified refactoring processes in Java projects. We have conducted several case studies that apply RefactoringCommando to typical refactoring practices. The case study results confirm the effectiveness of the DSL, suggesting that the DSL provides the proper abstraction for precisely specifying the execution of the refactoring process in a concise manner.
[1] M. M. Lehman and L. A. Belady, Program Evolution: Processes of Software Change. Academic Press Professional, 1985.
[2] M. M. Lehman and J. F. Ramil, "Software Evolution and Software Evolution Processes," Annals of Software Engineering, vol. 14, no. 1-4, pp. 275-309, Dec. 2002.
[3] S. Harker, K. Eason, and J. Dobson, "The Change and Evolution of Requirements as a Challenge to the Practice of Software Engineering," in Proceedings of IEEE International Symposium on Requirements Engineering, Jan. 1993, pp. 266-272.
[4] N. A. Ernst, A. Borgida, and J. Mylopoulos, "Requirements Evolution Drives Software Evolution," in Proceedings of the 12th International Workshop on Principles of Software Evolution and the 7th annual ERCIM Workshop on Software Evolution, Sept. 2011, pp. 16-20.
[5] V. Nanda and N. Madhavji, "The Impact of Environmental Evolution on Requirements Changes," in Proceedings of the International Conference on Software Maintenance (ICSM), Oct. 2002, pp. 452-461.
[6] L. Tokuda and D. Batory, "Evolving Object-Oriented Designs with Refactorings," Automated Software Engineering, vol. 8, no. 1, pp. 9-120, Jan. 2001.
[7] D. Dig and R. E. Johnson, "The Role of Refactorings in API Evolution," in Proceedings of the 21st IEEE International Conference on Software Maintenance (ICSM), Sept. 2005, pp. 389-398.
[8] M. Kim, D. Cai, and S. Kim, "An Empirical Investigation into the Role of API-Level Refactorings during Software Evolution," in Proceeding of the 33rd International Conference on Software Engineering (ICSE), May 2011, pp. 151-160.
[9] M. Kim, T. Zimmermann, and N. Nagappan, "A Field Study of Refactoring Challenges and Benefits," in Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering (ESEC/FSE), Nov. 2012, pp. 50:1-50:11.
[10] W. F. Opdyke and R. E. Johnson, "Refactoring: An Aid in Designing Application Frameworks and Evolving Object-Oriented Systems," in Proceedings of 1990 Symposium on Object-Oriented Programming Emphasizing Practical Applications, Sept. 1990, pp. 274-282.
[11] W. F. Opdyke, "Refactoring Object-Oriented Frameworks," Ph.D. dissertation, University of Illinois at Urbana-Champaign Champaign, 1992.
[12] M. Fowler, Refactoring: Improving the Design of Existing Code. Addison-Wesley, 1999.
[13] LOOSE Research Group, "inCode," Available on: http://loose.upt.ro/incode/pmwiki.php, 2013.
[14] N. Tsantalis and A. Chatzigeorgiou, "Identification of Move Method Refactoring Opportunities," IEEE Transactions on Software Engineering, vol. 35, no. 3, pp. 347-367, May 2009.
[15] S. Slinger, "Code Smell Detection in Eclipse," Master's thesis, Delft University of Technology, Mar. 2005.
[16] R. Marinescu, "Detection Strategies: Metrics-Based Rules for Detecting Design Flaws," in Proceedings of IEEE International Conference on Software Maintenance (ICSM), Sept. 2004, pp. 350-359.
[17] M. V. Mantyla, J. Vanhanen, and C. Lassenius, "Bad Smells-Humans as Code Critics," in Proceedings of the 20th IEEE International Conference on Software Maintenance (ICSM), Sept. 2004, pp. 399-408.
[18] J. Schumacher, N. Zazworka, F. Shull, C. Seaman, and M. Shaw, "Building Empirical Support for Automated Code Smell Detection," in Proceedings of the 2010 ACM-IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM), Sept. 2010, pp. 8:1-8:10.
[19] M. Vakilian, N. Chen, S. Negara, B. A. Rajkumar, B. P. Bailey, and R. E. Johnson, "Use, Disuse, and Misuse of Automated Refactorings," in Proceedings of the 2012 International Conference on Software Engineering (ICSE), June 2012, pp. 233-243.
[20] E. Murphy-Hill, C. Parnin, and A. P. Black, "How We Refactor, and How We Know It," IEEE Transactions on Software Engineering, vol. 38, no. 1, pp. 5-18, Jan. 2012.
[21] X. Ge, Q. L. DuBose, and E. Murphy-Hill, "Reconciling Manual and Automatic Refactoring," in Proceedings of the 2012 International Conference on Software Engineering (ICSE), June 2012, pp. 211-221.
[22] Eclipse Foundation, "Eclipse," Available on: http://www.eclipse.org/, 2013.
[23] JetBrains, "IntelliJ IDEA," Available on: http://www.jetbrains.com/idea/, 2013.
[24] Oracle, "JDeveloper," Available on: http://www.oracle.com/technetwork/developer-tools/jdev/, 2013.
[25] N. Rachatasumrit and M. Kim, "An Empirical Investigation into the Impact of Refactoring on Regression Testing," in Proceedings of the 28th IEEE International Conference on Software Maintenance (ICSM), Sept. 2012, pp. 357-366.
[26] K. Stroggylos and D. Spinellis, "Refactoring-Does It Improve Software Quality?" in Proceedings of the 5th International Workshop on Software Quality, May 2007, pp. 10-15.
[27] M. Fokaefs, N. Tsantalis, A. Chatzigeorgiou, and J. Sander, "Decomposing Object- Oriented Class Modules Using an Agglomerative Clustering Technique," in Proceedings of 25th IEEE International Conference on Software Maintenance (ICSM), Sept. 2009, pp. 93-101.
[28] M. Bowman, L. C. Briand, and Y. Labiche, "Solving the Class Responsibility Assignment Problem in Object-Oriented Analysis with Multi-Objective Genetic Algorithms," IEEE Transactions on Software Engineering, vol. 36, no. 6, pp. 817-837, Nov. 2010.
[29] H. Liu, L. Yang, Z. Niu, Z. Ma, and W. Shao, "Facilitating Software Refactoring with Appropriate Resolution Order of Bad Smells," in Proceedings of the 7th joint Meeting of the European software Engineering Conference and the ACM SIGSOFT Symposium on The Foundations of Software Engineering (ESEC/FSE), Aug. 2009, pp. 265-268.
[30] H. Liu, Z. Ma, W. Shao, and Z. Niu, "Schedule of Bad Smell Detection and Resolution: A New Way to Save Effort," IEEE Transactions on Software Engineering, vol. 38, no. 1, pp. 220-235, Feb. 2012.
[31] H. Liu, X. Guo, and W. Shao, "Monitor-Based Instant Software Refactoring," IEEE Transactions on Software Engineering, vol. Early Access Online, 2013.
[32] T. Dyb?a, "Factors of Software Process Improvement Success in Small and Large Organizations: An Empirical Study in the Scandinavian Context," in Proceedings of the 9th European Software Engineering Conference Held Jointly with 11th ACM SIGSOFT International Symposium on Foundations of Software Rngineering (ESEC/ FSE), Aug. 2003, pp. 148-157.
[33] M. Fowler, Domain-Specifc Languages. Addison Wesley, 2010.
[34] A. V. Deursen, P. Klint, and J. Visser, "Domain-Specific Languages: An Annotated Bibliography," ACM SIGPLAN Notices, vol. 35, pp. 26-36, June 2000.
[35] M. Mernik, J. Heering, and A. M. Sloane, "When and How to Develop Domain- Specific Languages," ACM Computing Survey, vol. 37, no. 4, pp. 316-344, Dec. 2005.
[36] J. S. Cuadrado and J. G. Molina, "A Model-Based Approach to Families of Embedded Domain-Specific Languages," IEEE Transactions on Software Engineering, vol. 35, no. 6, pp. 825-840, Nov. 2009.
[37] F. Simon, F. Steinbrockner, and C. Lewerentz, "Metrics Based Refactoring," in Proceedings of the 5th European Conference on Software Maintenance and Reengineering (CSMR), Mar. 2001, pp. 30-38.
[38] R. Marinescu, "Measurement and Quality in Object-Oriented Design," Ph.D. dissertation, "Politehnica" University of Timisoara, 2002.
[39] T. Tourwe and T. Mens, "Identifying Refactoring Opportunities Using Logic Meta Programming," in Proceedings of the 7th European Conference on Software Maintenance and Reengineering (CSMR), Mar. 2003, pp. 91-100.
[40] M. J. Munro, "Product Metrics for Automatic Identification of "Bad Smell" Design Problems in Java Source Code," in Proceedings of the 11th IEEE International Software Metrics Symposium, Sept. 2005, p. 15.
[41] N. Moha, Y. Gueheneuc, L. Duchien, and A. L. Meur, "DECOR: A Method for the Specification and Detection of Code and Design Smells," IEEE Transactions on Software Engineering, vol. 36, no. 1, pp. 20-36, Jan. 2010.
[42] N. Moha, Y. Gueheneuc, A. L. Meur, L. Duchien, and A. Tiberghien, "From a Domain Analysis to the Specification and Detection of Code and Design Smells," Formal Aspects of Computing, vol. 22, pp. 345-361, May 2010.
[43] L. W. Mar, M. L. Lee, and H. C. Jiau, "MAVIS: A Visualization Tool for Cohesionbased Bad Smell Inspection," in Proceedings of the 2011 Joint Conference on Taiwan Software Engineering and Object-Oriented Technology and Applications (TCSE/ OOTA), July 2011, pp. 401-406.
[44] H. C. Jiau, L. W. Mar, and J. C. Chen, "OBEY: Optimal Batched Refactoring Plan Execution for Class Responsibility Redistribution," IEEE Transactions on Software Engineering, vol. Early Access Online, 2013.
[45] L. W. Mar, K. C. Wu, and H. C. Jiau, "A Scripting Environment for Refactoring Process Execution," in Proceedings of the 2011 Joint Conference on Taiwan Software Engineering and Object-Oriented Technology and Applications (TCSE/ OOTA), July 2011, pp. 176-181.
[46] R. Oliveto, M. Gethers, G. Bavota, D. Poshyvanyk, and A. De Lucia, "Identifying Method Friendships to Remove the Feature Envy Bad Smell (NIER Track)," in Proceedings of the 33rd International Conference on Software Engineering (ICSE), May 2011, pp. 820-823.
[47] S. Demeyer, S. Ducasse, and O. Nierstrasz, Object-Oriented Reengineering Patterns. Morgan Kaufmann Publishers Inc., 2002.
[48] S. Wong, Y. Cai, M. Kim, and M. Dalton, "Detecting Software Modularity Violations," in Proceedings of the 33rd International Conference on Software Engineering (ICSE), May 2011, pp. 411-420.
[49] Python Software Foundation, "Python Programming Language," Available on: http://www.python.org/, 2013.
[50] S. R. Schach, Object-Oriented and Classical Software Engineering, 6th ed. McGraw-Hill, 2004.
[51] B. Bruegge and A. H. Dutoit, Object-Oriented Software Engineering Using UML, Patterns and Java, 2nd ed. Prentice Hall, 2004.
[52] R. C. Martin, Agile Software Development, Principles, Patterns, and Practices. Prentice Hall, 2002.
[53] E. J. Braude, Software Engineering - An Object-Oriented Perspective. Wiley, 2000.
[54] A. B. Binkley and S. R. Schach, "Validation of the Coupling Dependency Metric as a Predictor of Run-Time Failures and Maintenance Measures," in Proceedings of the 20th International Conference on Software Engineering (ICSE), Apr. 1998, pp. 452-455.
[55] S. R. Chidamber, D. P. Darcy, and C. F. Kemerer, "Managerial Use of Metrics for Object-Oriented Software: An Exploratory Analysis," IEEE Transactions on Software Engineering, vol. 24, no. 8, pp. 629-639, Aug. 1998.
[56] T. Mens and T. Tourwe, "A Survey of Software Refactoring," IEEE Transactions on Software Engineering, vol. 30, no. 2, pp. 126-139, Feb. 2004.
[57] E. Mealy and P. Strooper, "Evaluating Software Refactoring Tool Support," in Proceedings of Australian Software Engineering Conference (ASWEC), Apr. 2006, pp. 331-340.
[58] G. Travassos, F. Shull, M. Fredericks, and V. R. Basili, "Detecting Defects in Object-Oriented Designs: Using Reading Techniques to Increase Software Quality," in Proceedings of the 1999 ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages and Applications (OOPSLA), Nov. 1999, pp. 47-56.
[59] J. C. Chen, "Refactoring with CARE: Fine-Granted Analysis of Refactoring Effects," Ph.D. dissertation, Department of Electrical Engineering, National Cheng Kung University, Taiwan, 2009.
[60] DBSE Lab, "CARE: Computer-Aided Refactoring Environment," Available on: http://colors.ee.ncku.edu.tw:8070/CARE, 2013.
[61] L. W. Mar, J. C. Chen, and H. C. Jiau, "Supporting Cohesion-Based Bad Smell Inspection with CARE," in Proceedings of the 1st Cross-Strait Conference on Software Technology (CSCST), Mar. 2010, pp. 142-149.
[62] L. C. Briand, J. W. Daly, J. Wust, and K. Germany, "A Unified Framework for Coupling Measurement in Object-Oriented Systems," IEEE Transactions on Software Engineering, vol. 25, no. 1, pp. 91-121, Jan. 1999.
[63] M. Lanza, R. Marinescu, and S. Ducasse, Object-Oriented Metrics in Practice. Springer-Verlag New York, Inc., 2005.
[64] J. Bertin, Semiology of Graphics: Diagrams, Networks, Maps. University of Wisconsin Press, 1983.
[65] J. Larkin and H. Simon, "Why a Diagram is (Sometimes) Worth Ten Thousand Words," Cognitive Science, vol. 11, no. 1, pp. 65-100, Jan. 1987.
[66] S. Morris and O. Gotel, "Flow Diagrams: Rise and Fall of the First Software Engineering Notation," in Proceedings of International Conference on Theory and Application of Diagrams, June 2006, pp. 130-144.
[67] C. Ding and P. Meteti, "A Framework for the Automated Drawing of Data Structure Diagrams," IEEE Transactions on Software Engineering, vol. 16, no. 5, pp. 543-557, May 1990.
[68] D. L. Moody, "The "Physics" of Notations: Toward a Scientific Basis for Constructing Visual Notations in Software Engineering," IEEE Transactions on Software Engineering, vol. 35, no. 6, pp. 756-779, Nov. 2009.
[69] C. Parnin, C. Gorg, and O. Nnadi, "A Catalogue of Lightweight Visualizations to Support Code Smell Inspection," in Proceedings of the 4th ACM Symposium on Software Visualization, Sept. 2008, pp. 77-86.
[70] M. Lanza and S. Ducasse, "Polymetric Views-A Lightweight Visual Approach to Reverse Engineering," IEEE Transactions on Software Engineering, vol. 29, no. 9, pp. 782-795, Sept. 2003.
[71] S. Ducasse and M. Lanza, "The Class Blueprint: Visually Supporting the Understanding of Classes," IEEE Transactions on Software Engineering, vol. 31, no. 1, pp. 75-90, Jan. 2005.
[72] M. Meyer, T. G^?rba, and M. Lungu, "Mondrian: An Agile Information Visualization Framework," in Proceedings of the 2006 ACM Symposium on Software Visualization, Sept. 2006, pp. 135-144.
[73] Eclipse Foundation, "Eclipse Java Development Tools (JDT)," Available on: http://www.eclipse.org/jdt/, 2013.
[74] Eclipse Foundation, "GEF: Graphical Editing Framework," Available on: http://www.eclipse.org/gef/, 2013.
[75] HSQLDB Development Community, "HSQLDB," Available on: http://hsqldb.org/, 2013.
[76] JEdit Development Community, "JEdit," Available on: http://www.jedit.org/, 2013.
[77] E. Murphy-Hill and A. P. Black, "Seven Habits of a Highly Effective Smell Detector," in Proceedings of the 2008 International Workshop on Recommendation Systems for Software Engineering (RSSE), Nov. 2008, pp. 36-40.
[78] B. S. Mitchell and S. Mancoridis, "On the Automatic Modularization of Software Systems Using the Bunch Tool," IEEE Transactions on Software Engineering, vol. 32, no. 3, pp. 193-208, Mar. 2006.
[79] G. Serban and I. Czibula, "Object-Oriented Software Systems Restructuring through Clustering," in Proceedings of the 9th International Conference on Artificial Intelligence and Soft Computing, June 2008, pp. 693-704.
[80] O. Maqbool and H. Babri, "Hierarchical Clustering for Software Architecture Recovery," IEEE Transactions on Software Engineering, vol. 33, no. 11, pp. 759-780, Nov. 2007.
[81] M. O'Keeffe and M. O. Cinneide, "Search-Based Software Maintenance," in Proceedings of Conference on Software Maintenance and Reengineering (CSMR), Mar. 2006, pp. 249-260.
[82] W. G. Griswold and D. Notkin, "Automated Assistance for Program Restructuring," ACM Transactions on Software Engineering and Methodology, vol. 2, no. 3, pp. 228-269, July 1993.
[83] B. D. Bois, S. Demeyer, and J. Verelst, "Refactoring-Improving Coupling and Cohesion of Existing Code," in Proceedings of the 11th Working Conference on Reverse Engineering (WCRE), Nov. 2004, pp. 144-151.
[84] K. Cassell, P. Andreae, L. Groves, and J. Noble, "Towards Automating Class- Splitting Using Betweenness Clustering," in Proceedings of the 2009 IEEE/ACM International Conference on Automated Software Engineering (ASE), Nov. 2009, pp. 595-599.
[85] G. Bavota, A. D. Lucia, and R. Oliveto, "Identifying Extract Class Refactoring Opportunities Using Structural and Semantic Cohesion Measures," Journal of Systems and Software, vol. 84, no. 3, pp. 397-414, Mar. 2011.
[86] J. Ratzinger, M. Fischer, and H. Gall, "Improving Evolvability through Refactoring," in Proceedings of the 2005 International Workshop on Mining Software Repositories (MSR), May 2005, pp. 1-5.
[87] T. Zimmermann, P. Weissgerber, S. Diehl, and A. Zeller, "Mining Version Histories to Guide Software Changes," IEEE Transactions on Software Engineering, vol. 31, no. 6, pp. 429-445, June 2005.
[88] M. DAmbros, M. Lanza, and M. Lungu, "Visualizing Co-Change Information with the Evolution Radar," IEEE Transactions on Software Engineering, vol. 35, no. 6, pp. 720-735, Nov. 2009.
[89] G. C. Murphy, M. Kersten, and L. Findlater, "How Are Java Software Developers Using the Eclipse IDE?" IEEE Software, vol. 23, no. 4, pp. 76-83, Apr. 2006.
[90] B. Daniel, D. Dig, K. Garcia, and D. Marinov, "Automated Testing of Refactoring Engines," in Proceedings of the 6th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on Foundations of Software Engineering (ESEC/FSE), Sept. 2007, pp. 185-194.
[91] G. Soares, R. Gheyi, D. Serey, and T. Massoni, "Making Program Refactoring Safer," IEEE Software, vol. 27, no. 4, pp. 52-57, July 2010.
[92] M. Gligoric, F. Behrang, J. O. Y. Li, M. Hafiz, and D. Marinov, "Systematic Testing of Refactoring Engines on Real Software Projects," in Proceedings of 27th European Conference on Object-Oriented Programming (ECOOP), July 2013.
[93] G. Soares, R. Gheyi, and T. Massoni, "Automated Behavioral Testing of Refactoring Engines," IEEE Transactions on Software Engineering, vol. 39, no. 2, pp. 147-162, Feb. 2013.
[94] L. W. Mar, J. C. Chen, and H. C. Jiau, Previewing the Effects of Refactoring. VDM Verlag Dr. Muller Aktiengesellschaft & Co. KG, 2008.
[95] H. C. Jiau and J. C. Chen, "Test Code Differencing for Test-Driven Refactoring Automation," ACM SIGSOFT Software Engineering Notes, vol. 34, no. 1, pp. 1-10, Jan. 2009.
[96] I. Moore, "Automatic Inheritance Hierarchy Restructuring and Method Refactoring," in Proceedings of the 11th ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Oct. 1996, pp. 235-250.
[97] F. Tip, A. Kiezun, and D. Baumer, "Refactoring for Generalization Using Type Constraints," in Proceedings of the 18th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Oct. 2003, pp. 13-26.
[98] F. Tip, R. M. Fuhrer, A. Kiezun, M. D. Ernst, I. Balaban, and B. D. Sutter, "Refactoring Using Type Constraints," ACM Transactions on Programming Languages and Systems, vol. 33, no. 3, pp. 9:1-9:47, May 2011.
[99] M. Streckenbach and G. Snelting, "Refactoring Class Hierarchies with KABA," in Proceedings of the 19th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Oct. 2004, pp. 315-330.
[100] M. OKeeffe and M. O. Cinneide, "Search-based Refactoring for Software Maintenance," Journal of Systems and Software, vol. 81, no. 4, pp. 502-516, Apr. 2008.
[101] G. Bavota, R. Oliveto, A. D. Lucia, G. Antoniol, and Y. Gueheneuc, "Playing with Refactoring: Identifying Extract Class Opportunities through Game Theory," in Proceedings of the 2010 IEEE International Conference on Software Maintenance (ICSM), Sept. 2010, pp. 1-5.
[102] O. Seng, J. Stammel, and D. Burkhart, "Search-Based Determination of Refactorings for Improving the Class Structure of Object-Oriented Systems," in Proceedings of the 8th Annual Conference on Genetic and Evolutionary Computation (GECCO), July 2006, pp. 1909-1916.
[103] B. S. Mitchell, "A Heuristic Search Approach to Solving the Software Clustering Problem," Ph.D. dissertation, Drexel University, 2002.
[104] X. Xu, C.-H. Lung, M. Zaman, and A. Srinivasan, "Program Restructuring Through Clustering Techniques," in Proceedings of the 4th IEEE International Workshop on Source Code Analysis and Manipulation, Sept. 2004, pp. 75-84.
[105] I. Czibula and G. Serban, "Hierachical Clustering for Software Systems Restructuring," INFOCOMP Journal of Computer Science, vol. 6, no. 4, pp. 43-51, Dec. 2007.
[106] Oracle, "NetBeans," Available on: http://netbeans.org/, 2013.
[107] Embarcadero, "JBuilder," Available on: http://www.embarcadero.com/products/jbuilder, 2013.
[108] XINOX, "JCreator," Available on: http://jcreator.com/, 2012.
[109] RefactorIt Development Community, "RefactorIt," Available on: http://sourceforge.net/projects/refactorit/, 2013.
[110] Apple, "Xcode," Available on: https://developer.apple.com/xcode/, 2013.
[111] Microsoft, "Visual Studio," Available on: http://www.microsoft.com/visualstudio/, 2013.
[112] JetBrains, "ReSharper," Available on: http://www.jetbrains.com/resharper/, 2013.
[113] DevExpress, "CodeRush," Available on: http://www.devexpress.com/Products/Visual Studio Add-in/Coding Assistance/, 2013.
[114] Whole Tomato Software, "Visual Assist X," Available on: http://www.wholetomato.com/, 2013.
[115] Telerik, "JustCode," Available on: http://www.telerik.com/products/justcode.aspx, 2013.
[116] T. Mens, G. Taentzer, and O. Runge, "Detecting Structural Refactoring Conflicts Using Critical Pair Analysis," Electronic Notes in Theoretical Computer Science, vol. 127, no. 3, pp. 113-128, Apr. 2005.
[117] T. Mens, G. Taentzer, and O. Runge, "Analysing Refactoring Dependencies Using Graph Transformation," Software and System Modeling, vol. 6, no. 3, pp. 269-285, Sept. 2007.
[118] L. Lambers, H. Ehrig, and F. Orejas, "Efficient Detection of Conflicts in Graphbased Model Transformation," Electronic Notes in Theoretical Computer Science, vol. 152, pp. 97-109, Mar. 2006.
[119] H. Liu, G. Li, Z. Ma, and W. Shao, "Scheduling of Conflicting Refactorings to Promote Quality Improvement," in Proceedings of the 22th IEEE/ACM International Conference on Automated Software Engineering (ASE), Nov. 2007, pp. 489-492.
[120] H. Liu, G. Li, Z. Ma, and W. Shao, "Conflict-Aware Schedule of Software Refactorings," Software, IET, vol. 2, no. 5, pp. 446-460, Oct. 2008.
[121] D. Roberts, "Practical Analysis for Refactoring," Ph.D. dissertation, University of Illinois at Urbana Champaign, 1999.
[122] M. O. Cinneide and P. Nixon, "A Methodology for the Automated Introduction of Design Patterns," in Proceedings of IEEE International Conference on Software Maintenance (ICSM), Aug. 1999, pp. 463-472.
[123] M. O. Cinneide, "Automating the Application of Design Patterns: A Refactoring Approach," Ph.D. dissertation, School of Computer Science and Informatics, National University of Ireland, 2000.
[124] G. Kniesel and H. Koch, "Static Composition of Refactorings," Science of Computer Programming, vol. 52, no. 1-3, pp. 9-51, Aug. 2004.
[125] M. Schafer, M. Verbaere, T. Ekman, and O. de Moor, "Stepping Stones over the Refactoring Rubicon: Lightweight Language Extensions to Easily Realise Refactorings," in European Conference on Object-Oriented Programming (ECOOP), July 2009, pp. 369-393.
[126] M. Schaefer and O. de Moor, "Specifying and Implementing Refactorings," in Proceedings of the ACM International Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), Oct. 2010, pp. 286-301.
[127] S. R. Chidamber and C. F. Kemerer, "A Metrics Suite for Object Oriented Design," IEEE Transactions on Software Engineering, vol. 20, no. 6, pp. 476-493, June 1994.
[128] J. Bansiya and C. G. Davis, "A Hierarchical Model for Object-Oriented Design Quality Assessment," IEEE Transactions on Software Engineering, vol. 28, no. 1, pp. 4-17, Jan. 2002.
[129] B. G. Ryder and F. Tip, "Change Impact Analysis for Object-Oriented Programs," in Proceedings of the 2001 ACM SIGPLAN-SIGSOFT Workshop on Program Analysis for Software Tools and Engineering (PASTE), June 2001, pp. 46-53.
[130] X. Ren, O. C. Chesley, and B. G. Ryder, "Identifying Failure Causes in Java Programs: An Application of Change Impact Analysis," IEEE Transactions on Software Engineering, vol. 32, no. 9, pp. 718-732, Sept. 2006.
[131] V. R. Basili, L. C. Briand, and W. L. Melo, "A Validation of Object-Oriented Design Metrics as Quality Indicators," IEEE Transactions on Software Engineering, vol. 22, no. 10, pp. 751-761, Oct. 1996.
[132] L. C. Briand, J. Wust, S. V. Ikonomovski, and H. Lounis, "Investigating Quality Factors in Object-Oriented Designs: An Industrial Case Study," in Proceedings of the 21st International Conference on Software Engineering (ICSE), May 1999, pp. 345-354.
[133] J. Kerievsky, Refactoring to Patterns, 5th ed. Addison Wesley, 2007.
[134] Y. C. Gonzalez-Carvajal, C. L. Nozal, and R. M. Sanchez, "Relative Thresholds: Case Study to Incorporate Metrics in the Detection of Bad Smells," in 10th QAOOSE Workshop on Quantitative Approaches in Object-Oriented Software Engineering, July 2006.
[135] Y. Kataoka, D. Notkin, M. D. Ernst, and W. G. Griswold, "Automated Support for Program Refactoring Using Invariants," in Proceedings of the IEEE International Conference on Software Maintenance (ICSM), Nov. 2001, pp. 736-743.
[136] E. Murphy-Hill and A. P. Black, "Refactoring Tools: Fitness for Purpose," IEEE Software, vol. 25, no. 5, pp. 38-44, Sept. 2008.
[137] P. Hudak, "Building Domain-Specific Embedded Languages," ACM Computing Survey, vol. 28, no. 4es, p. 196, Dec. 1996.
[138] S. Freeman and N. Pryce, "Evolving an Embedded Domain-Specific Language in Java," in Companion to the 21st ACM SIGPLAN Symposium on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA), Oct. 2006, pp. 855-865.
[139] S. Gunther, M. Haupt, and M. Splieth, "Agile Engineering of Internal Domain- Specific Languages with Dynamic Programming Languages," in Fifth International Conference on Software Engineering Advances (ICSEA), Aug. 2010, pp. 162-168.
[140] P. Hudak, "Conception, Evolution, and Application of Functional Programming Languages," ACM Computing Survey, vol. 21, no. 3, pp. 359-411, Sept. 1989.
[141] P. J. Landin, "The Mechanical Evaluation of Expressions," The Computer Journal, vol. 6, no. 4, pp. 308-320, Jan. 1964.
[142] E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley, 1994.
[143] K. D. Smith, J. J. Jewett, S. Montanaro, and A. Baxter, "PEP 318 - Decorators for Functions and Methods," Available on: http://www.python.org/dev/peps/pep-0318/, June 2003.
[144] M. S. Marshall, I. Herman, and G. Melancon, "An Object-Oriented Design for Graph Visualization," Software: Practice and Experience, vol. 31, no. 8, pp. 739- 759, Mar. 2001.
[145] J. Heer, S. K. Card, and J. A. Landay, "Prefuse: A Toolkit for Interactive Information Visualization," in Proceedings of the SIGCHI Conference on Human Factors in Computing Systems (CHI), Apr. 2005, pp. 421-430.
[146] E. Adar, "GUESS: A Language and Interface for Graph Exploration," in Proceedings of the SIGCHI Conference on Human Factors in Computing Systems (CHI), Apr. 2006, pp. 791-800.
[147] M. Bostock and J. Heer, "Protovis: A Graphical Toolkit for Visualization," IEEE Transactions on Visualization and Computer Graphics, vol. 15, no. 6, pp. 1121- 1128, Nov. 2009.
[148] J. Heer and M. Bostock, "Declarative Language Design for Interactive Visualization," IEEE Transactions on Visualization and Computer Graphics, vol. 16, no. 6, pp. 1149-1156, Nov. 2010.
[149] Experimental Media Research Group, "Nodebox: Clever Tools for Curious Creatives," Available on: http://nodebox.net/, 2013.
[150] M. J. Eppler and J. Mengis, "The Concept of Information Overload: A Review of Literature from Organization Science, Accounting, Marketing, MIS, and Related Disciplines," The Information Society, vol. 20, no. 5, pp. 325-344, May 2004.
[151] Eclipse Foundation, "SWT: The Stamdard Widget Toolkit," Available on: http://www.eclipse.org/swt/, 2013.
[152] D. Baranovskiy, "Raphael - JavaScript Library," Availabel on: http://raphaeljs.com/, 2013.
[153] Jython Development Community, "Jython: Python for the Java Platform," Available on: http://www.jython.org/, 2013.
[154] Sun Microsystems, "JSR 223: Scripting for the Java Platform," Available on: http://www.jcp.org/en/jsr/detail?id=223, Dec. 2006.
[155] M. Verbaere, R. Ettinger, and O. d. Moor, "JunGL: A Scripting Language for Refactoring," in Proceedings of the 28th International Conference on Software Engineering (ICSE), May 2006, pp. 172-181.
[156] M. Verbaere, "A Language to Script Refactoring Transformations," Ph.D. dissertation, Oxford University, 2008.
[157] F. Steimann, C. Kollee, and J. von Pilgrim, "A Refactoring Constraint Language and Its Application to Eiffel," in Proceedings of the 25th European Conference on Object-Oriented Programming (ECOOP), July 2011, pp. 255-280.
[158] M. Hills, P. Klint, and J. J. Vinju, "Scripting a Refactoring with Rascal and Eclipse," in Proceedings of the Fifth Workshop on Refactoring Tools (WRT), June 2012, pp. 40-49.
[159] P. Klint, T. van der Storm, and J. J. Vinju, "Rascal: A Domain Specific Language for Source Code Analysis and Manipulation," in Proceedings of Ninth IEEE International Working Conference on Source Code Analysis and Manipulation, Sept. 2009, pp. 168-177.
[160] M. Schaefer, "Specification, Implementation, and Verification of Refactorings," Ph.D. dissertation, Oxford University, 2010.
[161] J. L. Overbey and R. E. Johnson, "Differential Precondition Checking: A Lightweight, Reusable Analysis for Refactoring Tools," in Proceedings of the 2011 26th IEEE/ACM International Conference on Automated Software Engineering (ASE), Nov. 2011, pp. 303-312.
[162] T. Mens, S. Demeyer, and D. Janssens, "Formalising Behaviour Preserving Program Transformations," in Proceedings of the 1st International Conference on Graph Transformation, Oct. 2002, pp. 286-301.
[163] K. Maruyama and S. Yamamoto, "Design and Implementation of an Extensible and Modifiable Refactoring Tool," in Proceedings of the 13th International Workshop on Program Comprehension, May 2005, pp. 195-204.
[164] J. L. Overbey and R. E. Johnson, "Generating Rewritable Abstract Syntax Trees," in Proceedings of the International Conference on Software Language Engineering (SLE), Oct. 2009, pp. 114-133.
[165] M. Schafer, A. Thies, F. Steimann, and F. Tip, "A Comprehensive Approach to Naming and Accessibility in Refactoring Java Programs," IEEE Transactions on Software Engineering, vol. 38, no. 6, pp. 1233-1257, Nov. 2012.
[166] H. Li, S. Thompson, G. Orosz, and M. Toth, "Refactoring withWrangler, Updated: Data and Process Refactorings, and Integration with Eclipse," in Proceedings of the 7th ACM SIGPLAN workshop on ERLANG, Sept. 2008, pp. 61-72.
[167] H. Li and S. Thompson, "A Domain-Specific Language for Scripting Refactorings in Erlang," in Proceedings of the 15th International Conference on Fundamental Approaches to Software Engineering (FASE), Mar. 2012, pp. 501-515.
[168] H. Li and S. Thompson, "Let's Make Refactoring Tools User-Extensible!" in Proceedings of the Fifth Workshop on Refactoring Tools (WRT), June 2012, pp. 32-39.
[169] G. Joeris, "Change Management Needs Integrated Process and Configuration Management," in Proceedings of the 6th European Software Engineering Conference Held Jointly with the 5th ACM SIGSOFT International Symposium on Foundations of Software Engineering (ESEC/FSE), Sept. 1997, pp. 125-141.
[170] K. Mohan, P. Xu, and B. Ramesh, "Improving the Change-Management Process," Communications of the ACM, vol. 51, no. 5, pp. 59-64, May 2008.
[171] The Apache Software Foundation, "Apache Subversion," Available on: http://subversion.apache.org/, 2013.
[172] Git Development Community, "Git," Available on: http://git-scm.com/, 2013.
[173] Bugzilla Development Community, "Bugzilla," Available on: http://www.bugzilla.org/, 2013.
[174] Trac Development Community, "Trac," Available on: http://trac.edgewall.org/, 2013.
[175] J. Bloch, Effective Java, 2nd ed. Addison-Wesley, 2008.
[176] M. S. Ware and C. J. Fox, "Securing Java Code: Heuristics and an Evaluation of Static Analysis Tools," in Proceedings of the 2008 Workshop on Static Analysis, June 2008, pp. 12-21.
[177] Y.-C. Wu, L. W. Mar, and H. C. Jiau, "Defender: An Early Warning Mechanism to Support Design Violation Treatments," in Proceedings of the 2011 Joint Conference on Taiwan Software Engineering and Object-Oriented Technology and Applications (TCSE/OOTA), July 2011, pp. 337-342.
[178] R. Cook, J. Kay, G. Ryan, and R. C. Thomas, "A Toolkit for Appraising the Long-Term Usability of a Text Editor," Software Quality Journal, vol. 4, no. 2, pp. 131-154, June 1995.
[179] D. M. Hilbert and D. F. Redmiles, "Extracting Usability Information from User Interface Events," ACM Computing Surveys, vol. 32, no. 4, pp. 384-421, Dec. 2000.
[180] B. Lafreniere, A. Bunt, J. S. Whissell, C. L. A. Clarke, and M. Terry, "Characterizing Large-Scale Use of a Direct Manipulation Application in the Wild," in Proceedings of Graphics Interface (GI), May 2010, pp. 11-18.
[181] J. Lawrance, R. Bellamy, M. Burnett, and K. Rector, "Using Information Scent to Model the Dynamic Foraging Behavior of Programmers in Maintenance Tasks," in Proceedings of the SIGCHI Conference on Human Factors in Computing Systems (CHI), Apr. 2008, pp. 1323-1332.
[182] J. Lawrance, C. Bogart, M. Burnett, R. Bellamy, K. Rector, and S. Fleming, "How Programmers Debug, Revisited: An Information Foraging Theory Perspective," IEEE Transactions on Software Engineering, vol. 39, no. 2, pp. 197-215, Feb. 2013.
[183] S. D. Fleming, C. Scaffidi, D. Piorkowski, M. Burnett, R. Bellamy, J. Lawrance, and I. Kwan, "An Information Foraging Theory Perspective on Tools for Debugging, Refactoring, and Reuse Tasks," ACM Transactions on Software Engineering Methodology, vol. 22, no. 2, pp. 14:1-14:41, Mar. 2013.