大数据测试技术:数据采集、分析与测试实践(在线实验+在线自测)
上QQ阅读APP看书,第一时间看更新

1.3 大数据测试方法

传统软件测试过程中,由于测试成本的约束,测试用例的总数是小样本的有限集合。但当软件拥有复杂的结构或采用构件化设计时,测试人员很难设计出测试用例来完全覆盖软件中的所有构件组合;当软件处于复杂的使用环境时,测试人员很难设计出测试用例来模拟软件实际使用中的所有场景;当软硬件紧密结合开发时,测试人员很难设计出测试用例来涵盖每一次的软硬件组合。

传统软件开发的生命周期是从需求分析开始,到软件产品发布截止的。但随着时代的发展,软件并非是在发布之后就停止更新,往往会在很短的时间内继续推出新的版本,如部分品牌的手机操作系统已经实现了一月甚至一周一更新。因此,从长时间看,软件处于一个长期迭代的过程,可以在每一次软件开发和修改时采用传统软件测试技术进行测试,并在软件的某一版本发布之后实施大数据测试。

如图1.1所示,在经典的瀑布式软件开发流程中,软件测试包含单元测试、集成测试、系统测试和验收测试4个阶段。单元测试往往不会过多地涉及其他程序或者模块,因此软件复杂程度对单元测试阶段的影响是最小的。在集成测试和系统测试阶段,软件复杂程度的增加会导致测试成本的激增。但在这两个测试阶段,用户参与程度低,因此很难获得大量用户使用软件时产生的数据。一般在软件的某个版本发布之后,用户才会大量使用该软件,这也为收集用户的使用数据提供了可能。如果能对这些数据进行深入的大数据分析,就能发现传统软件测试阶段不易发现的错误。这种做法的好处有两点:一是节约了测试成本,海量的用户在真实环境中对软件进行了“操作性测试”,而且这个过程并不需要测试人员去构造和执行测试用例;二是大数据测试方法能够发现传统软件测试阶段难以发现的软件错误。如在实际使用中,软件的操作环境是极为复杂的,而在传统软件测试阶段,测试人员很难模拟所有测试场景。又比如在对服务器的压力测试中,用户对软件的某种极端操作会导致服务器不定期产生错误(小概率事件),而这些错误很难在传统的压力测试环节暴露出来。只有通过收集海量用户使用软件的数据,使用大数据测试方法才能有效地发现这种小概率事件。

图1.2显示了大数据测试方法的测试流程。传统软件的4个测试阶段是在软件版本发布之前完成的,大数据测试方法包括用户使用、数据收集、大数据分析及缺陷挖掘4个阶段。与敏捷开发方法类似,大数据测试方法同样需要用户的参与,不同的是参与用户的数量。敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发,因此仅需少量的用户参与开发,提出并修改需求。而大数据测试方法需要收集海量的用户使用数据,这相当于海量用户对软件进行测试。此外,如何收集海量用户使用数据则是大数据测试的另一关键技术。传统用户使用数据的收集一般都是被动的,即软件提示用户书写并发送软件崩溃时的相关信息给软件公司。这种方式原始又落后,因为大多数用户会因为懒惰而不去做这件事情。大数据时代用户使用数据的收集是主动式的,即自动模拟用户的操作,并采用软件自动抓取用户操作失效时的数据,再在大数据分析阶段利用大数据的一些相关技术来处理并分析海量的数据。在传统关系数据库中,同一字段属性中有且仅有同一类型的数据,属性中的每一个数据都是一个不可分割的项。但大数据则不同,同一属性中的数据可以是不同的类型,也可以由多个项构成,因此,传统数据库的处理方法不能对大数据进行有效处理,需要运用专门的大数据处理技术。软件缺陷挖掘是指从海量数据中发现一个软件Bug后,采用大数据技术再次从数据中挖掘出更多具有相同特征的软件Bug。

图1.1 在瀑布式软件开发流程中的4个测试阶段

图1.2 大数据测试的流程图

大数据测试思想的核心是通过分析海量用户的使用数据来发现传统软件测试阶段不易检测出来的软件缺陷,而不是单纯地从技术角度出发设计测试用例,探测软件缺陷。注意:在实践中,大数据测试方法并不能替代传统的软件测试方法,即使探测出了软件缺陷,仍需要软件测试人员采用传统的软件测试方法设计测试用例,进而发现软件错误的位置并修复。