软件工程学概述
软件危机
定义:
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
主要典型表现:
(此处概述,日后复习看书)
1:成本进度估计不准确
2:用户对软件系统不满意
3:质量靠不住
4:没有适当的文档资料
5:成本所占比例上升
6:软件不可维护
7:开发生成和应用更新的速度不匹配
产生原因
软件本身的特点,软件维护的方法即人为因素
软件生命周期
软件本身的特点,软件维护的方法即人为因素
软件定义
计算机程序、方法、规则、相关的文档资料以及在计算机上运行时所必须的数据。
软件工程
软件工程的定义
①早期定义:软件工程就是为了经济地获得可靠的且能在实际机器上有效运行的软件,而建立和使用完善的工程原理。
②把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件,以及研究以上提到的途径。
本质特性
- 软件工程关注于大型程序的构造
- 软件工程的中心课题是控制复杂性
- 软件经常变化
- 开发软件的效率非常重要
- 和谐的合作是开发软件的关键
- 软件必须有效地支持它的用户
基本原理
- 用分阶段的生命周期计划严格管理
- 坚持进行阶段评审
- 实行严格的产品控制
- 采用现代程序设计技术
- 结果应能清楚地审查
- 开发小组的人员应该少而精
- 承认不断改进软件工程实践的必要性
软件生命周期
定义
软件生命周期由软件定义、软件开发和运行维护三个时期组成
基本任务
- 软件定义
1.1问题定义
1.2可行性研究
1.3需求分析
2.软件开发
2.4总体设计
2.5详细设计
2.6编码和单元测试
2.7综合测试
3.运行维护
3.8软件维护
瀑布模型
起源
1970年温斯顿·罗伊斯(Winston Royce)提出了著名的“瀑布模型”,直到80年代早期,它一直是唯一被广泛采用的软件开发模型。
###核心思想:
是按工序将问题化简,将功能的实现与设计分开,便于分工协作
采用结构化的分析与设计方法将逻辑实现与物理实现分开
将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序
过程 :
是从上一项活动接收该项活动的工作对象作为输入,利用这一输入实施该项活动应完成的内容给出该项活动的工作成果,并作为输出传给下一项活动。同时评审该项活动的实施,若确认,则继续下一项活动;否则返回前面,甚至更前面的活动。对于经常变化的项目而言,瀑布模型毫无价值。
优点:
1:为项目提供了按阶段划分的检查点
2:当前一阶段完成后,只需要去关注后续阶段
3:可在迭代模型中应用瀑布模型,每次迭代产生一个可运行的的版本,同时增加更多功能
每次迭代必须经过质量和集成测试
4:提供了一个模板,使分析,设计,编码,测试和支持的方法在该模板下有一个共同的指导
缺点:
1: 阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量
2:线性开发模型,等到整个过程的末期才能见到开发成果,从而增加了开发风险
3:通过过多的强制完成日期和里程碑来追踪各个项目阶段
4:突出缺点是不适应用户需求的变化,文档驱动
5:早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果
使用:
是否能理解客户的需求以及在项目的进程中这些需求的变化程度
对于经常变化的需求,瀑布模型毫无价值。
线性开发:
当前活动接受上一项活动的工作结果,实施完成所需的工作内容。
当前活动的工作结果需要进行验证,验证通过将结果作为下一项活动的输入,否则返回修改
快速原型模型
主要思想:
快速建立能够反映用户主要需求的原型系统,用户在计算机上使用,通过事件让用户了解未来目标系统的概貌,以判断那功能是否符合需要,哪些方面需要改进,用户提出意见 ,开发人员快速修改原型系统,然后用户再试用,反复改进,最终建立完全符合用户需求的新系统
目的:
增进软件开发人员和用户对系统服务的理解
建立原型方法:
1:减少系统开销,采用功能很强的高级语言实现原型系统
优点:在各种不同类型的计算机上运行,暂不考虑速度空间等性能方面的要求,不考虑错误恢复和处理
2:原型界面要设计的简单易学
增量模型
起源:
是瀑布模型的顺序特征和快速原型法的迭代特征相结合的产物
过程:
是”逐渐“开发出来的,把软件作为一系列的增量构件来设计,编码,组装,测试
每个构件由多个相互作用的模型构成,并且完成特定的功能
开发出一部分,向用户展示一部分,用户及早看到部分软件,及早发现问题
不同的构件并行构建,有可能加快工程,必须密切地监控整个开发过程
使用:
具有较大的灵活性,适合于软件要求不明确,设计方案有一定风险的软件项目
螺旋模型
(风险驱动)
加入了风险分析
基本思想:
使用原型及其他方法来尽量降低风险
螺旋周期:
4个步骤:
1:首先,确定该阶段的目标,选择方案并设定这些方案的约束条件
2:其次,从风险角度分析,评估方案,通常用建造原型的方法来消除风险
3:如果成功地消除了所有风险,实施本周期的软件开发
4:评价该阶段的开发工作,并计划下一阶段的工作
使用:
适合于大规模高风险的软件项目开发
优势:
风险驱动,使用该模型需要有相当丰富的风险评估经验和这方面专业的技术
喷泉模型
比较典型的面向对象软件开发模型,用户需求为动力,以对象驱动的模型,适合面向对象的开发方法
克服了瀑布模型不支持软件重用和多项开发活动集成的局限性
具有迭代性和无间隙性
基于构件的开发模型
将事物封装成包含数据和加工该数据操作的对象,并抽象成类
经过一定的设计和实现的类可称为构件,可以在不同的软件系统中服用,在某个领域具有一定的通用性
利用预先封装的软件构件来构造应用软件系统,提高软件的重用性和可靠性
统一过程(RUP)模型
基于面向对象统一建模语言UML的一种面向对象的软件过程模型
定义:
是一个通用的过程框架,可以用于各种不同模型的软件系统,各种不同的应用领域和不同规模的项目
特点:
由用例驱动,构件为中心,采用迭代和增量的开发策略,生存周期是一个二维的软件开发模型
最佳实践:
- 迭代式开发
- 管理需求
- 使用基于构件的体系结构
- 可视化建模
- 验证软件质量
- 控制软件变更
基于形式化的开发模型
###变化模型:
结合形式化软件开发方法和程序自动生成技术的一种软件开发模型
采用严格的,数学的体系表示软件规格说明,从软件需求形式化说明开始,经过一系列变化得到目标程序
净室模型:
形式化的增量开发模型
###基本思想
力求在分析和设计阶段就消除缺陷,确保正常,然后在无错误或”净室“的状态下实现软件的开发
可行性研究
任务:
不是解决问题,而是确定问题是否值得去解决
从技术可行性,经济可行性,操作可行性 去研究
研究需要的时间长短取决于工程的规模,一般来说,可行性研究的成本只是预期的工程总成本5%到10%