您现在的位置是:首页 >学无止境 >第七章 测试网站首页学无止境
第七章 测试
文章目录
第七章 测试
1.编码和测试统称为实现。
2.编码:把软件设计结果翻译成程序。
3.测试:检测程序并改正错误的过程
7.1 编码
7.1.1 选择程序设计语言
1. 计算机程序设计语言基本上可以分为汇编语言和高级语言
2. 从应用特点看,高级语言可分为基础语言、结构化语言、专用语言
01 有理想的模块化机制;
02 可读性好的控制结构和数据结构;
03 便于调试和提高软件可靠性;
04 编译程序发现程序错误的能力强;
05 有良好的独立编译机制。
7.1.2 编码风格
- 程序内部的文档
- 恰当的标识符
- 语句构造
- 输入/输出
- 效率
① 程序运行时间
② 存储器效率
③ 输入/输出效率
7.2 软件测试基础
7.2.1 软件测试的目标
(1)测试是为了发现程序中的错误而执行程序的过程;
(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;
(3)成功的测试是发现了至今为止尚未发现的错误的测试
测试的定义:为了发现程序中的错误而执行程序的过程。
7.2.2 软件测试准则
为了能设计出有效的测试方案,软件工程师必须深入理解并运用指导软件测试的基本准则。
7.2.3 测试方法
黑盒测试
如果已经知道软件应该具有的功能,可以通过测试来检验是否每个功能都能正常使用,这种测试称黑盒测试。也称功能测试。
白盒测试
也称结构测试。
如果知道软件内部工作过程,可以通过测试来检验软件内部动作是否按照规格说明书的规定正常进行,这种测试称为白盒测试。
7.2.4 软件测试的步骤
- 模块测试
模块测试又称单元测试,它把每个模块作为单独的实体来测试。 - 子系统测试
子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。 - 系统测试
系统测试是把经过测试的子系统装配成一个完整的系统来测试。 - 验收测试
验收测试把软件系统作为单一的实体进行测试(利用用户的实际数据测试)。 - 平行运行
平行运行是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。
7.2.5 测试阶段的信息流
软件测试步骤
7.3 单元测试
7.3.1 测试重点
- 模块接口
- 局部数据结构
- 重要的执行路径
- 出错处理通路
- 边界条件
7.3.2 代码审查
7.3.3 计算机测试
驱动程序或存根程序
1. 对“编辑”功能的测试(存根模块)
2. 对“编辑”功能的测试(驱动模块)
例题
7.4 集成测试
1)非渐增式测试方法
先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。
2)渐增式测试方法
每次增加一个待测试模块,把它同已经测试好的那些模块结合起来进行测试,反复进行直到完成所有模块测试的方法
7.4.1 自顶向下集成
1)深度优先策略
2)宽度优先策略
7.4.2 自底向上集成
自底向上集成方法是从软件结构最底层模块开始进行组装和测试,它与自顶向下结合方法相反,需要驱动程序,不需要存根程序
7.4.3 不同集成测试策略的比较
7.4.4 回归测试
回归测试用于保证由于调试或其他原因引起的程序变化,不会导致额外错误的测试活动。
7.5 确认测试
7.5.1 确认测试的范围
• 也称为验收测试,目标是验证软件的有效性。
• 如果软件的功能和性能符合用户的期待,软件就是有效的。
• 软件规格说明书是进行确认测试的基础。
7.5.2 软件配置复查
确认测试一般使用黑盒测试法。
目的:保证软件配置的所有成分都齐全,质量符合要求,文档与程序完全一致,而且已经编好
目录。
7.5.3 Alpha和Beta测试
Alpha测试:用户在开发者的场所进行测试,并且在开发者的指导下进行,测试在受控环境中进行,开发者记录发现的错误和问题;
Beta测试:用户在一个或多个客户场所进行测试,不受开发者控制,测试者记录发现的问题和错误,定期将问题报告发送给开发者。
7.6 白盒测试技术
7.6.1 逻辑覆盖
1. 语句覆盖
设计的测试用例能使程序中每条语句至少执行一次。如果遵循这个规定则说明达到了100%的语句覆盖。
语句覆盖是最弱的逻辑覆盖准则,它发现不了判断中逻辑运算符的错误。
2. 判定覆盖
判定覆盖是指:选取足够的测试用例,使得程序中每个判断的可能结果都至少执行一次,也就是说使
程序的每个判断分支至少通过一次。
比语句覆盖稍强的逻辑覆盖准则,它任然发现不了判断中逻辑运算符的错误。
3. 条件覆盖
条件覆盖是指:选择足够的测试用例,使得程序中每个判定表达式的每个条件都取到各种可能的结果。即每个判定中的所有条件取值组合都被至少执行一次。
4. 判定/条件覆盖
选取足够的测试用例使得同时满足判定覆盖和条件覆盖的要求。
5. 条件组合覆盖
条件组合覆盖指:选取足够的测试用例,使得每个判定表达式中条件的各种可能的组合都至少出现一次。
测试
7.7 黑盒测试技术
测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明,又叫做功能测试或数据驱动测试。
7.7.1 等价划分(等价类划分)
等价类划分是一种黑盒测试技术。
等价类某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。
7.7.2 边界值分析
- 程序通常在处理边缘情况时容易出现错误,如等价类与等价类之间的边界值。
- 边界值分析测试法属黑盒测试
7.7.3 错误推测
- 错误推测法在很大程度上靠直觉和经验进行。
- 基本思想:列举出程序中可能的错误和容易发生错误的特殊情况,且根据它们选择测试方案。如:输入、输出为0时容易出错;输出记录为0条时容易出错;等等。
- 在进一步测试时要着重测试哪些发现了较多错误的组合情况。
例题
7.8 调试
7.8.1 调试过程
7.8.2 调试途径
- 蛮干法:打印内存的内容,从中寻找错误的线索,是效率最低的程序调试方法。
- 回溯法:从发现问题的程序段开始人工地往回追踪分析程序代码,直到找到错误。
- 原因排除法包括:对分查找法、归纳法、演绎法
7.9 软件可靠性
7.9.1 基本概念
对故障可修复系统,应同时使用可靠性和可用性来衡量。
- 软件可靠性定义
软件可靠性:是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。 - 软件的可用性
软件可用性是:程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。
可靠性和可用性的区别是:可靠性是在0到t时间间隔内,系统没有失效的概率。而可用性是在t时刻,
系统是正常运行的概率。
如果引入系统平均无故障时间MTTF和平均维修时间MTTR的概念,则上面公式的系统稳态可靠性变成:
平均维修时间MTTR是修复一个故障平均需要用的时间,取决于维护人员的技术水平和对系统熟悉程度。
平均无故障时间MTTF是系统按照规格说明书规定成功地运行的平均时间,取决于系统中潜伏的错误数量。
7.9.2 估算平均无故障时间MTTF的方法
1. 符号
估算MTTF时使用到下列符号
ET——测试之前程序中故障总数;
IT——程序长度(机器指令总数);
τ——测试(包括调试)时间;
Ed(τ) ——在0至τ期间发现的错误数;
Ec(τ) ——在0至τ期间改正的错误数;
2. 基本假定
3. 估算平均无故障时间MTTF
4. 估计故障总数ET的方法
1)植入故障法
2)分别测试法
小结
1.实现包括编码和测试两个阶段。
2.高级程序设计语言较汇编语言有很多优点。
3.通常软件测试至少分为单元测试、集成测试和验收测试3个基本阶段。
4.软件测试不仅仅指利用计算机进行的测试,还包括人工进行的测试(例如,代码审查)。
5.白盒测试和黑盒测试是软件测试的两类基本方法,设计白盒测试方案的技术主要有,逻辑覆盖和控
制结构测试;设计黑盒测试方案的技术主要有,等价划分、边界值分析和错误推测。
7.及时改正测试过程中发现的软件错误就是调试的任务。
7.程序中潜藏的错误的数目,直接决定了软件的可靠性。通过测试可以估算出程序中剩余的错误数。