导图社区 软件工程知识体系大纲
软件工程知识大纲。研究用工程化方法构建和维护有效的、实用的和高质量的软件的软件工程,需要了解软件危机、软件生命周期、软件项目管理等基本知识,需要了解软件过程模型和一些方法学,例如软件工程方法学、软件生命周期方法学、面向对象方法及一些形式化说明技术。大纲已经将软件工程重要知识点进行了梳理,可供参考学习。
编辑于2020-02-16 01:42:49软件工程
书名:软件工程导论(第6版) 编著:张海藩 牟永敏 ISBN 978-7-302-33098-1
概述
软件危机
定义
在计算机软件的开发和维护过程中所遇到的一系列严重问题
典型表现
对软件开发成本和进度的估计常常很不准确
用户对“已完成的”软件系统不满意的现象经常发生
软件产品的质量往往靠不住
软件常常是不可维护的
软件通常没有适当的文档资料
软件成本在计算机系统总成本中所占的比例逐年上升
软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势
产生原因
与软件本身的特点有关
和软件开发与维护的方法不准确有关
软件工程
定义
1993年IEEE给出的定义:软件工程是:对象1把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;对象2研究对象1提到的途径
基本原理
用分阶段的生命周期计划严格管理
坚持进行阶段评审
实行严格的产品控制
采用现代程序设计技术
结果应能清楚地审查
开发小组的人员应该少而精
承认不断改进软件工程实践的必要性
本质特性
软件工程关注于大型程序的构造
软件工程的中心课题是控制复杂性
软件经常变化
开发软件的效率非常重要
和谐地合作是开发软件的关键
软件必须有效地支持它的用户
在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品
软件生命周期
问题定义
可行性研究
需求分析
总体设计
详细设计
编码和单元测试
综合测试
软件维护
软件过程模型
瀑布模型
特点
阶段间具有顺序性和依赖性
推迟实现的观点
质量保证的观点
喷泉模型
增量模型
快速原型模型
螺旋模型
Rational统一过程
微软过程
敏捷过程与极限编程
……
软件工程方法学
最广泛的两种
传统方法学
面向对象方法学
三要素
方法
工具
过程
简写含义
CAD:计算机辅助设计
CAM:计算机辅助制造
CAI:计算机辅助教学
CASE:计算机辅助软件工程
软件生命周期方法学(也称为传统方法学)
软件定义
问题定义
必须回答的关键问题是:“要解决的问题是什么?”
可行性研究
目的
用最小的代价在尽可能短的时间内确定问题能否解决(确定问题是否值得解决,对于上一阶段的问题是否有行得通的解决办法)
任务
进行过程
使用工具
数据流图
定义
是一种图形化技术,描绘信息流和数据从输入移动到输出的过程中所经受的变换。
4种基本符号
正方形(或立方体)
表示数据的源点或终点
圆角矩形(或圆形)
表示变换数据的处理
开口矩形(或两条平行横线)
代表数据存储
箭头
数据流
掌握画法
系统流程图
数据字典
需求分析
任务
确定对系统的综合要求
分析系统的数据要求
导出系统的逻辑模型
修正系统开发计划
使用工具
实体-联系图(E-R图)
状态转换图
层次方框图
Warnier图
IPO图
与用户沟通获取需求的方法
访谈
面向数据流自顶向下求精
简易的应用规格说明技术
快速建立软件模型
分析建模
数据模型
对应:实体-联系图
数据对象
属性
联系
功能模型
对应:数据流图
行为模型
对应:状态转换图
验证软件需求
一致性
完整性
现实性
有效性
软件开发
总体设计
基本目的
确定系统具体实现方案,回答“系统该如何实现”这个问题
设计软件的结构
设计过程
设计原理
模块化
把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求
抽象
逐步求精
信息隐藏和局部化
模块独立
耦合:低
内聚:高
启发规则
描绘软件结构的图形工具
层次图和HIPO图
结构图
面向数据流的设计方法
耦合与内聚
耦合
非直接耦合
数据耦合
控制耦合
特征耦合
内容耦合
内聚
功能内聚
顺序内聚
通信内聚
过程内聚
时间内聚
逻辑内聚
偶然内聚
详细设计
根本目标
过程设计工具
程序流程图
盒图
PAD图
N-S图
判定表
判定树
过程设计语言PDL
实现
编码
测试
目的
准则
所有测试都应该能追溯到用户需求
应该远在测试开始之前就制定出测试计划
把Pareto原理应用到软件测试中
应该从“小规模”测试开始,并逐步进行“大规模”测试
穷举测试是不可能的
为了达到最佳的测试效果,应该由独立的第三方从事测试工作
测试方法
黑盒测试
白盒测试
维护
软件维护的定义
在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程
维护分类
完善性维护
改正性维护
适应性维护
其他维护活动
软件维护的特点
维护的代价高昂
维护的问题很多
结构化维护与非结构化维护差别较大
软件维护过程
建立一个维护组织
确定维护报告和评价的过程
为每个维护要求规定一个标准化的事件序列(维护的事件流)
保存维护记录(建立一个适用于维护活动的记录保管过程)
评价维护活动(规定复审标准)
软件的可维护性
定性地定义
维护人员理解、改正、改动或改进这个软件的难易程度
决定软件可维护性的因素
可理解性
可测试性
可修改性
可移植性
可重用性
文档
用户文档
系统文档
可维护性复审
预防性维护
软件再工程过程
库存目录分析
文档重构
逆向工程
代码重构
数据重构
正向工程
形式化说明技术
面向对象方法
面向对象方法学引论
概述
OO=objects+classes+inheritance+communication with messages
要点
类
封装性
继承
用消息通信
优点
与人类习惯的思维方法一致
稳定性好
可重用性好
较易开发大型软件产品
可维护性好
面向对象的概念
对象
定义
是封装了数据结构及可以施加在这些数据结构上的操作的封装体
特点
以数据为中心
对象是主动的
实现了数据封装
本质上具有并行性
模块独立性好
类
实例
消息
方法
属性
封装
继承
多态性
重载
模型
对象模型
定义了做事情的实体
动态模型
明确规定什么时候做
功能模型
指明了系统应该“做什么”
3种模型之间的关系:对象模型为建立动态模型和功能模型,提供了实质性的框架
统一建模语言UML
定义:国际对象管理组织OMG批准的基于面向对象技术的标准建模语言
应用
使用UML的类图建立对象模型
使用UML的状态图建立动态模型
使用数据流图或UML的用例图建立功能模型
在UML中把用用例图建立起来的系统模型称为用例模型
面向对象分析
基本过程
寻找类与对象
识别结构
识别主题
定义属性
建立动态模型
建立功能模型
定义服务
分析不可能严格按照预定顺序进行,大型复杂系统的模型需要反复构造才能建成
关键
识别出问题域内的类与对象,并分析出它们相互间的关系,最终建立起问题域的简洁、精确、可理解的正确模型
面向对象建模得到的模型包含系统的3要素
静态结构(对象模型)
组成
主题层
类与对象层
结构层
属性层
服务层
建立模型的主要活动
找出类与对象
识别结构
识别主题
定义属性
定义服务
交互次序(动态模型)
数据变换(功能模型)
过程
需求陈述
建立对象模型
确定类与对象
确定关联
划分主题
确定属性
识别继承关系
反复修改
建立动态模型
建立功能模型
定义服务
面向对象设计
面向对象设计准则
模块化
抽象
信息隐藏
弱耦合
强内聚
可重用
启发规则
设计结果应该清晰易懂
一般-特殊结构的深度应适当
设计简单的类
使用简单的协议
使用简单的服务
把设计变动减至最小
软件重用
概述
软件重用层次
知识重用
方法和标准的重用
软件成分的重用
软件成分的重用级别
代码重用
设计结果重用
分析结果重用
典型的可重用软件成分
项目计划
成本估计
体系结构
需求模型和规格说明
设计
源代码
用户文档和技术文档
用户界面
数据
测试用例
类构件
可重用软构件应具备的特点
模块独立性强
具有高度可塑性
接口清晰、简明、可靠
类构件的重用方式
实例重用
继承重用
多态重用
软件重用的效益
质量
生产率
成本
系统分解
子系统之间的两种交互方式
客户-供应商关系
平等伙伴关系
组织系统的两种方案
层次组织
块状组织
设计系统的拓扑结构
设计问题域子系统
调整需求
重用已有的类
把问题域组合在一起
增添一般化类以建立协议
调整继承层次
设计人机交互子系统
分类用户
描述用户
设计命令层次
设计人机交互类
设计任务管理子系统
设计数据管理子系统
设计类中的服务
设计关联
设计优化
面向对象实现
面向对象程序设计语言
优点
一致性的表示方法
可重用性
可维护性
技术特点
支持类与对象概念的机制
实现整体-部分(即聚集)结构的机制
实现一般-特殊(即泛化)结构的机制
实现属性和服务的机制
类型检查
类库
效率
持久保存对象
参数化类
开发环境
选择
将来能否占主导地位
可重用性
类库和开发环境
其他因素
程序设计风格
提高可重用性
提高方法的内聚
减少方法的规模
保持方法的一致性
把策略与实现分开
全面覆盖
尽量不使用全局信息
利用继承机制
提高可扩充性
封装实现策略
不要用一个方法遍历多条关联链
避免使用多分支语句
精心确定公有方法
提高健壮性
预防用户的操作错误
检查参数的合法性
不要预先确定限制条件
先测试后优化
测试策略
设计测试用例
软件项目管理
估算软件规模
代码行技术
功能点技术
信息域特性
估算功能点的步骤
计算未调整功能点数UFP
计算技术复杂性因子TCF
计算功能点数FP
工作量估算
静态单变量模型
面向KLOC的模型
面向FP的估算模型
动态单变量模型
COCOMO2模型
进度计划
估算开发时间
Gantt图
工程网络
估计过程进度
关键路径
机动时间
人员组织
民主制程序员组
主程序员组
现代程序员组
质量保证
软件质量
产品修改
可理解性
可维修性
灵活性
可测试性
产品转移
可移植性
可再用性
互运行性
产品运行
正确性
健壮性
效率
完整性
可用性
风险
软件质量保证措施
技术复审的必要性
走查
审查
程序正确性证明
软件配置管理
软件配置
软件配置项
基线
软件配置管理过程
标识软件配置中的对象
版本控制
变化控制
配置审计
状态报告
能力成熟度模型
初始级
可重复级
已定义级
已管理级
优化级