软件测试方法-概述总结-8
一:基于直觉和经验的方法
基于直觉和经验的测试方法,不是严格意义上的科学测试方法,带有一定的随意性,测试结果不够可靠,甚至可以看作是没有办法的办法。但软件测试具有社会性,呈现一定的不确定性,这时直觉和经验发挥很好的作用;
1> Adhoc测试
当软件测试没有适当的规划和文档时,它被认为是Adhoc Testing,自由测试,强调测试人员的经验,不受测试用例约束,放开思路灵活进行各种测试;Adhoc测试严格意义上是测试方法的一种补充手段;
Adhoc测试形式含义伙伴测试两个伙伴,一个来自开发团队,另一个来自测试团队相互工作,在同一个模块中识别缺陷。好友测试有助于测试人员开发更好的测试用例,而开发团队也可以提早进行设计更改。这种测试通常在完成单元测试后发生。对测试两个测试人员被分配相同的模块,他们分享想法并在同一系统上工作以找到缺陷。一名测试人员执行测试,而另一名测试人员记录了他们的发现。猴子测试测试是随机执行的,没有任何测试用例,以便破坏系统。完善Adhoc测试操作准备通过获取类似应用程序的缺陷详细信息,在应用程序中发现缺陷的可能性更大。创建一个粗略的想法-通过创建一个粗略的想法,测试人员将有一个重点的方法。不需要将详细的计划记录为要测试和如何测试。分歧和规则通过逐部测试应用程序,我们将更好地关注和更好地了解问题。针对关键功能-测试人员应针对在设计测试用例时未涵盖的范围。使用工具-也可以通过使用剖析器,调试器甚至任务监视器将缺陷引导到石灰光。因此,精通使用这些工具可以发现几个缺陷。记录结果-虽然测试是随机进行的,但如果时间允许,最好记录测试,并记下偏差(如果有的话)。如果发现缺陷,则创建相应的测试用例,以帮助测试人员重新测试场景。
2> ALAC测试
ALAC(Act-like-a-customer)测试: ALAC测试是一种基于客户使用产品的知识开发出来的测试方法。ALAC测试是基于复杂的软件产品有许多错误的原则。最大的受益者是用户,缺陷查找和改正将针对哪些客户最容易遇到的错误。其出发点是著名的 Parteto 80/20 定律;
序列思想1软件上全部功能中20%为常用功能,而客户在使用中80%时间在使用这20%的功能2测试中所有的错误80%的缺陷很可能集中在20%的程序模块中,另外20%可能集中在剩下的80%的程序模块中基于这一思想,考虑复杂的软件产品肯定存在许多错误,而测试时间有限,然后像客户那样,对常用的功能进行测试;
3> 错误推测法
有经验的测试人员往往可以根据自己的工作经验和直觉推断出程序可能性存在错误,而有针对性进行测试,这就是错误推断法;其可以组织小组进行错误猜测,进行错误推断测试,但其只能用作辅助手段;
相关黑盒其他测试方法
https://blog.csdn.net/weixin_42914706/article/details/117609959
二:基于输入域的测试方法
1> 等价类划分法
2> 边界值分析法
相关黑盒其他测试方法
https://blog.csdn.net/weixin_42914706/article/details/117609959
三:基于组合及其优化的方法
1> 判定表法
2> 因果图法
3> 正交试验法
4> Pair-wise方法
Pair-wise方法:也称成对组合测试,两辆组合测试,即将众多结果的值两两组合在一起从而大大减少测试用例组合;可以看作是正交测试用例设计的拓展,其目的是为了缩减测试用例集大小,以较小的测试用例集覆盖较全的测试点,降低测试损耗。
基础:
这种方法是由Mnadl 在1985年在测试Ada编译程序时提出的,经研究显示,通过成对覆盖测试技术,其模块覆盖率为93.5%,判断覆盖率为83%,满足测试基本要求,具有经济有特点;
1. Pair-wise方法 demo
例如:在在线购物网站有多种条件影响操作界面或操作功能,主要有以下几个方面。
登录方式:登录、未登录、正常登录
会员状态:非会员、会员、VIP会员、雇员、
折扣:没有、假期95折、会员9折、VIP会员8折
物流方式:标准、快递、加急
如果完全组合,其组合数为3x4x4x3=144 ,但采用两两组合只有17种,如下图所示:
Pair-wise方法 示例
序号登录方式会员状态折扣物流1未登录雇员假期95折快递2正常登录会员假期95折加急3第一次登录VIP会员没有标准4未登录非会员VIP会员8折标准5正常登录非会员没有快递6未登录雇员没有加急7第一次登录非会员假期95折加急8第一次登录VIP会员会员9折快递9未登录会员没有标准10正常登录雇员VIP会员8折标准11未登录VIP会员VIP会员8折加急12未登录雇员会员9折标准13正常登录VIP会员假期95折标准14正常登录非会员会员9折加急15第一次登录雇员VIP会员8折快递16第一次登录会员会员9折快递17正常登录会员VIP会员8折标准
以上还可以添加约束条件,未登录-非会员、第一次登陆-VIP会员、会员-会员9折、VIP会员-VIP会员8折;
四:基于逻辑覆盖的方法
白盒测试方法
https://blog.csdn.net/weixin_42914706/article/details/117492784
1> 判定覆盖
2> 条件覆盖
3> 判定-条件覆盖
4> 条件组合覆盖
5> 基本路径覆盖
五: 基于缺陷模式的测试
1> 缺陷模式介绍
基于缺陷模式的测试:Defect Pattern based testing,DPBD-对于过去所发现的缺陷来进行归纳和整理,抽象出共性,生成缺陷模式,然后基于这个问题去预防问题;也可以用这种模式来检查被测对象,看是否有相互匹配的问题;
错误猜想法一般属于手工测试,而将常见的缺陷模式固化到工具中,可以通过工具静态的完成测试;例如:FindGugs、flawfinder、Klocwork Insight 、Fortify Static code Analyzer等,都是基于缺陷模式实现的;
基于缺陷模式的测试介绍优点具有测试效率高、对逻辑复杂故障测试好、并且比较容易实现自动化测试,可以发现其他不能发现的缺陷,只要建立规则,就不需要开发测试脚本、测试的投入低,产出高、应用效果良好缺点误报问题:这是基于缺陷模式软件测试技术的一个共性问题;漏报问题:主要是由缺陷模式定义和模式检测算法引起;模式机理:编程中,程序员具有较强的个体,因此缺陷的模式是多种多样的;通常软件故障来源于程序员,如错误理解、二义性造成、疏忽和遗漏造成
2> 常见缺陷模式
大量的 测试数据统计分析发现,有些软件的缺陷是有共性的,所以总结了比较常见的缺陷模式;
缺陷模式类型讲解故障模式即是常见的软件故障,如:内存泄露、使用空指针、数组越界、非法计算、使用未初始化变量、不完备的构造函数、操作符异常等;安全漏洞模式即为他攻击系统提供可能,而一旦攻击者得手,系统可能发生瘫痪,造成很大的危害;此类缺陷应尽量避免,如:缓冲区溢出漏洞模式、被感染数据漏洞模式、竞争条件数据漏洞模式、风险操作随机漏洞模式等差性能模式软件运行时效率比较低,建议采用更高效的代码来运行同样的功能;该模式主要包含了调用了不必要的基本类型包装类的构造方法、空字符串比较、赋值字符串、未声明的内部类、参数为常数的数学方法等;并发缺陷模式针对程序员对多线程、java虚拟机的工作不了解引起的,以及由于线程启动的随意性和不确定性使用户无法确定所编写代码具体何时执行而导致公共区域的错误使用;如:死锁等不良习惯模式该模式主要是用于程序员编写代码的不好习惯造成的一些错误。包括:文件的空输入、垃圾回收问题、以及类方法和域的命名问题,方法调用,对象序列化,域始化,参数传递和代码安全性问题等代码国际化模式该模式主要在语言进行国际化的过程中,可能 造成本地设置程序需求不符的情况,造成匹配错误;易诱骗代码模式该模式主要是指代码中容易引起歧义的、迷惑的编码方式;例如:无意义的比较、永远是真值的判断、条件分支使用相同判断、声明了却未使用的域等;
3> DPBD 测试过程
DPBD 测试过程步骤内容介绍1预处理由于在源程序中存在宏定义、文件包含和条件定义等预处理命令,因此在进行词法分析前需要进行预编译,将宏进行展开,这样有利于变量的查找;2词法分析将预编译阶段产生的中间代码进行分解,形成各种符号表,为语法分析做准备,符号表的主要结构由标识符表、类型表、关键字表、常数表、运算符表和分节符表;3语法分析和语句处理主要是将输入字符串识别为单词符号流,并按照标准的语法规则,对源程序做进一步分析,区分出变量定义、赋值语句、函数等;语法分析的结果是生成语法树,并提供对外的接口。此外通过语法树可生成程序的控制流程图和变量的定义使用链,为下一步故障排查做准备;4抽象语法树生成语法分析和语法处理后生成抽象语法树,源程序种所有的语句都作为抽象语法树的节点。抽象语法树是后续操作基础,含有后续所有信息5控制流图生成在抽象语法树的基础上生成控制流程图,描绘程序结构,生成此图必须反应源程序的结构;6IP扫描这是测试过程的关键步骤,首先定义测试模型,然后再控制流程图上遍历在对测试模型进行匹配,从而生成IP报表,工具所能检测的故障的集合取决于定义的测试模型的集合;7人工确认由于误报的存在,因此需要对生成的IP进行人工确认;
六:基于模型的测试
模型是对系统的抽象,是对被测系统的预期行为动作的抽象描述,实际上是用语言把一个系统的行为描述出来,定义系统的各种状态及其状态间转换的关系,例如,随机模式,贝叶斯图解模型,有限状态模型等;
1> 介绍及图示
基于模型的测试是利用模型来生成相应的测试用例,然后根据实际结果和原先预测结果的差异的测试系统;
如图:先从概念上形成模型,然后试图用数学的方法来描述这个模型,逐渐实现这个模型,形成仿真模型,完成所需要测试;
基于模型的测试-往往不是针对被测系统进行,而是根据算法、规则、针对于源代码进行检测;
基于模型的测试-不能替代已有的其他测试技术,而是对其他测试技术是一个有力的技术补充;
基于模型的软件测试已应用于通信协议测试、API测试等;
七:功能图法
1> 介绍
一个程序的功能通常由静态说明和动态说明组成,动态说明描述了输入数据的次序或者转换的次序;静态说明描述了输入条件和输出条件之间对应的关系。复杂程序往往使用静态说明不能够充足的测试,必须通过动态说明的来补充测试;功能图就是因此产生的一种测试用例设计方法;
项目介绍简介就是使用功能图形式化的表示程序的功能说明,并机械的生成功能图的测试用例。组成状态迁移图和逻辑功能模型组成状态迁移图用于表述输入数据序列以及相应的输出数据,由输入和当前的状态决定输出数据和后续状态逻辑功能模型用于表示在状态输入条件和输出条件之间对应关系,逻辑功能模型只适用于描述静态描述状态,输出数据仅由输入数据决定
2> 功能图法 demo
测试用例需要覆盖一系列的系统状态,并依靠输入输出数据满足的一堆条件来触发每个状态发生;
例如:假设进行windows 的屏幕保护程序测试的程序流程图、状态迁移图、对应的逻辑功能表
- 程序流程图
- 状态迁移图
- 逻辑功能表
逻辑功能表操作Item输入Esc键按下I1输入其他键按I2输入正确的密码输入I3输入不正确的密码输入I4输出显示密码输入框O1输出密码错误提示O2状态空闲状态S1状态等待输入密码S2状态返回空闲状态S3状态初始化屏幕S4
下面需要利用功能图来生成测试用例,从逻辑功能表中,可以根据所有的输入输出以及状态来生成所需要的节点和路径,形成实现功能图的基本路径组合;
八: 模糊测试方法
1> 介绍
模糊测试(Fuzz Testing)的理论和应用目前都已成熟,已有各种Fuzz安全测试的框架、工具和书籍问世。在信息安全领域,很多安全测试都引入了Fuzz Testing思想进行安全漏洞挖掘
模糊测试是一种介于完全的手工渗透测试与完全的自动化测试之间的安全性黑盒测试类型。它充分利用了机器的能力:随机生成和发送数据,同时尝试将安全专家在安全性方面的经验引入。从执行过程的角度来说,模糊测试的执行过程非常简单,大致可以分为如下5个阶段。
2> 测试步骤
- 确定输入向量 几乎所有可以被攻击者利用的安全漏洞都是因为应用程序没有对用户输入进行安全的边界校验,或者对非法输入有过滤但并不完全造成的。能否实施有效的模糊测试,关键在于能否准确地找到输入向量。我们将确定输入向量的原则定义为:一切向测试目标程序输入的数据都应该被认为是危险的,所有输入向量都可能是存在潜在安全风险的模糊测试变量。
- 生成模糊测试数据 识别所有的输入向量之后,就可以依据输入向量产生模糊测试数据。产生模糊测试数据的方式主要有两种:一种是通过预先确定的值,使用基于已存在的数据通过算法将其变异,生成新的测试数据;另一种是通过分析被测试应用程序及其使用的数据格式,动态生成测试数据。无论选择哪一种方式,都应该使模糊测试数据的生成自动化,否则将大大降低测试效率。
- 执行模糊测试 在完成前面两个步骤以后,就可以执行模糊测试了。在这一步中,需要依据测试目标的不同选择不同的测试方法,一般会向被测试目标发送数据包、利用被测试程序打开包含测试数据的文件等。与生成模糊测试数据一样,执行模糊测试同样需要实现自动化。
- 监视异常 在进行模糊测试的过程中,一个非常重要的步骤就是对测试过程中的异常和错误进行监控。模糊测试的目的不仅是希望确定被测试程序是否有安全漏洞,更重要的是确定程序为何会产生异常,以及产生异常后对漏洞进行重现,从而使安全专家可以针对漏洞编写测试代码,以确定漏洞的存在,同时,厂商可以对漏洞进行及时的修补。
- 根据被测系统的状态判断是否存在潜在的安全漏洞 如果在模糊测试中发现了一个程序错误,依据我们的审计目的,需要判断这个程序错误是一个可利用的安全漏洞还是程序Bug。
3> 模糊步骤 demo
例如:微软的字处理软件word!如果要测试word 的容错性,需要考虑不同文件来验证?像创建几十万个word 文档来验证,他们的文件名、大小、内容都不相同,是随机的,这些文件并不是手动来创建的,需要开发脚本或者工具来创建生成这种测试文件;总之其测试结果会出现以下三种情况
- 对于大多数测试文件,会出现文件格式无法识别或者文件已被破坏无法打开此文件等错误提示
- 少说文件将可以正常打开,在几十万个文件中可能包含某些可识别控件或者可打印字符组合;
- word 可能会出错,可能有几个文件包含文件分析程序没有预见到的数据 这三种问题,正式模糊测试的方法与价值,发现word中的问题;
九: 形式化测试方法
在软件需求定义中,都采用自然语言描述时候,其语意不清晰或则存在歧义;一般软件测试可以接受,但对于比较敏感的软件测试,这类问题必须得到解决;
为了解决自然语言的设计和描述带来的问题,人们提出了形式化的方法
1> 介绍
形式化方法含义目的解决自然语言的设计和描述带来的问题基础形式化方法基础是数学和逻辑学,通过严格的数字逻辑和形式化的语言来完成软件定义,其结果清晰、无歧义;然后可以通过相应的工具实施自动化分析、编码和验证;应用UML -Unified Medoling Language,统一建模语言可以看作是一种半形式化的方法;缺点不能保证不出现错误;因在非形式化的客观需求与形式化规范之间关系难以很好的处理;他更大作用体现在软件的规格和验证之上这包括软件的精确建模和软件规格特性的具体描述
形式化规范说明语言分三个部分:
- 语法:定义表现规定约束的特殊顶符号
- 语义:帮助定义用于描述系统的对象及其属性
- 一组关系:定义如何确定某个对象是否满足规约的规则
实际上就是基于数学的方法来描述目的软件系统属性的一种技术;不同形式化方法的数学基础是不同的;例如:
- VDM就是基于一阶谓词逻辑和已建立的抽象数据类型来描述每个运算或函数的功能;从而形成一种功能构造性规格说明书;
- 形式规格说明语言Z则是基于一阶谓词和集合论的数学基础,利用状态、操作模式和模式演算对目的软件系统的和结构和行为特征进行抽象描述;
- 基于时态逻辑的形式化法着重描述并发系统中状态迁移序列,用于刻画并发系统所需要验证的性质;
2> 形式化方法
形式化方法分类项解释备注基于模型的方法通过明确的定义状态和操作来建立一个系统模型,使系统从一个状态转变成另一个状态此方法可以很好的表示非功能性需求,但不能很好的表示并发性,基于此方法有Z语言、B语言等代数方法通过联系不同操作间的行为关系而给出操作的隐式定义而不定义状态他也未给出并发的显式表示,这类方法形式化语言有OBJ、Clear、语义语言ASL、ACT等过程代数方法给出并发过程的一个显式模型,并通过所有的容许的、可观察的过程间通信来表示系统行为例如:通信顺序过程、通信系统演算、通信过程代数、时序排序规约语言计时、通信系统计时可能性演算等基于逻辑方法逻辑描述系统预期的性能,包括底层规约、时序和可能性行为并采用与算选逻辑相关的公理系统证明系统具有预期的性能还可以采用具体的编程构造扩充逻辑从而等到一种广谱的形式化方法,通过保持正确性细化步骤集来开发系统;例如:模态逻辑、时序逻辑、时序代理模型、实时时序逻辑、计算树逻辑等基于网络的方法根据网络中的数据流显示的给出系统的并发模型,包括数据在网络中从一个节点流向另一个节点的条件采用具有形式语义的语言,具有易理解性,如:Petri网、谓词变换网等
形式化方法主要是通过形式化规范语言来完成需求的定义、设计、编程、测试的描述|这种描述是通过数学的方法实现,具有精确语义,从而确保描述的一致性和完备性等;
3> 形式化验证
形式化验证就是根据某些形式规范或属性,使用数学的方法证明其正确性或非正确性;
形式化验证作用1首先被用于生成规格说明书,然后将其作为软还开发的基础和软件测试验证的依据;2他是严格意义上的规范语言来描述软件产品,可以借助工具来完成产品的验证
传统的形式化验证分为:模拟和测试;都是通过实验的方法对系统进行差错;
测试不能够证明软件不错在缺陷,所以我们能做的是证明一个系统不存在可以想象得到的缺陷,以及验证满足系统质量要求的属性;
形式化验证的方法主要集中在信念逻辑、代数方法、模型检测等
例如:
- 采用有限状态机或扩展有限状态机进行模型检验;
- 采用SPIN和线性时态语言验证其相关属性;
- UML语义转换形式化验证
- 标准RBAC模型,包括4个部件模型:基本模型、角色分级模型、校色限制模型、统一模型;
- 扩展的RBAC模型和基于粒计算的RBAC 模型;
- 符号模型检验,将问题形式计划形成一个特定的符号表示,然后诉诸于某种特性的问题求解方法,如:BDD、SAT自动测试模式发生器、定理证明器等;
- BAN逻辑模型,用于安全协议的验证;
版权归原作者 45度看我 所有, 如有侵权,请联系我们删除。