软件测试不再黑盒— threadingtest带来第二代白盒覆盖率技术

软件测试不再黑盒—

threadingtest带来第二代白盒覆盖率技术

穿线测试对于测试界的一个重大创新在于,在白盒测试理论出现数十年以后,上海零一拼装信息技术有限公司结合在测试理论方面十余年的潜心研究,率先提出了第二代覆盖率技术,这绝对不是一个口号,而是ZOA真正对于白盒测试的理解以及对于标准第三方测试服务的深度理解经过数年的基础研究以及2年有余的研发而推出的达到商用标准的技术。现在先让我们温习下经典的测试理论:

1、测试方法论

黑盒功能测试法

黑盒功能测试法, 是把要测试的软件看成一个 “黑盒子”, 不管其内部结构如何以及以什么算法实现所要求提供的功能,而是按照需求的功能化要求, 设计相应的测试用例(包括测试的输入数据与条件设置和所预期的软件运行输出结果), 通过软件运行后所给出的输出(包括字符形式的输出与图象输出)与所预期的结果进行人工或者自动化比较, 来验证被测试软件是否能给出正确的结果, 从而判断该软件是否满足需求, 是否与该软件系统的规格说明书和用户手册相关部分一致。

这一方法的优点为:

(A)  能最直观和直接地反映出所设计的软件是否满足需求;

(B)  即使没有任何测试工具支援, 也能靠人工测试的方法完成;

其不足之处是:

(A)  这种测试方法难以找出某些特殊类型的错误。例如: 当对应于某组输入该被测软件并不提供任何输出信息时 – 可能只是改变了某种工作状态,如果其中的源代码处理部分有错误, 就比较难找出来;

(B)  无法确定哪些测试用例有效或者无效 (所谓无效, 并不是说单独使用某个测试用例时不能收到任何测试效果, 而是在于它和前面已经使用过的测试用例一起使用时, 毫无贡献, 只是重复了前面的测试用例已经完成的测试);

(C)  具有无可避免的盲目性: 当软件被修改后, 由于不知道哪些测试用例能测试到被直接修改过的模块或者受修改过的模块影响的模块, 于是只好将所有测试用例再从头运行一遍, 而且是动态运行,非常费时费力。

白盒结构测试法

白盒结构测试法则与黑盒子功能测试方法相反: 它不管所被测试的软件是否满足需求,是否实现了所设计的功能, 而只注重该软件内部的结构, 以便设计足够多的测试用例, 使得百分百或者尽可能多的程序组成要素能被测试到最少一次, 从而尽可能地将其中的软件错误暴露出来。

白盒子结构测试方法的优点:

(A)  能够找出许多用功能测试方法找不出来的软件错误;

(B)  可以在整个软件系统还未完成之前就分别对各个单元进行测试;

(C)  可以通过测试用例的有效性分析而实现测试用例的最小化, 以便大大地缩短软件修改后的回复测试时间和费用;

(D)  可以同时进行内存泄漏分析;

(E)   可以同时进行分支执行频度分析;

(F)   可以同时进行软件复杂度分析;

(G)  可以同时进行数据和变量分析;

(H)  可以同时进行性能分析;

(I)    可以同时进行动态运行错误定位与执行路径追溯等。

白盒子结构测试方法的缺点:

(1)    必须通过专门的测试工具来进行, 需要在用户的软件的拷贝上进行插桩(插入纪录点)记录各分支/条件是否被执行过或者执行过多少次的信息;

(2)    会使被测试的软件的运行速度减慢;

(3)    需要增加被测试软件运行时的资源开销等。

关于软件质量的误区

有不少软件开发组织和应用软件开发部门的管理者错误地认为,他们已经对他们所开发的软件做了充分的功能测试(又称"黑盒测试")了,认为"我们的软件质量没问题!" ——
但是, 专家们分析了大量"经过充分的功能测试"的软件后发现,这些软件中还有大约一半的程序分支从未被执行过!

为什么会这样?原来,软件的功能描述相对来说非常容易、非常简单、也非常粗糙,无法详细到用软件内部的具体实现逻辑结构来说明;而要达到同样的功能,软件可以有许许多多等效的实现方法;特别是,软件功能的实现,与所使用的编写程序的语言、所运行的操作系统环境、所用到的数据库以及某些第三方的软件都有关系。事实上,一个软件中的许许多多程序分支跟该软件本身的功能并没有直接的联系,而是用来处理各种可能出现的运行情况的。例如,所开发的软件在运行中突然被终止时(系统断电或者用户打断)如何保护已经打开的文档;在系统资源用尽之前如何提出警告;在所要用到的某些文件被意外地删除了时如何应付等等。这些程序分支在编写中同样存在着可能的错误,必须加于测试。而这通常都需要通过程序的结构测试(又称"白盒测试")来完成,而白盒结构测试是必须借助于软件测试工具才能进行的。

