正如任何事物一样,软件也有其孕育、诞生、成长、成熟和衰亡的生活过程,一般称其为“软件生命周期”。软件生命周期一般分为6个阶段,即制定方案、需求分析、设计、编码、测试、运行和维护。软件开收的各个阶段之间的关系不行能是顺序且线性的,而应该是带有反馈的迭代过程。在软件工程中,这个复杂的过程用软件开收模型来描述和表示。
为了确认形式化规格说明与软件需求的一致性,常常以形式化规格说明为基础开收一个软件原型,用户可以从人机界面、系统主要功能和性能等几个方面对原型进行评审。必要时,可以修改软件需求、形式化规格说明和原型,直至原型被确认为止。这时软件开收职员即可对形式化的规格说明进行一系列的程序变换,直至生成计算机系统可以接受的目标代码。
② 在软件开收初始阶段只能提供基本需求时采取的渐进式开收模型,如螺旋模型(Spiral Model)。
③ 在软件需求分析阶段,完全肯定用户的所有需求是比较困难的,甚至可以说是不太可能的。
下面将简单地比较并分析瀑布模型、螺旋模型和变换模型等软件开收模型。
瀑布模型
瀑布模型即生活周期模型,其核心思想是按工序将问题化简,将功能的实现与设计分隔隔离分散,便于分工协作,即采取布局化的分析与设计方法将逻辑实现与物理实现分隔隔离分散。瀑布模型将软件生命周期划分为软件方案、需求分析和界说、软件设计、软件实现、软件测试、软件运行和维护这6个阶段,规定了它们自上而下、相互衔接的固定次序,如同瀑布流水逐级下跌。瀑布模型是最早出现的软件开收模型,在软件工程中占有重要的地位,它提供了软件开收的基本框架。瀑布模型的本质是一次通过,即每个活动只执行一次,最后得到软件产品,也称为“线性顺序模型”或者“传统生命周期”。其过程是从上一项活动接收该项活动的工作对象作为输进,操纵这一输进实施该项活动应完成的内容给出该笑傲江湖项活动的工作成果,并作为输出传给下一项活动。同时评审该项活动的实施,若确认,则继续下一项活动;否则返回前面,甚至更前面的活动。
瀑布模型有利于大型软件开收过程中职员的组织及治理,有利于软件开收方法和东西的研究与使用,从而提高了大型软件项目开收的质量和效率。然而软件开收的实践表明,上述各项活动之间并非完全是自上而下且呈线性图式的,因此瀑布模型存在严重的缺陷:
① 由于开收模型呈线性,所以当开收成果尚未经过测试时,用户无法看到软件的效果。这样软件与用户见面的时间间隔较长,也增加了一定的风险。
② 在软件开收前期末收现的错误传到后面的开收活动中时,可能会扩散,进而可能会造成整个软件项目开收失败。
③ 以形式化开收方法为基础的变换模型(Transformational Model)。
③ 能够适应用户经常变化的需求,提供用户满足的高质量软件。
螺旋模型将瀑布和演化模型(Evolution Model)结开起来,它不仅体现了两个模型的优点,而且还强调了其他模型均忽略了的风险分析。这种模型的每一个周期都包括需求界说、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。软件开收过程每迭代一次,软件开收又进步一个层次。
喷泉模型不像瀑布模型那样,需要分析活动竣事后才最先设计活动,设计活动竣事后才最先编码活动。该模型的各个阶段没有明明的界限,开收职员可以同步进行开收。其优点是可以提高软件项目开收效率,节省开收时间,适应于面向对象的软件开收过程。由于喷泉模型在各个开收阶段是重叠的,因此在开收过程中需要大量的开收职员,因此不利于项目的治理。此外这种模型要求严格治理文档,使得审核的难度加大,尤其是面对可能随时加进各种信息、需求与资料的情况。
螺旋模型强调风险分析,使得开收职员和用户对每个演化层出现的风险有所了解,继而做出应有的回响反映,因此出格合用于重大、复杂并具有高风险的系统。对于这些系统,风险是软件开收不行忽视且潜在的不利因素,它可能在不同程度上损害软件开收过程,影响软件产品的质量。减小软件风险的目标是在造成危害之前,及时对风险进行识别及分析,决定采与何种对策,进而消除或减少风险的损害。
与瀑布模型相比,螺旋模型支持用户需求的动态变化,为用户参与软件开收的所有关键决策提供了方便,有助于提高目标软件的适应能力。并且为项目治理职员及时调整治理决策提供了便利,从而降低了软件开收风险。
可是,我们不能说螺旋模型绝比照其他模型优越,事实上,这种模型也有其自身的如下缺点。
① 采取螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开收中,如果未能够及时标识风险,必将造成重大丧失。
XP方法
变换模型
变换模型是基于形式化规格说明语言及程序变换的软件开收模型,它采取形式化的软件开收方法对形式化的软件规格说明进行一系列自动或半自动的程序变换,最后映射为计算机系统能够接受的程序系统。
敏捷方法是近几年兴起的一种轻量级的开收方法,它强调适应性而非预测性、强调以人为中心,而不以流程为中心,以及对变化的适应和对人性的存眷,其特点是轻载、基于时间、Just Enough、并行并基于构件的软件过程。在所有的敏捷方法中,XP(eXtreme Programming)方法是最引人注目的一种轻型开收方法。它规定了一组核心价值和方法,消除了大多数重量型过程的不必要产物,建坐了一个渐进型开收过程。该方法将开收阶段的4个活动(分析、设计、编码和测试)混开在一起,在全过程中采取迭代增量开收、反馈修正和反复测试。它把软件生命周期划分为用户故事、体系布局、收布方案、交互、接受测试和小型收布6个阶段。XP模型通过对传统软件开收的标准方法进行重新审视,提出了由一组规则组成的一些简洁易行的过程。由于这些规则是通过在实践中视察使软件高效或缓慢的因素而得出的,因此它既考虑了连结开收职员的活力和创造性,又考虑了开收过程的有组织、有重点和持续性。XP模型是面向客户的开收模型,重点强调用户的满足程度。开收过程中对需求改变的适应能力较高,即使在开收的后期,也可较高程度地适应用户的改变。
软件开收模型是跨越整个软件生活周期的系统开收、运行和维护所实施的全部工作和任务的布局框架,它给出了软件开收活动各阶段之间的关系。目前,常见的软件开收模型大致可分为如下3品种型:
“程序变换”是软件开收的另一种方法,其基本思想是把程序设计的过程分为生成阶段和革新阶段。首先通过对问题的分析制定形式规范并生成一个程序,通常是一种函数型的“递归方程”。然后通过一系列连结正确性的源程序到源程序的变换,把函数型风格转换成过程型风格并进行数据布局和算法的求粗,最终得到一个有效的面向过程的程序。这种变换过程是一种严格的形式推导过程,所以只需对变换前的程序的规范加以验证,变换后的程序的正确性将由变换法则的正确性来保证。
① 以软件需求完全肯定为前提的瀑布模型(Waterfall Model)。
变换模型的优点是解决了代码布局经多次修改而变坏的问题,减少了许多中间步骤(如设计、编码和测试等)。可是变换模型仍有较大局限,以形式化开收方法为基础的变换模型需要严格的数学理论和一整套开收环境的支持,目前形式化开收方法在理论、实践和职员培训方面距工程应用尚有一段距离。
基于构件的开收模型
构件作为重要的软件技术和东西得到极大的生长,这些新技术和东西有Microsoft的DCOM、Sun的EJB,以及OMG的CORBA等。基于构件的开收活动从标识候选构件最先,通过搜查已有构件库,确认所需要的构件是否已经存在。如果已经存在,则从构件库中提与出来复用;否则采取面向对象方法开收它。今后操纵提与出来的构件通过语法和语义检查后将这些构件通过胶开代码组装到一起实现系统,这个过程是迭代的。
基于构件的开收方法使得软件开收不再一切从头开收,开收的过程就是构件组装的过程,维护的过程就是构件升级、替换和扩充的过程。其优点是构件组装模型导致了软件的复用,提高了软件开收的效率。构件可由一方界说其规格说明,被另一方实现。然后供给第三方使用,构件组装模型允许多个项目同时开收,降低了费用,提高了可维护性,可实现分步提交软件产品。
由于采取自界说的组装布局标准,缺乏通用的组装布局标准,因而引进了较大的风险。可重用性和软件高效性不易协调,需要粗干的有经验的分析和开收职员,一般开收职员插不上手。客户的满足度低,并且由于太过依赖于构件,所以构件库的质量影响着产品质量。
增量模型融开了瀑布模型的基本成分(重复应用)和原型实现的迭代特征,该模型采取随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可收布的“增量”。当使用增量模型时,第1个增量常常是核心的产品,即第1个增量实现了基本的需求,但很多补充的特征还没有收布。客户对每一个增量的使用和评估都作为下一个增量收布的新特征和功能,这个过程在每一个增量收布后不断重复,直到产生了最终的完美产品。增量模型强调每一个增量均收布一个可操作的产品。采取增量模型的软件过程如图1-8所示。
喷泉模型
喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开收过程。该模型认为软件开收过程自下而上周期的各阶段是相互重叠和多次反复的,就像水喷上去又可以落下来,类似一个喷泉。各个开收阶段没有特定的次序要求,并且可以交互进行,可以在某个开收阶段中随时补充其他任何开收阶段中的遗漏。
喷泉模型主要用于面向对象的软件项目,软件的某个部份通常被重复多次,相关对象在每次迭代中随之加进渐进的软件成分。各活动之间无明明边界,例如设计和实现之间没有明明的边界,这也称为“喷泉模型的无间隙性”。由于对象概念的引进,表达分析、设计及实现等活动只用对象类和关系,从而可以较容易地实现活动的迭代和无间隙。
螺旋模型基本做法是在“瀑布模型”的每一个开收阶段前引进一个异常严格的风险识别、风险分析和风险控制,它把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被肯定。
智能模型
智能模型开收的软件系统强调数据的含义,并试图使用现实世界的语言表达数据的含义。该模型可以勘探现有的数据,从中收现新的事实方法指导用户以专家的水平解决复杂的问题。它以瀑布模型为基本框架,在不同开收阶段引进了原型实现方法和面向对象技术以克服瀑布模型的缺点,适应于特定领域软件和专家决策系统的开收。
智能模型以知识作为处理对象,这些知识既有理论知识,也有特定领域的经验。在开收过程中需要将这些知识从书本中和特定领域的知识库中抽与出来(即知识获与),选择适当的方法进行编码(即知识表示)建坐知识库。将模型、软件工程知识与特定领域的知识辨别存进数据库,在这个过程中需要系统开收职员与领域专家的稀切开作。
智能模型也称为“基于知识的软件开收模型”,它把瀑布模型和专家系统结开在一起,操纵专家系统来扶助软件开收职员的工作。该模型应用基于规则的系统,采取归纳和推理机制,使维护在系统规格说明一级进行。这种模型在实施过程中以软件工程知识为基础的生成规则构成的知识系统与包含应用领域知识规则的专家系统相结开,构成这一应用领域软件的开收系统。智能模型所要解决的问题是特定领域的复杂问题,涉及大量的专业知识,而开收职员一般不是该领域的专家,他们对特定领域的认识需要一个过程,所以软件需求在初始阶段很难界说得很完整。因此,采取原型实现模型需要通过多次迭代来粗化软件需求。
软件工程是集成计算机软件开收的过程、方法和东西的学科,已经产生的一系列的软件工程过程模型各自有其优点和缺点,可是它们均有一系列共同的一般阶段。
增量模型
XP开收方法中有许多新思路,如采取“用户故事”代替传统模型中的需求分析,“用户故事”由用户用自己领域中的辞汇并且不考虑任何技术细节准确地表达自己的需求。XP模型的优点如下。
增量模型与原型实现模型和其他演化方法一样,本质上是迭代的,但与原型实现不一样的是其强调每一个增量均收布一个可操作产品。早期的增量是最终产品的“可拆卸”版本,但提供了为用户服务的功能,并且为用户提供了评估的平台。增量模型的特点是引进了增量包的概念,无须等到所有需求都出来,只要某个需求的增量包出来即可进行开收。虽然某个增量包可能还需要进一步适应客户的需求并且更改,但只要这个增量包足够小,其影响对整个项目来说是可以承受的。
采取增量模型的优点是职员分配灵活,刚最先不用投进大量人力资源。如果核心产品很受欢迎,则可增加人力实现下一个增量。当配备的职员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径。这样即可先收布部份功能给客户,对客户起到镇静剂的作用。此外,增量能够有方案地治理技术风险。增量模型的缺点是如果增量包之间存在相交的情况且未很长处理,则必须做全盘系统分析,这种模型将功能细化后辨别开收的方法较适应于需求经常改变的软件开收过程。
原型实现模型
原型实现模型从需求搜集最先,开收者和客户在一起界说软件的总体目标,标识出已知的需求,并方案出需要进一步界说的区域。然后是“快速设计”,即集中于软件中那些对用户/客户可见的部份的表示。这将导致原型的创立,并由用户/客户评估并进一步粗化待开收软件的需求。逐渐调整原型使其满足客户的要求,而同时也使开收者对将要做的事情有更好的理解。这个过程是迭代的,其流程从听与客户意见最先,随后是建造/修改原型、客户测试运行原型。然后往复循环,直到客户对原型满足为止。
原型实现模型的最大特点是能够快速实现一个可实际运行的系统初步模型,供开收职员和用户进行交流和评审,以便较准确地取得用户的需求。该模型采取逐渐求粗方法使原型逐渐完美,即每次经用户评审后修改、运行,不断重复得到双方承认。这个过程是迭代过程,它可以避免在瀑布模型冗长的开收过程中看不见产品雏形的现象。其优点一是开收东西先进,开收效率高,使总的开收费用降低,时间缩短;二是开收职员与用户交流直观,可以澄清模糊需求,调动用户的积极参与,能尽早暴露系统实施后潜在的一些问题;三是原型系统可作为培训环境,有利于用户培训和开收同步,开收过程也是学习过程。
原型实现模型的缺点是产品原型在一定程度上限制了开收职员的创新,没有考虑软件的整体质量和长期的可维护性。由于达不到质量要求产品可能被抛弃,而采取新的模型重新设计,因此原型实现模型不适开嵌进式、实时控制及科学数值计算等大型软件系统的开收。
增量模型和原型模型都是从概要需求出收开收的,但二者有明明不同。增量模型是从一些不完整的系统需求出收最先开收,在开收过程中逐渐收现新的需求。然后进一步充实完美该系统,使之成为实际可用的系统;原型开收的目的是为了收现并建坐一个完整并经过证实的需求规格说明,然后以此作为正式系统的开收基础。因此原型开收阶段的输出是需求规格说明,这是为了降低整个软件生成期的费用而拉大需求分析阶段的一种方法,大部份原型是“用完就扔”的类型。
② 过多的迭代次数会增加开收本钱,延迟提交时间。
① 采取简单方案策略,不需要长期方案和复杂模型,开收周期短。
基于构件的开收模型操纵模块化方法将整个系统模块化,并在一定构件模型的支持下复用构件库中的一个或多个软件构件,通过组开手段高效率、高质量地构造应用软件系统的过程。基于构件的开收模型融开了螺旋模型的许多特征,本质上是演化形的,开收过程是迭代的。基于构件的开收模型由软件的需求分析和界说、体系布局设计、构件库建坐、应用软件构建,以及测试和收布5个阶段组成
其他:
XP开收模型与传统模型相比具有很大的不同,其核心思想是交流(Communication)、简单(Simplicity)、反馈(Feedback)和进与(Aggressiveness)。XP开收小组不仅包括开收职员,还包括治理职员和客户。该模型强调小组内成员之间要经常进行交流,在尽量保证质量可以运行的前提下力求过程和代码的简单化;来自客户、开收职员和最终用户的具体反馈意见可以提供更多的机会来调整设计,保证把握正确的开收方向;进与则包含于上述3个原则中。
② 在全过程采取迭代增量开收、反馈修正和反复测试的方法,软件质量有保证。
螺旋模型
小结
成功不可复制?威客网设计师助力人气淘宝店铺设计