在软件工程的开发过程中我们需要一个宏观的指导思想和全局性框架。软件过程模型应运而生,但是,需要指出的是,这些模型并不是某种必须要遵循的标准!它们只是对软件开发过程的一种抽象,在实际使用中,我们还需要进行适当的裁剪和组合。
一:宏观导图
导图的思路:指导思想“懒人思想”(将多变成少),整个开发过程的模型其实说是有7个,甚至更多。但是无非就是两大类,传统和现代。再根据各自的特点,在传统里面分了基本类型和混合型=瀑布+原型
二、聊聊细节
1、瀑布模型:(最早提出,又称软件生命周期模型)
优点:
A、历时长、应用广、广为开发者熟知,有着非常成熟和丰富的开发方法与支撑工具
B、结构简明,每个阶段都有文档及审查,能及早改正错误
C、顺序性、依赖性强,强调需求分析的重要性
缺点:
A、不灵活,难以响应用户的需求变化
B、错误修改代价大
C、实现晚(系统原型与用户见面晚)
适用范围:需求明确,且后期变化小。
2、原型模型:=(瀑布+局部迭代)
优点:
A、沟通多、后期变更少
B、满意度高
C、与用户见面快
缺点:
A、开发过程不可见
B、系统结构差
C、技术、工具非主流
D、成本高
适用范围:中小型系统,需求不明确
3、增量模型=(瀑布+原型)
优点:
A、人员分配灵活
B、风险小,总是有增量可以提交给用户
C、关键重要的功能测试次数多
D、能稳住客户
E、有早期增量的开发经验可借鉴
缺点:
A、对软件体系结构要求高(要求系统结构具有开放性)
B、缺乏整体性,容易变成边做边改。
适用范围:需求模糊,且多变
4、螺旋模型=(瀑布+原型+风险分析)
优点:
A、瀑布+原型
B、重视风险分析
C、安全性好
缺点:
A、对于开发者风险分析能力的要求非常高
B、迭代次数多,成本过高
C、提交时间延迟
D、应用范围小
适用范围:大型,复杂,高风险的系统开发
小结:
以上都是传统的开发方法,比较成熟,应用较广泛。而且一个共同的特点是:每个里面都会有结构化的开发思想在里面,都有瀑布模型的一些特点,都可以看做是对瀑布的一个改造和升级。
比较:增量模型 PK 螺旋模型
相同点:都以原型或初始子集为基础,通过演化得到最终产品
不同点:
A、计划性:螺旋先定义大部分需求,计划性强;增量先定义少部分,相比之更灵活
B、迭代方式:螺旋属于过程级;增量属于活动级
C、提交内容:螺旋每次提交完整软件版本;增量是在上次基础提交新的一部分软件
5、喷泉模型
优点:
A、迭代(重复、演进)
B、无间隙(各阶段没有明确的界限),方便调错
C、各个阶段可以同时进行,缩短开发时间,效率高,节省成本
缺点:
A、需要投入大量人力
B、不利管理
C、文档审核难度大
适用范围:面向对象的大型复杂软件开发
6、形式化系统开发模型(类似瀑布)
优点:(三高)
A、可靠度高
B、正确性高
C、安全性高
缺点:
A、方法困难,需要特殊训练
B、人力、物力等资源耗费大!
C、难以描述系统交互
适用范围:对于安全性,可靠性要求高的系统。比如:银行等金融方面的系统
7、基于组件的系统开发模型(站在巨人的肩膀上!)
优点:
A、减少工作量
B、节省成本
C、提高质量
缺点:
A、修改需求以适应组件
B、进化升级常常无法控制
适用范围:通常用于与已有软件具有共同特性的系统或软件的开发;开发方能力有限,为减少创新成本而进行的微创新开发。
三、总结
一共七种模型,看似很多,看似毫无联系,但是一总结就发现。其实就两种思路,一种是结构化的思想,一层一层,自顶向下,典型就是瀑布模型,后来的原型、增量、螺旋也都是对瀑布的升级改造。原型是为了解决瀑布的一些缺点而产生,增量和螺旋则综合了原型以及瀑布的优点。值得一提的是形式化开发,但说到底其实也是瀑布的变型而已。另一种就是:面向对象的思路,比如:基于组件的开发,具有高复用性!喷泉模型的开发,为了解决各个阶段依赖性,更好描述现实世界复杂关系而产生。
至于选哪个好?我送你一句话“一切从实际出发,实事求是,具体问题具体分析。(因为变是永远不变的,这是矛盾的特殊性使然。)