1.软件工程概述
1.2 计算机软件概述
软件分类:
- 软件规模
- 工作方式
- 服务对象
1.4 软件生命周期
- 问题定义
- 可行性研究
- 项目计划
- 需求分析
- 概要设计
- 详细设计
- 编码
- 测试
- 交付与运维
1.5 软件开发模型
- 边做边改:直接根据功能编码,忽略需求分析
- 瀑布(线性):先逻辑设计后物理设计的线性顺序,固定起始需求
- 需求
- 设计
- 编码
- 测试
- 交付
- 原型:先给demo
- 需求
- 原型
- 评估
- 调整
- 增量(迭代):多重瀑布+快速原型,迭代周期固定,专注功能实现
- 需求
- 设计
- 编码
- 测试
- 交付
- 需求。。。
- 螺旋:多重瀑布+快速原型,周期长度取决于风险评估
- 制定计划
- 风险分析
- 实现工程
- 用户评估
2.项目计划
2.2 可行性研究
构造性成本模型--基础COCOMO公式:
- 需要工作量--E=ab(KLOC)^bb,人/月
- 开发进度--Tdev=(LOC)/E,行/人/月
- 开发时间--D=cb*(E)^db,月
- 需要人数--P=E/D,人
经济可行性--费用估计:
- 开发成本=开发工作量*开发费用
- 开发工作量=Aστ
- A估算工作量经验值
- σ风险系数:1-1.5
- τ复用系数:0.25-1
- 开发费用=(P+Q+R)ST
- P人头费=B*1.476
- B平均工资
- Q办公费=B/3
- R税收及利润=B/3
- S管理系数:1-1.2
- T优质系数:[1.05,1.1,1.15,1.2]
3.需求分析
3.2 数据流图DFD
3.3 数据字典DD
3.4 加工逻辑描述工具
-
结构化语言
-
判定表:条件+动作
-
判定树
-
IPO图
4.面向对象方法(OOA)
4.2 统一建模语言UML
4.3 用例模型
组成: actor(角色)+usecase(动作/功能)
5.概要设计
5.1 软件开发流程概念区分
具体描述 | |
---|---|
软件开发 | 需求分析(DFD/数据字典)、概要-详细设计、编码实现 |
软件开发模型 | 瀑布、快速原型、增量(迭代)、螺旋 |
软件设计 | 概要设计、详细设计 |
软件设计模式 | |
框架、架构模式 | 特定软件可复用设计的一组相互协作类 |
5.2 软件结构设计
- 模块化
- 软件结构风格:各模块的组织情况,最好独立性高(低耦合、高内聚)
- 耦合与内聚
耦合 | 具体描述 | 内聚 | 具体描述 |
---|---|---|---|
非直接耦合 | 没有信息传递 | 功能内聚 | 各成分结合在一起完成单一功能 |
数据耦合 | 传递简单参数 | 顺序内聚 | 该成分的输出是下一成分的输入 |
特征耦合 | 传递复合参数(数据结构) | 通信内聚 | 成分的输入/输出相同 |
控制耦合 | 传递flag(控制信息) | 过程内聚 | 成分有先后次序 |
外部耦合 | 访问同一全局变量 | 时间内聚 | 成分在同一时刻执行 |
公共耦合 | 访问同一全局数据 | 逻辑内聚 | 成分逻辑功能相似/相同(avg/max),可能有flag控制选择 |
内容耦合 | 两模块之间代码有交互 | 偶然内聚 | 模块内成分在功能上无关 |
5.3 图形工具
-
层次图(H图)
-
HIPO图:带编号的H图+描绘模块处理过程的IPO图
-
结构图(Structure chart,SC):有数据的传入传出
5.4 结构化设计方法(Structure Design)
- 概念与步骤
基于数据流的系统分析、设计方法:SA、SD(系统逻辑模型DFD->软件结构图HIPO/SC)
- 变换型DFD--变换映射(P69)
变换控制模块--数据随时间的推移而流动:
- 输入边界
- 变换中心:计算
- 输出边界
- 事务型DFD--事务映射
事务控制模块--以事务中心为核心:
- 输入
- 事务中心:扇出不同动作
- 调度通路
- 事务层
- 操作层
- 细节层
5.5 软件结构设计优化
- 改进结构,提倡模块独立:翁>塔>饼,观察耦合与内聚
- 模块规模适中
- 扇出(3-4)、扇入(the more the better)
- 控制域(自身+扇出的闭包)、作用域
- 接口简单化
6.详细设计
6.1 详细设计任务与内容
根据概要设计划分出的模块编码,给出明确的算法描述
6.2 详细设计工具
有图形、表格、语言三种工具,详细介绍三种图形工具
- 程序流程图
- N-S图(盒图)
- PAD图(问题分析图)
6.3 人机界面设计
7.面向对象方法(OOD)
7.1 面向对象的结构设计OOD
- 类图
找完系统的对象类之后,确定对象之间的关系:
- 关联关系(没有箭头则为双向访问,否则单向)
- 聚合/组合关系(类图中表示为空心/实心菱形)
- 依赖关系(表示“使用”语义,弱关系)
- 泛化关系 (表示父子类,是继承)
对象与接口之间的关系:
- 实现关系
- 静态结构模型
主题和子系统
- 面向对象的架构设计
架构模式种类:
- MVC(model/view/controller)--Spring
- MVP(presenter)
- MTV(template)
- ORM(object/relational/mapping)
- CBD(core/behavior/driver)
设计模式:
- 构建型
- 结构型
- 行为型
- 构件图
- 部署图
7.2 面向对象的详细设计
- 顺序图
- 协作图
- 状态图
- 活动图
7.3 UML双向工程
- 从UML模型生成代码的正向工程
- 从代码生成UML模型的逆向工程
9.测试
- 概述
软件测试对象:需求分析报告、概要设计报告、详细设计报告、源程序清单
- 测试方法
- 静态测试:代码复审
- 动态测试(机器测试):白盒(覆盖)、黑盒(等价有效类)
- 测试用例设计(12.10)
逻辑覆盖法(程序流程图) | 路径测试法(程序图) | 测试规则 |
---|---|---|
语句覆盖 | 点覆盖 | 每个语句(点)至少一次 |
判定覆盖 | 边覆盖 | 每个分支(边)至少一次,关注判断语句的复合条件 |
条件覆盖 | 关注判断语句每个单独条件 | |
判定/条件覆盖 | ||
条件组合覆盖 | ||
路径覆盖 | 每种通路都走(2*2) |