![7d6098d02e29a1b319d77a9eeb491bf7.png](https://i-blog.csdnimg.cn/blog_migrate/9b06eb827a6e60cccf0e78e97813b9e4.jpeg)
0.个人与团队
看看老师给的作业要求,想想要用什么编译器什么语言编写,然后直接打开电脑开干——这几乎是我们每一个在校的计算机学生做软件开发时的常见思路。这种思路对于个人开发而言,并没有什么错误,然而当我们把它放在一个团队型的软件开发过程中时,就会犯很多错误了。
没有文档,没有规划,没有质量保障……这些都是在团队开发时的大忌,以至于这种“不管三七二十一,干就完了”的开发风格,根本不可能适用于工作中的开发环境。这就好比是盖楼房,你如果只是用积木搭一个房屋模型,确实可以先动手胡乱拼凑一个,有问题大不了拆了重盖就行,但是在现实生活中的房屋搭建中,你难道也能这么干吗?显然不可以。
因此,抛去我们随性的个人开发风格,学习一些团队软件开发过程中的科学模型,势必会为我们的职业生涯带来非常多的好处。
这就是“软件过程模型”的作用,它能够指引我们进行团队型的复杂软件开发。
1.瀑布模型
在所有的软件过程模型当中,最典型的当属“瀑布模型”了。
瀑布模型,顾名思义,就是将软件生命周期中的各项活动,按照一定的顺序连接起来,形如瀑布流水,最终得到软件产品。
![dd5c215f11a7b4394ee4dbf29d4fc21c.png](https://i-blog.csdnimg.cn/blog_migrate/6bfc4870dbad88688d98bfb14d644f54.jpeg)
如图所示,从软件的计划立项开始,通过之后进入软件的需求分析阶段,然后再进入设计阶段,接着再进入编码实现阶段,最后进行测试,然后发布运行、维护。
我们可以看到,在这个模型中,每一个阶段的输入都是上一个阶段的输出,而每一个阶段的输出又是下一个阶段的输入。这样子结构化的过程有利于软件开发人员管理整个项目的进度,亦能够使整个项目平稳地向前推进。
但它却有一个很令人头疼的弊端,就是——向前一段回溯非常难!
比如我在编码实现的阶段中,突然想要对软件的某个需求进行变更,那么这就意味着我必须要停下手头所有的编码工作,转回需求分析的阶段,重新调整需求后再进行重新的编码,这样的成本实在是太大了。
就好比是我造一台车,车身、车顶、底盘等等东西都已经造好了,结果这时客户突然跑过来跟我说,他改变主意了,想要一台敞篷车,那我就得把这造好的一切全都打回原形,重新按照客户的新需求来进行设计。更有甚者,客户可能会在我已经费力造完车后,重新告诉我他的新需求,以至于我的整个开发流程全部打了水漂。
这就是瀑布模型的利弊,它既有利于开发过程的稳步推进,却又无法适应客户变化的需求来进行迭代更新。
2.增量模型
因此,在瀑布模型的基础之上,增量模型诞生了。
![272941307554217e2c743681dd5a95d1.png](https://i-blog.csdnimg.cn/blog_migrate/c5cdced7d8d8b217ad05b2fa9e808f5c.jpeg)
增量模型的意思就是,我先实现产品的核心功能,也就是给产品赋予第1个增量(从0到核心功能),然后交付给客户。客户如果还有其他的需求,再反馈给我,我再根据客户的新需求来给产品增添新的增量(从核心功能到更多的功能)
比如依然是造车的这个例子,我先把车的底盘、轮胎、方向盘、座椅、动力装置给做了,毕竟不管是什么车,都需要这些装置才能够跑起来,然后,我们把这个略显寒酸的破车交付给客户——虽然磕碜,但它起码是一台能跑的车了。然后,如果客户有其他的需求,比如需要更酷炫的外观,比如需要是敞篷的,比如需要更快的动力装置,我们再根据这些需求给产品赋予新的增量,以此来实现对客户需求的满足。
这就解决了瀑布模型中,无法对客户变化的需求进行迭代更新的问题了。而增量模型里,每一个增量的实现,都是依靠着瀑布模型来完成的,亦即每一个增量都要经历从计划立项,到需求分析,最后到运行维护的这么一个线性过程,因此我们可以把增量模型,看成是一个瀑布模型的变型。
3.快速原型模型
与增量模型中,先打造出产品的核心功能类似,快速原型模型是在进行整体的软件开发之前,先打造出一个可运行的软件原型,供客户参考,然后得到用户的反馈后,再进行原型修改,并最终根据原型来搭建一个完整的产品。
比如还是造车,我可以先搭一个汽车模型,然后给客户看,问他这个模型满不满足他的要求。在得到客户的修改意见后,我们再根据客户的反馈进行原型的修改,并最终在得到客户肯定后,根据原型的设计来实现真正的产品。
不同于增量模型的是,在增量模型中,第一个增量,也就是产品的核心功能,它往往也是正式产品中的可拆解的一部分,而原型却并不一定如此。
比如造车,在增量模型中,我首先给客户的是一辆只有车架子、车轱辘和方向盘的破车,但这些组成部分即使在我造好了整台车后,依然是车上的一部分。而在快速原型模型中,我首先拿给客户的只是一个汽车模型,它未来也不可能会成为我正式产品的一部分,因此这和增量模型并不完全相同,只是原理上有些类似罢了。
我个人认为,快速原型模型是一个非常灵活的模型,哪怕是在现如今的开发环境中,想必应该也会有一席之地的吧,纵使现在已经有了诸如敏捷开发这样的更为先进的软件过程模型,但它怎么说,也比瀑布模型要强不少了吧!
4.螺旋模型
真的,讲实话,这个模型我自己都不太想赘述过多。
![23323a830a51e4db7b4fdf12b321f576.png](https://i-blog.csdnimg.cn/blog_migrate/ec355108ad005835c48badffb21b1d0e.jpeg)
因为是一个面向风险的迭代模型,以至于它会把整个软件开发周期拉的特~~~~别长,凭我现在的经验是无法想象它会在何种工作场合,何种软件项目中被采取的,毕竟现在的互联网环境对于速度、效率的要求还是蛮高的——可能以后工作上遇到了才能有体会吧。
这个模型的过程如图所示,自行体会,我就不说啥了,嘻嘻(#^.^#)