簡易檢索 / 詳目顯示

研究生: 陳敬泓
Chen, Jinghong
論文名稱: 軟體重構效果之分析
Refactoring with CARE: Fine-Grained Analysis of Refactoring Effects
指導教授: 焦惠津
Jiau, Hewijin Christine
學位類別: 博士
Doctor
系所名稱: 電機資訊學院 - 電機工程學系
Department of Electrical Engineering
論文出版年: 2009
畢業學年度: 97
語文別: 英文
論文頁數: 122
中文關鍵詞: 軟體流程軟體演化影響分析軟體量測軟體重構
外文關鍵詞: Impact Analysis, Software Metrics, Software Process, Software Evolution, Software Refactoring
相關次數: 點閱:152下載:3
分享至:
查詢本校圖書館目錄 查詢臺灣博碩士論文知識加值系統 勘誤回報
  • 現今軟體開發的挑戰主要來自於需求與環境的改變。已開發完成的軟體仍需隨著需求與環境的變化而改變,才能夠持續上線服務。軟體重構是一項軟體維護與軟體演化的技術,能夠使軟體易於調整、改變。正如其他軟體開發活動需要一系列的決策支援,軟體重構的過程也需要客觀的評估分析,作為軟體重構決策的憑證。若缺乏足夠的決策憑證,軟體重構可能導致意料之外的影響,而使軟體品質受損。

    軟體開發者在進行軟體重構時,必須了解何處需要執行重構方案,以及哪一個重構方案最適合解決目前的問題。目前對於軟體重構影響的研究並無法建立一個有效的評估模型,讓軟體開發者能夠預測重構方案帶來的效果並且進行全面的影響評估。因此,軟體開發者往往缺乏足夠的憑證來判斷是否需要執行軟體重構,以及挑選合適的重構方案。本研究深入探討軟體重構的影響,對於軟體重構流程有細部的分析,目的在於建立一個有效的評估模型,幫助軟體開發者進行軟體重構當中的決策。本研究亦建立了一個整合式的軟體重構環境,提供軟體開發者一系列重構決策所需要的工具輔助。軟體重構流程的細部分析結果將有助於重構方案的評估與診斷,並有助於軟體重構流程與其他軟體開發活動的整合。

    The major challenges to software development nowadays come from the changes of requirements and environments. Refactoring is a technique for maintenance and evolution that makes software easier to change. Just as other software development activities that involve critical decision making, performing refactoring in maintenance and evolution needs evidence support to obtain desirable results. Otherwise, without careful estimation of refactoring effects, refactoring might also cause undesirable results.

    Developers need evidences of where to apply refactorings and which refactorings to apply. Current studies on refactoring effects are not enough to come out with such evidences. The evidences needed to approve a refactoring proposition in the refactoring are not enough for developers to make judgement. This study provides a fine-grained analysis of refactoring effects to conclude an effective model for previewing the effects before applying refactorings. A computer-aided refactoring environment (CARE) is developed to supply timely evidences for developers at different stages of a refactoring process. The analysis of refactoring effects is also applied to diagnose undependable execution of batched refactoring plans and to automate test-driven refactoring.

    Chapter 1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 Fine-Grained Analysis of Refactoring Effects . . . . . . . . . . . . . . . . 3 1.2 Refactoring with CARE . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3 Test-Driven Refactoring Automation . . . . . . . . . . . . . . . . . . . . 5 1.4 Contributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.1 Refactoring Effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1.1 The Foundations . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1.2 Mechanics and Strategies . . . . . . . . . . . . . . . . . . . . . . . 12 2.1.3 Formalizations and Tools . . . . . . . . . . . . . . . . . . . . . . . 12 2.1.4 Refactoring Effects Assessment . . . . . . . . . . . . . . . . . . . 14 2.2 Refactoring as a Process . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.3 Refactoring in a Process . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3 Fine-Grained Analysis of Refactoring Effects . . . . . . . . . . . . . . . 17 3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4 Micro Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.2 Modeling Software Changes . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.3 Deriving Micro Changes from Refactoring Mechanics . . . . . . . . . . . 21 4.3.1 The Encapsulate Field Example . . . . . . . . . . . . . . . . . . . 22 4.3.2 The Move Method Example . . . . . . . . . . . . . . . . . . . . . 26 4.4 Impact Tables of Micro Changes and Software Metrics . . . . . . . . . . 31 4.4.1 Impacts of Micro Changes on Different Roles of Refactorings . . . 31 4.4.2 Selected Software Metrics . . . . . . . . . . . . . . . . . . . . . . 32 4.4.3 Impacts of Micro Changes on Software Metrics . . . . . . . . . . . 33 4.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5 Metric Abstractions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.2 Metric Abstractions and Metric Values . . . . . . . . . . . . . . . . . . . 42 5.3 Impacts of Micro Changes on Metric Abstractions . . . . . . . . . . . . . 44 5.4 Changes to Metric Abstractions in a Refactoring Plan . . . . . . . . . . . 44 5.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6 Visualizing Bad Smell Evidences . . . . . . . . . . . . . . . . . . . . . . . 52 6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.2 Related Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6.2.1 Bad Smell Detectors . . . . . . . . . . . . . . . . . . . . . . . . . 54 6.2.2 MBR and CARD . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 6.3 CARE: Cluster Analysis and Visualization for Bad Smells . . . . . . . . 58 6.3.1 Supervised Cluster Analysis for Bad Smell Detection . . . . . . . 60 6.4 MAVIS: Visualizing Metric Abstractions for Bad Smells . . . . . . . . . . 63 6.4.1 Revisiting the Move Method Example . . . . . . . . . . . . . . . . 63 6.4.2 The Video Store Example . . . . . . . . . . . . . . . . . . . . . . . 64 6.4.3 A Case Study: JCommon 0.9.7 . . . . . . . . . . . . . . . . . . . 67 6.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 7 Assessing and Inspecting a Refactoring Plan . . . . . . . . . . . . . . . 71 7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 7.2 A Refactoring Plan and Its Execution . . . . . . . . . . . . . . . . . . . . 72 7.3 REPAIR: Different Configurations for the Video Store Example . . . . . 74 7.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 8 Renovating a Refactoring Plan . . . . . . . . . . . . . . . . . . . . . . . . 80 8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 8.2 An Example for Undependable Execution of a Batched Refactoring Plan 81 8.3 REPAIR: Renovating a Batched Refactoring Plan . . . . . . . . . . . . . 83 8.3.1 A Case Study: HSQLDB 1.7.3.4 . . . . . . . . . . . . . . . . . . . 85 8.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 9 Test-Driven Refactoring Automation . . . . . . . . . . . . . . . . . . . . 87 9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 9.2 Related Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 9.3 Test Code Differencing Algorithm for Test-Driven Refactoring . . . . . . 94 9.3.1 Static Concepts of Test Code . . . . . . . . . . . . . . . . . . . . 95 9.3.2 Dynamic Concepts of Test Code and TestDiff . . . . . . . . . . . 97 9.3.3 Change Patterns of Test Code Adaptation . . . . . . . . . . . . . 102 9.3.4 Deducing Refactoring Intents with Heuristics . . . . . . . . . . . . 103 9.4 Evaluation of the Test Code Differencing Algorithm . . . . . . . . . . . . 105 9.4.1 Results and Discussions . . . . . . . . . . . . . . . . . . . . . . . 108 9.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 10 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 10.1 Summary for Contributions . . . . . . . . . . . . . . . . . . . . . . . . . 111 10.2 Future Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Vita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

    [1] D. Jackson, Software Abstractions: Logic, Language, and Analysis. The MIT Press, 2006.
    [2] M. Lehman, J. Ramil, P. Wernick, D. Perry, and W. Turski, “Metrics and laws of software evolution – the nineties view,” Proceedings of the 4th International Symposium on Software Metrics, pp. 20–32, Nov. 1997.
    [3] M. M. Lehman, “Software's future: Managing evolution,” IEEE Software, vol. 15, no. 1, pp. 40–44, Jan.–Feb. 1998.
    [4] W. F. Opdyke, Refactoring Object-Oriented Frameworks. PhD thesis, Department of Computer Science – University of Illinois at Urbana-Champaign, 1992.
    [5] M. Fowler, K. Beck, J. Brant, W. Opdyke, and D. Roberts, Refactoring: Improving the Design of Existing Code. Addison-Wesley, 1999.
    [6] T. Mens and T. Tourwé, “A survey of software refactoring,” IEEE Transactions on Software Engineering, vol. 30, no. 2, pp. 126–139, Feb. 2004.
    [7] E. Murphy-Hill and A. P. Black, “Refactoring tools: Fitness for purpose,” IEEE Software, vol. 25, no. 5, pp. 38–44, Sept.Oct. 2008.
    [8] E. Murphy-Hill and A. P. Black, “Seven habits of a highly effective smell detector,” Proceedings of the 2008 International Workshop on Recommendation Systems for Software Engineering, pp. 36–40, Nov. 2008.
    [9] K. Stroggylos and D. Spinellis, “Refactoring–does it improve software quality?,” Proceedings of the Fifth International Workshop on Software Quality, pp. 1–6, May 2007.
    [10] 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.
    [11] E. Murphy-Hill, C. Parnin, and A. P. Black, “How we refactor, and how we know it,” Proceedings of the 31th International Conference on Software Engineering, May 2009.
    [12] E. Mealy and P. Strooper, “Evaluating software refactoring tool support,” Proceedings of the 17th Australian Conference on Software Engineering, pp. 331–340, Apr. 2006.
    [13] D. B. Roberts, Practical Analysis Refactoring. PhD thesis, Department of Computer Science – University of Illinois at Urbana-Champaign, 1999.
    [14] B. D. Bois, A Study of Quality Improvements By Refactoring. PhD thesis, Universiteit Antwerpen, 2006.
    [15] K. Beck, Test-Driven Development: By Example. Addison-Wesley, 2002.
    [16] I. Moore, “Automatic inheritance hierarchy restructuring and method refactoring,” Proceedings of the International Conference on Object-Oriented Programming, Systems, Languages, Applications, pp. 235–250, Oct. 1996.
    [17] D. Roberts, J. Brant, and R. Johnson, “A refactoring tool for smalltalk,” Theory and Practice of Object Systems, vol. 3, no. 4, pp. 253–263, Oct. 1997.
    [18] M. Ó. Cinnéide and P. Nixon, “Program restructuring to introduce design patterns,” Proceedings of the Workshop on Experiences in Object-Oriented Re-Engineering, European Conference on Object-Oriented Programming, July 1998.
    [19] L. Tokuda and D. Batory, “Evolving ob ject-oriented designs with refactorings,”Proceedings of the International Conference on Automated Software Engineering, pp. 174–181, Oct. 1999.
    [20] S. Demeyer, S. Ducasse, and O. Nierstrasz, “Finding refactorings via change metrics,” Proceedings of the International Conference on Object-Oriented Programming, Systems, Languages, Applications, pp. 166–177, Oct. 2000.
    [21] A. van Deursen, L. Moonen, A. van den Bergh, and G. Kok, “Refactoring test code,” Proceedings of the Second International Conference on Extreme Programming and Flexible Processes in Software Engineering, pp. 92–95, May 2001.
    [22] M. Ó Cinnéide, Automated Application of Design Patterns: A Refactoring Approach. PhD thesis, University of Dublin, Trinity College, 2001.
    [23] F. Simon, F. Steinbrückner, and C. Lewerentz, “Metrics based refactoring,” Proceedings of the Fifth European Conference on Software Maintenance and Reengineering, pp. 30–38, Mar. 2001.
    [24] T. Mens, S. Demeyer, and D. Janssens, “Formalizing behaviour preserving program transformations,” in Lecture Notes in Computer Science, vol. 2505, pp. 286–301, Springer-Verlag, 2002.
    [25] Y. Kataoka, T. Imai, H. Andou, and T. Fukaya, “A quantitative evaluation of maintainability enhancement by refactoring,” Proceedings of the IEEE International Conference on Software Maintenance, pp. 576–585, Oct. 2002.
    [26] E. van Emden and L. Moonen, “Java quality assurance by detecting code smells,” Proceedings of the Ninth Working Conference on Reverse Engineering, pp. 97–106, Oct. 2002.
    [27] A. van Deursen and L. Moonen, “The video store revisited – thoughts on refactoring and testing,” Proceedings of the Third International Conference on eXtreme Programming and Flexible Processes in Software Engineering (XP2002), pp. 71–76, May 2002.
    [28] J. U. Pipka, “Refactoring in a ‘test first’-world,” Proceedings of The Third International Conference on eXtreme Programming and Flexible Processes in Software Engineering, pp. 178–181, May 2002.
    [29] L. Tahvildari and K. Kontogiannis, “A metric-based approach to enhance design quality through meta-pattern transformations,” Proceedings of the Seventh European Conference on Software Maintenance and Reengineering, pp. 183–192, Mar. 2003.
    [30] T. Mens, T. Tourwé, and F. Muñoz, “Beyond the refactoring browser: Advanced tool support for software refactoring,” Proceedings of the Sixth International Workshop on Principles of Software Evolution, pp. 39–44, Sept. 2003.
    [31] B. D. Bois and S. Demeyer, “Opportunities and challenges in deriving metric impacts from refactoring postconditions,” Proceedings WOOR’04 (ECOOP’04 Workshop on Object-Oriented Re-engineering), June 2004.
    [32] B. D. Bois, S. Demeyer, and J. Verelst, “Refactoring – improving coupling and cohesion of existing code,” Proceedings of the Eleventh Working Conference on Reverse Engineering, pp. 144–151, Nov. 2004.
    [33] M. V. Mäntylä, J. Vanhanen, and C. Lassenius, “Bad smells – humans as code critics,” Proceedings of the IEEE International Conference on Software Maintenance, pp. 399–408, Sept. 2004.
    [34] J. Kerievsky, Refactoring to Patterns. Addison-Wesley, 2005.
    [35] J. Henkel and A. Diwan, “CatchUp!: Capturing and replaying refactorings to support api evolution,” Proceedings of the 27th International Conference on Software Engineering, pp. 274–283, May 2005.
    [36] D. Dig and R. Johnson, “The role of refactorings in api evolution,” Proceedings of International Conference on Software Maintenance, pp. 389–398, Sept. 2005.
    [37] M. Verbaere, R. Ettinger, and O. de Moor, “JunGL: A scripting language for refactoring,” Proceedings of the 28th International Conference on Software Engineering, pp. 172–181, May 2006.
    [38] B. D. Bois, S. Demeyer, J. Verelst, T. Mens, and M. Temmerman, “Does god class decomposition affect comprehensibility?,” Proceedings of the IASTED International Conference on Software Engineering, pp. 346–355, Feb. 2006.
    [39] R. Moser, A. Sillitti, P. Abrahamsson, and G. Succi, “Does refactoring improve reusability?,” in Lecture Notes in Computer Science, vol. 4039, Springer-Verlag, 2006.
    [40] M. V. Mäntylä and C. Lassenius, “Subjective evaluation of software evolvability using code smells: An empirical study,” Empirical Software Engineering, vol. 11, no. 3, pp. 395–431, Sept. 2006.
    [41] D. Dig, C. Comertoglu, D. Marinov, and R. Johnson, “Automated detection of refactorings in evolving components,” Proceedings of European Conference on Object-Oriented Programming, pp. 404–428, July 2006.
    [42] P. Weißgerber and S. Diehl, “Identifying refactorings from source-code changes,” Proceedings of the 21th IEEE/ACM International Conference on Automated Software Engineering, pp. 231–240, Sept. 2006.
    [43] Z. Xing and E. Stroulia, “Refactoring detection based on UMLDiff change-facts queries,” Proceedings of the 13th Working Conference on Reverse Engineering, pp. 263–274, Oct. 2006.
    [44] E. Murphy-Hill and A. P. Black, “High velocity refactorings in eclipse,” Proceedings of the 2007 OOPSLA Workshop on Eclipse Technology eXchange, pp. 1–5, Oct. 2007.
    [45] K. Taneja, D. Dig, and T. Xie, “Automated detection of API refactorings in libraries,” Proceedings of the Twenty-Second IEEE/ACM International Conference on Automated Software Engineering, pp. 377–380, Nov. 2007.
    [46] Z. Xing and E. Stroulia, “API-evolution support with Diff-CatchUp,” IEEE Transactions on Software Engineering, vol. 33, no. 12, pp. 818–836, Dec. 2007.
    [47] S. Counsell and S. Swift, “Refactoring steps, Java refactorings and empirical evidence,” Proceedings of the 32nd Annual IEEE International Computer Software and Applications Conference, pp. 176–179, July 2008.
    [48] Y. Higo, Y. Matsumoto, S. Kusumoto, and K. Inoue, “Refactoring effect estimation based on complexity metrics,” Proceedings of the 19th Australian Conference on Software Engineering, pp. 219–228, Mar. 2008.
    [49] S. V. Shrivastava and V. Shrivastava, “Impact of metrics based refactoring on the software quality: a case study,” Proceedings of the IEEE Region 10 Conference, pp. 1–6, Nov. 2008.
    [50] L. W. Mar, J. C. Chen, and H. C. Jiau, Previewing the Effects of Refactoring. VDM Verlag Dr. Müller Aktiengesellschaft & Co. KG, 2008.
    [51] A. D. Lucia, R. Oliveto, and L. Vorraro, “Using structural and semantic metrics to improve class cohesion,” Proceedings of the IEEE International Conference on Software Maintenance, pp. 27–36, Sept. 2008.
    [52] M. O’Keeffe and M. Ó. Cinnéide, “Search-based refactoring for software maintenance,” Journal of Systems and Software, vol. 81, no. 4, pp. 502–516, Apr. 2008.
    [53] G. Şerban and I.-G. Czibula, “Object-oriented software systems restructuring through clustering,” in Lecture Notes in Artificial Intelligence, vol. 5097, Springer-Verlag, 2008.
    [54] C. Parnin, C. Görg, and O. Nnadi, “A catalogue of lightweight visualizations to support code smell inspection,” Proceedings of the 4th ACM Symposium on Software Visualization, pp. 77–86, Sept. 2008.
    [55] B. Dagenais and M. P. Robillard, “Recommending adaptive changes for framework evolution,” Proceedings of the 30th International Conference on Software Engineering, pp. 481–490, May 2008.
    [56] T. Sh‥afer, J. Jonas, and M. Mazini, “Mining framework usage changes from instantiation code,” Proceedings of the 30th International Conference on Software Engineering, pp. 471–480, May 2008.
    [57] K. K. Chahal and H. Singh, “Metrics to study symptoms of bad software designs,” ACM SIGSOFT Software Engineering Notes, vol. 34, no. 1, Jan. 2009.
    [58] H. C. Jiau and J. C. Chen, “Test code differencing for test-driven refactoring automation,” ACM SIGSOFT Software Engineering Notes, vol. 34, no. 1, Jan. 2009.
    [59] A. van Deursen, M. Marin, and L. Moonen, “A systematic aspect-oriented refactoring and testing strategy, and its application to JHotDraw,” Tech. Rep. SEN-R0507, Centrum Wiskunde & Informatica, Amsterdam, 2005.
    [60] T. Mens, G. Taentzer, and D. Mueller, “Model-driven software refactoring,” in Model-Driven Software Development: Integrating Quality Assurance, pp. 170–203, IDEA Group Publishing, 2008.
    [61] T. Mens, G. Taentzer, and O. Runge, “Detecting structural refactoring conflicts using critical pair analysis,” Electrical Notes in Theoretical Computer Science, vol. 127, no. 3, pp. 113–128, Apr. 2005.
    [62] Eclipse Foundation, “Eclipse 3.4.” Available on: http://www.eclipse.org, 2009.
    [63] 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.
    [64] N. E. Fenton and M. Neil, “Software metrics: Roadmap,” Proceedings of the Conference on the Future of Software Engineering, pp. 357–370, June 2000.
    [65] B. G. Ryder and F. Tip, “Change impact analysis for object-oriented programs,” Proceedings of the Workshop on Program Analysis for Software Tools and Engineering (PASTE 2001), pp. 46–53, June 2001.
    [66] 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.
    [67] B. Fluri, M. Würsch, M. Pinzger, and H. C. Gall, “Change distilling: Tree differencing for fine-grained source code change extraction,” IEEE Transactions on Software Engineering, vol. 33, no. 11, pp. 725–743, Nov. 2007.
    [68] T. Apiwattanapong, A. Orso, and M. J. Harrold, “JDiff: A differencing technique and tool for object-oriented programs,” Automated Software Engineering, vol. 14, no. 1, pp. 3–36, Mar. 2007.
    [69] J. I. Maletic and M. L. Collard, “Supporting source code difference analysis,” Proceedings of the 20th IEEE International Conference on Software Maintenance, pp. 210–219, Sept. 2004.
    [70] R. Robbes and M. Lanza, “A change-based approach to software evolution,” Electronic Notes in Theoretical Computer Science, vol. 166, pp. 93–109, Jan. 2007.
    [71] M. Lanza and S. Ducasse, “Beyond language independent object-oriented metrics: Model independent metrics,” Proceedings of the International Workshop on Quantitative Approaches in Object-Oriented Software Engineering, pp. 77–84, June 2002.
    [72] S. R. Chidamber and C. F. Kemerer, “A metrics suite for ob ject oriented design,” IEEE Transactions on Software Engineering, vol. 20, no. 6, pp. 476–493, June 1994.
    [73] L. C. Briand, J. W. Daly, and J. Wüst, “A unified framework for coupling measurement in object-oriented systems,” IEEE Transactions on Software Engineering, vol. 25, no. 1, pp. 91–121, Jan./Feb. 1999.
    [74] M. Lanza, R. Marinescu, and S. Ducasse, Object-Oriented Metrics in Practice: Using Software Metrics to Characterize, Evaluate, and Improve the Design of Object-Oriented Systems. Springer, 2006.
    [75] 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.
    [76] S. Demeyer and S. Ducasse, “Metrics, do they really help?,” Proceedings of Langages et Modèles à Objets, pp. 69–82, Jan. 1999.
    [77] C. Kaner and W. P. Bond, “Software engineering metrics: What do they measure and how do we know?,” Proceedings of the 10th International Software Metrics Symposium, Sept. 2004.
    [78] J. A. Zimmer, “Graph theoretical indicators and refactoring,” in Lecture Notes in Computer Science, vol. 2753, Springer-Verlag, 2003.
    [79] C. Marinescu, R. Marinescu, and T. Gˆırba, “Towards a simplified implementation of ob ject-oriented design metrics,” Proceedings of the 11th International Software Metrics Symposium, Sept. 2005.
    [80] J. A. McQuillan and J. F. Power, “Experiences of using the dagstuhl middle meta-model for defining software metrics,” Proceedings of the 4th International Symposium on Principles and Practice of Programming in Java, pp. 194–198, Aug. 2006.
    [81] M. Saeki and H. Kaiya, “Model metrics and metrics of model transformation,” Proceedings of 1st Workshop on Quality in Modeling, pp. 31–45, Oct. 2006.
    [82] E. H. Alikacem and H. Sahraoui, “Generic metric extraction framework,” Proceedings of the 16th International Workshop on Software Measurement and Metrik Kongress, pp. 383–390, Nov. 2006.
    [83] M. Monperrus, J.-M. Jézéquel, J. Champeau, and B. Hoeltzener, “Measuring models,” in Model-Driven Software Development: Integrating Quality Assurance, pp. 147–168, IDEA Group Publishing, 2008.
    [84] J. Kreimer, “Adaptive detection of design flaws,” Electronic Notes in Theoretical Computer Science, vol. 141, no. 4, pp. 117–136, Dec. 2005.
    [85] N. Tsantalis and A. Chatzigeorgiou, “Identification of move method refactoring opportunities,” IEEE Transactions on Software Engineering, vol. 35, no. 3, pp. 347–367, May/June 2009.
    [86] T. Tourwé and T. Mens, “Identifying refactoring opportunities using logic meta programming,” Proceedings of the Seventh European Conference on Software Maintenance and Reengineering, pp. 91–100, Mar. 2003.
    [87] I. Moore, “Condenser 106.” Available on:
    http://condenser.sourceforge.net, 2009.
    [88] Agris Software, “RefactorIT 2.7 beta.” Available on:
    http://sourceforge.net/projects/refactorit, 2009.
    [89] JetBrains, “IntelliJ IDEA 8.1.” Available on:
    http://www.jetbrains.com/idea, 2009.
    [90] E. Mealy, D. Carrington, P. Strooper, and P. Wyeth, “Improving usability of software refactoring tools,” Proceedings of the 18th Australian Conference on Software Engineering, pp. 307–318, Apr. 2007.
    [91] M. Pinzger, H. Gall, M. Fischer, and M. Lanza, “Visualizing multiple evolution metrics,” Proceedings of the 2005 ACM Symposium on Software Visualization, pp. 67–75, May 2005.
    [92] D. Janzen and H. Saiedian, “Test-driven development: Concepts, taxonomy, and future direction,” IEEE Computer, vol. 38, no. 9, pp. 43–50, Sept. 2005.
    [93] G. W. Adamson and J. Boreham, “The use of an association measure based on character structure to identify semantically related pairs of words and document titles,” Information Storage and Retrieval, vol. 10, no. 7–8, pp. 253–260, July–Aug. 1974.
    [94] R. Robbes, “Mining a change-based software repository,” Proceedings of the Fourth International Workshop on Mining Software Repositories, pp. 15–15, May 2007.

    下載圖示 校內:2010-07-20公開
    校外:2010-07-20公開
    QR CODE