软件工程整理
基于张海藩老师出版的《软件工程导论(第六版)》,简单整理软件工程各章知识。
第一章 软件工程学概述
1.1软件危机
1.1.1软件危机的介绍
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机包括下述两个方面:
- 如何开发软件,以满足软件日益增长的需求。
- 如何维护数量不断膨胀的已有软件。
软件危机主要有一下一些典型表现:
- 对软件开发成本和进度的估计常常不准确
- 用户对“已完成的”的软件系统不满意的现象时常发生
- 软件的质量往往靠不住
- 软件常常是不可维护的
- 软件通常没有适当的文档文件
- 软件成本在计算机系统总成本中所占的比例逐年上升
- 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势
1.1.2产生软件危机的原因
在软件开发和维护的过程中存在这么多严重问题,一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。
1.1.3消除软件危机的途径
为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。
1.2软件工程
1.2.1软件工程的介绍
1993年IEEE进一步给出了一个更全面更具体的意义:“软件工程是:①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也及时把软件工程应用于软件;②研究①中提到的途径。”
软件工程具有以下的本质特征:
- 软件工程关注于大型程序的构造
- 软件工程的中心课题是控制复杂性
- 软件经常变化
- 开发软件的效率非常重要
- 和谐地合作是开发软件的关键
- 软件必须有效地支持他的用户
- 在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品
1.2.2软件工程的基本原理
七条基本原理:
- 用分阶段的生命周期计划严格管理
- 坚持进行阶段评审
- 实行严格的产品控制
- 采用现代程序设计技术
- 结果应该能清楚地审查
- 开发小组的人员应该少而精
- 承认不断改进软件工程实际的必要性
1.2.3软件工程方法学
软件工程包括技术和管理两个方面的内容,是技术与管理紧密结合所形成的工程学科。
软件工程方法学包含三要素:方法、工具和过程。
目前最广泛 的软件工程方法学,分别是传统法学和面向对象方法学。
1.3软件生命周期
软件生命周期由软件定义、软件开发和运行维护3个时期组成。(三时期)
每个时期又进一步划分成若干阶段(八阶段):
- 软件定义时期划分成3个阶段,即问题定义、可行性研究和需求分析。
- 软件开发时期划分成4个阶段,即总体设计、详细设计、编码和单元测试、综合测试。
- 对维护时期不再进一步划分阶段,但是每一次维护活动本质上都是一次压缩和简化了的定义和开发的过程。(软件维护)
1.4软件过程
生命周期模型规定了把规定生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也成过程模型。
1.4.1瀑布模型
传统方法学
特点:
-
阶段间具有顺序性和依赖性(一定线性)
①必须等前一段的工作完成后,才能开始后一阶段的工作。②前一阶段的输出文档就是后一阶段的输入文档。 -
推迟实现的观点(贡献:首次提出)
-
质量保证的观点
①每个阶段都必须完成规定的文档。②每个阶段结束前都要对所完成的文档进行评审。
总结:文档驱动。
优点:瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型
缺点:
- 用户很难清晰表达出需求
- 程序员也不能一下理解
- 文档过多
1.4.2快速原型模型
循环
特点:
- 快速开发工具
- 循环
- 低成本
1.4.3增量模型
特点:
- 在前面增量的基础上开发后面的增量
- 每个增量的开发可用瀑布或快速模型
- 迭代的思路
1.4.4螺旋模型
特点:
- 瀑布模型+快速原型模型+风险分析
- 迭代过程
优点:
- 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标。
- 减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险。
- 在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。
风险驱动即时优点的主要来源,也可能是弱点。
1.4.5喷泉模型
面向对象开发学
“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。
1.4.6Rational统一过程
面向对象开发学
1.4.7敏捷过程与极限编程
-
敏捷过程
敏捷宣言:
①个体和交互胜过过程和工具
②可以工作的软件胜过面面俱到的文档
③客户合作胜过合同谈判
④响应变化胜过遵循计划 -
极限编程
1.4.8微软过程
1.5小结
第二章 可行性研究
2.1可行性研究
目的:是否值得去解决;是否能够解决。
实质:进行一次达达压缩化简了的系统分析和设计的过程,也就是在较高层次上以抽象的方式进行的系统分析和设计的过程。
方面:
- 技术可行性
- 经济可行性
- 操作可行性
- 法律、社会效益等更广泛的方面
2.2可行性研究过程
步骤:
- 复查系统规模和目标
- 研究目前正在使用的系统
- 导出新系统的高层逻辑模型
- 进一步定义问题
- 导出和评价选择的解法
- 推荐行动方针
- 草拟开发
- 书写文档提交审查
2.3系统流程图
物理数据图
描绘了组成系统的主要物理元素以及信息在这些元素间流动和处理的情况。(而不是对数据分析进行加工处理的控制过程)
2.4数据流图
基本逻辑功能
功能模型的基础
绘制方法:由内向外,自顶向下,分层绘制,逐步求精。
2.5数据字典
名称,别名,描述,定义,位置
2.6成本/效益分析
2.6.1成本估计
- 代码行技术
- 任务分解技术
- 自动估计成本技术
2.6.2成本/效益分析的方法
- 货币的时间价值
- 投资回收期
- 纯收入
- 投资回收率
2.7小结
第三章 需求分析
常用方法有面向数据流的结构化分析方法,面向数据结构的分析方法,面向对象的分析方法。
3.1需求分析的任务
功能需求,性能需求,可靠性和可用性需求,出错处理需求,接口需求,约束,逆向需求,将来可能提出的需求
3.2与用户沟通获取需求的方法
3.2.1访谈
不理想
正式和非正式
3.2.2面向数据流自顶向下求精
不理想
结构化分析方法
3.2.3简易的应用规格说明技术
主流