ThreadingTest针对上诉的质量误区情况在测试过程中对于一组输入,既判断其输出(如果有)是否与预期值一致,又判断其执行路径是否与预期值一致。这样一来,即使测试输出结果与预期值一致,也可能有错误被找出来 - 如果所预期的执行路径与实际的执行路径不一致。例如,当测试一个计算器程序时,如果输入是2+2, 测到的结果是4,也可能是个错误 - 如果它的执行路径与预期值不一致:其最终的结果可能是2×2的路径的输出结果。由于TT可以测试有输入而无输出的场合(此时仅仅测试其执行路径是否与所期待的路径一致),因而可以在任何开发阶段使用,实现名副其实的全过程测试驱动。

2、第二代白盒覆盖率技术

       覆盖率技术是软件测试的基本技术手段之一,但是数十年以来虽然也出现过多种理论方法以及商用产品,但其一直未在测试界主流应用领域推广,主要原因有以下几点点:

(1)        
通常覆盖率结果在重新发布版本以后必须重新进行累计,对于庞大的程序相当于对历史的测试全部归零。

(2)        
软件测试的通常场景,是需要用测试工具对代码进行分析,而软件测试工具,尤其是可以达到商用标准的白盒测试工具一直被国外的几大老牌软件测试工具所垄断,价格高昂,并且对于航天、军事级别的测试需求来说信息安全可靠度差。

(3)        
白盒测试操作难度大,测试人员很难理解,在测试团队中很难推广。

(4)        
白盒测试工具都是单机版,很难再大型测试团队中推广使用。

(5)        
覆盖率和测试用例无任何关系,通常覆盖率是执行一系列动作的混合结果,而通常测试人员以及开发人员在定位问题的时候需要明确知道某个功能对应的代码覆盖率。而这些传统的白盒测试工具都无法支持。

(6)        
随着移动应用在消费级、企业级的市场所占比重越来越大,一些老牌的测试工具针对移动环境(android、iOS)的测试明显支持乏力甚至不提供支持。

上述原因让第一代的覆盖率技术很难真正的得到推广。ThreadingTest针对第一代的覆盖率技术的缺陷提出了全新的第二代覆盖率技术,并在覆盖率方法的基础上,设计了全新的应用功能:

(1)        
无需监管测试场景:覆盖率的统计完全可以由后台程序运行收集,对测试人员实现透明化,测试人员只需要运行插桩后的程序,开启程序的自动收集功能,即可无需监管的进行常规测试,TT会自动将程序的测试执行情况收集、分析、存入数据库,配合TT就可以轻松的查看程序的实时覆盖率。

图 实时监控界面自动收集被测程序执行情况并统计

(2)        
双向追溯是TT实现覆盖率到达100%的重要工具,通过双向追溯功能测试人员运行完所有用例可以发现所有未测试分支,并且和开发确认如何才能覆盖,并增补用例。直到达到关键模块的100%覆盖的测试。对于较难覆盖程序逻辑,开发以及测试人员可以作为重点进行代码走查及联合用例设计。围绕覆盖率结果,开发和测试人员可以充分的互动,而在穿线测试工具出现之前,由于没有覆盖率这个共享数据,开发和测试人员之间很难充分的互动和协作,因为开发人员并不清楚测试用例具体对应的程序执行逻辑,而测试人员也不清楚如何完成充分的测试。

图 双向追溯界面测试用例和代码之前通过围绕覆盖率进行互动

(3)       
支持基于Java语言开发的android移动应用测试。


手机上进行操作,与之相连的电脑上TT实时收集测试信息

(4)        
累计覆盖率技术:如果存在多个被测程序版本的覆盖率结果,TT可以实现对多个版本的覆盖率进行合并,并且在一个视图中展示

图 主界面CallGraph图中选择多个版本的累积覆盖率展示

(5)        
支持在程序结构图、控制流程图等多种图形上显示覆盖率,测试以及开发人员可以从多个视角清晰的看到程序的覆盖率情况,可以查看整体的覆盖率,也可以查看单独某一个函数的覆盖率,甚至可以查看某一个分支的覆盖执行情况。

图 覆盖率展示

图 覆盖率展示

图 覆盖率展示

图 覆盖率展示

(6)        
支持分布式测试,多个测试人员测试产生的覆盖率,可以在统一视图中显示。

(7)        
实现美军标DO-178B MC/DC白盒结构测试技术,实现100%覆盖率,可视化复杂条件组合,使产品质量大幅提升。

通过第二代覆盖率技术,整个测试可以在充分量化的环境下运行,整个开发以及测试团队可以实时看到每个用例的覆盖率对整体测试的贡献程度。根据覆盖率的生长等指标对整个测试进程进行动态调整,同时可以引导对于累计覆盖率偏低的关键模块补充用例。我们希望,国产专业级白盒测试工具TT,能够真正的将白盒测试技术做系统的升级,并且为测试人员所掌握和喜好,并进而将中国的软件测试提升到一个新的境界。

时间: 2024-10-08 11:13:01

软件测试不再黑盒— threadingtest带来第二代白盒覆盖率技术的相关文章

PHP自动化白盒审计技术与实现

