现今移动测试业态
作为现今APP最多的平台,移动业务已经渗透到了每个人的生活中,这意味着对移动平台上的测试需求也在逐年递增,各大测试工具开发商根据市场需求也相继推出了各自的测试工具和平台。
移动黑盒方法,测试人员的苦恼
作为整个程序最后一道屏障,测试人员的测试方法起到了决定性的作用。在移动平台中,测试人员往往会通过在真机上的点点点的方式进行,虽然有Testin、DevStore、Android SDK Emulator等云平台或自动工具的帮助,但测试人员还是期盼着想要一套简便、直观、易上手的工具,来量化自身的工作量。
国内的测试工具和云平台
观摩如今国内的移动测试工具和平台,基本是以原有的黑盒测试工具为衍生,与传统的白盒测试工具相比,除大大降低了成本外,还能最直观的反映出软件存在的问题。但它的劣势也较为明显,比如,难以找出某些特殊类型的错误,当软件被修改后,必须重新检测,盲目性较为严重。
全球首款纯软件类的商用级别的移动端白盒测试工具
ThreadingTest产品宣传手册内容提纲
ThreadingTest
ThreadingTest(简称“TT”)是由上海零一拼装有限公司研发的一款白盒测试工具,它的设计基于创新性的测试理念-“穿线测试”。TT通过一系列的发明专利技术以及产品设计,首次将黑盒测试与白盒测试过程以及方法进行完美的融合,以黑盒的测试过程及方法,产生白盒测试的数据。同时TT也是全球首款纯软件类的商用级别的移动端白盒测试工具,可以对各种类型的移动类应用进行测试。TT是一款真正对软件测试过程和结果进行深度量化分析的智能测试工具。
“穿线测试”理念
\\穿线测试名字属于象形命名,表示它对于开发以及测试各阶段产出物间的串联作用;穿线测试的地位处于类似于行业内的DevOPS概念,它建立开发与测试之间的联系,打破二者之间的信息鸿沟;通过一套自动且非管理化的技术手段,来实现开发与测试以及QA 三者之间的紧密关系,进而大幅度提高测试的质量、大型软件的维护效率,并且降低成本。
穿线测试通过自动化的插装技术、数据传输技术、时间戳技术,完成全自动的建立海量数据间的关联、多版本间的对比、覆盖率的合并以及测试过程中,自动化的建立源码和测试用例之间的关联,实现整个测试过程的穿线。
穿线测试是继黑盒测试、白盒测试理论后,对于测试理论的新的贡献,且商用化产品ThreadingTest(个人免费)跟随理论同步发布。
第五代白盒测试技术
ThreadingTest作为新一代白盒测试技术,对比之前几代白盒测试技术,集成了很多新的功能点:
1. 累计覆盖率技术:如果存在多个被测程序版本的覆盖率结果,TT可以实现对多个版本的覆盖率进行合并,并且在一个视图中展示。
2. 无需监管的覆盖率搜集:覆盖率的统计完全可以由后台程序运行搜集,对测试人员实现透明化。
3. 覆盖率结果和程序结构展示:TT支持9种覆盖率、6中复杂度结果可视化,支持在函数调用图、控制流程图等多种图形上显示覆盖率,测试以及开发人员可以从多个视角清晰的看到程序的覆盖率情况。
4. 分布式测试:多个测试人员访问系统产生的覆盖率,可以在统一视图中显示。
5. 实现DO-178B MC/DC白盒结构测试技术: 实现100%覆盖率,可视化复杂条件组合,使产品质量大幅提升。
6. 覆盖率计算可视化:TT支持对以上各种覆盖的计算的可视化,对每种覆盖率的计算结果给出可视化的直观结果展示,覆盖率可视化界面对以函数为单位的模块进行覆盖数据和应统计数据给出图形化展示,用户通过界面的统计数据可以直观得出覆盖率的计算值。
1. 引导团队完善测试用例:通过第五代白盒测试技术,可以在控制流程图上看到每个判断语句的复合条件的任意子条件的覆盖情况,整个开发以及测试团队可以实时看到每个用例的覆盖率对整体测试的贡献程度。根据覆盖率的生长等指标对整个测试进程进行动态调整,同时可以引导对于累计覆盖率偏低的关键模块补充用例。
可视化的测试
ThreadingTest 针对代码级别的编译分析和运行插桩后的程序,通过一静一动的代码分析,TT提供了丰富的可视化界面包括函数调用图、控制流程图、覆盖率可视化视图、累计覆盖率视图、多版本对比视图、版本测试数据报表视图等。通过每种视图进行有针对性的信息挖掘,达到问题快速定位。
函数调用图:
可以给用户展示一系列关于软件系统的整体信息。如:类或者函数以及类的成员函数的总数目,调用关系或者类的继承关系的深度、层次结构、语句总行数和总体复杂度,整体的测试覆盖率(分累积的结果和最后一次运行的结果,可选择语句、分支和MC/DC测试覆盖率标准)、整体的性能分析结果以及各模块所占的用时比例、以及全局变量和静态变量的分析结果等;同时,又给出了各个模块具体的信息,包括:各模块的源码行数和复杂度、测试覆盖率分析结果、扇入扇出信息,高亮显示一个模块及其所有相关的模块,或者以任何一个模块为根生成局部子树等。
函数调用图的特性:
1. 支持百万图元级别的超高速图形绘制技术。
2. 支持全屏以及超平滑的放大与缩小技术、平滑的移动技术。
3 支持按照类分组聚集布图以及按照函数调用关系布图,层次数量可*定义。
4. 支持逐级的子树展开和下钻功能。
5. 支持在函数图元上覆盖率显示,以及覆盖率与函数相关信息的显示。
6. 可追溯:函数调用图是“活”的,不是静止不动的,可以选择图中任何一个模块而追溯所有调用它的路径和相关模块以及被他调用的模块,用于修改模块不一致性缺陷的预防等。
7. 可交互操作,例如高亮显示一个模块及其相关模块,或者单独绘制一个模块的调用关系。
8. 可选取函数调用图中任何一个模块为根生成局部子图,并且生成子图的相关信息,使得团队的各个组群或者个人可以方便的得到相关的局部信息。
9. 实现各模块与逻辑框图的链接:完成宏观(函数调用图)与微观视图(控制流程图)的结合,发挥更好的可视化效果
函数调用聚集图:
以类对函数进行分组,通过图表把同一类的函数聚集在一起进行展示。
类继承图:
显示的是当前项目所有类的集成和派生关系。
控制流程图
通过函数的if-else,while,for,do-while,switch-case等控制语句结构绘制组成的流程关系的展示图;配合下方的源代码展示界面,显示能清晰查看函数内部运行逻辑和结构、条件的真假运行状况、MC/DC的满足率等。
特性:
1. 可视化的控制流程图,对主要的控制逻辑语句对应有清晰的图元显示,支持嵌套显示以及串联显示。
2. 点击控制流图的每个图元可以看到对应的代码段以及代码段的执行次数、覆盖率情况。
3. 在控制流图的代码段,当条件语句成为选中热点后,可以看到条件语句的各个子条件的各种组合执行的真假情况。
4. 支持缩略图的显示,可平滑的进行缩放以及全屏显示。
5. 可以与函数调用图相互自动链接、追溯、转换。
函数列表:
针对整个程序的所有函数,按照各种覆盖率、复杂度进行排序,帮助用户能快速的定位查看所有的函数信息,并通过和函数调用图、控制流程图、覆盖率可视化图以及累计覆盖率图的快速切换,使得用户在查看和解决实际问题上提供了方便。
覆盖率计算过程可视化:
ThreadingTest采用最新的覆盖率算法可视化的方式来进行引导,使测试人员在测试过程中,能清晰地看到每个被测函数块的覆盖率值所对应的代码算法,避免盲目测试和反复测试,从而快速补全测试用例,并附有学习性。
测试用例与代码的双向自动关联与追溯
通过ThreadingTest运行测试用例,采用TT百万图元级别的超高速图形绘制技术展示图,对各种大、中、小型软件进行功能逻辑实现分析,实现测试用例与被测源码间相互追溯。该追溯技术方便了用户查看和设计测试用例,通过基于双向追溯的实测用例分析,测试人员可以快速追踪修改代码的波及范围,针对已修改的模块和波及到的模块有针对性的补充测试用例,把回归测试的成本降至最低。
正向追溯:
通过点击某个测试用例,追溯到该用例所对应的函数控制图,并展示其测试的逻辑和结构,点击其中某个函数,可以进行该函数的覆盖率、复杂度、代码、控制流程图等信息查看,帮助测试人员通过简单查看发现测试遗漏,并且有利于开发人员直接定位测试发现的缺陷,测试和开发之间的高效互动。想象下,当一个核心工程师离职时,他所带走的是对整个程序的理解及开发思路,交接的工程师需要花费大量的时间去理解,TT通过正向追溯,可以使交接的工程师能通过测试用例所展现的程序逻辑和结构等信息,快速的掌握和理解程序的开发思路。逆向追溯:
通过点击函数列表的某个函数,追溯到该函数所对应的函数调用图、控制流程图以及源码,点击其中的源码,反向追溯到该源码所执行过的测试用例列表。想象下当一个程序需要进行频繁更改升级时,这时对测试人员的压力是无比巨大的,测试人员无法精确到开发人员所更改的代码是否影响到其它的功能,只能对程序进行重新的测试,但通过逆向追溯,测试人员很明确的看到更改的代码所影响到的测试用例表,通过累积覆盖率技术,大大缩短了回归测试的时间。
※ 上海零一拼装信息技术有限公司拥有“一种基于用例与源码双向追溯的测试装置及方法”的专利
实时的被测应用示波器
ThreadingTest率先将引入的测试示波器概念,在实际测试的过程中,可以实时的看到从程序中各种逻辑执行的速率、频率等信息,测试人员可以从传统的对被测应用的黑盒子测试(仅能看到功能的反馈无法看到程序内部的反馈)进而转换成为类似于对于硬件测试的示波器一样,能够对整个测试过程的关键测试数据进行实时的分析和查看。
示波器功能体现:
1. 实时记录被测程序的运行信息:块,函数,条件,运行堆栈
2. 实时记录测试用例对应的程序执行逻辑:
3. 支持源码分离的测试模式
4. 支持分布式的实时记录被测程序的运行信息
5. 可视化观察程序运行情况。波形可直观反应程序行为。
6. 通过波形分析程序在各种硬件平台上的运行性能。
7. 支持真机、模拟器等各类设备的接入
8. 支持各种自动化操作和单元测试所产生的测试数据的记录
9. 支持USB、WIFI、蓝牙等各种设备的连接方式
代码分离测试
ThreadingTest的技术特性非常适合于做移动智能类产品的测试,例如对于智驾系统。TT通过自己的专利技术,能够通过TT的示波器专利技术,测试人员甚至可以边在行驶过程中操作智能驾驶系统的同时,通过TT的软件示波器即时的获得测试数据和测试结果。测试人员可以在移动的车上进行测试后,然后将一整天获得的测试数据拿到实验室或者研发中心的软件平台中进行分析。同时TT支持离线测试的方式,是对源代码的最好的保护方式,即在户外进行测试的时候并不需要系统的源代码,而需要进行数据展示的时候,仅需要将测试获得的数据拿回到研发实验室进行关联展示和分析即可。
※ 上海零一拼装信息技术有限公司拥有“一种用于软件测试数据分析的示波器及方法”的专利
版本的对比和累积覆盖率技术
软件开发过程中由于多次的迭代和增量开发而不可避免的产生多个版本,相对应的也会产生多次的版本测试。针对多版本的情况ThreadingTest提供了多版本的函数级比较和测试覆盖率合并功能
函数级比较
多版本对比以函数为单位,列出了所有函数的增加、修改、删除等一系列状态的对比演化过程(也可以说是一种版本追溯机制),结合函数调用图和控制流程图,使用户可以快速定位不同版本之间函数的区别、某一模块的修改对其他模块产生的影响,提高缺陷的预防能力。
测试工程师,通过多版本的比较,可以有针对性的修改各版本中的测试用例,进行测试对比,找出升级版本带来的隐藏问题。
可持续测试
多版本对比的另一大特性是覆盖率合并,对于多个版本实现智能覆盖率合并,以前述的函数级多版本对比为基础,通过覆盖率合并算法,准确统计出当前最新版本的累积覆盖率,从而极大减少测试工程师的重复测试工作。
零成本集成单元测试、自动化测试等第三方工具。
ThreadingTest Android JUnitTest是基于AndroidJUnit Test,利用ThreadingTest本身的优势,编写的一套单元测试组件。在原有的Android JUnit Test测试驱动代码的基础上,只需要进行简单的字符全局替换,就可以修改为符合ThreadingTest Android JUnit Test测试代码的单元测试。除此之外,两者的测试几乎没有差别,只需要您在测试时,打开TT实时监控来接收数据,而在测试过程中,则无需其他操作,甚至感觉不到数据的收集过程。
对于传统的单元测试,在单元测试结束后,测试人员只能获得测试结果是否符合预期结果。如果与预期结果存在差异,也无法立即得到错误原因。当使用ThreadingTest Android JUnit Test进行单元测试时,还是原有的测试体验,却能够得到白盒测试的数据结果,当单元执行结束后,可以根据产生的数据来分析程序的出错点以及遗漏的测试点,使Bug的查找更快速,更准确。
例:下图展示一个整合过的单元测试,ThreadingTest通过对代码的自动化插装,在不改变原有的测试方式进行的同时,TT示波器会进行测试过程的数据接收并记录,测试完成后通过测试用例脚本,自动化的生成测试用例以及其相关的测试数据。
开放式API接口
threading还开放了API接口进行整合,使原本的自动化操作不用进行任何的改变,通过TT的API接口连接,TT示波器获取其它测试工具的测试数据,并生成会对应测试用例自动生成测试用例和代码之间的关系以及函数覆盖率。目前开放的Java语言的API,直接使用Java语言作为脚本预言的单元测试工具,自动化测试工具都可以通过该接口与TT进行整合。这样就可以实现在运行测试用例的同时,在TT中记录用例所对应的代码执行逻辑信息。
演示:测试场景说明:
当使用其它测试工具进行自动化测试时,如果在测试过程中出现无法干预或正在进行的自动化测试过程时,需要对测试过程进行测试用例的区分,例如登录和退出,在运行一次自动化测试时,同时执行了这两个测试用例,就可以在程序中,添加这两个测试用例的开始和结束点,从而达到区分两个测试用例的目的。这样就可以通过TT来实现测试用例与源代码的关系的自动建立,例如本例子中将建立登陆操作对应的代码以及退出动作所对应的代码。
测试步骤:
以登录退出为例,若存在以下代码结构:
…
classHomePage { public void login(){ … // 登录的相关操作 }
public void logout(){ … // 退出的相关操作 } } |
1. 将JavaParser-Android.jar包引入到工程中;
2. importcom.zoa.writeToMQ.UnitTest;
3. 添加开始结束标识。
在login函数的开始添加登录测试用例开始的标记,在函数结束前添加登录测试用例结束的标识;同样,在logout函数的开始和结束也可以添加相应的标识。添加后的代码为:
… import com.zoa.writeToMQ.UnitTest;
classHomePage { public void login(){ UnitTesttestLogin = new UnitTest(“HomePage/login”); … // 登录的相关操作 testLogin.close(); }
public void logout(){ UnitTesttestLogout = new UnitTest(“HomePage/logout”); … // 退出的相关操作 testLogout.close(); } } |
4. 使用TT对程序进行插桩,并对插装后的APP进行原有的测试,在测试过程中TT会通过示波器进行数据的接收和记录,并生成测试用例及对应的测试数据。
支持分布式应用的集成测试
当用户的环境为分布式系统时,即由多个组件在集成环境下同时对外提供服务的情况下,TT能支持对这个分布式环境的各个组件及其交互的联合测试。即可以看到一个外部请求,对多个子系统之间的所有的执行情况。
TT允许多个用户同时对被测应用测试,而不同用户针对不同用例,即在同一时刻做的测试而产生的测试数据之间也不会发生任何混淆的情况。
报表
ThreadingTest提供了友好的图形化报表界面,充分对复杂度和覆盖率进行展示。
包括有工程的基本信息,覆盖率和复杂度统计信息,覆盖率增长统计,7种统计信息的排行榜等,包括了几乎所有的重要信息。以柱状图,折线图,列表等直观、友好的形式展现出来,快速的了解工程的结构和测试覆盖情况。
落地的敏捷测试工具
敏捷开发强调适应性而不是预设性,强调人的因素第一。而TT对于这种与传统开发模型区别很大的开发方法同样提供了有效的支持。
1. 敏捷测试和敏捷开发一样,对测试人员也有更高的要求,需要测试人员深入了解代码逻辑,TT可以可视化的展示每个测试用例的测试用例逻辑框图,结合控制流程图和函数调用图可以准确深入的把握源码的逻辑结构。
2. 敏捷开发的特点之一是快速迭代,TT通过双向追溯,串联源码、可视化逻辑框图、测试用例,能够支持二者充分的信息共享。
3. 快速迭代必然产生多个版本,TT的提供在提供版本识别的基础上,智能的对多版本进行演化对比和多版本的覆盖率合并。
4. 在双向追溯和多版本演化对比的功能配合下,可以最小化圈定回归测试的范围,选取最少的测试用例,以达到测试目的。
穿线测试应用价值
使软件开发商、需求方、第三方测试商成本降低至少25%以上。打破软件开发者和软件测试者的交流障碍,建立透明追溯机制。
1. 通过技术手段建立开发与测试的高效互动与联系,大幅提升工作效率与软件质量。彻底改变测试过程枯燥、无技术含量现状,测试过程变得有趣、实时可监控。
2. 第五代覆盖率技术,将可实施白盒测试技术正式带入业界。
3. 量化的软件测试体系,建立完善的测试质量审核标准。
4. 实现与敏捷开发的配合,支持增量开发、需求变更、缺陷预防。
5. 傻瓜式简洁操作模式,内部实现复杂,操作简单易理解,可向全球开发、测试人员推广。
6. 在安全事件加速去IOE背景下,率先实现国产商用级的专业测试工具。
例:穿线测试的行业应用——车联网
作为全球首款移动端白盒测试工具,ThreadingTest则在满足了ISO26262软件检测标准的基础上,可以对任意基于Android系统的智能驾驶系统提供航天航空级别的功能检测,而根据目前检索的资料来看,ThreadingTest也是全球唯一能够达到该标准的纯软件的商用工具。
ThreadingTest内核里蕴含了大量的复杂运算,但前端呈现给使用者的,却非常简单易用。如同X光一样,ThreadingTest可以把软件的每个细枝末节分析得淋漓尽致,是车载系统软件开发工程师、测试工程师及软件企业管理者的好帮手。针对于ISO26262标准,ThreadingTest可以完美覆盖ISO26262 标准中关于软件测试的选项,同时支持并超出ISO26262中的全流程测试标准,可以从单元测试开始到集成测试、系统测试、UAT提供全程的、统一的量化体系。
产品版本支持范围
适用多种语言:JAVA、Objective-C、C/C++等
使用多种平台: Android、Windows、Linux、Unix、Mac