算法测试的一点浅见

         算法测试其实是测试界,特别是第三方测试的一个没有好办法的领域。结合阅读腾讯TMQ的《移动APP性能评测和优化》的第4章(导航评测)、第5章(网络优化),顺便说一下自己的一点想法。

   一、前提

1、首先最好有个参照标准。因为测试人员对算法的理解不如开发者深是常态,算法都会给出来个结果,但到底好还是不好,天知道(知道我就自己上了)。因此,通常还是尽量去找参照物。常见的有几类:公开的标准(国家标准、国际标准、行业标准、行业事实标准);潜在的标准(竞争对手的指标;各种设计或要求里面散落的指标;用户感受量化后的具体指标)。找到标准,就是成功了一大半。有公开标准的一般都没问题,潜在标准的就要注意,不要局限在项目组范围,例如,军品可以找民品的来比对;腾讯的可以找百度、阿里的来比对。

2、原理的必要了解。这个还是要看情况,一般内部测试有必要去了解原理,方便实际搭建测试平台。也方便后面的进一步分析和优化。第三方测试或者收钱应付的就不要去深入了,但是一些基本的还是要去了解,特别是涉及到输入输出数据的。其实涉及到算法测试,测试平台搭建和测试数据产生方法很关键,这些事必须对原理有一定了解的,当然越深入越好,甚至可以直接提出优化建议了。

3、巧妙地利用输入数据变化和输出变化趋势来做判据。如何去判断测试用例执行结果有时很难。在找不到参照标准的情况下,有些这种方法也许能够启发使用项目内部比对来判断。例如:输入数据添加一些小的限制,来观察变化趋势(例如:路径起点终点相同,中间设置不同经过点);把输入数据颠倒来处理(比如:导航测试,终点和起点倒置,观察路径差异)

          例如第4章导航评测中,路径优化其实是没有绝对好、坏用例的。引入出租车数据和竞品数据来综合评估,就可以有一个相对合适的判据来初步确定数据了。

 二、实测

1、很重要的是,搭建测试平台。一般算法测试,比较难的就是大量测试输入数据如何产生;实际梳理或模拟运行如何加速执行;产生的大量输出数据如何抓取、筛选和处理。选好工具,方便数据产生、抓取中间结果、方便分析就很重要,必要时要自己开发。

2、不要忽视从设计方法角度要求开发方讲解和讨论。实际情况是,新设计的算法或者业界没有先例的一些算法,一般大家都是摸石头过河,千万别迷信设计者。大家交流讨论一番是不会有损失的,可能他们没有拿到实测数据时也是一脸懵的。但注意,这种讨论一定要在搭建测试平台,实际有一些测试工作开展,并且发现一些小问题后开展比较好。让他们讲解时,可以发现一些假设和现在实际或者实测发现的不和谐的地方。

3、数据处理尽量自动化和可视化。例如,语音转换成文本;位置信息转变成经纬度,总之,要方便自动化处理。通常需要考虑用脚本的方式,随机产生大量数据;数据处理一般可以用python之类的脚本语言编写小工具,自动化地筛选、提取、保存成方便处理的格式,然后按照需求自动处理成要求的报告。

三、一点题外话

            本人在行业软件测试中,遇到过多种算法测试,有用自己方法实现标准的;有自创解决实际问题的;有针对特殊限制情况下修改算法的,有通用产品移植改良的。有标准的其实是最简单的,一般标准都会有配套的测试要求,甚至提供了测试样本和评测方法的,只要熟悉一下就可以了。对没有标准的,许多情况下,对算法背景包括其理论模型、实际问题越是理解的深入,工作开展得就越好。有两次,通过实际计算,在没有开展测试的情况下,就帮助开发者优化了他们的设计,堪称本人测试工作的两次成功案例。其实过程和腾讯TMQ的《移动APP性能评测和优化》的第5章(网络优化)中,由于各自发送握手增加流量占用也有些相似;开发小组人员少,没有意识到控制信道和数据信道的问题,本人分析后敏锐地指出了设计的缺陷,并且依据计算结果简单地就揭示了问题。

             但是,这种靠简单分析就发现问题的机会是可遇不可求的。工程问题居多的,终究还是要靠正确方向下的多次试验、验证、调整来摸索找到合适的结果。这也是虽然我做了很多项目测试,知道各种问题拆解开来分析可以解决,但是拆解的机会不会给你啊。第三方测试就更加SB,你可以纸上谈兵头头是道,但是没有行业背景、缺少可支配的时间和资源,终归就要认怂了。

      ps:前面在做性能测试学习笔记,其中负载均衡算法、集群调度算法、缓存机制算法等,很适合用来做算法测试的例子啊。2019/1/21。

            

 

你可能感兴趣的:(测试技术)