【软件测试】常见的软件开发模型之———瀑布模型、原型模型(快速原型模型)
常见的软件开发模型之———瀑布模型、原型模型(快速原型模型)
本文参考Mooc《软件工程基础》—电子科技大学、《软件工程》—陈永、《软件工程》(第四版)—张海藩、《软件测试教程》—贺平
一.瀑布模型
1.1瀑布模型的基本思想
瀑布模型是一种严格按照生命周期定义进行软件开发的过程模型,所以也被经典生命周期模型。
瀑布模型将软件生命周期划分为问题定义、可行性分析、需求分析、软件设计、程序编写、软件测试和运行维护等基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落,故而形象地称为“瀑布模型”。 其核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。它是一种被广泛采用的软件开发模型。
典型的瀑布模型如图所示:
瀑布开发模型中各阶段的主要工作及其相应的质量控制方式如下表所示:
1.2.瀑布模型的特点
应用瀑布模型进行软件开发过程中,瀑布模型的特点如下:
(1)阶段间的顺序性和依赖性
顺序性是指:在瀑布模型软件开发过程中必须等到前一阶段的工作完成以后,才能开始下一阶段的工作。
依赖性是指:前一阶段的输出文档就是后一阶段的输入文档。因此前一阶段文档的正确性是保证后一阶段工作的前提条件。
(2)推迟实现的观点
实践表明,对于规模较大的软件项目,如果前面的准备工作做的不扎实,过早地考虑进行编码实现,往往会导致大量返工,有时甚至会发生无法弥补的错误,带来灾难性后果。采用瀑布模型会强制研发人员按照阶段步骤进行软件设计,避免了一开始就直接进行详细编码的错误做法。编码处于软件开发的中后期,强调了需求分析和系统设计的重要性,体现了推迟实现的观点。如果坚持阶段性的评审,采用瀑布模型可以避免后期大量返工的现象,还可以减少后期维护工作的人力和费用。
(3)文档驱动推进研发进程
瀑布模型在每阶段要完成规定的文档。软件开发是许多人共同参加、分工合作的工作,完整而合格的文档是开发人员间联系的媒介,同时是维护时期的重要依据。所以没有完成文档,就被认为没有完成该阶段的工作。 瀑布模型过程中,各个阶段与文档的关系如下图所示:
此外,在瀑布模型的每个阶段都要对已完成的文档进行复审,以便及早发现问题、消除隐患。这是保证软件质量、降低开发成本的重要措施。越是早期潜伏的错误,暴露时间越晚,纠错的代价就越高。
1.3.瀑布模型的优点
瀑布模型有以下优点:
- ①瀑布模型提供了一个框架,使得软件软件开发可以在分析、设计、编码、测试和维护的这个框架下进行,克服了软件开发的随意性;
- ②推迟了编码实现,强调了需求分析和设计,避免后期大量返工的现象,还可以减少后期维护工作的人力和费用
- ③当前一阶段完成后,才开始要去关注后续阶段,可以实现阶段性质量保证;
- ④严格按照瀑布模型进行软件开发,会得到完整的软件配置文档,便于设计和后期维护。
1.4.瀑布模型的缺点
瀑布模型有以下缺点:
- ①工作量大:各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
- ②开发风险大:由于开发模型是线性的,用户只有在整个过程的末期才能见到开发成果,中间沟通交互环节(反馈)较少,从而增加了用户对开发产品不满意的风险。
- ③早期错误发现晚:早期的错误可能要等到开发后期测试阶段才能发现,失去了及早纠正的机会,进而带来严重的后果。
- ④不适应需求变化:不能反映出软件开发过程中的反复性和迭代性;无法解决软件需求不明确和用户需求的变化的问题。
1.5 瀑布模型的应用范围
- 系统需求明确而稳定,需求在开发过程中没有或很少变化的
- 分析设计人员应对应用领域很熟悉技术成熟
- 工程管理比较严格
- 用户的使用环境非常稳定
- 开发工作对用户参与的要求很低
如军工,航天,医疗,等领域,或者一些变更少的小项目。
二. 原型模型(快速原型模型)
2.1 原型模型的基本思想
鉴于瀑布模型与用户交流不足,无法准确的获取用户真实需求,在软件开发过程中,提出了原型模型,也称为快速原型模型。
快速原型模型是指在软件开发者在获取一组用户基本需求定义后,利用高级软件工具可视化的开发环境,快速地建立一个目标系统的最初版本,并把它交给用户试用、补充和修改,再进行新版本开发。反复进行这个过程,直到得出系统的 “最优解”,即用户满意为止的一种方法。通过多次与用户交互后,可以获取用户最真实的需求。模型示意图如下:
快速原型模型的开发过程如下:
-
(1)确定用户的基本需求
由用户提出对新系统的基本要求,如功能、界面的基本形式、所需要的数据、应用范围、运行环境等,开发者根据这些信息估算开发该系统所需的费用,并建立简明的系统模型。 -
(2)构造初始原型
系统开发人员在明确系统基本要求和功能的基础上,依据计算机模型,以尽可能快的速度和尽可能多的开发工具来建造一个结构仿真模型,即快速原型构架。之所以称为原型构架,是因为这样的模型是系统总体结构、子系统以上部分的高层模型。由于要求快速,这一步骤要尽可能使用一些软件工具和原型制造工具,以辅助进行系统开发。 -
(3)运行、评价、修改原型
快速原型框架建造成后,就要交给用户立即投入试运行,各类人员对其进行试用、检查分析效果。由于构造原型中强调的是快速,省略了许多细节,一定存在许多不合理的部分。所以,在试用中要充分进行开发人员和用户之间的沟通,尤其是对用户提出的不满意的地方进行认真细致的反复迭代,并与用户交流、修改、完善,直到用户满意为止。 -
(3)形成最终的软件系统
如果用户和开发者对原型比较满意,则将其作为正式原型。然后可以采用其他软件过程开发方法,如瀑布模型进行后续开发; (该模型要结合其它模型进行后续开发)或者经过双方继续进行细致的工作,在正式原型的基础上对细节问题逐个补充、完善、求精、设计、编码,最后形成一个完整的软件系统。
下图是原型模型结合瀑布模型开发软件的过程:
2.2 原型模型的特点
快速原型法通常可分为两类:
第一类,原型演示仅是为了获得完整的需求说明,在用户认可后,按生命周期重新开发新产品,这种方法不能直接得到终端的目标系统,它的目的只是和用户交流,它保证了功能暂时牺牲了性能。其主要特点有:实现速度快、可修改性、可测试性、可交流性好;
第二类,通过原型的不断增加和扩充,增强式地开发(迭代式),逐步达到产品的要求。总的目的都是为了以后尽量少返工,降低维护费用。
快速原型法突出的特点是一个“快”字。这与瀑布模型的推迟实现观点正好相反。采用瀑布模型时,软件的需求分析也要在用户和开发人员之间往返讨论,前期需求不足,会导致用户设计出来的产品不满意的现象经常发生。快速原型法就是针对上述情况,采用演示原型(亦称模拟原型)的方法来启发和揭示系统的需求。具体来讲,其主要思想就是*:首先建立一个能够反映用户主要需求的原型,让用户实际使用未来系统的概貌,以便判断哪些功能是符合需求的,哪些方面还要改进,然后将原型反复修改,最终建立起完全符合用户要求的新系统。而快速原型系统*则是开发人员向用户提供“模型样品”,用户向开发人员迅速做出反馈,开发人员根据用户反馈及时做出产品修正、补充,最终减少了维护时期的工作量和费用,这正是快速原型法的优越性存在。
2.3原型模型的优点
- 在开发过程中,开发者更容易得到用户对于已做原型系统的反馈意见
- 系统开发循序渐进,反复修改,确保较好的用户满意度
- 开发周期短,费用相对少
- 由于有用户的直接参与,系统更加贴近实际
- 易学易用,减少用户的培训时间
- 应变能力强
2.4原型模型的缺点
- 构造原型采用的技术和工具不一定主流
- 快速建立起来的系统加上连续的修稿可能导致原型质量低下
- 设计者需要在质量和原型中折中
- 客户意识不到一些质量问题
- 开发过程管理要求高,整个开发过程要经过“修改—评价—再修改”的多次反复;
- 用户过早看到系统原型,误认为系统就是这个模样,易使用户失去信心;
- 开发人员易将原型取代系统分析;
- 此外如果管理不足将会导致缺乏规范化的文档资料。
2.5 原型模型的应用范围
快速原型法作为对传统生命周期法的一种改进,由于在研制过程中的前期就有用户的介入与反馈,使得最终系统能更好地适应用户的要求,因而被认为是一种有前途的新方法。但是,在短时间内研发者快速构成系统并快速响应用户提出的修改,对其研发者技术水平和开发环境和工具都有较高要求,从而在一定程度上影响和制约了快速原型法的迅速推广。
快速原型法适合处理业务过程明确、简单以及涉及面窄的小型软件系统。 不适合处理大型、复杂的系统。因为大型复杂的系统难以直接模拟,此外存在大量运算、逻辑性强的处理系统也不便于用原型表示;最后,如果管理基础工作不完善、处理过程不规范也会影响原型法发挥作用。如果快速原型法用于解决复杂软件系统,则需要采用分解和等价变换的思想,将一个复杂软件系统分解或者等价变换为一系列子系统,然后对子系统采用快速原型法设计。