- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序切片技术在程序理解中应用
程序切片技术在程序理解中应用
摘要:随着计算机软件技术的飞速发展,软件系统的规模变得越来越大,软件的维护工作也随之越来越复杂。绝大部分软件开发的主要精力都消耗在维护或者扩展原有的系统上面,而不是重新开发新系统。因此,对于软件系统的维护问题变得极其重要,对于遗留软件的维护、理解在软件开发过程中已经变得越来越重要。分别介绍了程序理解的模型及工具,并结合程序切片技术探讨程序切片在程序理解中的应用。
关键词:程序切片; 程序理解; 逆向工程
中图分类号:TP311 文献标识码:A文章编号:2095-2163(2013)02-0097-03
0引言
大多数软件系统在开发过后都会经历一个相当长的维护过程。在这个过程中,软件维护人员常常需要根据已知测试结果和反馈得来的BUG进行各类纠错,并且还可能会需要进行修改以致重新设计。实践经验表明,软件开发的绝大部分精力都耗费在对原有系统的维护上面,而不是用于新系统的重新开发。专家估计用于维护的资源和时间已经占到总开发的50%到70%[1],因而需要对其给予高度重视,并对其实现有效调控。
程序理解是从计算机程序中获取有效知识信息的一个重要过程。这些知识信息可以用于程序排错、完善程序、重用程序以及整理文档等很多方面的工作[2]。简单来讲,程序理解就是通过特定的方法和技术来得到一个认知,就是这个程序是“做什么”的以及是“如何做”的。如果对其进行完整、周密的定义,可以将程序理解看作如下的一个任务:以软件维护、升级和再实践为目的,在不同的抽象层次上建立有关基本软件的概念模型,包括从程序代码本身的模型到基本应用领域的模型。基于以上定义,程序理解的基础是要建立软件产品间的直接对应关系,维护人员借助这些对应关系,就可以根据自身拥有的软件系统的相关知识,快速定位到与其存在关联的一系列软件产品,比如,找到实现相应业务逻辑的可执行代码,或者在看到代码以后,了解到这些代码可实现的具体业务逻辑,又或是根据一个业务逻辑,找到与其有关的特定业务逻辑。
但是,程序理解是一个复杂的任务,因其涉及对软件系统不同抽象层次的有效理解及其之间的精确知识匹配。例如,存在于系统问题域和系统实现域之间的巨大“语言差距”就是程序理解的难点之一。程序理解过程的复杂性主要表现在如下几个方面:
(1)具体应用领域与程序设计领域之间的专业鸿沟有待跨越。在理解某一应用领域的程序时,不仅需要程序方面的知识,还需要这一领域的专业知识,专业知识的匮乏必然给程序理解带来相当的理解难度。
(2)软件系统的耦合度非常高。各个功能模块出现了交叉,由此导致程序理解难度的增加。
(3)软件系统的不断升级,导致程序逻辑结构的混乱。
(4)程序理解过程中,缺少必要的源程序说明文档及相关文字材料。
(5)程序理解中,人员的心理因素也是程序理解难度增加的一个不可忽视的影响因素。
1程序理解模型及工具
11程序理解模型
随着程序理解的发展,现已提出了许多模型[2],这些模型在程序理解过程中发挥着关系全局的重要作用。在程序理解中,采用一种有效的程序理解模型,有助于实现高质量、高成功率的程序理解,下面对程序理解的主要模型进行简单的说明和论述。
(1)自顶向下模型。程序理解时,采用自顶向下的理解方式,是首先假设已经理解,然后去验证所提出的假设,最后再修改此假设的一个顺序理解过程。这种理解方式需要程序员熟悉该程序应用领域的有关背景知识,然后将这些背景知识和具体程序源代码不断尝试对应的过程。详述此过程就是,将对程序进行假设作为开始,其后在代码中验证该假设是否成立。当初始假设获得验证后,可以精化出附属的子假设,于是这些大、小假设就构成了一个树状结构,并按照深度优先原则,不断地进行着验证的深一层精化。Soloway和Ehrlich已通过经验性研究发现,自顶向下的理解方式常常发生在程序员较为熟悉编写代码的技术和编码风格的时候。
(2)自底向上模型。假设程序理解人员并不透彻了解具体业务逻辑,此时就需从阅读程序源代码来理解程序,再通过自底向上的方式创建程序控制流抽象,直至建立高层抽象。具体来说,该种理解方式中,程序理解人员会逐行理解程序源码,逐步建立上一层的抽象模型。这些较高层次的抽象表现形式又将组合在一起,提取出更高层次的抽象结果。在这个过程中,语法知识与特定编程语言相关,需要考虑的是程序中的语句和基本单元,而语法知识的积累则有助于程序员形成精神模型。程序的语义知识则与特定语言无关,并随着程序员精神模型的不断建立而渐次获取相应内容,内容所描述的就是程序应用领域的业务知识。大量实验研究表明,当程序员采用这种方法来理解程序时,更多关注的是程序中的结构化信息,同时在脑海中根据这些结构化信息,首先建立程序模型
文档评论(0)