一、瀑布模型
1、按照传统的瀑布模型开发软件,有下述几个特点。
①阶段间具有顺序性和依赖性
阶段间具有顺序性和依赖性,这个特点有两重含义:
1,必须等前一阶段的工作完成之后,才能开始后一阶段的工作;
2,前一阶段的输出文档介绍后一阶段的输入文档;
因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。
②推迟实现的观点
对于规模较大的软件项目来说,往往编程开始得越早,最终完成开发工作所需要的时间反而越长。
③质量保证的观点
软件工程的基本目标是优质,高产。为了保证所开发的软件的质量,在瀑布模型的每个阶段都坚持两个重要的做法。
(1)每个阶段都必须完成规定的文档,没有交出合格的文档介绍没有完成该阶段的任务。完整、准确的合格文档不仅是软件开发时期各类人员相互通信的媒介,也是运行时期进行维护的重要依据。
(2)每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。
事实上,越是早期阶段犯下的错误,暴露出来的时间越晚,排除故障改正错误所需付出的代价也越高。因此,及时审查,是保证软件质量、降低软件成本的重要措施。
2、传统的瀑布模型过于理想化
事实上,人在工作过程中不可能不犯错误。在设计阶段可能发现规格说明文档的错误,而设计上的缺陷或错误可能在实现过程中显现出来,在综合测试阶段发现需求分析、设计或编码阶段的许多错误。因此,实践的瀑布模型是带“反馈环”的。
3、瀑布模型有许多优点:
①可强迫开发人员采用规范的方法(如结构化技术)
②严格地规定了每个阶段必须提交的文档
③要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
缺点:
1.只能通过文档了解产品,不经过实践是不切实际的;
2.实际项目很少按照该模型给出的顺序进行;
3.用户常常难以清楚地给出所有需求
4.用户必须要耐心,等到系统开发完成
瀑布模型的成功在很的程度上是由于它基本上是一种文档驱动的模型。
但是,“瀑布模型是文档驱动的”这个事实也是它的一个主要的缺点。
在可运行的软件产品交付给用户之前,用户只能通过文档来了解产品是什么样的。但是仅仅通过写在纸上的静态的规格说明,很难全面正确地认识动态的软件产品。而且事实证明,一旦一个用户开始使用一个软件,在他的头脑中关于该软件应该做说明的想法就会或多或少地发生变化,这就使得最初提出的需求变得不完全适用了。事实上,要求用户不经过实践就提出完整准确的需求,在很多情况下都是不切实际的。总之,由于瀑布模型几乎完全依赖于书面的规格说明,很有可能导致最终开发出的软件产品不能真正满足用户的需要。
4、瀑布模型适用于:
(1)需求是预知的
(2)软件实现方法是成熟的
(3)项目周期短
二、快速原型模型
所谓快速原型模型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。
快速原型模型是不带反馈环的,这正是这种模型的主要优点
软件产品的开发基本上线性顺序进行的
1,能基本上做到线性顺序开发的主要原因如下:
①原型系统已经通过与用户交互而得到验证,据此产生的规格说明文档正确地描述了用户的需求,因此,在开发过程的后续阶段不会因为发现了规格说明文档的错误而进行较大的返工。
②开发人员通过建立原型系统已经学到了许多东西,因此,在设计和编码阶段发生错误的可能性也比较小,这自然减少了在后续阶段需要改正前面阶段所犯错误的可能性。
快速原型的本质是“快速”。
按照原型的目的对原型分类:
· 抛弃式,目的到达即可抛弃,原型不做为最终产品
· 演化式,系统的形成和发展是逐步完成的,是高度动态迭代和高度动态的,每次迭代都要对系统重新进行规格说明,重新设计和重新评价,所以是对付变化最为有效的方法,这也是与瀑布开发的主要不同点;
· 增量式,系统是一次一段地增量构造,与演化式原型的最大区别在于增量式开发是在软件总体设计基础上进行的。很显然,其对付变化比演化差;
快速原型模型的优点:
①尽早揭示软件可能存在的风险和不确定因素,尤其是关于用户需求一致性方面的风险。
②用户参与,降低风险,节省后期变更成本,提高项目成功率。
③不带反馈环,基本上做到线性顺序开发。
④开发过程与用户培训过程同步,系统易维护,对用户更友好,产品柔性好。
三、增量模型
增量模型也称渐增模型
增量模型属于非整体开发思想的产物
使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计,编码,集成和测试。
每个构件由多个相互作用的模块构成,并且能够完成特定的功能。
使用增量模型时,第一个增量构建往往实现软件的基本需求,提供最核心的功能。
采用瀑布模型或快速原型模型开发软件时,目标都是一次就把一个满足所有需求的产品提交给用户。增量模型与之相反,它是分批逐步向用户提交产品,使得整个软件被分解成许多增量构件,开发人员一个构件接一个构件地向用户提交产品。
优点:
①能在较短的时间内向用户提交可完成部分工作的产品
②逐步增加产品的功能可以使用户有充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。
缺点:
①风险大,必须保证新增构件不破坏原来已开发出来的产品
风险更大的增量模型
四、螺旋模型
螺旋模型的基本思想是:使用原型及其他方法来尽量降低风险。
理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。
螺旋模型有许多优点:
①对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标
②减少了过多的测试(浪费资金)或者测试不足(产品故障多)所带来的风险。
③在螺线模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。
螺旋模型的主要优势在于,它是风险驱动的,但是这也可能是它的一个弱点。除非软件开发人员具有丰富的风险评估经验和这方面的专门知识,否则将会出现真正的风险:当项目实际上正在走向灾难时,开发人员可能还认为一切正常。
五、喷泉模型
迭代是软件开发过程中普遍存在的一种内在属性。
“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。
图中代表不同阶段的圆圈相互重叠,这说明表示两个活动之间存在交迭;而面向对象的方法在概念和表示方式上的一致性,保证了在各项开发活动之间的无缝过渡
事实上,用面向对象方法开发软件时,在分析、设计和编码等项开发活动之间并不存在明显的边界。
图中较小的圆圈代表维护,圆圈较小象征着采用了面向对象范型之后维护时间缩短了。
为避免使用喷泉模型开发软件时开发过程过分无序,应该把应该线性过程(例如,快速原型模型)作为总目标。但是,同时也应该记住,面向对象范型本身要求经常对开发活动进行迭代或求精。