在每个阶段的末尾,都会有一个评审工作,并且强调工作的标准化,
但是瀑布模型有一个致命的缺点,导致项目往往不能完成:软件的需求往往难以把控
,尤其是项目初期,需求的不明确导致整个项目方向错误,而且需求改动难以满足,工作量巨大,导致软件项目的失败,导致瀑布模型难以满足软件的开发。
用户在初期很难确定需求(用户和人员之间有隔阂–>用户懂业务,开发人员懂技术)
原型法:先做出一个界面或者是一个简易的系统出来给用户,让他改需求针对需求不明确的情况,如果需求非常明确,可以用瀑布模型or其他模型
演化模型:原型不断升级最后演化为最终的产品
增量模型:原型法+瀑布模型
在我们做系统的时候先把用户的核心需求做出来,让开发周期大大缩短(周期是原来周期的%20左右)
然后逐步对其他增加功能进行开发,到最终完成所有的内容
优点:核心内容比较早的和用户进行了接触,每一次将项目交给用户区看的时候,都再一次对项目进行了审视,风险较小
特征:螺旋模型融合了多种模型,所以多个模型的特点,螺旋模型都具备
在用户需求不明确的情况下,原型法的优先级大于螺旋模型的优先级
V模型边设计,一遍编写测试文档,这样就可以减少开发时发生的错误
我们把各个阶段开发过程做成标准的构件,最后将构件进行组装就得到了最终需要的软件
特征:极大的提高了软件开发的复用性,使得软件开发的总时长降低,成本降低,还可以使软件的可靠性增加
一些我们以前在其他系统总进行开发的构件可以直接挪用过来,而这些构件已经经过了很长时间的验证,可靠性比较高
特点:
β测试:软件在用户环境里进行测试
α测试:开发环境里进行测试
在测试有问题的部分在下一个周期进行修正,统一过程经过多伦的循环迭代才产生最终的产品
敏捷开发方法的基本思想:减去没有必要的开发流程,减少开发人员的负担
一种轻量级的开发方法
敏捷开发方法是一个方法,而是多个方法的集合:
结构化方法(面向过程)
面向对象方法
1、业务需求:先分析当前业务、考虑功能、系统的大致功能
2、用户需求:询问相关业务的角色,进行沟通,根据反馈获取需求和相应的功能
3、系统需求:计算机化、能够开发的需求
系统需求:
QFD需求:
基本需求:必须完成的需求
期望需求:用户认为理所应当达到的需求
兴奋要求:锦上添花,超出客户期望(谨慎)
特点:
内聚指标:(尽可能高)
内聚程度最大的是功能内聚,最小的是巧合内聚
耦合指标:
内容耦合程度最高,非直接耦合程度最低
原则:
多扇入,少扇出:
被其他模块调用的多,而少调用其他模块(入度高、出度小)
三种模块结构
动态测试:利用到计算机进行测试
静态测试:纯人工测试
黑盒测试(内部结构未知)
白盒测试(内部结构已知)
有向图的环路复杂度公式:
V(G) = m-n+2
维护阶段是软件周期中时间最长的
可维护性:
维护类型:
CMMI是能力成熟度的集成
CMMI分为阶段式和连续式,对项目的评价、分类
混乱级
已管理级–>基本的管理
已定义级 -->隐形的知识转化为显性
定量管理级—>量化
优化级–>持续的优化
连续式
九大知识领域
时间管理
风险管理
项目风险:
项目没控制好,导致成本增加
技术风险:
新技术不成熟、旧技术太缓慢
商业风险:无法控制的风险(无法通过项目管理来控制)
(风险期望)