目录 |
软件演化是一个程序不断调节以满足新的软件需求过程。根据不同的特征,软件演化具有不同的分类方法。
根据演化时软件系统是否在运行,可分为静态演化和动态演化。
1)静态演化
静态演化是指软件在停机状态下的演化。其优点是不用考虑运行状态的变迁,同时也没有活动的进行需要处理。然而停止一个应用程序就意味着中断它提供的服务,造成软件暂时失效。
2)动态演化
动态演化是指软件在执行期间的软件演化。其优点是软件不会暂时的失效。有持续可用性的明显优点。但由于涉及状态迁移等问题,比静态演化从技术上更难处理。动态演化是最复杂也是最有实际意义的演化行为。动态演化使得软件在运行过程中,可以根据应用需求和环境变化,动态地进行配置、维护和更新,其表现形式包括系统元素数目的可变性、结构关系的可调整性等。软件的动态演化特性对于适应未来软件发展的开放性、多态性具有重要意义。
根据演化发生的时机,软件演化可分为设计时演化、装载期演化和运行时演化。
1)设计时演化
设计时演化是指在软件编译前,通过修改软件的设计、源代码,重新编译、部署系统来适应变化。设计时演化是目前在软件开发实践中应用最广泛的演化形式。
2)装载期演化
装载期演化是指在软件编译后、运行前进行的演化,变更发生在运行平台装载代码期间。因为系统尚未开始执行,这类演化不涉及系统状态的维护问题。
3)运行时演化
发生在程序执行过程中的任何时刻,部分代码或者对象中执行期间修改。显而易见,设计时演化是静态演化,运行时演化是一种典型的动态演化,而装载期间的演化既可以被看作静态演化也可以看作是动态演化,取决于它怎样被平台或提供者使用。
1985年Lehman和Belady在专门研究了许多大型软件系统的发展和演化的基础上总结了软件在变更过程中的演化动态特征,具体包括:
(1)软件维护和演化是一个必然的过程。
现实世界在不断变化和发展,当系统的环境发生改变时,新的需求就会浮现。因此为了适应变化的环境需要,继续发挥其应有的作用,软件系统也必须根据需要不断地进行维护和演化。当修改后的系统重新投入使用,又会促使环境的改变,于是演化过程进入循环。
(2)软件的不断修改会导致软件的退化。
随着系统的改变,其结构在衰退。因此,为了能够防止退化的发生.必须增加额外的成本以改善软件的结构和质量。这样,在实现必要的系统变更成本上又会增加额外的支出。
(3)软件系统的动态特性是在开发过程的早期建立起来的。
软件的规模限制着自身发生的变更,由于较大的变更会引入更多的缺陷,因而限制了新版本的演化有效程度。这也决定了系统维护过程的总趋势以及系统变更可能次数的极限——系统一旦超过某个最小规模就会变得难以变更。
(4)资源和人员的变化对系统长期演化的影响是不易察觉的。
在大型软件项目开发中,团队成员数量的增加不一定就能提高软件的开发效率。
(5)在软件系统中添加新的功能不可避免地会产生新的缺陷。
软件演化过程是软件演化和软件过程的统一。按ISO/IECl2207标准,软件过程是指软件生命期中的若干活动的集合。活动又称为工作流程,又可细分为子活动或任务。Lehman认为软件演化过程是一个多层次,多循环,多用户的反馈系统。从软件再工程的角度看,软件演化过程是对软件系统进行不断地再工程的过程,是软件系统在其生命周期中不断完善的系统动力学行为。
软件演化过程并非是顺序进行的,它是根据一定的环境迭代地、多层次地进行的。在软件演化过程中,不同粒度的活动都会发生,因此它必须更具有灵活性。通过观察和分析,软件演化过程模型中存在以下特征。
1)迭代性
在软件演化过程中,由于软件系统必须不断地进行变更,许多活动要以比传统开发过程更高频率进行重复执行;在整个软件演化过程中存在着大量的呈迭代的活动,许多活动一次又一次地被执行。一次迭代过程类似于传统的瀑布模型,处理相应的活动。每次迭代在其结束时需要进行评估,判断是否提出了新的需求、结果是否达到了预定的要求,然后再进行下一个迭代过程。迭代性是软件演化过程的一个重要特性。
2)并行性
在软件演化过程中,有许多并行的活动,而且这些活动的并行性比传统软件开发过程中的活动的并行性要高。如软件过程的并行、子过程的并行、阶段并行、软件发布版本之间的并行、软件活动之间的并行等。为了提高软件演化过程的效率,必须对软件演化过程进行并行性处理。
3)反馈性
尽管促使软件系统进行演化的原因很复杂,但演化的推动力必然是从对需求的不满产生的。用户的需求和软件系统所处的环境是在不断地变化的,所以当环境变化后就必须作处反馈,以便于软件演化过程的执行。反馈是软件系统演化的基础和依据。
4)多层次性
从不同的角度看,由于粒度的不同,软件演化过程包括不同粒度的过程和活动。为了减少这种复杂性,软件演化过程应被划分为不同的层次,低层模型是对高层模型的细化,而高层模型是对低层模型的抽象。
5)交错性
软件演化过程中活动的执行并不像瀑布模型一样是顺序进行的,软件演化过程是连续性与间断性的统一,其活动的执行是交错着进行的。