脚本宝典收集整理的这篇文章主要介绍了软件质量保证与测试技术,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
IEEE: 质量是系统、部件或过程满足
软件质量 (GB/T 11457-2006):
软件质量是人们实践产物的属性和行为,是可以认识以及科学描述的,并且可以通过一些方法和人类活动来改进的。 软件质量模型:McCall模型、Boehm模型、ISO 9126模型
三层模型:
三层模型:
定义:任何程序、系统中的问题,和产品设计书的不一致性,不能满足用户的需求
现象:
产生:
构成:
在不同阶段的分布
在真正的程序测试之前,通过审查、评审会可以发现更多的缺陷。 规格说明书的缺陷会在需求分析审查、设计、编码、测试等过程中会逐步发现,而不能在需求分析一个阶段发现。
修复缺陷成本:
软件质量保证(Software QualITy Assurance,SQA)活动是通过对软件产品有计划的进行评审和审计来验证软件是否合乎标准的系统工程,通过协调、审查和跟踪以获取有用信息,形成分析结果以指导软件过程。
对软件工程各个阶段的进展、完成质量及出现的问题进行评审、跟踪。
审查和验证软件产品是否遵守适用的标准、规程和要求,并最终确保符合标准、满足要求。
建立软件质量要素的度量机制,了解各种指标的量化信息,向管理者提供可视信息。
测试 vs. SQA
SQA指导、监督软件测试的计划和执行,督促测试工作的结果客观、准确和有效,并协助测试流程的改进。
软件测试是SQA重要手段之一,为SQA提供所需的数据,作为质量评价的客观依据。
SQA是一项管理工作,侧重于对流程的评审和监控
测试是一项技术性的工作,侧重对产品进行评估和验证
不同的分类:
静态测试:轮查、互审、走读、审查会议(非正式到正式)
动态测试:运行程序
黑盒测试:
白盒测试
小结
功能测试一般须在完成集成测试后进行,而且是针对应用系统进行测试。功能测试是基于产品功能说明书,是在已知产品所应具有的功能,从用户角度来进行功能验证,以确认每个功能是否都能正常使用 。
系统非功能性测试是将软件放在整个计算机环境下,包括软硬件平台、某些支持软件、数据和人员等,在实际运行环境下进行一系列的测试,包括:
主动测试方法:测试人员主动向被测试对象发送请求、或借助数据、事件驱动被测试对象的行为,从而验证被测试对象的反应或输出结果。
被动测试方法:测试人员不干预产品的运行,而是被动地监控产品在实际环境中运行,通过一定的被动机制来获得系统运行的数据,包括输入、输出数据。
Alpha testing is simulated or actual operational testing by potential users/customers or an indePEndent test team at the developers‘ site;Is a form of internal acceptance testing.
Beta testing comes after Alpha testing. Versions of the software, known as beta versions, are released to a limited users outside of the PRogramming team.
代码审查﹑走查等的概念及区别@H_304_325@
定义:对组件/系统进行规格或实现级别的测试,而不是执行这个软件,比如代码评审。
代码检查主要检查代码和设计的一致性,代码对标准的遵循、可读性、代码逻辑表达的正确性及代码结构的合理性等方面,包括以下两种形式:
以组为单位阅读代码,是一系列规程和错误检查技术的集合。
代码审查小组
审查议程与注意事项
错误类型
数据引用错误
数据声明错误
运算错误
比较错误
控制流程错误
接口错误
输入输出错误
其他检查
走查与代码审查大体相同,以小组为单位进行代码阅读,但是规程稍微不同,采用的错误检查技术也不一样。
要掌握用例设计的步骤,并会灵活应用到具体问题上。
等价类划分、边界值分析、决策表、因果图
等价类是某个输入域的子集,在该子集中每个输入数据的作用是等效的。将输入数据分成若干个子集,从每个子集选取一个代表性的数据作为测试用例。
设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受异常数据的考验。经过正反的测试才能确保软件具有更高的可靠性。
在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类
在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类。
在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。
在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
建立等价类表,列出所有划分出的等价类
输入条件 | 有效等价类 | 无效等价类 |
---|---|---|
… | … | … |
… | … | … |
为每个等价类规定一个唯一的编号
设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类
重复3,最后使得所有有效等价类均被测试用例所覆盖
设计一个新的测试用例,使其只覆盖一个无效等价类
重复5使所有无效等价类均被覆盖
用单个测试用例覆盖无效等价类,是因为某些特定的输入错误检查可能会屏蔽或取代其他输入错误检查。例如,若规定了“请输入书籍类型(硬皮、软皮或活页)及数量(1-999)”,代表两个错误输入(书籍类型错误,数量错误)的测试用例“XYZ 0”,很可能不会执行对数量的检查,因为程序会提示“XYZ是未知的书籍类型”,就不检查输入的其余部分了。
有一报表处理系统,要求用户输入处理报表的日期。假设日期限制在2000年1月至2020年12月,即系统只能对该段时期内的报表进行处理。若用户输入的日期不在这个范围内,则显示错误信息。并且此系统规定日期由年月的6位数字组成,前4位代表年,后两位代表月。则检查日期时,有哪些等价类?
测试用例:覆盖1、5、8三个有效等价类测试,只要用201006即可;对无效等价类的测试要分别输入7个非法数据,如200a0b、20102、1012012、198802、203011、200000、202013
如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。
如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少一、比最大个数多一的数作为测试数据。如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例(例如:图片像素)。
如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。
Test cases for ABS(x) : class x < 0, arbitrary value: x = -10 class x >= 0, arbitrary value x = 100 classes x < 0, x >= 0, on boundary : x = 0 classes x < 0, x >= 0, below and above: x = -1, x = 1
测试限制性用户输入:6位正整数
Test cases :
计算机基于二进制工作,软件任何运算都有一定的范围限制。 0 和 1, byte 由8 bits 构成, 字由4 bytes构成, …
ASCII是常见的编码方式
一个二元函数f(x, y)
1=<x<=12
1=<y<=31
(1, 15), (0, 15), (2, 15), (12, 15), (11, 15), (13, 15)
(6, 15)
(6, 1), (6, 0) , (6, 2) , (6, 31) , (6, 30) , (6, 32)
假设商店货品价格(R) 都不大于100元(且为整数),若顾客付款(P)在100元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。 假定此商店的货币面值只包括:50元(N50)、10元(n10)、 5元(N5)、1元(N1) 四种。
在实际应用中,许多输入是由多个因素构成,而不是单一因素,这时就需要多因素组合分析。
对于多因素,有时可以直接对输入条件进行组合设计,不需要进行因果分析,即直接采用判定表方法。
判定表由“条件和活动”两部分组成,即列出一个测试活动执行所需的条件组合,所有可能的条件组合定义了一系列的选择,而测试活动需要考虑每一个选择。
判定表有时也称“决策表”。
“阅读指南”决策表
条件桩:列出问题的所有条件
动作桩:列出可能针对问题所采取的操作
条件项:针对所列条件的具体赋值
动作项:列出在条件项(各种取值)组合情况下应该采取的动作。
规则:任何一个条件组合的特定取值及其相应要执行的操作。
问题要求:”……对功率大于50马力的机器,当维修记录不全或已运行10年以上时,应给予优先的维修处理;对功率小于50马力的机器,当运行超过10年时也优先维修……” 。这里假定,“维修记录不全”和“优先维修处理”均已在别处有更严格的定义 。请建立判定表。
解答: ① 确定规则的个数。这里有3个条件,每个条件有两个取值,故应有2*2*2=8种规则。
② 列出所有的条件桩和动作桩。
③ 填入条件项(二进制的真值表)。 ④ 填入动作项。
⑤ 化简。
化简原则:
假设中国某航空公司规定:
多种输入条件的组合,产生多种结果设计测试用例。
产生背景:
恒等-关系:果 j 取决于因 i。因出现,则果也出现。
非-关系:只有当因 i 不存在时,果 j 才出现。
或-关系:如果因 i1 或因 i2 或……或因 in 存在时,结果 j 才出现。
与-关系:只有当因 i1 与因 i2 与……与因 in 同时存在时,结果 j 才出现。
输入状态之间可能存在某些依赖关系。
输出状态之间也往往存在约束。
在因果图中,用特定的符号标明这些约束。
输入条件的约束有以下4类:
E约束(异):a和b中至多有一个可能为1,即a和b不能同时为1。
I约束(或):a、b和c中至少有一个必须是1,即 a、b 和c不能同时为0。
O约束(唯一):a和b必须有一个,且仅有1个为1。
R约束(要求):a是1时,b必须是1,即不可能a是1时b是0。
@H_360_1119@
输出条件约束类型
输出条件的约束只有M约束(强制):若结果a是1,则结果b强制为0。
某软件规格说明书包含这样的要求:
原因:
1——第一列字符是A; 2——第一列字符是B; 3——第二列字符是一数字。
结果: 21——修改文件; 22——给出信息L; 23——给出信息M。
11为中间节点;考虑到原因1和原因2不可能同时为1,因此在因果图上施加E约束。
表中8种情况的左面两列情况中,原因①和原因②同时为1,这是不可能出现的,故应排除这两种情况。表的最下一栏给出了6种情况的测试用例,这是我们所需要的数据。
有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。其规格说明如下:
假设只能投入5角钱或1元钱:
分析这一段说明,列出原因和结果
原因:
结果:
售货机〖零钱找完〗灯亮 /灭(1或0)
退还1元硬币
退还5角硬币
送出橙汁饮料
送出啤酒饮料
画出因果图,如图所示。所有原因结点列在左边,所有结果结点列在右边。建立中间结点,表示处理的中间状态。中间结点:
投入1元硬币且押下饮料按钮
押下〖橙汁〗或〖啤酒〗的按钮
应当找5角零钱并且售货机有零钱找
钱已付清
转换成判定表
在判定表中,阴影部分表示因违反约束条件的不可能出现的情况,删去。第16列与第32列因什么动作也没做,也删去。最后可根据剩下的16列作为确定测试用例的依据
在许多应用系统的测试工作中,不会象判断三角形那样简单,输入条件的因素很多,而且每个因素也不能简单用“是”和“否”来回答。比如,微软Powerpoint程序的打印测试,也需要考虑4个因素,每个因素也有多个选项
测试组合会变得很多,如果按照传统的测试方法,会导致很大的测试工作量
依据Galois理论,从大量的(实验)数据(测试例)中挑选适量的、有代表性的点(条件组合),从而合理地安排实验(测试)的一种科学实验设计方法
产生背景
测试原理
输入条件 | 完全组合数 | 两两组合数 |
---|---|---|
4个变量每个可取3种值 | (3^4=81) | 9 |
13个变量每个可取3种值 | (3^{13}=1594323) | 15 |
20个变量每个可取10种值 | (10^{20}) | 180 |
系统S有三个输入变量X、Y、Z,其值域分别为:D(X) = {1, 2},D(Y) = {Q, R},D(Z) = {5, 6}.
第一步:列出所有可能的测试用例.
第二步:去掉重复的行。
方法如下:从表的最后一行开始,如果这行的两两组合值能够在上面的行或此表中找到,那么这行就可从用例集中删除。
TestID | Input X | Input Y | Input Z |
---|---|---|---|
TC1 | 1 | Q | 5 |
TC4 | 1 | R | 6 |
TC6 | 2 | Q | 6 |
TC7 | 2 | R | 5 |
语句﹑判定﹑条件﹑逻辑等
逻辑覆盖
以程序或系统的内部逻辑结构为基础,分为语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖等。
路径覆盖
在程序或业务控制流程的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。
基本思想
设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次:
基本思想
一个判定代表着程序的一个分支,所以判定覆盖也被称为分支覆盖。
判定覆盖是一种比语句覆盖更强的准则,但仍然相当不足。
E.g., 若第二个判断存在错误(如把a>1写成了a!=0),那么前面的两个测试用例是无法发现这个错误的。
条件覆盖的基本思想:
设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。
列出所有条件
覆盖所有条件
(a, b ,c)= (2, -1, 0) T1, f2, T3, F4
(a, b ,c)= (-1, 1, 2) F1, T2, F3, T4
条件覆盖不一定比语句覆盖、判定覆盖好!
两个测试用例在两个判断处都是F->T,即判定覆盖没有满足。进而语句覆盖也没有被满足。
判定-条件覆盖是判定和条件覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次。
特定的条件会屏蔽其他的条件,常常并不能全部都执行到。
源程序中的多重条件判断被分解成单个的判断和分支。
大多数机器都没有执行多重条件判断的单独指令。
更为完全的测试覆盖似乎是将每个基本判断的全部可能的结果都执行到。
图示例子中X>1条件对应的决断结果可能不会被测试到。
条件组合覆盖的基本思想
设计足够的测试用例,使得判断中每个条件的所有可能组合值至少出现一次,并且每个判断本身的判定结果也至少出现一次。
与条件覆盖的区别
它不是简单地要求每个条件都出现“真”与“假”两种结果,而是要求让这些结果的所有可能组合都至少出现一次。
示例:
覆盖了所有组合,但只覆盖了两条路径: 125, 134
覆盖了所有组合,但覆盖路径有限,1-2-5 没被覆盖
顾名思义,路径覆盖就是设计所有的测试用例,来覆盖程序中的所有可能的执行路径。
路径覆盖实际考虑了程序中各种判定结果的所有可能组合,但并未考虑判定中的条件结果的组合。因此,虽然说路径覆盖是一种非常强的覆盖,但不能代替条件覆盖和条件组合覆盖。
实际软件系统中,即使一个不太复杂的程序,其路径组合都可能是一个庞大的天文数字,要想在测试中覆盖所有的路径往往不太现实。
圈复杂度(Cyclomatic complexity):也叫环路复杂度,代码逻辑复杂度的度量,提供了被测代码的路径数量。复杂度越高,出错的概率越大。
示例
独立路径: 至少引入一个新的处理语句或条件的任何路径。V(G)值正好等于该程序的独立路径的条数。
基本集: 由独立路径构成的集合,每条路径是唯一的。由基本集导出的测试用例,保证每行代码语句至少被执行一次。
基本集合不一定唯一
基本路径测试并不是测试所有路径的组合,仅仅保证每条基本路径被执行一次
Myers给出了各种测试方法的综合策略:
自顶向下﹑自底向上等集成策略
渐增式测试模式与非渐增式测试模式
非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,如大棒模式。
渐增式测试模式:把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。
驱动模块:用于模拟被测试模块的上一级模块,相当于被测试模块的主程序,用于接收测试数据,并把这些数据传送给被测试模块,启动被测试模块,最后输出实测结果。
桩模块:用于模拟被测试模块工作过程中所调用的模块。桩模块一般只进行很少的数据处理,不需要把子模块的所有功能都带进来,但不允许什么事情也不做。
假设现在项目组把任务分给了7个人,每个人负责实现一个模块。你负责的是B模块,你很优秀,第一个完成了编码工作,现在需要开展单元测试工作。那么要怎么做呢?
做法:
采用大棒集成方法,先是对每一个子模块进行测试(单元测试阶段),然后将所有模块一次性的全部集成起来进行集成测试 。
因为所有的模块一次集成的,所以很难确定出错的真正位置、所在的模块、错误的原因。这种方法并不推荐在任何系统中使用,适合在规模较小的应用系统中使用。
混合法:
优点:它将自顶向下和自底向上的集成方法有机地结合起来,不需要写桩程序,因为在测试初自底向上集成已经验证了底层模块的正确性。
缺点:在真正集成之前每一个独立的模块没有完全测试过。E.g., B and D
通常系统集成都会采用持续集成的策略,软件开发中各个模块不是同时完成,根据进度将完成的模块尽可能早的进行集成,有助于尽早发现Bug,避免集成中大量Bug涌现;而且容易定位Bug、修正Bug,最终提高软件开发的质量与效率。
定义:单元测试是对软件基本的组成单元进行独立的测试
时机:
概念:模块、组件、单元
目标: 单元模块被正确编码
运行单元程序有时需要基于被测单元的接口,开发相应的驱动模块和桩模块。
驱动模块(drive):对底层或子层模块进行测试所编写的调用这些模块的程序。
桩模块(stub):对顶层或上层模块进行测试时所编写的替代下层模块的程序。
业务逻辑是关键
客户需求为导向
性能测试(performance test)就是为了发现系统性能问题或获取系统性能相关指标而进行的测试。
一般在真实环境、特定负载条件下,通过工具模拟实际软件系统的运行及其操作,同时监控性能各项指标,最后对测试结果进行分析来确定系统的性能状况。
获取系统性能某些指标数据
验证系统是否达到用户提出的性能指标
发现系统中存在的性能瓶颈,优化系统的性能
性能验证测试,验证系统是否达到事先已定义的系统性能指标、能否满足系统的性能需求
性能基准测试,在系统标准配置下获得有关的性能指标数据,作为将来性能改进的基准线
性能规划测试,在多种特定的环境下,获得不同配置的系统的性能指标,从而决定在系统部署时采用什么样的软、硬件配置
压力测试(Stress test),也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等。
在一种需要反常(如长时间的峰值)数量、频率或资源的方式下,执行可重复的负载测试,以检查程序对异常情况的抵抗能力,找出性能瓶颈或其它不稳定性问题。
并发性能测试的过程也是一个负载测试过程,即逐渐增加并发虚拟用户数负载,直到系统出现性能瓶颈或者崩溃为止。
破坏性压力测试,通过不断加载的手段,快速造成系统的崩溃,让问题尽快地暴露出来
采用系统稳定运行情况下能够支持的最大负载,持续长时间运行,以发现性能问题。
独立的数据量测试:针对某些系统存储、传输、统计、查询等业务进行大数据量测试
综合数据量测试:和压力/负载性能测试、并发性能测试、疲劳性能测试相结合的综合测试方案
性能测试需求:用户对各项指标提出的明确需求;如果用户没有提出性能指标,则根据用户需求、测试设计人员的经验来设计各项测试指标。(需求+经验)
主要的性能指标:服务器的各项指标(CPU、内存占用率等)、后台数据库的各项指标、网络流量、响应时间
只有具备了清楚而量化的性能指标,性能测试才能开始实施。
最终用户的体验,如2-5-10原则 商业需求,如“比竞争对手的产品好” 技术需求,如CPU使用率不超过70% 标准要求
响应时间是用户的关注点,容量和数据吞吐量是(产品市场团队)业务处理方面的关注点,而系统资源占用率是开发团队的技术关注点
不可能/不需要对Web应用系统的所有功能进行性能测试,而是根据业务的实际操作情况和技术的角度来分析,选择关键业务
Jmeter、LoadRunner、Jprofiler
验收测试 (Acceptance Test): 在软件产品完成了系统功能和非功能测试之后、产品发布之前所进行的软件测试活动它是技术测试的最后一个阶段,也称为交付测试。
前提:系统或软件产品已通过了系统测试的软件系统。
测试内容:
验证系统是否达到了用户需求规格说明书(可能包括项目或产品验收准则)中的要求,测试尽可能地发现软件中存留的缺陷,从而为软件进一步改善提供帮助,并保证系统或软件产品最终被用户接受。
主要包括易用性测试、安装测试、文档(如用户手册)测试等几个方面的内容。
验收测试完成标准:
注意事项:
α 测试: 开发公司组织内部人员模拟各类用户行为对即将面市的软件产品(称为α版本)进行的测试,试图发现错误并修正。
β 测试:组织外部的典型用户在日常工作中实际使用β版本,并要求用户报告异常情况、反馈使用意见。然后软件开发公司再对β版本进行改错和完善。
回归测试的目的
一旦程序某些区域被修改了,就可能影响其它区域,导致受影响的区域出现新的缺陷(回归缺陷)。如果这时没有回归测试,产品就带着这样的回归缺陷被发布出去了,造成严重后果。回归测试就是为了发现回归缺陷而进行的测试。
对Junit,EasyMock jprofiler , jmeter,QTP等测试功能和工具的了解
关于软件测试与软件开发过程的关系,下列描述哪些是正确的? A、没有开发过程就没有测试过程 B、测试过程是为保证开发过程的产出进行验证和确认的一系列活动 C、不同的软件开发过程模型中,测试在其中所处的位置不同 D、开发比测试更重要 答案:abc
W模型是基于“尽早地和不断地进行软件测试”的原则。 答案:×
下列哪项测试是对Web网站的功能测试? A、安全性测试 B、平台测试 C、连接速度测试 D、链接测试 答案:D
基于JUnit设计单元测试脚本时,用于支持同时执行多个测试用例的运行器是: A、Categories B、TestCase C、Parameterized D、Suite 答案:D
下列哪几项可以用来检查需求? A、需求规格说明书 B、测试计划书 C、产品说明书 D、测试用例 答案:AD
测试计划的要点包括以下哪些? A、计划调整 B、进度安排 C、模拟测试结果 D、确定测试范围 答案:BD
报告bug时注意的问题有哪些? A、提供软件测试环境 B、注意测试结果 C、附加必要的截图和文件 D、不要出现错别字 答案:ACD
下列哪些工具是性能测试工具? A、JUnit B、JMeter C、JProfiler D、LoadRunner 答案:BCD
单元测试通过的标准是什么? A、程序通过所有的单元测试用例 B、语句覆盖流程达到100% C、分支覆盖率达到85% 答案:ABC
选择集成测试方式时,需要着重考虑以下哪些问题? A、哪些模块是集成测试的重点 B、模块接口的重要程度 C、开发驱动模块和桩模块的复杂度 D、采用哪种测试设计技术检测每个接口比较合适 答案:ABD
以上是脚本宝典为你收集整理的软件质量保证与测试技术全部内容,希望文章能够帮你解决软件质量保证与测试技术所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。