软件缺陷是指计算机或系统存在的任何一种破坏正常运行能力的问题,错误或隐藏的功能缺陷,瑕疵,其结果会导致软件产品在某种程度上不能满足用户需求。
技术问题
算法错误,语法错误,计算和精度问题,接口参数传递不匹配
团队工作
沟通不充分,误解
软件本身
底层测试
单元测试,验证软件单元(组件/模块/类/函数)是否符合软件需求与设计,开发人员自测。
接口层次
集成测试,将已经测试过的软件单元组合在一起测试它们之间的接口,用于验证软件是否满足设计需求。
系统层次
系统测试,将经过测试的软件在实际环境中运行,并与其他系统的成分(如数据库、硬件和操作人员等)组合在一起进行测试。
用户/业务层次
验收测试,主要是对软件产品说明进行验证,逐行逐字的按照说明书的描述对软件产品进行测试,确保其符合客户的各项要求。
★黑盒测试:基于需求的测试方法,把软件(程序)当作一个有输入与输出的黑匣子,它把程序当作一个输入域到输出域的映射,只要输入的数据能输出预期的结果即可,不必关心程序内部是怎么样实现的。
★白盒测试:结构化测试方法,测试人员了解软件程序的逻辑结构、路径与运行过程,在测试时,按照程序的执行路径得出结果。白盒测试就是把软件 (程序)当作一个透明的盒子, 测试人员清楚的知道从输入到输出的每一步过程。
静态测试
包括对软件产品的需求和设计规格说明书的评审、对程序代码的审查和静态分析等
动态测试
功能测试( Functionality Testing ),也称正确性测试( Correctness Testing ),验证每个功能是否按照事先定义的要求那样正常工作。
性能测试( Performance Testing ):评测与分析系统在不同负载(如并发用户、连接数、请求数据量等)条件下的系统运行情况、性能指标等。
★压力测试( Stress Testing )也可以算性能测试,侧重在高负载、极限负载下的系统运行情况,以发现系统不稳定、系统性能瓶颈、内存泄漏、 CPU 使用率过高等问题。
安全性测试( Security Testing ):测试系统在应对非授权的内部/外部访问、故意损坏时的系统防护能力。
兼容性测试( Compatibility Testing ):测试在系统不同运行环境(如网络、硬件、第三方软件等)环境下的实际表现,也包括共存、互操作的验证。
可靠性测试( Reliability Testing ):检验系统是否能保持长期稳定、正常地运行,如确定正常运行时间,即平均失效时间( Mean Time Between Failures , MTBF )。可靠性测试包括强壮性测试( Robustness Testing )和异常处理测试( Exception Handling Testing )。
可恢复性测试( Recovery Testing )也可以归为可靠性测试,侧重在系统崩溃、硬件故障或其他灾难发生之后,重新恢复系统和数据的能力测试。
易用性测试( Usability Testing ):也称为用户体验测试,检查软件是否容易理解、使用方便和流畅、界面美观、交互友好等。
回归测试( Regression Testing ):为保证软件中新的变化(如新增加的代码、代码修改等)不会对原有功能的正常使用有影响而进行的测试。也就是说,满足用户需求的原有功能不应该因为代码变化而出现任何新的问题。
软件质量保证(Software Quality Assurance,SQA)活动是通过对软件产品有计划的进行评审和审计来验证软件是否合乎标准的系统工程,通过协调、审查和跟踪以获取有用信息,形成分析结果以指导软件过程。
软件质量是指软件产品满足基本需求及隐式需求的程度。
软件产品满足基本需求是指其能满足软件开发时所规定需求的特性,其次是软件产品满足隐式需求的程度。
缺陷越多,质量越差,这是对立关系;发现缺陷,及时修复,提高质量,这是统一关系。
有效等价类就是有效值的集合,它们是符合程序要求、合理且有意义的输入数据。
无效等价类就是无效值的集合,它们是不符合程序要求、不合理或无意义的输入数据。
输入数据类型 | 划分等价类规则 | 划分等价类规则 |
---|---|---|
布尔值 | 1个有效等价类:TRUE | 1个无效等价类:FALSE |
连续取值范围 | 1个有效等价类:正确取值范围 | 2个无效等价类:大于和小于取值范围 |
数据个数 | 1个有效等价类:正确数据个数 | 2个无效等价类:大于和小于数据个数 |
集合 | 1个有效等价类:正确的集合取值 | 1个或多个无效等价类 |
需分别处理的输入数据 | 多个有效等价类:每个输入数据为1个等价类 | 1个无效等价类 |
符合某些规则的输入 | 多个有效等价类:符合某个规则的输入数据为1个等价类 | 若干个无效等价类 |
区间
如果某个输入条件指定了一个连续的有效取值范围,则可以定义一个有效等价 类和两个无效等价类
数据个数
如果某个输入条件指定了输入的数据个数约束,则可以定义一个有效等价类和两个无效等价类
数据长度
数据类型
三角形问题的等价类划分✦
输入3个正数a、b、 c作为三角形的三条边,判断这3个数构成的是一般三角形、等边三角形、 等腰三角形,还是无法构成三角形。
余额宝提现的等价类划分
快速到账可以累积分次提取:快速到 账的日提现金额为10000,表明在一 天之内,只要提现金额没有累积到 10000,则可多次提取,据此,可以 将快速到账细分为第1次提现和第n次 提现,第n次提现的最大金额为 10000减去已经提现的金额。
在边界附近寻找某些点作为测试数据,而不是在等价类内部选择测试数据。
技巧※
上点:边界上的点(绿色)
离点:离边界最近的点(黄色)
内点:范围内的点(蓝)
三角形问题
输入3个正数a、b、 c作为三角形的三条边,判断这3个数构成的是一般三角形、等边三角形、 等腰三角形,还是无法构成三角形。
如果要求三角形的边长取值范围为 1~100,则可以使用边界值分析法对 三角形边界边长进行测试,在设计测试用例时,分别选取1、2、50、99、 100五个值作为测试数据。
测试用例:
余额宝提现
快速到账可以累积分次提取:快速到 账的日提现金额为10000,表明在一 天之内,只要提现金额没有累积到 10000,则可多次提取,据此,可以 将快速到账细分为第1次提现和第n次 提现,第n次提现的最大金额为 10000 减去已经提现的金额。
假设余额宝中余额为50000
测试样例
实质是一种逻辑表。 它可以把复杂的逻辑关系和多种条件组合的情况表达的既具体又明确,利用决策表可以设计出完整的测试用例集合。
不影响结果取值的原因称为无关条件项,用“-” 表示。忽略无关条件项,可以将多条规则合并。
三角形问题✦
工资发放决策表
因果图使用一些简单的逻辑符号和直 线将程序的因(输入)与果(输出) 连接起来,一般原因用ci表示,结果 用ei表示,ci与ei可以取值“0”或 “1”,其中“0”表示状态不出现, “1”表示状态出现。
恒等(等价)关系
若原因出现,则结果出现;若原因不出现,则结果也不出现。
非关系
若原因出现,则结果不出现;若原因不出现,则结果出现。
或关系
若几个原因中有1个出现,则结果出现;若原因都不出现,则结果不出现。
与关系
若几个原因都出现,结果才出现。 若其中有1个原因不出现,则结果不出现。
互斥 (E)
表示C1、C2两个原因不会同时成立,两个中最多有一个可能成立。
包含 (I)
表示C1、C2、C3这3个原因中至少有一个必须成立。
唯一 (O)
表示C1和C2当中必须有一个,且仅有一个成立。
要求 (R)
表示当C1出现时,C2必须也出现。C1出现时不可能C2不出现
屏蔽 (M)
表示当E1是1时,E2必须是0。而当E1为0时,E2的值不定。
来源:PPT和实验三
题干
当输入第一个字符是‘#’ 或者是‘*’ ,第二个输入字符是数字时,文档将被修改;如果第一个输入字符不是‘#’ 或 ‘*’ ,则输出消息N,如果第二个输入字符不是数字,则输出消息M。
原因和结果
编号 | 原因 | 编号 | 结果 |
---|---|---|---|
C1 | 第一个输入是‘*’ | R1 | 修改文件 |
C2 | 第一个输入是‘#’ | R2 | 输出消息 N |
C3 | 第二个输入是数字 | R3 | 输出消息 M |
因果图
决策表
1 | 2 | 3 | 4 | 5 | 6 | ||
---|---|---|---|---|---|---|---|
条件 | C1 | T | F | F | T | F | F |
C2 | F | T | F | F | T | F | |
C3 | T | T | T | F | F | F | |
结果 | R1 | √ | √ | ||||
R2 | √ | √ | |||||
R3 | √ | √ | √ |
测试用例
测试用例编号 | 决策表规则编号 | 测试用例 | 预期执行结果 |
---|---|---|---|
1 | 1 | *1 | 修改文件 |
2 | 2 | #2 | 修改文件 |
3 | 3 | a3 | N |
4 | 4 | *b | M |
5 | 5 | #c | M |
6 | 6 | de | N和M |
来源:课本P52
实质上跟上面一样,只是换了种说法,但是书上的答案好像有点问题
PairWise(又称全对偶)策略是组合测试中的一种设计测试用例的方法,可以有效地、合理地减少输入条件的组合数
从大量的(实验)数据(测试例)中挑选适量的、有代表 性的点(条件组合),从而合理地安排实验(测试)的一 种科学实验设计方法
前面的是黑盒测试,这里是白盒测试
设计尽可能少的测试用例,使得被测模块中每一条语句都至少执行一次。
判定覆盖(Decision Coverage)又称为分支覆盖,其原则是在测试过程中保证每个判定至少有一次为真值,有一次为假值
条件覆盖(Condition Coverage)指的是使判定语句中的每个逻辑条件取真值与取假值至少出现一 次。
把复合判定表达式降维处理,使得每个流程图中每个判定节点中只包含一个条件。
测试数据1,要求(a>1)、(b==0)、 (a==2)和(x>1)同时满足,为此选择测试数据为a=2, b=0, x=5
测试数据2,要求(a≦ 1)、(b≠0)、(a≠2) 和**(x≦ 1)**同时满足,为此选择测试数 据为a=1, b=1, x=1
注意每一个条件的否定都要出现过
设计尽可能少的测试用例,使得每个判定表达式中条件的所有可能组合都能被覆盖到。
设计尽可能少的测试用例,使得被测软件模块中所有可能的执行路径都至少被执行一次。
根据设计或代码导出程序流程图的拓扑结构-控制流图G;
计算流图G的圈(环路)复杂度 V(G);
强连通图的圈 复杂度V(G)即图中独立路径的数量。
确定只包含独立路径的基本路径集;
设计测试用例使得集合中每一条独立路径均被执行一次。
V(G)=e-n+2
G为一个有向强连通图,e为图G中的边数,n为图G中的结点数。
判定节点数+1
判定节点:出度为2的节点
V(G)=R
R代表平面被控制流图分割成的区域数
三角形逻辑覆盖问题
将复杂的测试工作分成了目标明确的小阶段完成,具有阶段性、顺序性和依赖性,它既包含了对于源代码的底层测试也包含了对于软件需求的高层测试。
只能在编码之后才能开始测试,早期的需求分析等前期工作没有涵盖其中,因此它不能发现需求分析等早期的错误,这为后期的系统测试、验收测试埋下了隐患。
测试范围不仅包括程序,还包括需求分析、软件设计等前期工作,这样有利于尽早全面的发现问题。
它将软件开发过程分成需求、设计、编码、集成等一系列的串行活动,无法支持迭代、自发性等需要变更调整的项目。
对软件模块的正确性进行分析和检验,测试软件模型的功能、接口、数据结构、算法、错误处理等方面是否存在问题。
相当于被测模块的主程序。它接收测试数据,把这些数据传送给被测模块,最后输出实测结果。
用以代替被测模块调用的子模块。桩模块可以做少量的数据操作,不需要把子模块所有功能都带进来,但不允许什么事情也不做。
Junit是一个开放源代码的Java测试框架(单元测试框架体系xUnit的一个实例),用在编写和运行可重复的的测试上
将已经测试过的软件单元组合在一起测试它们之间的接口,用于验证软件是否满足设计需求。
在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需要考虑:
穿越模块接口的数据是否会丢失;
一个模块的功能是否会对另一个模块的功能产生不利的影响;
各个子功能组合起来,能否达到预期的父功能;
全局数据结构是否有问题;
单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。
单个模块的错误是否会导致数据库错误。
软件集成测试完成后、得到完整的软件系统时,由测试人员或质量保证人员对软件进行分析和验证,来确保质量需求(功能、 性能、压力、负载、容错性、兼容性、安全性、可靠性,等等) 的满足情况。
依据产品设计规格说明书完成对产品功能进行操作,以验证系统是否满足用户的功能性需求。
测试工具
一旦程序某些区域被修改了,就可能影响原来正常工作的区域,导致受影响的区域出现回归缺陷。
原来正常工作的功能,没有发生需求变化,而由于受其它改动影响而产生的问题。
为了发现回归缺陷而进行的测试。如果没有回归测试,产品就带着回归缺陷被发布出去了,造成严重后果。
发现系统性能问题或获取系统性能相关指标,如响应时间、吞吐量、并发用户数、TPS、点击率、资源利用率等。
LoadRunner是一款适用于各种体系架 构的性能测试工具,它能预测系统行为并优化系统性能,其工作原理是通过模 拟一个多用户(虚拟用户)并行工作的 环境来对应用程序进行负载测试
Jmeter是由Apache开发维护一款开源免费的 性能测试工具,Jmeter以Java作为底层支撑 环境,它最初是为测试Web应用程序而设计 的,但后来随着发展逐步扩展到了其他领域。 现在Jmeter可用于静态资源和动态资源的测 试,例如,它可用于模拟服务器、服务器组、 网络或对象上的重负载以测试其强度、分析不同负载类型下的整体性能。
软件安全性测试就是检验系统权限设置有效性、防范非法入侵的能力、数据备份和恢复能力等,设法找出上述各种安全性漏洞。
使非法侵入的代价超过被保护信息的价值,此时非法侵入者已无利可图。
兼容性测试是在特定的或不同的硬件、网络环境和操作系统平台上、不同的 应用软件之间,验证软件系统能否正常地运行,以及能否正确存取原先版本的用 户数据所进行的测试。
软件系统在规定的时间内及规定的环境条件下,完成规定(的) 功能的能力
I18N是借助功能设计和代码实现中软件系统有能力 处理多种语言和不同文化,使创建不同语言版本 时,不需要重新编写代码的软件工程方法。
L10N是将一个软件产品按特定国家/地区或语言市场的需要进行加工,使之满足特定市场上的用户对语言和文化的特殊要求的软件生产活动。
G11N = I18N + L10N
书上好像把测试自动化与自动化测试混为一谈了…
自动化测试(automated test)是相对手工测试而存在的一个概念,由手工逐个地运行测试用例的操作过程被测试工具自动执行的过程所代替。
如果考就随便在软件测试的类别中选一个熟悉的回答算了
chatGPT 3.5
百度百科
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。