1. 边做边改模型(Build-and-Fix Model)
好吧,其完结在许多产品实践都是运用的“边做边改”模型来开发的,特别是很多小公司产品周期压缩的太短。在这种模型中,既没有标准说明,也没有经过规划,软件随着客户的需要一次又一次地不断被修正。
在这个模型中,开发人员拿到项目当即依据需求编写程序,调试经过后生成软件的第一个版别。在提供给用户运用后,假如程序出现过错,或许用户提出新的要求,开发人员重新修正代码,直到用户和测验等等满足停止。
这是一种相似作坊的开发方式,边做边改模型的长处毫无疑问就是前期出成效快。
对编写逻辑不需要太严谨的小程序来说还能够对付得过去,但这种方法对任何规划的开发来说都是不能令人满足的,其首要问题在于:
1) 缺少规划和规划环节,软件的结构随着不断的修正越来越糟,导致无法持续修正;
2) 疏忽需求环节,给软件开发带来很大的危险;
3) 没有考虑测验和程序的可保护性,也没有任何文档,软件的保护十分困难。
2. 瀑布模型(Waterfall Model)
瀑布模型是一种比较老旧的软件开发模型,1970年温斯顿·罗伊斯提出了著名的“瀑布模型”,直到80年代都还是一直被广泛采用的模型。
瀑布模型将软件生命周期区分为拟定计划、需求剖析、软件规划、程序编写、软件测验和运转保护等六个根本活动,并且规定了它们自上而下、彼此联接的固定次序,如同瀑布流水,逐级下落。
在瀑布模型中,软件开发的各项活动严厉依照线性方式进行,当时活动承受上一项活动的作业效果,施行完结所需的作业内容。当时活动的作业效果需要进行验证,如验证经过,则该效果作为下一项活动的输入,持续进行下一项活动,否则返回修正。
瀑布模型长处是严厉遵循预先计划的进程次序进行,一切按部就班比较严谨。
瀑布模型着重文档的作用,并要求每个阶段都要细心验证。但是,这种模型的线性进程太理想化,已不再合适现代的软件开发形式,简直被业界抛弃,其首要问题在于:
1) 各个阶段的区分彻底固定,阶段之间产生很多的文档,极大地添加了作业量;
2) 因为开发模型是线性的,用户只有比及整个进程的末期才能见到开发效果,然后添加了开发的危险;
3) 早期的过错可能要比及开发后期的测验阶段才能发现,进而带来严重的效果。
4) 各个软件生命周期联接花费时间较长,团队人员沟通本钱大。
5) 瀑布式方法在需求不明并且在项目进行进程中可能改变的情况下根本是不可行的。
3. 迭代模型(stagewise model)(也被称作迭代增量式开发或迭代进化式开发)
是一种与传统的瀑布式开发相反的软件开发进程,它弥补了传统开发方式中的一些缺点,具有更高的成功率和生产率。
在迭代式开发方法中,整个开发作业被组织为一系列的矮小的、固定长度(如3周)的小项目,被称为一系列的迭代。每一次迭代都包含了需求剖析、规划、完结与测验。采用这种方法,开发作业能够在需求被完好地确认之前发动,并在一次迭代中完结体系的一部分功用或业务逻辑的开发作业。再经过客户的反应来细化需求,并开始新一轮的迭代。
教育中,对迭代和版别的区别,可理解如下: 迭代一般指某版别的生产进程,包含从需求剖析到测验完结; 版别一般指某阶段软件开发的效果,一个可交给运用的产品。
与传统的瀑布模型相比较,迭代进程具有以下长处:
1)降低了在一个增量上的开支危险。假如开发人员重复某个迭代,那么损失仅仅这一个开发有误的迭代的花费。
2)降低了产品无法依照既定进展进入市场的危险。经过在开发早期就确认危险,能够尽早来处理而不至于在开发后期匆匆忙忙。
3)加快了整个开发作业的进展。因为开发人员清楚问题的焦点地点,他们的作业会更有用率。
4)因为用户的需求并不能在一开始就作出彻底的界定,它们通常是在后续阶段中不断细化的。因而,迭代进程这种形式使习惯需求的改变会更简单些。因而复用性更高
4. 快速原型模型(Rapid Prototype Model)
快速原型模型的第一步是制作一个快速原型,完结客户或未来的用户与体系的交互,用户或客户对原型进行点评,进一步细化待开发软件的需求。经过逐步调整原型使其满足客户的要求,开发人员能够确认客户的真实需求是什么;第二步则在第一步的基础上开发客户满足的软件产品。
显然,快速原型方法能够战胜瀑布模型的缺点,削减因为软件需求不明确带来的开发危险,具有明显的作用。
快速原型的关键在于尽可能快速地制作出软件原型,一旦确认了客户的真实需求,所制作的原型将被丢弃。因而,原型体系的内部结构并不重要,重要的是有必要灵敏建立原型,随之灵敏修正原型,以反映客户的需求。
快速原型模型有点整合“边做边改”与“瀑布模型”长处的意味。
5、增量模型(Incremental Model)
与制作大厦相同,软件也是一步一步制作起来的。在增量模型中,软件被作为一系列的增量构件来规划、完结、集成和测验,每一个构件是由多种彼此作用的模块所形成的提供特定功用的代码片段构成。
增量模型在各个阶段并不交给一个可运转的完好产品,而是交给满足客户需求的一个子集的可运转产品。整个产品被分解成若干个构件,开发人员逐个构件地交给产品,这样做的好处是软件开发能够较好地习惯改变,客户能够不断地看到所开发的软件,然后降低开发危险。但是,增量模型也存在以下缺点:
1) 因为各个构件是逐步并入已有的软件体系结构中的,所以加入构件有必要不损坏已结构好的体系部分,这需要软件具有开放式的体系结构。
2) 在开发进程中,需求的改变是不可避免的。增量模型的灵活性能够使其习惯这种改变的才能大大优于瀑布模型和快速原型模型,但也很简单退化为边做边改模型,然后是软件进程的操控失去整体性。
在运用增量模型时,第一个增量往往是完结根本需求的中心产品。中心产品交给用户运用后,经过点评形成下一个增量的开发计划,它包含对中心产品的修正和一些新功用的发布。这个进程在每个增量发布后不断重复,直到产生终究的完善产品。
例如,运用增量模型开发字处理软件。能够考虑,第一个增量发布根本的文件办理、修改和文档生成功用,第二个增量发布愈加完善的修改和文档生成功用,第三个增量完结拼写和文法查看功用,第四个增量完结高档的页面布局功用。
6. 螺旋模型(Spiral Model)
1988年,巴利·玻姆(Barry Boehm)正式宣布了软件体系开发的“螺旋模型”,它将瀑布模型和快速原型模型结合起来,着重了其他模型所忽视的危险剖析,特别合适于大型杂乱的体系。
螺旋模型沿着螺线进行若干次迭代,图中的四个象限代表了以下活动:
1) 拟定计划:确认软件方针,选定施行计划,澄清项目开发的约束条件;
2) 危险剖析:剖析评价所选计划,考虑怎么辨认和消除危险;
3) 施行工程:施行软件开发和验证;
4) 客户评价:点评开发作业,提出修正建议,拟定下一步计划。
螺旋模型由危险驱动,着重可选计划和约束条件然后支撑软件的重用,有助于将软件质量作为特殊方针融入产品开发之中。但是,螺旋模型也有必定的约束条件,详细如下:
1) 螺旋模型着重危险剖析,但要求许多客户承受和信任这种剖析,并做出相关反应是不简单的,因而,这种模型往往习惯于内部的大规划软件开发。
2) 假如履行危险剖析将大大影响项意图利润,那么进行危险剖析毫无意义,因而,螺旋模型只合适于大规划软件项目。
3) 软件开发人员应该拿手寻找可能的危险,准确地剖析危险,否则将会带来更大的危险
一个阶段首要是确认该阶段的方针,完结这些方针的选择计划及其约束条件,然后从危险视点剖析计划的开发战略,努力扫除各种潜在的危险,有时需要经过制作原型来完结。假如某些危险不能扫除,该计划当即终止,否则发动下一个开发进程。终究,点评该阶段的效果,并规划下一个阶段。
7. 灵敏软件开发 (Agile development)
灵敏开发是一种以人为中心、迭代、循序渐进的开发方法。在灵敏开发中,软件项意图构建被切分红多个子项目,各个子项意图效果都经过测验,具有集成和可运转的特征。换言之,就是把一个大项目分为多个彼此联系,但也可独立运转的小项目,并分别完结,在此进程中软件一直处于可运用状况。
灵敏开发小组首要的作业方式能够归纳为:作为一个整体作业; 按短迭代周期作业; 每次迭代交给一些效果,重视业务优先级,查看与调整。
灵敏软件开发要注意项目规划,规划增长,团队沟通本钱就上去了,因而灵敏软件开发暂时合适不是特别大的团队开发,比较合适一个组的团队运用。
8. 演化模型(evolutionary model)
首要针对事先不能完好界说需求的软件开发。用户能够给出待开发体系的中心需求,并且当看到中心需求完结后,能够有用地提出反应,以支撑体系的终究规划和完结。软件开发人员依据用户的需求,首要开发中心体系。当该中心体系投入运转后,用户试用之,完结他们的作业,并提出精化体系、增强体系才能的需求。软件开发人员依据用户的反应,施行开发的迭代进程。第一迭代进程均由需求、规划、编码、测验、集成等阶段组成,为整个体系添加一个可界说的、可办理的子集。
在开发形式上采纳分批循环开发的方法,每循环开发一部分的功用,它们成为这个产品的原型的新增功用。于是,规划就不断地演化出新的体系。 实践上,这个模型可看作是重复履行的多个“瀑布模型”。
“演化模型”要求开发人员有才能把项意图产品需求分解为不同组,以便分批循环开发。这种分组并不是肯定随意性的,而是要依据功用的重要性及对总体规划的基础结构的影响而作出判断。有经验指出,每个开发循环以六周到八周为恰当的长度。
9. 喷泉模型(fountain model, (面向对象的生计期模型, 面向对象(Object Oriented,OO)模型))
喷泉模型与传统的结构化生计期比较,具有更多的增量和迭代性质,生计期的各个阶段能够彼此重叠和屡次反复,并且在项意图整个生计期中还能够嵌入子生计期。就像水喷上去又能够落下来,能够落在中心,也能够落在最底部。
10. 智能模型(四代技能(4GL))
智能模型拥有一组工具(如数据查询、报表生成、数据处理、屏幕界说、代码生成、高层图形功用及电子表格等),每个工具都能使开发人员在高层次上界说软件的某些特性,并把开发人员界说的这些软件自动地生成为源代码。这种方法需要四代语言(4GL)的支撑。4GL不同于三代语言,其首要特征是用户界面极点友爱,即便没有受过练习的非专业程序员,也能用它编写程序;它是一种声明式、交互式和非进程性编程语言。4GL还具有高效的程序代码、智能缺省假定、完备的数据库和应用程序生成器。现在市场上盛行的4GL(如Foxpro等)都不同程度地具有上述特征。但4GL现在首要限于业务信息体系的中、小型应用程序的开发。
11. 混合模型(hybrid model)
进程开发模型又叫混合模型(hybrid model),或元模型(meta-model),把几种不同模型组合成一种混合模型,它答应一个项目能沿着最有用的途径发展,这就是进程开发模型(或混合模型)。实践上,一些软件开发单位都是运用几种不同的开发方法组成他们自己的混合模型。