导读:参考书籍.软件测试技术基础教程.软件测试概述.第一类测试:在设计规定的环境下运行软件的功能,将其结果与用户需求或设计结果相比较,如果相符则测试通过,如果不相符则视为Bug.第一类测试方法以需求和设计为本.第二类测试:强调测试人员发挥主观能动性,用逆向思维方式,不断思考开发人员理解
软件测试技术基础教程
第一类测试:在设计规定的环境下运行软件的功能,将其结果与用户需求或设计结果相比较,如果相符则测试通过,如果不相符则视为Bug
第一类测试方法以需求和设计为本
第二类测试:强调测试人员发挥主观能动性,用逆向思维方式,不断思考开发人员理解的误区、不良习惯、程序代码的边界、无效数据的输入及系统的各种弱点,试图破坏系统、摧毁系统,目标是发现系统中各种各样的问题
测试是以评价一个程序或系统属性为目标的任何一种活动。测试是对软件质量的度量
对于软件缺陷的定义:
软件测试的充分性准则:
目的:检查每个程序单元能否正确实现详细设计说明中的模块功能、性能、接口和设计约束等
目的:用于检验程序单元或部件的接口关系,使其符合概要设计
目的:检验软件的功能、性能及其他特性是否与用户的要求一致
目的:通过与系统的需求相比较,发现所开发的系统与用户需求不符或矛盾的地方
可以分为三个阶段
* 模块测试 测试模块程序
* 组装测试 测试模块之间的接口
* 确认测试 测试整个软件系统
目的:用户对软件系统进行测试和接收
通过对程序内部结构的分析、检测来发现系统代码中存在的问题
常用的测试方法:
* 静态测试 不执行
* 动态测试 需要执行
在不考虑程序内部结构的情况下,检查程序的功能是否按照需求规格说明书的规定
常用的测试方法:
* 等价类划分
* 边界值分析法
* 错误推断法
* 因果图法
关注输出对于输入的正确性,同时也关注内部表现,通过表征性的现象、实践、标志来判断内部的运行状态
在软件开发环境下,由开发者通过检测和提供客观证据,证实软件的实现能否满足规定的需求
Beta
测试)用户在真实的应用环境下,通过运行和使用软件,检测与核查软件是否符合自己预期的要求
软件第三方测试是由在技术、管理和财务上与开发方和用户方相对独立的组织进行的软件测试
考察方面:
1. 适合性:是否提供了满足需求的功能,以及系统所提供的功能对需求的适合程度的测试工作
2. 准确性:检验系统处理数据是否准确,以及处理数据的精度是否符合需求
3. 互操作性:检查系统的相关功能与其他特定系统之间交互能力
4. 安全性:检验系统的安全性,防止对系统及数据非授权的故意或意外访问等
5. 功能的依从性:检验软件产品的功能是否遵循有关的标准、约定、法规等
可靠性测试
易用性测试
效率测试
可移植性测试
文档测试
ISO 9000
系列标准是ISO
组织制定的国际标准核心标准是质量保证标准
ISO 9001 ~ ISO 9003
和质量管理标准ISO 9004
ISO 9001 ~ ISO 9003
作为第一类用于建立客户对生产商质量要求保证
ISO 9004
作为第二类用于生产商自身建立质量保障体系
ISO 9000
系列标准的两个主要特点:
CMM(能力成熟度模型)
是软件行业的标准模型,用来定义和评价软件公司开发过程的成熟度,以通用性好作为特点
CMM
将软件过程能力成熟度划分为五个等级
开发过程是随意的、混乱的
成熟度主要集中在项目级。建立基本的项目管理过程。软件开发具有一定的组织性
具备了组织化,不仅仅针对具体项目。软件开发中的管理活动和工程活动被文档化或标准化。所有项目均在标准软件过程中进行
软件过程和产品质量有具体的度量标准,软件过程和产品质量等到了定量理解和控制
能够进行持续的过程改进,达到质量更佳
软件测试可以查找错误并修改,从而提高软件质量
软件质量保证则是避免错误,从而提高软件质量
正规的软件测试系统主要包括:
软件质量保证的工作为:
共同之处:尽力确保软件产品满足需求
不同之处:软件质量保证侧重于对软件开发过程中的各个过程进行管理与控制;测试是对已产生的软件缺陷进行修复
通常分为国家标准、行业标准、企业规范和项目规范
按照从编写到交付的各个阶段的先后顺序可以分为:
软件开发过程是自下向上、逐步细化的过程
软件测试是自上向下、逐步集成的过程
单元测试的对象是软件设计的最小单位—模块
单元测试的主要目标:确保个单元模块被正确的编码
单元测试的主要内容:
单元测试的步骤
在编码阶段进行,在代码经过评审和验证,确认没有语法错误后,开始进行单元测试
在单元测试中,会使用辅助模块帮助单元测试的进行
是单元测试的扩展和延伸,为了测试程序模块之间接口的规范性、一致性等
需要根据实际情况对程序模块采用适当的策略组装起来
集成测试的层次:
集成测试对传统软件和面向对象的应用系统的测试是不同的
传统软件的3个测试层次:
面向对象的应用系统的两个测试阶段:
集成测试的模式:
采用不同的集成方式对应的测试不同
把模块组装成系统的测试方式有两种:
先分别测试每个模块,再把所有模块按设计要求一次性全部组装起来所要的系统,然后进行整体测试
将下一个要测试的模块同已经测好的模块结合起来进行测试,即边组装边测试
* 自顶向下增量测试
从主控模块开始,按照软件的控制层次结构,以深度优先或广度优先的策略,逐步组装各个模块
优点:尽早对程序的主要控制和决策机制进行检验
缺点:底层桩模块不符合真实情况
* 自底向上增量测试
从软件结构最底层的模块开始向上一层层地组装测试
优点:及早解决容易出错的部分
缺点:程序的主要控制和决策机制不能及时验证
* 混合增量测试
* 改进的自顶向下增量测试
基本思想是强化对输入/输出模块和引入新算法模块的测试,并自底向上组装成为功能相当完整且相对独立的子系统,然后由主模块开始自顶向下进行增量测试
* 自底向上-自顶向下
首先对含读操作的子系统自底向上直至根结点模块进行组装和测试,然后对含写操作的子系统做自顶向下的组装与测试
* 回归测试
取自顶向下的方式测试被修改的模块及其子模块,然后将这一部分视为子系统,再自底向上测试,以检查该子系统与其上级模块的接口是否适配
集成测试的测试计划:测试计划表、各模块单元测试完成日期、首次集成测试日期、集成测试全部完成日期、测试用例及期望结果
集成测试完成的标志:
集成测试需要提交的文档:集成测试计划、集成测试规格说明、集成测试分析报告
目的是验证软件的功能和性能及其特性是否与客户的要求一致,是否满足软件需求规格说明书中的规定。
确认测试的流程:
确认测试的准则:
若一个软件的功能、性能及限制条件达到了设计要求,这个软件的开发是成功的
确认测试后发现严重错误和偏差一般很难在预定工期内改正,需要和用户协商
确认测试需要交付的文档有:
确认测试需要进行软件配置复审 ,目的在于保证软件配置齐全、分类有序,各方面的质量符合要求,具备维护阶段所需的细节资料并且已经编排好分类的目录
它是将已经集成好的软件系统,作为整个计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行的环境下,对计算机系统进行一系列的组装测试和确认测试
系统测试的目的在于:通过与系统的需求定义进行比较,检车软件是否与系统需求顶不符合或与之矛盾的地方,以验证软件系统的功能和性能等是否满足其规约所指定的要求
系统测试的目标
系统测试的过程:
系统测试的设计:
常见的系统测试方法:
用来检查系统的容错能力。通过对软件的非法处理,使其不能正常工作,从而检验系统的恢复能力
检测系统对外界非法入侵的防范能力
检测程序对异常情况的抵抗能力
测试软件在系统运行时的性能表现
在系统正常运行的范围内测定系统能够处理的数据容量
检测软件的各项功能是否符合产品规格说明的要求
主要包括:枚举法、边界值法
检测系统的可靠性是否达到预期目标的测试方法
指软件在特定的硬件平台上、不同的应用软件之间、不同的操作系统平台上、不同网络等环境中是否能够很好运行
不同厂商、不同版本的浏览器对某些构建和设置的适应性
验收测试是软件开发结束后,用户对软件投入实际应用前进行的最后一次质量检验活动
软件验收测试应该完成的内容:
验收测试的常用策略:
是系统测试的延续
测试步骤和内容由测试人员决定
Beta测试是所有测试中最主观的
验收测试可以分为两大部分:软件配置审查、可执行程序测试
白盒测试侧重于分析内部结构是否合理,以及设计测试用例来检验产品内部操作是否按照规格说明书正确执行
白盒测试可以分为:静态测试和动态测试
静态测试:不在计算机上执行程序,以人工模拟技术或使用测试软件对软件进行分析和测试
动态测试:设计一系列的测试用例,动态地运行程序,以发现程序中的缺陷
逻辑覆盖测试通过对程序的逻辑结构的遍历实现程序的覆盖
覆盖率是度量测试完整性的一个手段,是测试有效性的度量。
覆盖率计算公式:
\[覆盖率 = 至少被执行一次的item数 / item总数 \]
测试覆盖可以分为:
每条可执行语句至少被执行一次
不能发现逻辑错误
被测程序中的每个判断的”真”、”假”分支至少被执行一次
被测程序中的每判断语句中的每个逻辑条件的可能值至少被满足一次
被测程序中的每个判断本身的判定结果至少满足一次,同时,每个逻辑条件的可能指也至少被满足一次
被测程序中的每个判断的所有可能条件取值的组合至少被满足一次
不同的判断语句内的条件取值之间无需组合
条件组合只针对同一个判断语句内存在多个条件的情况
被测程序中的每条路径至少被覆盖一次
常见的路径覆盖方法:独立路径选择和Z
路径覆盖
控制流图是对程序流程图的简化
控制流图的特点:
环型复杂度是描述程序逻辑复杂度的软件度量,适用于独立路径方法,是确保程序中每个可执行语句至少执行一次所必须的测试用例数目的上限
对于控制流图G
,设其环型复杂度为V(G)
,常见的计算方法:
E
是边的数量,N
是结点的数目P
是判定结点的数目A
是区域的数目由边和结点围成的区域叫做区域,控制流图外的区域也作为一个区域
独立路径测试
一条独立路径是至少包含有一条在其他独立路径中从未有过的边的路径
独立路径测试的步骤:
如果程序中的条件判断表达式是由一个或多个逻辑运算符连接的复合表达式,则需要变换为一系列只有单个条件的复合表达式,需要变换为一系列只有单个条件的嵌套的判断
Z
路径覆盖测试
采用简化循环方法的路径覆盖。不考虑循环的执行次数,只考虑通过循环体
0
次和1
次。即将循环结构转变为选择结构
着重循环结构有效性测试的白盒测试方法
循环结构测试用例的设计有4
种模式:
测试集的几种情况:
1. 零次循环:跳过循环体
2. 通过一次循环体:检查循环初始值
3. 通过两次循环体:检查两次循环
4. m次通过循环体:检查多次循环
5. n-1,n,n+1次通过循环体:检查最大次数循环以及比最大次数多一次,、少一次的循环
嵌套循环
串接循环
如果彼此独立,则采用简单循环;否则采用嵌套循环
需要重新设计结构化程序
主要检查代码和设计的一致性,代码对标准的遵循、可读性,代码逻辑表达的正确性,代码结构的合理性等
代码审查的步骤
代码审查的特点:
通过对源程序代码进行分析、检验来发现程序中的错误。桌面检查关注的是变量的值和程序逻辑
和代码审查类似,只是在会议进程上有所区别。
代码走查中,由测试者为所测程序准备一批代表性的测试用例,由参与者扮演计算机的角色,让测试用例按照代码逻辑运行,记录程序的状态
使用
N-S
图表示基本的控制结构可以用于计算最少测试用例数
测试覆盖准则
Foster
的ESTCA
覆盖准则Woodward
等人的层次LCSAJ
覆盖准则又称为功能测试或数据驱动测试,主要从用户的观点出发,以软件规格说明书为依据,着重测试软件的功能需求,对程序功能和程序接口进行测试
黑盒测试的两种基本方法
确认软件能做什么,不会去考验能力如何
为了破坏软件而设计和执行的测试用例
常见黑盒测试方法:
把所有可能的输入数据划分为若干部分,对每个部分中选取具有代表性的数据作为测试用例
有效等价类:对软件规格说明书来说,合理、有意义的输入数据所构成的集合
无效等价类:不满足程序输入要求或无效的输入数据所构成的集合
划分等价类的几个原则:
划分等价类的标准:
针对是否对无效数据进行测试,将等价类测试分为
不考虑无效数据,测试用例使用每个等价类中的一个值
考虑无效数据,对于有效数据,测试用例从每个有效等价类中取一个值;对无效数据,一个测试用例有一个无效值,其他值均为有效值
边界值分析法的测试用例来自于等价类的边界,是一种补充等价类划分的测试用例设计技术
应用边界值分析法设计测试用例时,应遵循以下原则:
用于分析和表达多个逻辑条件下执行不同操作情况
决策表由四部分组成:
任何一个条件组合的特定取值及其相应要执行的操作称为一条规则,在决策表中贯穿条件项和动作项的一列就是一条规则。
建立决策表的步骤:
决策表适用于:
利用图解法分析输入的各种组合情况,从而设计测试用例的方法,适用于检查程序输入条件的各种情况的组合
讲解
软件测试计划(
STP
)是描述对计算机软件配置,系统或子系统进行合格性测试的计划安排,内容包括进行测试的环境、测试工作的标识及测试工作的时间安排等
测试计划的内容:
软件测试计划是整个软件测试流程工作的基本依据,测试计划中所列条目在实际测试中必须一一执行
软件测试计划的目的是明确测试活动的意图,规范了软件测试内容、方法和过程,为有组织地完成测试任务提供保障
软件测试计划的主要作用:明确测试内容、测试完成时间、测试资源、测试风险、测试方法和过程
测试计划的编制原则:
5W
规则,明确测试的内容与过程测试过程实施所必备的核心文档是:测试计划、测试用例和软件测试报告
测试用例是对一项特定的软件产品进行测试任务描述,体现测试方案、方法、技术和策略
测试用例的内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,并形成文档
一个完整有效的测试用例应该具备的特点有:
\[测试完成率 = 实际测试项数目 / 计划测试项数目 * 100\% \]
\[测试覆盖率 = [Y]项的数目 / 计划测试项数目 * 100\% \]
[Y]
表示测试结果全部通过
主要是通过所开发的软件测试工具、脚本呢等来实现,具有良好的可操作性、可重复性和高效率等特点
测试的自动化部分在于测试过程自动化或测试结果分析自动化
手动测试的目的着重于发现新的软件故障
自动化测试的目的着重于发现旧的软件故障
自动化测试有点:
回归测试:在新版本中存在和旧版本相似的功能,可以复用旧版本的测试
可以运行更多更频繁的测试
可以进行一些手工测试难以完成的任务
自动化测试的适用情况:
代码分析
捕获和回放
捕获:记录用户每一步操作并转换为脚本
回放:将脚本转换为用户的操作
脚本技术
线性脚本
结构化脚本
共享脚本
某个脚本可以被多个测试用例使用
* 数据驱动脚本
* 关键字驱动脚本
白盒测试工具
Logiscope
、PRQA
2. 动态测试工具
DevPartner
、Purify
工具名 | 支持语言 |
---|---|
Jtest | Java |
Jcontract | Java |
C++Test | c/c++ |
Code Wizard | c/c++ |
Insure++ | c/c++ |
.test | .Net |
BiundChecker | c++, Delphi |
TrueTime | c++,java,VB |
Failsafe | VB |
TrueCoverage | c++,java,VB |
CodeReview | VB |
Jcheck | MS Visual J++ |
主要包括功能测试工具、负载测试工具、性能测试工具
WinRunner
Astra Quick Test
LoadRunner
Robot
Team Test
QARun
QALoad
Silk Test
Silk Performer
e-Test
e-Load
WAS
Webload
OpenSTA
* 测试管理工具
用于对测试进行管理。负责对测试计划、测试用例、测试的实施进行管理
TeamManager
、TrackRecord
、TestDirector
上一篇:ASR项目实战-后处理
下一篇:使用redis pipeline