第一章 软件工程概述
一、软件四个本质特性:复杂性(软件创新的最大障碍) 、 一致性 、 可变性(演化性)、不可见性
二、软件产品 是 数据、程序、文档的集合
第二章 软件项目开发与管理
为什么要将软件开发过程分为多阶段
程序员个人设计、个人操作、小作坊式的开发过程,开发的软件可靠差,难以维护,无法满足快速发展的软件需求,因而产生软件危机。
软件开发过程的典型阶段
-
计划
-
需求分析
分析整理提炼客户需求,建立完整的需求模型,编写软件需求说明 -
软件设计
根据需求,确定软件体系结构,设计每个系统不见的实现算法、数据结构及接口 -
软件实现
将软件设计转换成程序代码 -
软件验证
检查和验证开发的系统是否符合客户期望 -
软件维护
系统投入使用后对其改进,适应不断变化的需求
- 适用场景:
- 软件项目较小
- 需求在项目开始前已被全面了解
- 需求在开发过程中不太可能发生重大变化
- 外部环境的不可控因素较少
- 优点
- 简单易懂易用快速
- 项目管理比较容易
- 可操作性强
- 缺点
- 难以快速响应用户需求变换
开发早期,用户难以清楚地确定所有需求,需求的错误很难在开发后期纠正 - 开发工作完全依赖说明文档开发者与用户缺乏沟通,不容易满足客户需求
- 可能造成重大损失
- 难以快速响应用户需求变换
- 适用场景:
-
增量过程模型
增量模型
1. 软件被作为一系列增量来开发,每一个增量都提交一个可操作的产品
2. 第一个增量是核心产品,满足基本需求
3. 客户使用上一个增量的提交物进行评价,制定下一个增量计划,说明需要增加的功能
4. 本质:以迭代方式运用瀑布模型
项目进度安排
-
分配工作量(分析设计、编码、测试)
-
定义 络图
-
分配时间
- 计算关键路径(持续时间最长的路径)
- 确定最终开始/结束时间
-
-
项目风险管理
第三章 软件需求工程
功能性需求
层次性:将业务需求转化为系统需求
非功能性需求
满足功能需求要满足的其他约束
产生不合格需求的原因
需求获取与建模
– 需求获取的手段
– 需求建模
-
基于场景的方法
-
基于类的方法
-
基于模式的方法
第四章 软件设计
软件工程开发方法与软件设计
-
软件工程开发方法
本质区别
面向过程的结构化系统=功能+数据
面向对象的系统=对象+消息-
传统开发方法
-
功能分解法
以系统提供的功能为中心来组织系统
-
结构化方法
结构化方法以功能分解和数据流为核心 ,但系统功能和数据极有可能发生变化
-
结构化分析(数据流法)
基本策略是跟踪数据流
研究数据在研究问题域中如何流动,在各个环节如何处理,得到的分析模型是数据流图。
主要模型元素是数据流、加工、文件及断点、外加处理说明和数据字典。 -
结构化设计
-
结构化编程
-
-
信息建模法
实体-关系法发展来,接近面向对象方法,但实体只有属性但没有操作
-
-
面向对象开发方法
-
基本概念
-
对象
-
类
-
继承
-
多态
-
消息
消息是实现对象间交互和协同的方法
-
-
-
-
软件设计
软件体系结构设计
-
要素
- 构件
- 结构体
- 约束
-
风格
-
数据流风格
-
以数据为中心
-
调用和返回
-
面向对象体系结构风格
-
层次体系结构
-
客户机-服务器CS
-
表示层:用户界面设计
-
三层cs体系结构:业务逻辑层
业务处理-程序设计
-
数据层:数据库设计
-
-
浏览器-服务器BS
-
CS+BS混合模式
-
-
类、数据建模与设计
-
CRC卡片分拣法-面向对象方法
-
DFD-结构化方法
-
数据流图DFD
-
主要元素
- 加工(数据处理)
- 数据存储
- 外部实体
- 数据流
-
类型
-
环境关联DFD图(顶层DFD)
-
系统内部DFD图
-
0层DFD
将顶层DFD图中的系统分解为若干个子系统,决定每个子系统间 的数据接口和活动关系,得到0层DFD图
-
底层DFD
针对0层DFD中的每一个子系统,对其继续分解得到细化的加工, 进而逐渐向下构造得到1层DFD、2层DFD、…、n层DFD,一直 到不能或不需再分解为止。 ? 最底层DFD中的加工称为“基本加工”
-
-
-
基本原则
- 数据不能在数据存储之间流动
- 数据不能在数据存储与外部实体之间流动
- 数据不能在外部实体之间流动
- 数据流是单向的
- 任何加工必须有输入和输出数据流
-
-
数据字典DD
-
结构化语言
-
判定表或判定树
-
实体联系图ER
-
状态转换图STD
-
行为建模设计
- 状态图
- 顺序图
- 协作图
- 活动图
物理建模与设计
第五章 软件编码、测试与质量保障
软件测试
-
目标:检验是否满足需求
-
单元测试
- 测试对象:软件设计的最小单元
- 一般由编写该单元的开发人员执行:检测代码功能是否正确
-
集成测试
-
将所有模块按总体设计的要求组装成系统进行测试
-
测试对象:模块间的接口
-
目的:找出模块接口的问题
-
方法
-
一次性集成方式
分别测试每个单元,再一次性将所有单 元组装在一起进行测试
-
渐增式继承方式
对某几个单元进行测试,然后将这些 单元逐步组装成较大的系统,在组装过程中边连接边测试
- 深度优先/广度优先
-
-
-
系统测试
白盒测试(结构测试)
透明:对程序所有内部逻辑路径进行测试
-
执行程序内部逻辑
- 逻辑覆盖法
-
逻辑覆盖
-
语句覆盖
每条可执行语句至少被执行一次
-
判定覆盖(分支覆盖)
不仅每个语句必须至少执行一次,而且每个判定的每个分支都至 少执行一次
-
条件覆盖
不仅每个语句至少执行一次,而且使判定表达式中的每个条件都 取到各种可能的结果
-
判定/条件覆盖
- 判定:同时覆盖所有分支
- 条件:包含所有判定条件
-
条件组合覆盖
每个判定表达式中条件的各种可能组合都至少出现一次
- 每个判定有4个组合,共8个
- 每个组合都要出现
-
-
控制结构测试
-
基本路径测试
计算过程设计结果的逻辑复杂度
并以该复杂度为指南 定义执行路径的基本集合-
程序流程图 →控制流图
-
一个流程语句中有多个条件判断时,应在控制流中拆分成多个判定节点
-
判定节点:产生分支的地方
-
区域:由边和节点封闭起来的
- 计算区域数时还有区域外的一部分
-
-
环复杂度
度量程序逻辑复杂度,用于计算程序的基本的独立路径数目
- 区域数
- 圈复杂度V(G) = 边数-结点数+2
- 判定节点数+1
-
线性独立路径
至少包含一条在定义该路径之前不曾用过 的边
-
设计测试用例
-
-
-
循环测试
测试循环构造的有效性
-
简单循环
-
串接循环
-
嵌套循环
-
不规则循环
对于非结构循环,不能测试,应重新设计循环结构
-
黑盒测试(功能测试)
不考虑内部结构,只根据需求检查功能
-
等价类测试
-
边界值测试
- 输入/输出为0-111.25,则测试用例应使输入/输出为0、111.25和-0.01、111.26以及0.01、111.24
-
场景法测试
性能测试
-
性能指标
- 并发用户数量
- 响应时间
- 吞吐量
- TPS
- 点击率
- 资源利用率
变异测试
评估测试集充分性
第六章 软件实施、维护
敏捷开发
- scrum框架
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!