问答题 论软件的静态演化和动态演化及其应用 软件演化(Software Evolution)是指软件在其生命周期内的更新行为和过程。演化是一系列贯穿软件生命周期始终的活动,系统需求改变、功能实现增强、新功能加入、软件架构改变、软件缺陷修复、运行环境改变均要求软件系统能够快速适应变化,具有较强的演化能力。软件静态演化(Static Evolution)和动态演化(Dynamic Evolution)是目前软件演化的两种重要类型。 请围绕“软件的静态演化和动态演化及其应用”论题,依次从以下三个方面进行论述。 (1)概要叙述你参与管理和开发的软件项目以及你在其中所担任的主要工作。 (2)请分别对软件静态演化和动态演化的特点进行论述,说明两种软件演化类型各自的优缺点及其应用场合,并举例说明各自的常见演化技术手段。 (3)具体阐述你参与管理和开发的项目中所进行的软件演化活动的特点、演化的类型,以及所采取的对应演化技术手段,说明具体实施过程以及实际应用的效果。
【正确答案】(1)简要介绍你参与管理和开发的大中型信息系统软件工程项目,简要说明自己在该项目中的角色、所承担的主要任务及开展的主要工作。参与设计和实施的信息系统项目应有一定的规模,自己在该项目中担任的主要工作应有一定的份量。 (2)论文的第2部分是体现你所掌握的信息系统软件演化理论知识的精华所在。软件演化的核心问题是:如何使软件系统适应外界的改变。软件演化过程是软件演化和软件过程的统一。软件演化可分为静态演化和动态演化两种类型。静态演化是指系统在停机状态下所进行的修改;动态演化则是指软件在运行期间所进行的更新。 在静态演化中,先对需求变化进行分析,锁定软件更新的范围,然后实施系统升级。在停机状态下,系统的维护和二次开发就是一种典型的软件静态演化。静态演化可以是一种更正代码错误的简单变更,也可以是更正设计方案的重大调整,还可以是对描述错误所作的较大范围的修改,更可以是针对新需求所作的重大改进。在演化时,首先根据用户的需求变动,开发新功能模块或更新已有的功能模块,然后编译链接生成新应用系统,最后部署更新后的软件系统。静态演化技术的优点是:在更新过程中,不需要考虑系统的状态迁移和活动线程问题。其缺点是:停止应用程序就意味着停止系统所提供的相关服务,也就是使软件暂时失效。 静态演化有3种不同的软件维护:改正性维护、适应性维护和完善性维护。维护过程一般包括变更分析、版本规划、系统实现和向客户交付系统等活动。 在面向对象技术中,使用子类型方法来扩展程序,它适合于软件静态演化和代码重用。子类型化一个类意味着保留父类中的参数和方法,并尽可能地增加新的参数和方法。另外,使用重载和多态性作为主要的演化机制。在对系统功能进行更新时,最简单的机制就是创建相关类的子类,然后重载需要变更的方法,利用多态性来调用新创建的方法。在基于构件的软件技术中,构件通常采用接口和实现相分离的原则,构件之间只能通过接口来进行通信。这使得具有兼容接口的不同构件实现部分可以相互取代,从而成为软件静态演化的一条非常有效的途径。 动态演化是最复杂也是最有实际意义的演化形式。它使得软件在运行过程中,可以根据应用需求和环境变化,动态地进行软件的配置、维护和更新,其表现形式包括系统元素数目的可变性、结构关系的可调节性和结构形态的动态可配置性。软件的动态演化特性对于适应未来软件发展的开放性、动态性具有重要意义。动态演化的显著优点是软件不会存在暂时的失效,具有持续的可用性。但由于涉及状态迁移等问题,它比静态演化在技术上更难处理。 对于执行关键任务的一些软件系统而言,通过停止、更新和重启来实现维护演化任务将会导致不可接受的延迟、代价和危险。例如:当对航班调度系统和某些实时监控系统进行演化时,不能进行停机更新,而必须切换到备用系统上,以确保相关服务仍旧可用。条件发生改变时,移动计算系统需要调整对应的计算构件,以适应外界环境的变化。例如:交通控制软件、电信交换软件、Internet服务应用软件以及高可用性的公共信息软件。 软件动态演化可以分为预设的和非预设的两种类型。动态变化的因素是软件设计者能够预先设想到的,可实现为系统的固有功能,这就是预设的软件动态演化。对系统配置进行修改和调整是直到软件投入运行以后才能确定的,这就要求系统能够处理在原始设计中没有完全预料到的新需求,这就是非预设的软件动态演化。 为了支持软件的动态演化,人们在编程语言和工作机制方面做了大量探索性的研究工作。例如:①基于硬件的动态演化,使用多个冗余的硬件设备,用于软件的动态升级服务;②动态装载,在编程语言方面,引进相关机制来支持软件系统的动态演化;③动态类:在软件运行过程中,类的实现可以动态地变化;④中间件为运行构件的动态替换和升级提供了相关实现机制,主要包括:命名服务、反射技术和动态适配等;⑤基于构件的动态演化;⑥基于过程的动态演化;⑦基于体系结构描述语言的动态演化;⑧基于体系结构模型的动态演化等。其中,动态类中使用的一些策略有(但不限于):①冻结”策略,系统等待已存在的旧版本的对象被客户释放;②“重建”策略,系统使用动态类的新版本来创建相关对象,同时,将旧版本的对象的状态信息拷贝到新对象中;③“共存”策略,动态类新、旧版本的对象共存,但是,以后对象的创建使用动态类的新版本。在实现动态类时,通常需要引入代理(Proxy)机制。代理负责维护动态类的所有实现版本和实现版本的外部存储。代理机制下的动态类是一种轻量级的动态演化技术,它不需要编译器和底层运行环境(例如:操作系统和虚拟机)的支持,比较容易实现。 (3)说明你参与管理和开发的软件项目中,所进行的软件演化活动的特点、演化的类型,以及所采取的对应演化技术手段、方法和步骤,说明具体实施过程以及实际的应用效果(或存在的问题)。论文最后可以进一步讨论你从中获得的相关体会,以及在今后的工作过程中,如果碰到类似的项目,你将如何应用这些经验或教训。
【答案解析】