- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
清华大学出版社 第13章 软件设计的进化 内容提要 13.1 软件演化概述 13.2 软件需求演化 13.3 软件演化的分类 13.4 软件的进化策略 13.5 软件再工程 13.6 软件体系结构的演化 13.7 重构 13.8 软件移植13.1 软件演化概述 软件演化(software evolution)是指在软件系统的生命周期内对软件进行维护和软件更新的行为和过程。 Lehman定律 有关软件进化的定义 Manny Lehman和Juan F. Ranil定义: 有目的地从早期的可操作版本,来产生新的软件版本的所有规划设计活动。 L. A. Belady定义: 软件系统在它们的生命周期里被维护和增强的动态行为。 Ned Chapin定义: 它是软件维护活动和过程的一个运用,以及对这些活动和过程质量的保证和管理。这些活动和过程是用来从一个早期的可运行版本中来产生一个新的软件版本,这个新的软件必须满足客户要求改变的功能或属性。 软件演化包括了软件维护和软件再工程,这是软件演化的处理策略。 软件维护是为了修改软件缺陷或增加新的功能而对软件进行的变更,软件变更通常发生在局部,不会改变整个结构。 软件再工程是为了避免软件退化而对软件的一部分进行重新设计、编码和测试,提高软件的可维护性和可靠性。 软件演化过程特征: 迭代性: 在软件演化过程中,必须不断地对系统进行变更,许多活动要比在传统模式中具有更高的重复执行频率。 交错性: 软件演化既具有连续性有具有间断性,二者是交错进行的。 多层次性: 软件演化是一项多层次的工作,它是多方面因素共同作用的结果。 反馈性: 用户需求和软件系统所处的工作环境总是在不断地发生该变,一旦环境发生变化后,就必须作出反馈,启动软件演化过程。 并行性: 为了提高软件演化的效率,必须对软件演化过程进行并行处理。 13.2 软件需求演化 引起需求变化的原因主要分为三类: 突发事件对用户需求的扰动; 用户为满足当前需求而在多种信息类别间的需求迁移; 用户因当前需求满足后萌生新需求而产生的需求进化。 对应软件需求演化 对应软件需求演化主要分为以下三类。 需求改写: 经过与客户的商讨之后,软件工程师对功能定义、数据定义和实现方法进行修改,然后通知相关人员按照新需求重新启动软件演化过程; 需求删除: 在开发和运行阶段,系统往往存在着某些不必要的或重复功能,必须删除这些功能所对应的需求描述; 需求增加: 软件工程师检查用户提出的新需求是否与原有功能冲突,如果产生冲突则向开发小组报告,否则将新需求加入到系统需求规格说明中,启动软件演化过程。 13.3 软件演化的分类 软件演化可基本上分为两种: 静态演化 动态演化。 静态演化 是指软件在停机状态下的演化。 其优点是不用考虑运行状态的迁移,同时也没有活动的进程需要处理。 然而停止一个应用程序就意味着中断它提供的服务,造成软件暂时失效。在停机状态下,系统的维护和二次开发就是一种典型的软件静态演化。 动态演化 动态演化,是指软件在执行期间的软件演化。 优点是软件不会存在暂时的失效,具有不中断服务的明显优点,但由于涉及到状态迁移等问题,比静态演化从技术上更为错综复杂,包括动态更新、增加和删除构件,动态配置系统结构等问题,它已经成为软件演化研究领域倍受关注的一个热点问题。 按照演化发生的时机分类 设计时演化: 设计时演化是指在软件编译前,通过修改软件的设计、源代码,重新编译、部署系统来适应变化。设计时演化是目前在软件开发实践中应用最广泛的演化形式。 装载期演化: 装载期演化是指在软件编译后、运行前进行的演化,变更发生在运行平台装载代码期间。因为系统尚未开始执行,这类演化不涉及系统状态维护问题。 运行时演化: 发生在程序执行过程中的任何时刻,部分代码或者对象在执行期间被修改。这种演化是研究领域的一个热点问题。 从实现方式和粒度上分类 基于过程和函数的软件演化: 程序的更新是通过载入新版本的程序,用过程的新版本来替换旧版本,同时,在运行时将当前的捆绑改为新版本的捆绑来实现的。 面向对象的软件演化: 利用对象和类的相关特性,在软件升级时,可以将系统修改局限于某个或某几个类中,以提高演化的效率。 基于构件的软件演化: 在现有构件的基础上,对其进行修改,以满足用户的新需求。 基于体系结构的软件演化: 由于系统需求、技术、环境和分布等因素的变化,最终将导致系统框架按照一定的方式来变动。 13.4 软件的进化策略 函数层次 一般来说,早期的动态链接库DLL的动态加载就是以DLL为粒度的函数层次的演化。 类层次 类层次的动态演化方法最常见的就是代理机制下的类的动态替换。 构件层次 构件之间是直接的交互引用的,而在动态体系结构中,构件之间的交互通过连接件来实现,很大程度上降低了构件之间的
文档评论(0)