当前位置 博文首页 > weixin_30338743的博客:gamma测试报告

    weixin_30338743的博客:gamma测试报告

    作者:[db:作者] 时间:2021-09-19 16:16

    Gamma阶段测试报告

    测试计划及结果

    我们针对测试做了比较多的改进。

    测试代码分为针对纯java部分的单元测试和需要android运行环境的自动化仪器化测试

    单元测试

    这一部分基本继承Beta阶段的框架,使用junit框架,达到了80%以上的覆盖率。

    1632375-20190617191820944-1615016811.png

    自动化测试

    除了beta阶段的单元测试以外,我们新增了自动化测试。

    使用google官方提供的espresso框架进行模拟点击,输入,监听等事件。

    另外兼容性测试中也有一部分的自动化测试,是利用monkey脚本测试应用在随机场景下的反应。

    场景测试

    为了保证我们应用的实用性,我们模拟了室外的场景测试。具体手段是在寝室里利用电脑产生的噪声伪装干扰,模拟室外的噪声,然后测试常用命令的输入准确性。

    不同类别的背景噪声下识别率差别较大,没有形成有效数据。但是可以基本得出结论50分贝的背景噪声基本没有影响,60分贝会对识别率造成巨大波动,70分贝以上几乎无法有效识别。所以建议使用时背景噪声控制在50分贝一下。

    兼容性测试

    我们使用了腾讯的wetest平台进行了多种机型的兼容性测试。

    测试结果如下:

    1632375-20190613012942481-1571731119.png

    我们在所有的50种机型的随机测试中一共出现了两个问题

    安装失败

    1632375-20190613012956525-1856708732.png

    可以发现出现问题的机型全部是低于安卓5的古老版本,这一点在我们的预料之中,我们的发布说明中有指明应用主要适配安卓7.0以上的机型。在实际试用中我们发现安卓5,6也能成功安装,但是只能使用前端的编辑器功能,无法使用后端shell(因为后端使用的包编译指定最低运行API版本是24)。可以把我们的应用当作一个语音记事本使用。

    UI异常(黑屏)

    1632375-20190613013009198-1983128407.png

    出现黑屏的机型分布在各个版本和机型。经过我们的排查,测试平台将我们的shell界面识别成了黑屏,造成了这次乌龙。

    应用在其他手机上运行良好,所以我们可以初步判定我们通过了兼容性测试。

    压力测试

    nginx 压力测试

    工具 ab:
      This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
      Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
      Licensed to The Apache Software Foundation, http://www.apache.org/
    测试对象:

    http://butubs.cn: 腾讯云,1 核 2 GB Intel(R) Xeon(R) CPU E5-26xx v4 网络带宽 : 1 Mbps

    ab -c 500 -n 2000 http://butubs.cn/
      Server Software:        nginx/1.14.0 # 代理软件
      Server Hostname:        butubs.cn # 服务器主机名
      Server Port:            80 # 默认端口 html 80端口
      
      Document Path:          /  # url 请求路径
      Document Length:        388 bytes
      
      Concurrency Level:      500  # 一次请求的并发量,由-c指定
      Time taken for tests:   19.253 seconds # 测试总共耗时
      Complete requests:      2000 # 总共请求的数量,由-n指定
      Failed requests:        0  # 是被的请求的数量
      Total transferred:      1050000 bytes # 传输字节数
      HTML transferred:       776000 bytes # HTML字节数
      Requests per second:    103.88 [#/sec] (mean) # 平均每秒完成103.88个请求
      Time per request:       4813.203 [ms] (mean) # 平均每个请求完成时间为4813.203毫秒
      Time per request:       9.626 [ms] (mean, across all concurrent requests)# 如果按照并发数来算的话,平均每个请求的完成时间就只有9.626毫秒
      Transfer rate:          53.26 [Kbytes/sec] received # 数据率,达到了1Mbps一般的带宽
      
      Connection Times (ms)
                    min  mean[+/-sd] median   max
      Connect:       45  203 832.8     47    7268
      Processing:    46 2805 4899.4    112   19099
      Waiting:       46 2789 4907.9    105   19099
      Total:         91 3007 4979.3    276   19148
      
      Percentage of the requests served within a certain time (ms) # 请求处理时间的分布
        50%    276 #  50% 的请求在 276 ms内处理完毕
        66%    895 #  60% 的请求在 895 ms内处理完毕
        75%   2554
        80%   7846
        90%  12285 #  90% 的请求在 12285 ms内处理完毕
        95%  14020
        98%  14821
        99%  15818
       100%  19148 (longest request)

    云端的监控:

    ab500_2000.png

    可以看出每秒处理一百多个请求还是很轻松的

    ab -g result.txt -t 50000 -c 1000 -n 5000 http://butubs.cn/
      Concurrency Level:      1000
      Time taken for tests:   54.514 seconds
      Complete requests:      4973 # 存在丢包情况,测试使用的北航校园网有点堵,但是不影响压力测试
      Failed requests:        0
      Total transferred:      2610825 bytes
      HTML transferred:       1929524 bytes
      Requests per second:    91.22 [#/sec] (mean)
      Time per request:       10962.023 [ms] (mean)
      Time per request:       10.962 [ms] (mean, across all concurrent requests)
      Transfer rate:          46.77 [Kbytes/sec] received
      
      Connection Times (ms)
                    min  mean[+/-sd] median   max
      Connect:       45  149 931.9     47   15407
      Processing:    46 7201 14740.4    106   53519
      Waiting:       45 7183 14748.6    105   53519
      Total:         91 7350 14773.2    158   53573
      
      Percentage of the requests served within a certain time (ms)
        50%    158
        66%    891
        75%   1990
        80%   7850
        90%  31691
        95%  46402
        98%  50941
        99%  52577
       100%  53573 (longest request)
      

    画一个简图:x为请求数,y为时延

    result_1000_5000.png

    服务器端的监控:

    圆圈所在处,带宽占用达到0.692Mbps, CPU占用8.5%

    ab_1000_5000_a.png

    ab_1000_5000_b.png

    ab -c 1000 -n 10000 http://butubs.cn/

    再继续增加请求总数的话,丢包就比较严重了,带宽曾被占满,单纯就负载而言,nginx完全处理得过来,是带宽限制了处理请求的上限。

      Concurrency Level:      1000
      Time taken for tests:   94.015 seconds
      Complete requests:      9337
      Failed requests:        0
      Total transferred:      4901925 bytes
      HTML transferred:       3622756 bytes
      Requests per second:    99.31 [#/sec] (mean)
      Time per request:       10069.075 [ms] (mean)
      Time per request:       10.069 [ms] (mean, across all concurrent requests)
      Transfer rate:          50.92 [Kbytes/sec] received
    
      Connection Times (ms)
                    min  mean[+/-sd] median   max
      Connect:       45  103 595.4     47   15533
      Processing:    46 2430 9815.4    104   89275
      Waiting:       45 2407 9820.5    102   89275
      Total:         91 2532 9840.1    151   89325
    
      Percentage of the requests served within a certain time (ms)
        50%    151
        66%    387
        75%    400
        80%    892
        90%   3872
        95%  13729
        98%  31785
        99%  61269
       100%  89325 (longest request)

    ab1000_10000a.png

    ab1000_10000b.png

    Android 逆向分析

    最简单的逆向方式: Android Studio 逆向

    as0.png

    • 53% 资源,大小9.4MB, 有不少多余的资源占用
    • 30.7%lib,大小5.4MB, 包含了实际上很少使用到的x86体系的lib,市面上基本没有x86架构的android手机了,基本上都是aarch64
    • 12.4%class, 大小2.2MB, 这是类文件
    • 其他占用很小

    代码安全?

    如果代码没有加混淆,反汇编结果是这个样子的:
    各种类名,继承关系,函数调用都暴露在外。

    as1.png

    可以发现Activity的onCreate方法完全可以被找到,代码逻辑稍微梳理一下就能够弄清,这样的产品很很容易被截取核心技术。

    加入代码混淆:

    加了代码混淆的部分,包名\文件名\代码全都变得完全难以辨识, 能够有效保护代码和技术。

    as2.png

    ab3.png

    不过混淆通常只能防住静态分析

    如果有熟悉动态调试的人员,同样可以在classes.dex加载到内存中时,找到合适的入口,篡改文件,达到想要的效果。不过我们毕竟是一个开源的项目,也没有什么需要保密的技术,所以有了代码混淆就足够了。

    idapro.png

    回答问题

    1.在测试过程中发现了多少Bug

    没有新bug

    2.你是怎么进行场景测试(scenario testing)的?包括你预期不同的用户会怎样使用你的软件?他们有什么需求和目标?你的软件提供的功能怎么组合起来满足他们的需要?(仅描述新功能即可

    场景测试可以参见测试计划及结果的场景测试部分。我们新增了软件对于噪音的抗干扰能力的分析。

    角色使用需求新增功能设计
    张三 手部残疾,初学者低门槛我们新增了对于部分命令的模糊匹配,比如python会被识别成派森等,我们会将这种错误识别重定位成python。分析了适合语音识别功能使用的最佳场景。
    李四 程序猿功能专业且方便我们新增了文件管理功能,方便用户在GUI场景下管理自己的文件脚本,对文件进行复制剪切粘贴等操作,替代命令行操作。
    王五 普通人使用简单,界面友好我们新增了夜间模式,方便普通人在多种场景下的使用。

    3.你是否有回归测试确保新功能的加入没有影响已有功能?

    • 针对模糊识别
      • 为了保证模糊识别不影响正常的语音识别,我们首先在实现上进行了保证。首先模糊识别只有在shell模式下被识别成非英文输入时才会发挥作用。因为shell命令基本都是英文的,识别成的非英文大概率是错误识别,这个时候才会尝试进行模糊识别。而在编辑器中可能出现中英文混杂的情况下不会进行模糊识别,防止错误。
      • 在shell模式和编辑器模式下分别使用语音输入我们已经进行模糊识别的关键词,然后查看识别的正确率。
    • 针对文件管理
      • 新建文件和文件夹,然后通过各种复制粘贴剪切得到多个脚本。先在GUI下测试,然后在shell模式下运行。能正常运行视为通过了回归测试。
    • 针对夜间模式
      • 夜间模式和软件的基本功能基本独立,没有依赖性。所以经过兼容性测试,可以视为通过了回归测试。

    4.给出你的测试矩阵

    详见测试计划及结果的兼容性测试部分。使用腾讯的wetest平台进行多种机型的测试。具体矩阵如下:

    手机品牌型号系统版本
    MeituM66
    华为荣耀畅玩4C 增强版/电信4G4.4
    华为VCE-AL009
    华为P8 mini 电信版4.4
    MeituM6S6
    VivoV1813BA8.1
    华为荣耀平板26
    OPPON1 Mini4.3
    华为P9 Plus6
    酷派大神F2 HD4.4
    三星GALAXY Grand 2 联通版4.3
    华为荣耀 Note8 全网通6
    三星GALAXY Note 24.3
    三星Galaxy Note 56
    ONEPLUS14.4
    三星GALAXY Mega4.3
    华为荣耀V8 高配版/全网通8
    360N5S7.1
    三星GALAXY Note 87.1
    魅族M3X6
    华为P9 标准版7
    小米4c5.1
    努比亚Z11 标配版6
    华为Mate S 臻享版 双4G6
    三星GALAXY J75.1
    华为荣耀9 全网通7
    MeituM8s7.1
    三星GALAXY On75.1
    小米MI PLAY8.1
    华为nova 2 全网通版7
    魅族157.1
    三星GALAXY J3 Pro 电信4G5.1
    华为荣耀Magic6
    金立金立天鉴W9095.1
    三星GALAXY S56
    华为荣耀V8 /双4G7
    华为Mate S 臻享版 电信4G6
    ZUKZ27
    HMD Global Oy6 全网通7
    华为nova 2 Plus 移动版7
    华为P8 青春版 移动4G5
    努比亚M26
    小米4S5.1
    PhilipsX5987
    华为畅享7S 高配版 全网通9
    YOTAY37.1
    tencentWeTestE97
    三星Galaxy S109
    三星Galaxy S9 移动联通电信4G9
    华为荣耀6 Plus移动4G4.4

    5.你的软件Gamma版本的出口条件

    通过beta,Gamma阶段的种种功能测试和兼容性测试,具备我们规划中的全部功能。

    cs