没有合适的资源?快使用搜索试试~ 我知道了~
软件设计缺陷及其检测技术的研究与初步案例分析
理论计算机科学电子笔记141(2005)117-136www.elsevier.com/locate/entcs设计缺陷Jochen Kreimer约亨·克雷默1,2计算机科学系编程语言与编程器德国帕德博恩大学摘要软件质量度量的标准取决于应用领域。在大型软件系统中,可维护性、可理解性和可扩展性等标准起着重要的作用。我的目标是自动识别软件系统中的设计错误,从而避免根据搜索工程师的感知和经验,设计准则以不同的方式解释。我建议将基于度量的已知方法与机器学习机制相结合,以便设计算法检测适用于不同的视图。本文介绍了基本的方法,描述了Java程序的分析工具,并显示了初步的案例研究结果。关键词:设计思维,代码气味,面向对象设计,软件质量,重构,程序分析和机器学习。1引言面向对象的编程范式保证了软件的结构清晰、可重用和易于维护。在实践中,只有经验丰富的开发人员才能做到这一点。“All data should be hidden within its class”1电子邮件地址:jotte@uni-paderborn.de2感谢M Thies,P. Pfahler,U.卡斯滕斯和匿名评论者的宝贵意见。1571-0661 © 2005 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2005.02.059118J. Kreimer/Electronic Notes in Theoretical Computer Science 141(2005)117面向对象的范式,应该导致一个自己的程序结构的批判性审查提高软件质量的一个有价值的技术是手动软件检查[10] [9]。它包括筛选源代码,设计和文档。这在现代敏捷开发过程(如极限编程)中的质量保证中起着重要作用。使用检查技术,错误可能在测试之前就被发现,这意味着它们在早期开发阶段就被发现了。工具支持是rec-commended为这项耗时的任务。使用一个自动和重复分析软件的工具应该达到一个恒定的高质量水平。我的目标是自动发现软件系统设计中的错误 因此避免了不能容易地扩展的程序结构,变了第2节描述并分类了设计的概念。之后,第3节介绍了一种自适应检测设计缺陷的方法。第4节描述了实现该方法的原型工具It第5节概述了应用的程序分析技术。其余各节介绍了初步案例研究的结果,概述了相关工作,并提出了结论和未来工作计划2设计缺陷设计警告是指出软件系统潜在错误设计的程序属性。在文献中,这些也被称为作者通常使用隐喻来表示设计错误,并向软件开发人员和架构师解释如何识别和纠正这种错误的软件结构。此外,Fowler [13]描述了重构转换,它改变了程序的内部结构,但不改变程序的可观察行为。这些转变导致修订和简化的程序。Fowler“坏味道”的例子J. Kreimer/Electronic Notes in Theoretical Computer Science 141(2005)117119...public void run(){ publicboolean isIncludesPoint(int p){return p.Distance(getPosition())27岁#语句是的≤125>125没有是的见图6。设计“大类”和构建决策树的测量值的简化示例刀具信息数据流人工审核图7.第一次会议。学习和检测阶段,采用决策树和设计决策树模型。此外,训练集的选择可能会很笨拙,以至于尚未完全覆盖该预处理器的预期实例范围。因此,该机制应继续从更多的例子中学习图7显示了由两个阶段组成的最终方法在模型反射设计缺陷模型手动分类训练集规则集批准/拒绝分类工具结果训练阶段检测阶段属性计算实例创建分类器机器学习J. Kreimer/Electronic Notes in Theoretical Computer Science 141(2005)117127在训练阶段,选择程序位置,并手动决定所讨论的设计图是否实际存在。所有这些程序位置的测量值与关于设计决策的决策一起形成训练集,从训练集构建初始决策树在检测阶段,用户说明要分析系统的哪些部分。在这里,测量所有未知的程序位置,并且将相关设计决策的所有决策树应用于测量。每一个被污染的程序位置都显示给用户。现在,用户验证每个单独的案例,并批准假定的设计规则或拒绝建议。在这两种情况下,作为另一个示例,可以将程序位置添加到训练集。 如果用户跳过验证 一个完全的情况下,训练集保持不变。训练和检测阶段是相互独立的即使在检测阶段,用户也可以向训练集添加更多的可疑程序3.4解释部分用户可能会发现很难发现为什么程序位置被检测为被病毒污染。为了解释,可以显示决策树。结合相关程序位置的测量值,可以可视化通过决策树的路径。首先,用户将自己的设计思维与决策树进行比较。可能存在用户评定为有意义的属性,但它们根本不出现在决策树中,或者它们只出现在远离树根的地方对决策有很大影响的属性将通过构造位于根附近。通常,一条边直接从根节点或某个相邻节点通向叶节点。边的关联属性有效地表示剔除准则。这进一步阐明了属性对用户决策的影响。用户可能会注意到,以前的训练示例没有覆盖设计算法的预期范围或者,用户3.5模型反射学习机制,如这里使用的C4.5算法,如果使用足够大的训练集,则可以实现非常好的自适应。通过标准化的验证技术,用户可以得到一个印象,128J. Kreimer/Electronic Notes in Theoretical Computer Science 141(2005)117机制在其分类中。当应用机器学习来设计异常检测时,有必要与人类直觉相比来衡量性能。也就是说,与人工分析相比,经过良好训练的系统应该只表现出很少的差异。如果不能做到这一点,那么设计图的模型可能与用户的直觉不模型必须重新定义。对于每个训练示例,相关联的程序位置是已知的。因此,可以在不丢失训练集的情况下对模型进行后续更改。如果程序未被更改,则可以重新测量所有程序位置的新属性值。结合已知的分类,原始训练集可以适应改进的模型。未来的工作将表明,如果其他学习技术(如baidu学习)实现更好的检测精度比决策树技术。但决策树的主要优点是可以人工检查,因此解释组件和模型反射是完全可行的。这将丢失与黑盒方法。4Eclipse工具为了评估第3节的概念,原型工具Eclipse像许多其他开发环境一样,提供了项目、版本和构建管理,以及源代码编辑器和当前项目的不同视图。视图允许开发人员导航文件系统或查看Java项目中的包和类结构IYC插件挂接到这样的视图的用户界面。如果选择了一个程序对象,e.G.包或类,上下文菜单提供了开始搜索设计工具的选项。结果在自己的视图中显示为潜在设计工具的列表。图8显示了Eclipse的屏幕截图,在右上角区域有一个源代码编辑器,在左边区域有一个用于导航Java程序结构的视图,在右下角区域有一个假定的设计模板列表为简洁起见,省略了IYC的配置。用户可以为新的设计模型定义自己的模型,或者通过分配一组4.之所以选择这个名字,是因为该工具只是建议潜在的设计工具。最后,用户必须决定是否存在一个触发器。J. Kreimer/Electronic Notes in Theoretical Computer Science 141(2005)117129这是你的代码IYC解释WekaIYC分析泡利BCEL设计缺陷通知程序结构源代码编辑器见图8。 Eclipse中的IYC屏幕截图。Eclipse Java开发环境Eclipse见图9。 IYC的架构预定义属性。当前训练状态可以存储到磁盘并单独加载。图9显示了该工具的架构。Eclipse平台通过为Java开发提供插件而形成了基础。IYC由两部分组成:分析部分IYC分析计算面向对象的度量,解释部分IYC解释实现与用户交互的自适应检测机器学习机制由J48分类器组成,这是一种特殊的来自WEKA库的C4.5实现[45]。分析部分依赖于字节码工程库(BCEL)[7]。[2]用于访问所分析的Java程序。PAULI[41]是一个用于Java字节码程序分析的库,它实现了e. G.控制和数据流分析。130J. Kreimer/Electronic Notes in Theoretical Computer Science 141(2005)117见图10。设计程序依赖图的示例[21]。5快速程序分析为了计算面向对象的度量,IYC使用了一个特定的依赖图,它被称为设计程序依赖图(Design ProgramDependence,DPDG)。图的节点类型边表示程序对象之间的关系:图10示出了示例图。构建程序依赖图需要大量的内存和时间。因此,不是分析整个程序,而是仅分析用户请求的上下文; e. G.包或类。在此上下文中,分析所有程序对象,并为每个对象创建一个节点。在分析过程中,可能会发现与程序对象的关系,这些关系位于上下文之外。这些节点也会添加到图形中,并标记为外部。很容易从DPDG中导出度量值。图11显示了一些示例。许多度量是通过将图限制为某些类型的关系并应用简单的图算法(如深度优先和广度优先搜索)来计算的。通常非常相似的度量,仅在所选上下文中不同,被计算。E. G.在一个方法中使用的字段的数量,相对于在它自己的类内定义的字段和在它自己的类外定义的字段。这可以很容易地通过沿着“part of”关系扩展上下文来计算对于交互式工具来说,分析速度是足够的;根据其大小,在几秒钟内就可以分析存储器部分继承继承部分部分类_节点平方ACCESSEDFI访问领域部分部分int n(int n)兰德韦尔方法_节点方法_节点方法呼叫形状System.out类_节点字段_节点ELDdraw()draw()draw()方法_节点方法_节点方法_节点三角形圈类_节点类_节点部分draw()方法_节点de.examples.Shapes形状类_节点PACKAGE_NODE部分部分AC.FIELD部分继承部分部分方法呼叫J. Kreimer/Electronic Notes in Theoretical Computer Science 141(2005)117131• 类k的场数(大小测度)确定与类k有"部分"关系的所有场的集合的基数。• 类的内部连通分支数 K(凝聚力测量)(1.)将图限制为方法或字段类型的节点,并且这些节点与类k有(2.)假设关系五.图5-I)。• 类k的外连通分量数(耦合测度)(1.)使用“part of”关系确定类k(2.)将图限制为与此方法集有“方法调用”关系的节点(3.)检查从(1.)解析为关于来自(2)的方法的不相交子集。同等级(Q)五.图5-II)。见图11。 通过DPDG计算度量的示例。(a) 分析对象的大小。(b) 错误的自动分类数量。设计师简介国际合作社Weka“Long2/2020个中的4个“Big1共有2020个中的4个图12个。分析对象的大小和初始案例研究的结果对软件开发计算机的要求是适度的。可以容易地实现额外的度量,并且因此使其可用于学习过程。6评价所提出的方法的适用性已被证明在第一个案例研究[23]使用原型实现。分析主题由测试人员熟知的两个软件系统组成,因此可以手动判断设计错误。这就是国际青年年系统和WEKA一揽子计划。 图12-a给出了两种系统的尺寸。两者都实现了一个用户界面,并使用复杂的数据结构。但是WEKA实现了更复杂的算法,IYC将许多任务委托给了库。尽管两种设计方法测量国际合作社Weka#行427492615课程数91597#方法7657193132J. Kreimer/Electronic Notes in Theoretical Computer Science 141(2005)117决策树:“长法”决策树:《大课堂》复杂性≤3>3没有是的#语句≤227>227没有#字段≤5>5med.状态冰毒是的≤29>29岁没有是的图十三. 决策树的例子图13显示了生成的决策树。要检测“长方法”,只需使用McCabe的复杂性度量就足够了。学习机制决定忽略进一步的度量。为了检测两个系统的自动分析得出了类似的结果。大约15%的方法被归类为为了与人类的直觉进行比较,随机选择了20个新的程序位置,并手动进行评估。图12-b显示,在每种情况下,只有少数自动分类与测试人员的直觉判断不匹配。7相关工作由于大多数相关工作已经讨论过了,这里只是总结了进一步的相关工作。设计锯齿检测。这项工作依赖于指标来检测设计缺陷[25][26]。增加了通过机器学习技术适应个人用户要求的功能在重构社区中,设计规则被大量讨论[35]。其中,已经提出了用于检测设计错误的解释方法,例如。例如,在一个实施例中,在[42]中。可 视 化 程 序 结 构 。 像 “jCosmo”[ 43 ] , “Code- Crawler”[ 22 ] 和“Crocket/CrocoCosmos”[ 39 ]这样的工具我的目标是让用户不必解释和分析程序属性,并自动提供假定J. Kreimer/Electronic Notes in Theoretical Computer Science 141(2005)117133而不是设计电锯这是通过一个灵活的解释机制来实现的,它会自我调整。机 器 学 习 应 用 。 机 器 学 习 技 术 在 软 件 工 程 中 有 进 一 步 的 用 途 [37] 。[19][18][ 29] [29] [ 29][ 29][32]第38话,你的未来是什么?程序抽象模型。 在再工程领域[30][20],模型分别用于从具体程序和编程语言中抽象出来。模型实例反映了程序的基本属性,这些属性允许派生出更高级别的属性,包括面向对象的度量。在文献中,这种模型实例化被称为事实提取。著名的Rigi系统[40]遵循这种方法。据我所知,只有完整的程序才被分析。这导致几乎不可行的存储器和时间消耗。而我提出的快速分析只检查程序中用户真正感兴趣的部分。这里使用的程序依赖图已经在[31]中介绍过。它们主要用于程序切片。Java特有的方法出现在[15][44]。8总结与展望本文介绍了一种在面向对象软件中检测设计错误的方法。由于设计规则以非常不同的方式解释,这种方法可以适应特定的使用场景。我结合了著名的approaches,基于面向对象的指标,与机器学习技术,并提出了一个自适应和学习的方法。原则上,该方法适用于面向对象的程序之外。引入的工具是公认的专门为Java程序,但提取器的程序属性和指标的其他语言可以集成。基于一个原型实现的初步案例研究已经进行。为了得出最终结论,需要进行经验调查。因此,原型工具将得到改进,并将向公众提供。一个联机部分将允许从不同的用户群收集模型和决策树,以供进一步设计参考。以询问编程风格和经验、开发团队的规模和构成以及所构建的软件系统的特征的形式提供的用户配置文件应该能够洞察在设计规则的不同实例中所反映的因素。基于此,一个134J. Kreimer/Electronic Notes in Theoretical Computer Science 141(2005)117应该出现由模型和决策树组成的决策树。5通常,当开发大型软件系统时,编程指南是定义的。没有设计指南可能是这样一个指导方针。当自动检测设计错误时,可以验证和维护该准则。因此,设计模型和决策树是存储和传播知识的合适方式引用[1] 第20届软件维护国际会议(ICSM 2004),2004年9月11-17日,芝加哥,IL,美国。IEEE计算机学会,2004年。[2] Apache Jakarta项目,http://jakarta.apache.org/bcel。字节码工程库(BCEL),2004年。[3] 德克·拜尔,克劳斯·勒维伦茨,弗兰克·西蒙。面向对象系统中继承对大小、耦合和内聚计算机科学讲义,2006:1??,2001.[4] 威廉·J·布朗,拉斐尔·C。Malveau,Hays W.“Skip” McCormick III, and Thomas J. 反模式:重构软件、架构和危机中的项目。约翰·威利,1998年。[5] 希亚姆河作者声明:Chris F.凯默勒面向对象设计的度量套件。IEEE软件工程学报,20(6):476[6] Melis Dagpinar和Jens H.扬克用面向对象度量预测可维护性--经验比较。在Arie van Deursen,Eleni Stroulia和Adrit-Anne D. Storey,editors,WCRE,pages 155-164. IEEE计算机学会,2003年。[7] 马库斯·达姆 字节码工程。 在Java-Informations-Tage,第267-277页[8] Eclipse.org Consortium,http://www.eclipse.org. Eclipse.org Main Page,2003.[9] 米卡赫尔·E费根软件检查的进展。在IEEE Trans.On Softw.工程师:7(12),第744-751页,1986。[10] Michael E.费根在程序开发中进行设计和代码检查以及过程控制。技术报告00.2763,IBM,1976年6月。[11] 诺曼·芬顿软件度量:必要的科学基础。IEEE软件工程学报,20(3):199[12] 诺曼·芬顿和莎丽·劳伦斯·P·佩内格。软件工程-一种严谨而实用的方法。国际汤姆森计算机出版社,伦敦,第2版,1996年。[13] 马丁·福勒、肯特·贝克、约翰·布兰特、威廉·奥普代克和唐·罗伯茨。重构:改进现有代码的设计。艾迪森·韦斯利1999年[14] Erich Gamma,Richard Helm,and Ralph Johnson und John Vlissides. 设计模式:可重用面向对象软件的元素。Addison-Wesley,1986年。ISBN:0-201-63361- 2。[15] 克里斯蒂安·哈默和格雷戈尔·斯内尔廷一个改进的java切片器。在ACM-SIGPLAN-SIGSOFT软件工具和工程程序分析研讨会,第17-22页。ACM Press,2004.5观看http://ag-kastens.upb.de/iyc。J. Kreimer/Electronic Notes in Theoretical Computer Science 141(2005)117135[16] T.哈斯蒂河Tibshirani,and J. Friedman. 统计学习的要素。Stats. Springer,2001年。[17] S. 约翰逊Lint,c程序检查器,1978年。[18] 塔吉湾Khoshgoftaar和Naeem Seliya。软件质量评估的故障预测建模:比较常用的技术。经验软件工程,8(3):255[19] 塔 吉 湾 Khoshgoftaar 和 Naeem Seliya 。 使 用 Sprint 决 策 树 算 法 的 软 件 质 量 分 类 建 模 。International Journal on Arti ficial Intelligence Tools,12(3):207[20] Rainer Koschke和Daniel Simon分层回归模型。在第10届逆向工程工作会议上,第36页。IEEE,2003年。[21] 汽车不能在Lachma n n n。 STATAT Mast er 's the s is,Univer s i téat P a d er r b orn,2004.[22] 米歇尔·兰扎面向对象的逆向工程-粗粒度、细粒度和演化软件可视化。博士论文,伯尔尼大学,2003年5月[23] 我是说,我的意思是,我 A d aptiveEr ken n n u ngonEntwurfsm?ang elninJava-A nwe ndunggn. Mast er' s thesis,Université t P a d e r b or n,2004.[24] 我是MéaMéntyléa,JariVa nh an en,和CasperLassen iu s。 BA D SMELLS-HUNSASCODECR IT ICS.InICSM[1],第399[25] 拉杜·马里内斯库面向对象设计中的度量和质量。博士论文,蒂米什瓦拉大学,2002年。[26] 拉杜·马里内斯库检测策略:用于检测设计错误的基于度量的规则在ICSM[1],第350[27] 托马斯·麦凯布。一个复杂性度量。第二届软件工程国际会议论文集,第407页。IEEE ComputerSociety Press,1976.只是抽象的[28] Tom M.米切尔 机器学习 McGraw-Hill,纽约,1997年。[29] Sanjay Mohapatra和B.莫汉蒂 通过缺陷预测预防缺陷:Infosys的案例研究。ICSM,第260-272页,2001年[30] 盖尔角Murphy,David Notkin,and Kevin Sullivan.软件重构模型:弥合源代码和高级模型之间的差距。第三届ACM SIGSOFT软件工程基础研讨会论文集,第18-28页。ACM Press,1995.[31] 作者声明:Karl J.奥特曼软件开发环境中的程序依赖图。ACM SIGPLAN Notices,19(5):177[32] Macario Polo,Mario Piattini,and Francisco Ruiz. 使用代码度量来预测遗留程序的维护:案例研究。ICSM,第202-208页,2001年[33] J. R.昆兰 决策树的归纳。 Machine Learning,1(1):81[34] J. R.昆兰 C4.5:机器学习程序。 摩根·考夫曼1993年。[35] 重构主页,http://www.refactoring.com/。[36] 亚瑟·瑞尔 面向对象设计启发式。 艾迪森·韦斯利1996年[37] J. Sayyad Shirabad和T.J. Menzies。PROMISE软件工程数据库。加拿大渥太华大学信息技术与工程学院,2005。[38] Jelber Sayyad-Shirabad,Timothy Lethbridge,and Stan Matwin.挖掘遗留软件系统的维护历史。见ICSM,第95-104页。IEEE计算机学会,2003年。136J. Kreimer/Electronic Notes in Theoretical Computer Science 141(2005)117[39] 弗兰克·西蒙,弗兰克·斯坦布鲁克纳,和克劳斯·勒韦伦茨。 基于网络的重构 在CSMR,第30-
下载后可阅读完整内容,剩余1页未读,立即下载
![application/octet-stream](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- 京瓷TASKalfa系列维修手册:安全与操作指南
- 小波变换在视频压缩中的应用
- Microsoft OfficeXP详解:WordXP、ExcelXP和PowerPointXP
- 雀巢在线媒介投放策划:门户网站与广告效果分析
- 用友NC-V56供应链功能升级详解(84页)
- 计算机病毒与防御策略探索
- 企业网NAT技术实践:2022年部署互联网出口策略
- 软件测试面试必备:概念、原则与常见问题解析
- 2022年Windows IIS服务器内外网配置详解与Serv-U FTP服务器安装
- 中国联通:企业级ICT转型与创新实践
- C#图形图像编程深入解析:GDI+与多媒体应用
- Xilinx AXI Interconnect v2.1用户指南
- DIY编程电缆全攻略:接口类型与自制指南
- 电脑维护与硬盘数据恢复指南
- 计算机网络技术专业剖析:人才培养与改革
- 量化多因子指数增强策略:微观视角的实证分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)