软件测试基础知识大全.ppt
合集下载
软件测试知识PPT(共23张PPT)
白盒测试
• ①白盒测试法需要了解程序内部的结构,测试用例是根据程序的内部逻辑来 设计的。白盒测试法主要用于软件的单元测试。
• ②白盒测试的基本原则是:保证所测模块中每一个独立路径至少执行一次; 保证所测模块所有判断的每一个分支至少执行一次;保证所测模块每一个循 环都在边界条件和一般条件下至少执行一次;验证所有内部数据结构的有效 性。
• ③白盒测试法常用的技术是逻辑覆盖。主要的覆盖标准有6 种,即强度由低到 高依次是:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合 覆盖、路径覆盖。
• I. 语句覆盖
• 指选择足够的测试用例,使被测语句的每个语句至少执行一次。
• II.判定覆盖 • 指选择足够的测试用例,使每个判定的所有可能结果至少出现一次。 • III.条件覆盖
需求分析 确认测试
软件设计 集成测试
编码 单元测试
需求分 析说明
书
概要设 计说明
书
详细设 计说明
书
源程ቤተ መጻሕፍቲ ባይዱ 代码
单元测 试
集成测 试
确认测 试
• 单元测试:也称模块测试,主要发现编码和详细设计中产生的错误,通常采用白盒
测试。放在编码阶段,由程序员自己来完成,检查它是否实现了详细设计说明书中 规定的模块功能和算法。其测试计划是在详细设计阶段完成。单元测试的测试计划 是在详细设计阶段完成。
次。
• VI. 路径覆盖
• 指选择足够的测试用例,使流程图中的每条路径至少经过一次。
黑盒测试
• ①黑盒测试,是对软件已经实现的功能是否满足需求进行测试和验证。 黑盒测试不关心程序内部的逻辑,只是根据程序的功能说明来设计测试 用例。黑盒测试法主要用软件确认测试。
软件测试的基本知识PPT课件
第41页/共59页
• 创建测试数据时主要考虑如下步骤。
•
① 识别测试资源
•
② 识别测试情形
•
③ 排序测试情形
•
④ 确定正确的处理结果
•
⑤ 创建测试事务
第42页/共59页
•
确定实际的测试数据时,必须说明处理测试数据的以下4个属性。
•
(1)深度
•
(2)宽度
•
(3)范围
•
(4)结构
第43页/共59页
• 3.测试脚本概要
• (3)确定从数据库信息引出的计算结果。
第33页/共59页
•
(4)对于对时间有要求的交易,确定所要的时间和条件。
•
(5)确定会产生重大意外的压力测试,包括内存、硬盘空间、高的交
易率。
•
(6)确定应用需要处理的数据量。
•
(7)确定需要的软件和硬件配置。
第34页/共59页
•
(8)确定其他与应用软件没有直接关系的商业交易。
第一个阶段开始,并贯穿于整个的软件开发生命周期。
第2页/共59页
•
谈到测试,首先是为什么要进行测试的问题。所有的测试都是为了发
现和消除软件的缺陷。
•
明确为什么要进行软件测试的问题之后,就需要明确测试什么的问题。
第3页/共59页
•
软件的开发有其自己的生命周期,在整个软件生命周期中,软件都有
各自的相对于各生命周期的阶段性的输出结果,其中也包括需求分析、概要
第15页/共59页
• 2.按照测试实施组织划分
•
按照测试实施组织划分,软件测试可分为开发方测试、用户测试(β测
试)和第三方测试。
第16页/共59页
• 创建测试数据时主要考虑如下步骤。
•
① 识别测试资源
•
② 识别测试情形
•
③ 排序测试情形
•
④ 确定正确的处理结果
•
⑤ 创建测试事务
第42页/共59页
•
确定实际的测试数据时,必须说明处理测试数据的以下4个属性。
•
(1)深度
•
(2)宽度
•
(3)范围
•
(4)结构
第43页/共59页
• 3.测试脚本概要
• (3)确定从数据库信息引出的计算结果。
第33页/共59页
•
(4)对于对时间有要求的交易,确定所要的时间和条件。
•
(5)确定会产生重大意外的压力测试,包括内存、硬盘空间、高的交
易率。
•
(6)确定应用需要处理的数据量。
•
(7)确定需要的软件和硬件配置。
第34页/共59页
•
(8)确定其他与应用软件没有直接关系的商业交易。
第一个阶段开始,并贯穿于整个的软件开发生命周期。
第2页/共59页
•
谈到测试,首先是为什么要进行测试的问题。所有的测试都是为了发
现和消除软件的缺陷。
•
明确为什么要进行软件测试的问题之后,就需要明确测试什么的问题。
第3页/共59页
•
软件的开发有其自己的生命周期,在整个软件生命周期中,软件都有
各自的相对于各生命周期的阶段性的输出结果,其中也包括需求分析、概要
第15页/共59页
• 2.按照测试实施组织划分
•
按照测试实施组织划分,软件测试可分为开发方测试、用户测试(β测
试)和第三方测试。
第16页/共59页
软件测试基础篇PPT课件
25
第25页/共63页
软件测试理论 - 软件测试的分类
按测试用例设计方法:
• 白盒测试 • 黑盒测试
26
第26页/共63页
软件测试理论 - 软件测试的方法
• 黑盒测试 功能 系统性能……
• 白盒测试 静态质量分析 覆盖测试分析 RUNTIME问题检测 代码执行性能……
• 测试执行方式 动态 静态
按测试策略和过程: • 单元测试 • 集成测试 • 系统测试 • 验收测试
12
第12页/共63页
软件测试理论 - 测试策略
被测试模块 单元 测试
被测试模块 单元 测试
. . .
被测试模块 单元 测试
设计信息 软件需求 系统其它元素
集成
确认
系统
测试 已集成 测试 已确认
测试 可交付
的软件 已经测试
的软件
3
第3页/共63页
软件测试理论 - 基本概念
• 质量的定义
所完成的软件产品满足需求,符合确定的测量标准,遵循标准的开发过 程。
• 质量要求
产品质量:产品质量是所生产的主要产品的质量,包括软件和系统以及 组成它们的所有元素。
过程质量:过程质量是指为保证产品质量而采用的实现过程(包括措施 和标准)。
• 测试与质量保证有别
2.设计
3.编码
1.计划/分析 4.测试
8
第8页/共63页
软件测试理论 - V模型
• V模型属于比较新的模型,之所以叫做V模型,是因为其形状试
规格定义 概要设计
系统测试 集成测试
详细设计
单元测试
编码
9
第9页/共63页
软件测试理论 - V模型
• V模型的优点就是详细表示了测试的各个阶段以及参考依据: 单元测试参考的是《详细设计》 集成测试参考的是《概要设计》 系统测试参考的是《需求规格说明书》 验收测试参考的是实际用户需求
第25页/共63页
软件测试理论 - 软件测试的分类
按测试用例设计方法:
• 白盒测试 • 黑盒测试
26
第26页/共63页
软件测试理论 - 软件测试的方法
• 黑盒测试 功能 系统性能……
• 白盒测试 静态质量分析 覆盖测试分析 RUNTIME问题检测 代码执行性能……
• 测试执行方式 动态 静态
按测试策略和过程: • 单元测试 • 集成测试 • 系统测试 • 验收测试
12
第12页/共63页
软件测试理论 - 测试策略
被测试模块 单元 测试
被测试模块 单元 测试
. . .
被测试模块 单元 测试
设计信息 软件需求 系统其它元素
集成
确认
系统
测试 已集成 测试 已确认
测试 可交付
的软件 已经测试
的软件
3
第3页/共63页
软件测试理论 - 基本概念
• 质量的定义
所完成的软件产品满足需求,符合确定的测量标准,遵循标准的开发过 程。
• 质量要求
产品质量:产品质量是所生产的主要产品的质量,包括软件和系统以及 组成它们的所有元素。
过程质量:过程质量是指为保证产品质量而采用的实现过程(包括措施 和标准)。
• 测试与质量保证有别
2.设计
3.编码
1.计划/分析 4.测试
8
第8页/共63页
软件测试理论 - V模型
• V模型属于比较新的模型,之所以叫做V模型,是因为其形状试
规格定义 概要设计
系统测试 集成测试
详细设计
单元测试
编码
9
第9页/共63页
软件测试理论 - V模型
• V模型的优点就是详细表示了测试的各个阶段以及参考依据: 单元测试参考的是《详细设计》 集成测试参考的是《概要设计》 系统测试参考的是《需求规格说明书》 验收测试参考的是实际用户需求
软件测试教学PPT-软件测试概述
系统有着不同程度地依赖。为了解除这种依赖,在软件开发提 出了软件移植地问题。 软件地开发至今尚未完全摆脱工地开发方式。 软件本身是复杂地。软件地复杂可能来自它所反映地实际问题 地复杂,也可能来自程序逻辑结构地复杂。 软件成本相当昂贵。软件地研制工作需求投入大量地,复杂地, 高强度地脑力劳动,它地成本是比较高地。 相当多地软件工作涉与社会因素。许多软件地开发与运行涉与 机构,体制与管理方式问题,它们直接决定项目地成败。
用于软件地开发,运行与维护,即将工程 化应用于软件。
对上述方法地研究。具体说来,软件工 程是以借鉴传统工程地原则,方法,以提 高质量,降低成本为目地指导计算机软 件开发与维护地工程学科。
软件测试与软件工程
软件测试在软件工程过程一直占据着核 心活动地地位
在瀑布模型,软件测试作为一个重要步 骤被执行,并花费整个软件开发近四零% 地时间与工作量。可以说在早期地软件 工程活动,软件质量主要是通过测试活 动保证地。
软件质量
Roger S. Pressman对软件质量地定义 为:软件要符合显式声明地功能与能需 求,显式文档化地开发标准以与专业员 开发地软件所应具有地所有隐含特。
软件地质量属,按其在运行时是否可见 分为:运行时可观察到地,包含能,安全,可 用,易用;运行时不可观察到地,包含可修 改,可移植,可测试,可集成,可重用。
小结
本章从著名地软件错误案例谈起,介绍 了软件,软件工程与软件质量,从而引出 软件缺陷地定义,出现原因与软件测试 地定义,目地,原则,并介绍了软件测试 分类。本章还介绍了软件测试行业地历 史,现状与前景。
The End
软件缺陷
软件缺陷至少满足下列五个规则之一: 软件未实现产品规格说明所要求地功能。 软件出现了产品规格说明指明不应该出
用于软件地开发,运行与维护,即将工程 化应用于软件。
对上述方法地研究。具体说来,软件工 程是以借鉴传统工程地原则,方法,以提 高质量,降低成本为目地指导计算机软 件开发与维护地工程学科。
软件测试与软件工程
软件测试在软件工程过程一直占据着核 心活动地地位
在瀑布模型,软件测试作为一个重要步 骤被执行,并花费整个软件开发近四零% 地时间与工作量。可以说在早期地软件 工程活动,软件质量主要是通过测试活 动保证地。
软件质量
Roger S. Pressman对软件质量地定义 为:软件要符合显式声明地功能与能需 求,显式文档化地开发标准以与专业员 开发地软件所应具有地所有隐含特。
软件地质量属,按其在运行时是否可见 分为:运行时可观察到地,包含能,安全,可 用,易用;运行时不可观察到地,包含可修 改,可移植,可测试,可集成,可重用。
小结
本章从著名地软件错误案例谈起,介绍 了软件,软件工程与软件质量,从而引出 软件缺陷地定义,出现原因与软件测试 地定义,目地,原则,并介绍了软件测试 分类。本章还介绍了软件测试行业地历 史,现状与前景。
The End
软件缺陷
软件缺陷至少满足下列五个规则之一: 软件未实现产品规格说明所要求地功能。 软件出现了产品规格说明指明不应该出
软件测试的基础理论 ppt课件
ppt课件
软件测试的基础理论
14
1.1软件缺陷
•团队工作 •系统分析时对客户的需求不是十分清楚,或者和用户的沟通存在一些困 难。 •不同阶段的开发人员相互理解不一致,软件设计对需求分析结果的理解 偏差,编程人员对系统设计规格说明书中某些内容重视不够,或存在着 误解。 •设计或编程上的一些假定或依赖性,没有得到充分的沟通。 •软件本身 •文档错误、内容不正确或拼写错误。 •数据考虑不周全引起强度或负载问题。 •对边界考虑不够周全,漏掉某几个边界条件造成的错误。 •对一些实时应用系统,保证精确的时间同步,否则容易引起时间上不协 调、不一致性带来的问题。 •没有考虑系统崩溃后在系统安全性、可靠性的隐患。 •硬件或系统软件上存在的错误。 软件开发标准或过程上的错误。 15 ppt课件 软件测试的基础理论
图1-2 随着时间的推移,修复软件缺陷的费用惊人地增长
ppt课件 17
1.1软件缺陷
举个例子说明,比如前面迪斯尼狮子王实例,问题的根本原 因就是软件无法在流行的PC台上运行,假如早在编写产品说明书时, 有人已经研究过什么PC机流行,并且明确指出需要在该配置上设计 和测试,付出的代价小的几乎可以忽略不计。如果没有这样做,还 有一个补救措施,软件测试员去搜集流行PC样机并在其上验证,他 们可能发现软件的缺陷,但是修复的费用要高的多,因为软件必须 调试,修改,再测试。开发小组还应把软件的初期版本分发给一小 部分客户进行试用,这叫beta测试。那些被挑选出来的代表庞大的 市场客户可能会发现问题,然而实际的情况是问题完全被忽视,知 道成千上万的光盘被压制和销售出去。而迪斯尼公司最终支付了客 户投诉电话费、产品召回、更换光盘、以及又一轮的调试、维修和 测试的费用。如果严重的软件的软件缺陷到客户那里,就足以耗尽 整个产品的利润。
软件测试(ppt)完整版
个小数点,在进入大气层时打不开降落伞而烧 毁。
二、软件测试的特点
1、软件测试的开销大
按照Boehm的统计,软件测试的开销大约占总成 本的30%-50%。例如:APPOLLO登月计划, 80%的经费用于软件测试。
2、不能进行“穷举”测试
只有将所有可能的情况都测试到,才有可能检查 出所有的错误。但这是不可能的:
[(2,20,04)4,(2,0,3)] [(1,11,1),1(1,1,1)] 注意:[(1,0,3),(1,0,4)]
[(2,1,1),(2,1,2)] 满足条件覆盖,但不满足判断 覆盖。
4、判定/条件覆盖
a
A>1 AND B=0
N
b
c
Y
X:=X/A
A=2 OR X>1
dN
e
Y
X:=X+1
同时满足判断覆盖和条 件覆盖。
N
X:=X/A
A=2 Y
N Y
X>1
N
d
e
X:=X+1
编译系统下的执行情况: 部分路径未被执行。
使得每个判定中条件的各种 可能组合都至少出现一次。
满足以下覆盖情况:
① A>1, B =0 ② A>1, B≠0 ③ A≤1, B =0 ④ A≤1, B≠0 ⑤ A=2, X>1 ⑥ A=2, X≤1 ⑦ A≠2, X>1 ⑧ A≠2, X≤1
选择用例: [(2,0,4),(2,0,3)] ① ⑤ [(2,1,1),(2,1,2)] ② ⑥ [(1,0,3),(1,0,4)] ③ ⑦ [(1,1,1),(1,1,1)] ④ ⑧
作业:
用C语言编写选择排序的程序,并用白盒法进 行测试.
二、软件测试的特点
1、软件测试的开销大
按照Boehm的统计,软件测试的开销大约占总成 本的30%-50%。例如:APPOLLO登月计划, 80%的经费用于软件测试。
2、不能进行“穷举”测试
只有将所有可能的情况都测试到,才有可能检查 出所有的错误。但这是不可能的:
[(2,20,04)4,(2,0,3)] [(1,11,1),1(1,1,1)] 注意:[(1,0,3),(1,0,4)]
[(2,1,1),(2,1,2)] 满足条件覆盖,但不满足判断 覆盖。
4、判定/条件覆盖
a
A>1 AND B=0
N
b
c
Y
X:=X/A
A=2 OR X>1
dN
e
Y
X:=X+1
同时满足判断覆盖和条 件覆盖。
N
X:=X/A
A=2 Y
N Y
X>1
N
d
e
X:=X+1
编译系统下的执行情况: 部分路径未被执行。
使得每个判定中条件的各种 可能组合都至少出现一次。
满足以下覆盖情况:
① A>1, B =0 ② A>1, B≠0 ③ A≤1, B =0 ④ A≤1, B≠0 ⑤ A=2, X>1 ⑥ A=2, X≤1 ⑦ A≠2, X>1 ⑧ A≠2, X≤1
选择用例: [(2,0,4),(2,0,3)] ① ⑤ [(2,1,1),(2,1,2)] ② ⑥ [(1,0,3),(1,0,4)] ③ ⑦ [(1,1,1),(1,1,1)] ④ ⑧
作业:
用C语言编写选择排序的程序,并用白盒法进 行测试.
软件测试培训基础精品PPT课件
检查添加和修改是否一致: 检查添加和修改信息的要求是否一致, 例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修 改也必须为整型
常用功能测试方法(三)
检查修改重名:修改时把不能重名的项改为已存在的内容,看会否 处理,报错.同时,也要注意,会不会报和自己重名的错
重复提交表单:一条已经成功提交的纪录,back后再提交,看看 系统是否做了处理
在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个 无效等价类
在规定了输入数据的一组值(假定n个),并且程序要对每一个输入 值分别处理的情况下,可确立n个有效等价类和一个无效等价类
在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价 类(符合规则)和若干个无效等价类(从不同角度违反规则)
黑盒测试的方法
➢常用方法
等价类划分方法 边界值分析方法 错误推测方法
➢高级方法
因果图方法 判定表驱动分析方法 正交实验设计方法 功能图分析方法
等价类测试(一)
在输入条件规定了取值范围或值的个数的情况下,则可以确立一个 有效等价类和两个无效等价类
在输入条件规定了输入值的集合或者规定了“必须如何”的条件的 情况下,可以确立一个有效等价类和一个无效等价类
页面链接检查:每一个链接是否都有对应的页面,并且页面之间 切换正确
相关性检查:删除/增加一项会不会对其他项产生影响,如果产 生影响,这些影响是否都正确
检查按钮的功能是否正确:如update, cancel, delete, save 等功能是否正确
字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度,会不会出错
等价类测试(二) 建立等价类表,列出所有划分出的等价类:
输入条件 … …
常用功能测试方法(三)
检查修改重名:修改时把不能重名的项改为已存在的内容,看会否 处理,报错.同时,也要注意,会不会报和自己重名的错
重复提交表单:一条已经成功提交的纪录,back后再提交,看看 系统是否做了处理
在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个 无效等价类
在规定了输入数据的一组值(假定n个),并且程序要对每一个输入 值分别处理的情况下,可确立n个有效等价类和一个无效等价类
在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价 类(符合规则)和若干个无效等价类(从不同角度违反规则)
黑盒测试的方法
➢常用方法
等价类划分方法 边界值分析方法 错误推测方法
➢高级方法
因果图方法 判定表驱动分析方法 正交实验设计方法 功能图分析方法
等价类测试(一)
在输入条件规定了取值范围或值的个数的情况下,则可以确立一个 有效等价类和两个无效等价类
在输入条件规定了输入值的集合或者规定了“必须如何”的条件的 情况下,可以确立一个有效等价类和一个无效等价类
页面链接检查:每一个链接是否都有对应的页面,并且页面之间 切换正确
相关性检查:删除/增加一项会不会对其他项产生影响,如果产 生影响,这些影响是否都正确
检查按钮的功能是否正确:如update, cancel, delete, save 等功能是否正确
字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度,会不会出错
等价类测试(二) 建立等价类表,列出所有划分出的等价类:
输入条件 … …
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
行;
尽量避免复杂的条件测试; 尽量减少对“非”条件的测试; 避免大量使用循环嵌套和条件嵌套;
利用括号使逻辑表达式或算术表达式的运 算次序清晰直观。
4. 输入输出 对所有输入数据都进行检验; 检查输入项重要组合的合法性; 保持输入格式简单;
使用数据结束标记,不要要求用户指定数据的数 目;
通常在编写出每个模块之后就对它做单元测试。
在这个阶段结束之后,对软件系统还应该进行 各种综合测试,通常由专门的测试人员承担这 项工作。
通过测试发现错误之后还必须诊断并改正错误, 这就是调试的目的。调试是测试阶段最困难的工 作。
7.1 编码 7.1.1 选择程序设计语言
机器语言,几乎不使用。 汇编语言,特殊场合使用。 高级语言,明显优于汇编语言。
主要的实用标准: 系统用户的要求 可以使用的编译程序 可以得到的软件工具 工程规模 程序员的知识 软件可移植性要求 软件的应用领域
7.1.2 编码风格
好程序:逻辑简明清晰,易读易懂
1. 程序内部的文档 恰当的标识符:含义鲜明的名字 适当的注解 程序的视觉组织:层次清楚的布局
if (char>=’a’ && char<=’z’) cout << “This is a letter.”;
else cout << “This is not a letter.”;
例9:少用否定条件
if ( !(char < ’0’ || char > ’9’) )
if (char >= ‘0’ && char <= ‘9’)
测试发现的错误中的80%很可能是由程序中 20%的模块造成的
7.2 软件测试基础 7.2.1 软件测试的目标
测试是为了发现程序中的错误而执行程序 的过程;
好的测试方案是极可能发现迄今为止尚未 发现的错误的测试方案
成功的测试是发现了至今为止尚未发现的 错误的测试。
7.2.2 软件测试准则
所有测试都应该能追溯到用户需求; 应该远在测试开始之前就制定出测试计划; 把Pareto原理应用到软件测试中;
第7章 实现
7.1 编码 7.2 软件测试基础 7.3 单元测试 7.4 集成测试 7.5 确认测试 7.6 白盒测试技术 7.7 黑盒测试技术 7.8 调试 7.9 软件可靠性
通常把编码和测试统称为实现。
所谓编码就是把软件设计结果翻译成用某种程序 设计语言书写的程序。
软件测试在软件生命周期中横跨两个阶段。
SMALL=X; IF (Y<SMALL)
SMALL=Y; IF (Z<SMALL)
SMALL=Z;
例8:避免使用空ELSE和IF…THEN IF…语 句 if (char>=’a’)
if (char<=’z’) cout << “This is a letter.”;
else cout << “This is not a letter.”;
2. 数据说明 数据说明的次序应该标准化。
如,按照数据类型确定说明次序
当多个变量名在一个语句中说明时,应该 按字母顺序排列这些变量。
如果设计时使用了一个复杂的数据结构, 则应该用注解说明用程序设计语言实现这 个数据结构的方法和特点。
3. 语句构造 不要为了节省空间而把多个语句写在同一
FOR I:=1 TO N-1 DO BEGIN T:=I; FOR J:=I+1 TO N DO IF A[J]<A[T] THEN T:=J; IF T<>I THEN BEGIN WORK:=A[T]; A[T]:=A[I]; A[I]:=WORK; END END;
例6:强调清晰性
A[I]=A[I]+A[T]; A[T]=A[I]-A[T]; A[I]=A[I]-A[T];
例2:视觉组织——空格
(A<-17)ANDNOT(B<=49)ORC
(A<-17) AND NOT (B<=49) OR C
例3:视觉组织——移行
IF (…) THEN IF (…) THEN
…… ELSE
…… ENDIF
…… ELSE
…… ENDIF
IF (…) THEN IF (…) THEN …… ELSE …… ENDIF ……
ELSE ……
ENDIF
例4:数据说明标准化
INTEGER size,length,width,cost,price
INTEGER cost,length,price,size,width
例5:一行一条语句
FOR I:=1 TO N-1 DO BEGIN T:=I; FOR J:=I+1 TO N DO IF A[J]<A[T] THEN T:=J; IF T<>I THEN BEGIN WORK:=A[T]; A[T]:=A[I]; A[I]:=WORK; END END;
WORK=A[T]; A[T]=A[I]; A[I]=WORK;
例7:避免不必要的转移
IF (X<Y) GOTO 30 IF (Y<Z) GOTO 50 SMALL=Z GOTO 70 30 IF (X<Z) GOTO 60 AMALL=Z GOTO 70 50 SMALL=Y GOTO 70 60 SMALL=X 70 CONTINUE
程序的效率和程序的简单程度是一致的, 不要牺牲程序的清晰性和可读性来不必要 地提高效率。
效率问题: 程序运行时间 存储器效率 输入输出的效率
例1:注释
/* ADD AMOUNT TO TOTAL */ TOTAL = AMOUNT+TOTAL
/* ADD MONTHLY-SALES TO ANNUAL-TOTAL */ TOTAL = AMOUNT+TOTAL
明确提示交互式输入的请求,详细说明可用的选 择或边界数值;
当程序设计语言对格式有严格要求时,应保持输 入格式一致;
设计良好的输出报表; 给所有输出数据加标志。
5. 效率
效率主要指处理机时间和存储器容量两个 方面。
效率是性能要求,因此应该在需求分析阶 段确定效率方
尽量避免复杂的条件测试; 尽量减少对“非”条件的测试; 避免大量使用循环嵌套和条件嵌套;
利用括号使逻辑表达式或算术表达式的运 算次序清晰直观。
4. 输入输出 对所有输入数据都进行检验; 检查输入项重要组合的合法性; 保持输入格式简单;
使用数据结束标记,不要要求用户指定数据的数 目;
通常在编写出每个模块之后就对它做单元测试。
在这个阶段结束之后,对软件系统还应该进行 各种综合测试,通常由专门的测试人员承担这 项工作。
通过测试发现错误之后还必须诊断并改正错误, 这就是调试的目的。调试是测试阶段最困难的工 作。
7.1 编码 7.1.1 选择程序设计语言
机器语言,几乎不使用。 汇编语言,特殊场合使用。 高级语言,明显优于汇编语言。
主要的实用标准: 系统用户的要求 可以使用的编译程序 可以得到的软件工具 工程规模 程序员的知识 软件可移植性要求 软件的应用领域
7.1.2 编码风格
好程序:逻辑简明清晰,易读易懂
1. 程序内部的文档 恰当的标识符:含义鲜明的名字 适当的注解 程序的视觉组织:层次清楚的布局
if (char>=’a’ && char<=’z’) cout << “This is a letter.”;
else cout << “This is not a letter.”;
例9:少用否定条件
if ( !(char < ’0’ || char > ’9’) )
if (char >= ‘0’ && char <= ‘9’)
测试发现的错误中的80%很可能是由程序中 20%的模块造成的
7.2 软件测试基础 7.2.1 软件测试的目标
测试是为了发现程序中的错误而执行程序 的过程;
好的测试方案是极可能发现迄今为止尚未 发现的错误的测试方案
成功的测试是发现了至今为止尚未发现的 错误的测试。
7.2.2 软件测试准则
所有测试都应该能追溯到用户需求; 应该远在测试开始之前就制定出测试计划; 把Pareto原理应用到软件测试中;
第7章 实现
7.1 编码 7.2 软件测试基础 7.3 单元测试 7.4 集成测试 7.5 确认测试 7.6 白盒测试技术 7.7 黑盒测试技术 7.8 调试 7.9 软件可靠性
通常把编码和测试统称为实现。
所谓编码就是把软件设计结果翻译成用某种程序 设计语言书写的程序。
软件测试在软件生命周期中横跨两个阶段。
SMALL=X; IF (Y<SMALL)
SMALL=Y; IF (Z<SMALL)
SMALL=Z;
例8:避免使用空ELSE和IF…THEN IF…语 句 if (char>=’a’)
if (char<=’z’) cout << “This is a letter.”;
else cout << “This is not a letter.”;
2. 数据说明 数据说明的次序应该标准化。
如,按照数据类型确定说明次序
当多个变量名在一个语句中说明时,应该 按字母顺序排列这些变量。
如果设计时使用了一个复杂的数据结构, 则应该用注解说明用程序设计语言实现这 个数据结构的方法和特点。
3. 语句构造 不要为了节省空间而把多个语句写在同一
FOR I:=1 TO N-1 DO BEGIN T:=I; FOR J:=I+1 TO N DO IF A[J]<A[T] THEN T:=J; IF T<>I THEN BEGIN WORK:=A[T]; A[T]:=A[I]; A[I]:=WORK; END END;
例6:强调清晰性
A[I]=A[I]+A[T]; A[T]=A[I]-A[T]; A[I]=A[I]-A[T];
例2:视觉组织——空格
(A<-17)ANDNOT(B<=49)ORC
(A<-17) AND NOT (B<=49) OR C
例3:视觉组织——移行
IF (…) THEN IF (…) THEN
…… ELSE
…… ENDIF
…… ELSE
…… ENDIF
IF (…) THEN IF (…) THEN …… ELSE …… ENDIF ……
ELSE ……
ENDIF
例4:数据说明标准化
INTEGER size,length,width,cost,price
INTEGER cost,length,price,size,width
例5:一行一条语句
FOR I:=1 TO N-1 DO BEGIN T:=I; FOR J:=I+1 TO N DO IF A[J]<A[T] THEN T:=J; IF T<>I THEN BEGIN WORK:=A[T]; A[T]:=A[I]; A[I]:=WORK; END END;
WORK=A[T]; A[T]=A[I]; A[I]=WORK;
例7:避免不必要的转移
IF (X<Y) GOTO 30 IF (Y<Z) GOTO 50 SMALL=Z GOTO 70 30 IF (X<Z) GOTO 60 AMALL=Z GOTO 70 50 SMALL=Y GOTO 70 60 SMALL=X 70 CONTINUE
程序的效率和程序的简单程度是一致的, 不要牺牲程序的清晰性和可读性来不必要 地提高效率。
效率问题: 程序运行时间 存储器效率 输入输出的效率
例1:注释
/* ADD AMOUNT TO TOTAL */ TOTAL = AMOUNT+TOTAL
/* ADD MONTHLY-SALES TO ANNUAL-TOTAL */ TOTAL = AMOUNT+TOTAL
明确提示交互式输入的请求,详细说明可用的选 择或边界数值;
当程序设计语言对格式有严格要求时,应保持输 入格式一致;
设计良好的输出报表; 给所有输出数据加标志。
5. 效率
效率主要指处理机时间和存储器容量两个 方面。
效率是性能要求,因此应该在需求分析阶 段确定效率方