软件工程的定义和由来
软件工程一直缺乏一个统一的定义,在《计算机科学技术百科全书中》的定义如下:软件工程是应用计算机科学、数学、逻辑学以及管理科学等原理,开发软件的过程。
由来:为解决软件危机提出了软件工程的概念。
软件工程过程(PDCA):计划(Plan)、执行(Do)、检查(Check)、处理(Action)
软件过程模型
一、瀑布模型
特点:因果关系紧密相连,前一个阶段工作的输出结果是后一个阶段工作的输入。每个阶段都是在前一阶段的基础上进行。
优点:有利于人员的组织管理;有利于软件开发方法和工具的研究。
缺点:软件需求的完整性、正确性等很难去定;需要经过长时间才能看到结果;每个阶段一次性的解决该阶段所有问题,这是不现实的。
二、原型化模型
原型化模型又被称为快速模型,弥补了瀑布模型的缺点(结果长时间才能看到结果)。
原型化模型分为两个阶段:
1. 原型开发阶段:根据用户的需求,快速开发一个原型,原型应包括目标系统的关
键问题和大致面貌,全部或部分功能、性能等。
2. 目标软件开发阶段 :针对用户对原型的反馈进行修改完善,确认软件系统的需
求并达到一致的理解,进一步开发实际系统。
根据原型模型后续的演变分为:
1. 抛弃型原型:仅作为需求确认的手段,需求确认后不再使用,重新开发目标软
2. 演化式模型:在需求确认后,不断补充和完善原型,最终成为一个完整的产品
三、螺旋模型
螺旋模型由以原型化模型为基础,结合瀑布模型,同时引入了风险分析。
螺旋模型的四个阶段:
1. 目标设定阶段:定义和确定下一个阶段的专门目标
2. 风险分析阶段:对可选方案进行风险识别和详细分析,制定解决方法,采取有效的措
施避免风险
3. 开发和有效性验证:系统开发和验证
4. 评审:对项目进行评审,以确定是否进入下一螺旋线
四、V模型
V模型是测试驱动模型,将系统的测试开始时间提前。
需求分析阶段:完成验收测试和系统测试计划
概要设计阶段:完成集成测试计划
详细设计阶段:完成单元测试计划
五、敏捷模型
敏捷型方法是适应性的,而不是预设性的;是面向人的(以人为本),不是面向过程的,迭代增量式的开发。
敏捷方法:
1. 极限编程(XP):价值观是简单、朴素、沟通、勇气
2. 水晶系列方法:目的是发展一种提倡机动性的方法,Crystal家族实际上是一组结果证明、对不同类型项目非常有效的敏捷过程,可以根据项目和环境选择最后是的项目成员
3. SCRUM:侧重于项目管理。人员分为:产品负责人(PO)、敏捷大师(scrum matser)、开发人员(developer)。使用backlog管理产品需求,从backlog中挑选需求进入sprint backlog并在sprint结束前完成。
4. 特征驱动方法(FDD):三个要素:人、过程、技术;六种角色:项目经理、首席架构设计师、开发经理、主程序员、程序员、领域专家
5. 开放式源码:开发人员距离远,分布在不同地方
6. ASD方法:核心:猜测、合作、学习
7. 动态系统开发方法:以业务为核心
六、统一过程模型(UP/RUP)
4个连续阶段:
1. 初始阶段:定义最终产品试图和业务模型;确定系统范围
2. 细化阶段:设计和确定系统的体系结构,定制工作计划和资源要求
3. 构造阶段:构造产品并继续演进需求、体系结构、进化直至产品的交付
4. 移交阶段:把产品已交给用户
9个核心工作流:
6个业务工作流:业务建模、需求、分析和设计、开发、测试、部署
3个管理工作流:项目管理、环境、配置与变更管理
七、净室软件工程:
净室软件工程室一种应用数学与统计学理论以经济的方式生产高质量软件的工程技术。
其理论基础是函数理论和抽样理论。
哲学思想:第一次正确地书写代码增量,并在测试前验证它们的正确性,来避免对成本
很高的错误消除过程的依赖。要求在规约和设计中消除错误,强调正确性
验证而不是软件测试
技术手段:
1. 统计过程控制下的增量式开发
2. 基于函数的规范与设计:盒子结构;行为视图(黑盒),有限状态机视图(状态
盒),过程视图(白盒)
3. 正确性验证:是净室软件工程的核心
4. 统计测试和软件认证:总体太大时必须采取抽样的方式
缺点:
1. 太理论化,其正确性验证的步骤比较困难且耗时,知识成本高
2. 不进行传统的模块测试是不现实的
3. 脱胎于传统软件工程,不可避免带有传统软件工程的一些弊端