0x00前言 国内公开的PHP自动化审计技术资料较少,相比之下,国外已经出现了比较优秀的自动化审计实现,比如RIPS是基于token流为基础进行一系列的代码分析.传统静态分析技术如数据流分析.污染传播分析应用于PHP这种动态脚本语言分析相对较少,但是却是实现白盒自动化技术中比较关键的技术点.今天笔者主要介绍一下最近的研究与实现成果,在此抛砖引玉,希望国内更多的安全研究人员将精力投入至PHP自动化审计技术这一有意义的领域中. 0x01 基础知识 自动化审计的实现方式有多种,比如直接使用正则表达式规

SafeNet推出行业首款白盒password软件保护解决方式

数据保护领域的全球率先企业SafeNet公司日前宣布,推出行业首款採用白盒安全技术的的软件保护方案.SafeNet 圣天诺 软件授权与保护解决方式如今纳入了新的功能,可在"白盒" 环境中保护安全算法免受攻击.此前,攻击者一般会随心所欲地观察和改变当中动态源代码的运行和内部算法的细节. 传统上,在软件保护技术中,安全算法一般会在攻击者的眼皮底下运行.没有黑盒保护密钥,因此应用程序的运行可一步一步地监视,全部訪问过的数据均为可见.为了更好地保护密钥不受损害,我们须要採用一种不同的方法. S

软件测试中的“黑盒”与“白盒”

软件测试中,最常听到“黑盒测试”与“白盒测试”,它们是软件测试中最基本的测试方法. 那么究竟何为“黑盒”,何为“白盒”呢?下面就对其概念与常用方法进行一下介绍. 黑盒测试: 也称功能测试.数据驱动测试,它将被测软件看作一个打不开的黑盒,主要根据功能需求设计测试用例,进行测试. 概念:黑盒测试是从一种从软件外部对软件实施的测试,也称功能测试或基于规格说明的测试.其基本观点是:任何程序都可以看作是从输入定义域到输出值域的映射,这种观点将被测程序看作一个打不开的黑盒,黑盒里面的内容(实现)是完全不知道

黑盒、白盒、灰盒测试的基本概念

黑盒: 对于一段程序,对其测试时,不需要知道内部结构和特性,在输入接口处输入激励,观察输出是否正确. 主要用于软件界面和功能测试. 实际应用中,由于输入为无穷个,不仅要测试所有合法的输入,也要测试不合法但是可能发生的输入. 白盒: 白盒测试也称结构测试和逻辑驱动测试,知道程序内部结构,验证内部每条通路是否能正常工作. 也就是穷举路径测试,从检查程序的逻辑出发.主要用于软件验证. 但是, 第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序. 第二,穷举路径测试不可能查出程序中

TensorFlow【机器学习】:如何正确的掌握Google深度学习框架TensorFlow(第二代分布式机器学习系统)?

本文标签:   机器学习 TensorFlow Google深度学习框架 分布式机器学习 唐源 VGG REST   服务器 自 2015 年底开源到如今更快.更灵活.更方便的 1.0 版本正式发布,由 Google 推出的第二代分布式机器学习系统 TensorFlow一直在为我们带来惊喜,一方面是技术层面持续的迭代演进,从分布式版本.服务框架 TensorFlow Serving.上层封装 TF.Learn 到 Windows 支持.JIT 编译器 XLA.动态计算图框架 Fold 等,以及

【深度解析】Google第二代深度学习引擎TensorFlow开源

作者:王嘉俊 王婉婷 TensorFlow 是 Google 第二代深度学习系统,今天宣布完全开源.TensorFlow 是一种编写机器学习算法的界面,也可以编译执行机器学习算法的代码.使用 TensorFlow 编写的运算可以几乎不用更改,就能被运行在多种异质系统上,从移动设备(例如手机和平板)到拥有几百台的机器和几千个 GPU 之类运算设备的大规模分布式系统. TensorFlow 降低了深度学习的使用门槛,让从业人员能够更简单和方便地开发新产品.作为Google 发布的“平台级产品”,很多

GPRS GPRS(General Packet Radio Service)是通用分组无线服务技术的简称,它是GSM移动电话用户可用的一种移动数据业务,属于第二代移动通信中的数据传输技术

GPRS 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . GPRS(General Packet Radio Service)是通用分组无线服务技术的简称,它是GSM移动电话用户可用的一种移动数据业务,属于第二代移动通信中的数据传输技术.GPRS可说是GSM的延续.GPRS和以往连续在频道传输的方式不同,是以封包(Packet)式来传输,因此使用者所负担的费用是以其传输资料单位计算,并非使用其整个频道,理论上较为便宜.GPRS的传输速率可提升至56甚至114Kbps.[1]

黑盒和白盒

黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求. 白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查. 白盒测试和黑盒测试是根据对软件代码的可见性,采用的测试方法:凡是针对代码本身的测试,都可以看做是白盒测试,凡是不考虑代码如何实现,只对代码能实现的功能进行的测试都可以看作黑盒测试. 1.黑盒测试 黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在

关于白盒与黑盒

开通黄钻 什么是黑盒测试和白盒测试? 任何工程产品(注意是任何工程产品)都可以使用以下两种方法之一进行测试.黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求.白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查. 黑盒测试软件的黑盒测试意味着测试要在软件的接口处进行.这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说