- 为什么需要软件工程?
- 由于软件危机的产生,为了解决软件危机;出现了软件工程
- 什么是软件危机?
- 软件开发进度难以控制
- 软件开发成本难以控制
- 软件功能难以满足客户需要
- 软件质量难以保证
- 软件难以维护
- 软件缺乏文档、资料
- 软件工程是指为了获得软件产品,在软件工具的支持下由软件工程师,所完成的一系列软件工程活动;主要包括以下四个方面
- P(PLAN):软件规格说明书;软件功能的运行时限制
- D(DO):软件开发;开发出满足规格说明的软件
- C(CHECK):软件确认;确认软件产品满足用户的需求
- A(ACTION):软件演进;软件不断改进,以满足客户需求
- 软件过程模型(软件生命周期模型)
- 瀑布模型
- 特点:因果关联,前一段工作的输出作为后一段工作的输入 ;每一段工作完成都伴随的一个里程碑(一组检查)
- 缺点:
- 需求无法确定,用户无法描述软件系统的需求
- 瀑布模型是一个严格串行化的过程,如果前期需求问题,将导致极大的财力、物力、人力的损失
- 瀑布模型的基本原则是,每个阶段一次性解决该阶段的事情,但是实际上这是不现实的
- 原型模型
- 特点:基于瀑布模型的缺点,提出了原型模型
- 原型模型包括两个阶段:
- 原型开发阶段:根据用户的需求定义,快速给出一个能够反映用户需求、关键问题的大致面貌的原型,展示目标系统的部分、全部功能
- 目标软件开发阶段:根据用户的反馈进行具体的细化完善,进一步开发实际系统
- 螺旋模型:
- 是软件生命周期模型与原型模型的结合
- 由四个步骤组成:
- 目标设定(确定需求,指定管理计划)
- 风险分析(对可选方案进行风险分析,并给出解决方法)
- 开发、有效性验证(开发软件产品)
- 评审(对当前阶段评估,是否进入下一个阶段)
- 敏捷模型:
- 为什么需要敏捷模型?
- 需求的快速变化、较短的交付周期与传统的开发流程不符合
- 特点:
- 适应性的,非预设性的;软件开发的困难一般来源于需求的难以确定,进而导致开发的不可预测;适应性的通过反馈机制对不可预测的过程进行控制
- 面向人的;强调人与人之间的信息交流
- 敏捷开发的核心思想:
- 适应性的而非预设性的
- 以人为本
- 迭代增量式的开发
- 敏捷开发的几总方法:
- 极限编程:严格的纪律保证开发的成功
- 水晶系列方法:与极限编程类似,但是采用较为宽松的纪律
- Scrum:对于系统流程骨架已经确定
- 特征驱动开发(FDD):分为项目经理,首席架构师,开发经理,主程序员,程序员,领域专家共 个角色
- 统一过程模型(RUP):
- 分为9个核心工作流:
- 业务建模->需求->分析设计->实现->测试->部署->配置变更管理->项目管理->环境
- 分为四个阶段
- 初始:定义最终产品试图,业务模型
- 细化:确定系统体系结构,以及资源分配
- 构建:持续推进需求,演变体系结构,直至产品提交
- 交付:将产品提交给用户
- 在每个阶段结束时,都有一个里程碑进行评估
- RUP的特点:
- 用例驱动
- 以软件体系结构为中心
- 迭代和增量式开发
- 软件能力成熟度模型(CMMI):
- 1.初始级(混乱的,能够完成产品交付,但是经费超出计划)
- 2.管理级(文档化,能够依据成本完成进度以及目标)
- 3.已定义级(企业根据自身的情况可以进行流程化、制度化)
- 4.量化管理级:对性能的可预测
- 5.优化级:不断地创新,改良技术