随着国内大数据、云计算、人工智能等新技术的发展,银行业的前中后台正面临着全面改造,金融科技是业务转型发展的一个核心发力点。金融行业信息系统集中度高、规模庞大、多系统之间关联性强、业务复杂、需求变化快,另外各种新旧系统错综交互,软件质量控制难度异常复杂。通过技术手段精准地追溯每一个数据路线,有效实现信息系统的高可靠性和易维护性,是金融业界共同的目标。
一、传统测试的局限
目前,在大部分金融机构中,主流的功能测试方法是黑盒测试辅之以一定量的自动化测试。由于自动化测试用例的维护问题较多,黑盒手工(功能)测试依然是主流。它有很多经典方法,如等价类、正交用例设计法以及近些年流行的探索性测试等。因黑盒测试方法总体依赖于业务经验,以及一定的测试“灵感”和临场发挥的“算力”,随着金融软件复杂性和迭代速度的不断加快、软件系统组合路径膨胀等问题,人脑的推算力显然远远跟不上了。即使很优秀的测试人员,也会因为状态问题而导致测试用例设计水准出现波动。后续测试覆盖不充分性日益凸显,剩余至少30%以上的漏测点。而白盒测试工具,因为技术没有跟上敏捷迭代的开发场景,目前在金融企业几乎很少在实际中应用。
二、精准测试概念的提出
如何快速定位金融大型信息系统的测试死角,用“可量化”和“可视化”的分析与测试手段,有效地发现程序深层隐藏的缺陷、提高信息系统投产质量、降低投产风险、增强投产信心,金融业甚至软件业均在寻求最佳解决方案。
精准测试方法体系,是近年来业界颇为关注的新测试技术体系。它立足于“系统级”测试,建立了业务功能与代码之间的映射与追溯关系,在代码优化、快速定位代码缺陷、确保关键代码的测试覆盖、精准回归等方面表现突出。为金融信息系统实施高效管理,提供了质量抓手。
三、 精准测试的关键技术
1. 精准测试的核心技术
精准测试最底层的核心技术:“一种基于用例与源码双向追溯的测试装置及方法”,用一个量子纠缠的形象类比:如常见的金融转账、手机拍照、机器人控制等指令,每个操作都有与之对应的代码,他们之间如同两个纠缠在一起的粒子,具备强关联性。一个发生变化,另一个必定发生相应变化。星云精准测试将功能用例和对应的代码之间实现了精准无误的追溯路线可视化,彻底解决了“黑盒”的难题。在此核心技术基础上,诸如:“回归测试用例的自动选取”、“覆盖率可视化”、“智能缺陷定位”、“聚类分析”等精准测试的高级功能得以充分实现。
图 双向追溯(正向)-测试用例追溯到代码
由于优秀的内核设计,星云精准测试可以轻松应用在数亿行的超大型复杂应用上,在建立测试用例、代码、模块之间精准可视追溯机制的同时,瞬间可将海量数据实时采集并存储起来,用于后续测试大数据的分析和运算上。整体过程对原有系统性能,不产生干扰。
2. 高度智能化的静默式落地方案
星云精准测试并不改变现有的测试流程和团队组成,它巧妙地使黑盒测试无缝对接到精准测试体系,快速实现提升测试效能比的刚需。测试工程师打开测试用例的Excel表格、执行点击用例,即可通过VBA技术,直接调用星云精准测试的后台接口,再附加一整套深入应用后台执行线程的用户标签技术,就可以将用例和代码关联和分离出来(分离是指类似J2EE服务端后台应用)。在对外提供多用户并发访问的情况下,可分离出每个用户执行的用例所对应的代码。测试者在整个过程中,几乎不需要增加额外工作量。
3. 精准可信的测试数据记录过程
传统测试有点像挖矿藏,主要依赖测试用例执行数、时长、bug的数量等外在维度进行衡量,缺陷是未知数,结果不那么具备公信力。精准测试是传统测试走向可信测试的一个最好的技术手段。它的所有测试数据均是在测试执行过程中,由软件自动分析并录入的底层代码运行原生数据。由于用例和执行代码之间信息被完整跟踪,并且细分到测试用例级别,因此整个测试数据都可以在代码层面可视化出来,人工无法介入修改。它真实再现测试现场情况,结果可直接用于测试的过程管理和实效分析。从技术上确保所有数据精准无篡改。这一举措,使测试的衡量点回归到计算机程序的本质-“代码”上来。
四、精准测试的应用实践
精准测试的用例与执行代码的强追溯性,为采集到的海量测试数据实现精准度量以及全面、多维度的测试分析,打下了坚实基础。测试管理从相对单一的覆盖率考量视角,扩展到多剖面的智能分析。由于篇幅限制,本文选择两个主要功能点做一介绍:
1、企业级覆盖率方面的创新
测试覆盖率是测试界公认的测试结项可用量化指标。在敏捷迭代场景下,由于新版本快速发布,代码变更频繁,本应在一个版本上分析的覆盖数据,分布到了数个代码结构不一样的程序版本上,因此传统白盒覆盖率的统计方法和参考意义基本上都失效了。星云精准测试通过软件示波器在系统测试阶段取采集多种代码覆盖率(最高支持航天航空标准MC/DC的100%覆盖率要求),提供实时覆盖率增长趋势图及各类分析报表,管理者可清晰的观察整个测试进度情况、效率等。
覆盖率智能合并。精准测试可以按照敏捷的模式,将多个版本的覆盖率以最新程序代码版本为投影进行合并,在控制流上直接累加,无需在每个版本上跑全量用例。它在不同的版本上执行不同功能范围的用例,然后合并一个测试周期的覆盖率信息,看总体的覆盖情况。覆盖率合并算法将全自动分析每个版本序列上程序函数变更的情况,以最新版本往前合并,直到某个模块的代码发生变化,在此之间的覆盖率均可合并。
增量覆盖率分析。版本发布后,精准测试可以对增量代码覆盖专门有一个统计维度,这样也是对于覆盖率目标的一种工业应用新思路,不用去关注总体覆盖,而在迭代中关注调整代码的覆盖,尤其是新增代码的覆盖情况。
覆盖率可视化。在星云精准测试中,用户在选择分析的覆盖率维度后,系统就会将被测试程序的相关结构展示出来,并且用颜色表达覆盖情况:绿色代表覆盖,深蓝色代表未覆盖。同时告知覆盖率的分子和分母都是哪些,非常清晰的展示覆盖率可视化结果。
相关覆盖率。可将某个功能用例所触及的函数范围中,所有代码分支作为覆盖率的分母,真正运行到的分支作为分子,这样取得的相关覆盖率非常具有实际指导意义。使用者在有权限的情况下,随时可以看到:因此即使测试的是一个小功能范围的用例集,其覆盖结果也可以近似等价为这个功能范围相关代码的覆盖率情况,亦可以用于分析某个功能范围的测试是否充分。
2、回归测试用例的推荐和选取:
对于测试效率的提升,一般会提到狭义的自动化测试,这也是行业内通常解决回归测试的办法。它是一种应对全局回归的方法,在无法有效确定回归范围的情况下,就通过技术手段全量回归以确保系统的修改没有引入新的问题。真正实施过全量自动化回归的团队,会对此项工作的难度和成本深有体会。
星云精准测试回归用例自动选取是属于一种机器智能计算下安全的局部回归。它根据历史测试用例执行的路径信息以及新版本的代码变更信息,自动推荐和选取回归测试用例集,并给出回归优先级和影响度。用户在测试人力有限的条件下,可以根据算法给出的优先级安排测试执行,以最有效的方法发现代码调整引入的缺陷。这种基于海量的程序运行路径计算的数据,精确而完整,不会因团队工作状态问题,而出现大量遗漏的现象。
五、小结
精准测试将大幅度提升测试数据的价值,也将产出大量对研发极有意义的分析数据。它必将推动软件行业的数字化改革,为传统金融业务及金融创新(Fintech),提供更智能、有效的软件高端质量保障思路与方法。