前不久去参加了在北京举行的MTSC2018(第四届中国移动互联网测试开发大会:http://www.test-china.org/),虽然不是以讲师的身份,但听完以后仍然有很多收获。参加会议的主要是各大互联网公司的测试架构师,高级测试工程师,高级测试开发工程师等,议题内容涉及线上数据收集,质量体系建设,新一代的测试工具,自动化测试架构,测试平台搭建,专项测试,AI与loT等新领域的测试技术等等。我没有全部听完,就听过的内容整理下来主要有以下几个趋势:
1. 收集线上数据和用户行为,监控产品环境,以此来分析线上问题,还原问题现场,指导测试场景和测试策略,这已经成为各大互联网公司的普遍技术实践。
由于这届大会主要针对移动互联网产品,也就是我们俗称的手机app,所以产品的使用环境复杂多变,使用的机型也是数不胜数,在研发环境内基本不可能覆盖到所有测试场景。而且很多线上问题也是由用户反馈回来的,缺乏详细准确的描述,在研发环境又无法复现,也就无法得到有效的解决。基于此,很多公司都开发自己的线上数据收集和分析系统,例如这次百度和腾讯都分别介绍了自己的方案:通过灰度发布,埋点等方式收集线上数据和用户行为,通过大数据,消息中间件,弹性计算等技术构建数据处理和数据存储的能力,通过一定的算法来分析和提取数据中的业务逻辑,用户行为等信息,还原用户操作现场,监控产品环境,衡量测试的覆盖度,甚至可以通过一些算法来智能生成测试用例,指导后续的测试策略。
这些实践与TW技术雷达中QA in Production的理念不谋而合,强调最大可能拉近QA与真实用户的距离,使产品环境透明化,可见化,提高测试的精准度和覆盖度,减少测试的随机性和盲目性。
2. 各大公司对于测试平台和工具非常重视,测试工作向平台化,系统化,集中化发展。
在我听过的议题中,超过一半以上的议题都是各大互联网公司在介绍自己的测试平台。可以说,一个成熟的互联网公司如果没有测试平台,那是不可想象的。通过构建测试平台,大量的测试基础工作:例如搭建环境,准备数据,准备测试设备,自动化测试执行和调度,问题记录,质量分析等等,都可自动快速完成,极大减少了QA执行测试和编写自动化测试的成本,测试速度越来越高,以便满足移动互联网产品快速迭代的要求。
值得一提的是,在这次大会中来自网易游戏团队的工程师介绍了他们开发的新一代UI自动化测试解决方案:AirtestProject
,只需要鼠标选择对应的图像或者控件,这个工具就可以自动生成对应的定位脚本。支持基于UI层的图像识别Diff,类似与Web程序的视觉回归测试,对比不同的版本的界面,检查是否有变动。支持操作的录制回放,支持跨平台的控件识别。
对于测试工具,目前流行的做法是把公司内开发的各种各样的测试工具统一管理,提供类似于App Store的功能,方便把一个人的成果在整个公司内分享,减少重复工作量。有些公司的测试平台还提供了测试工具即插即用的功能。
从这些议题中可以看出,软件测试的执行工作已经越来越多的由机器来代替,自动化测试所占比重越来越大,编写自动化测试的成本也越来越低,测试基础架构和测试平台的设计开发工作成为软件测试的重中之重。
3. 软件测试领域与DevOps领域的广泛集成。
以上的两点趋势,除了移动端产品对软件测试的要求外,我认为一个重要的原因是DevOps的发展给了软件测试极大的支持,使得收集线上数据,监控产品环境,构建大规模的测试平台等方案能够落地实施。在各大公司介绍的测试平台中,持续集成和Jenkins等工具几乎是必备配置,而Docker, Kubernetes等容器化技术更是成为热点,被广泛应用于准备测试环境,调度测试执行等场景,很多议题就是在介绍DevOps的技术如何应用到软件测试中。
从另一方面来看,出现这样的趋势也是必然的。传统的软件测试仅仅限于发现软件中存在的问题,随着敏捷理念的流行,软件测试的领域扩大到如何有效的保障产品质量。而DevOps理念和技术的发展给软件质量带来了深远的影响,QA有了更加丰富的手段来提高测试效率,控制版本合入和发布,监控线上环境等等,能够有效的保障软件质量。在将来,QA和DevOps的结合应该会越来越紧密,而具备DevOps技能的QA也会更加受欢迎。
4. 高新领域的软件测试技术层出不穷,软件测试向更广的领域发展。
限于时间关系,这方面的议题我只听了一小部分。但是基于听过的话题以及其他议题PPT的内容,能明显的感受到高新领域软件测试技术的发展。例如已经有不止一个议题在介绍AI和人工智能算法在软件测试中的应用,以此来指导测试策略的设计,减少人工分析的工作量。精准测试也是这次会议的一个热点话题,通过统计代码变更记录并做Diff处理,分析每次变更影响的功能范围,提供测试用例的执行建议,提高执行测试的精准程度。并且通过分析所执行用例的代码覆盖率,来进一步指导后续的测试,持续提高测试的精准度。
随着互联网软件的发展,软件测试的领域也在不断扩大,在这次会议中还出现了物联网,人工智能算法,微信小程序等领域的测试方法介绍。
以上这些发展趋势也直接影响了软件测试从业者的职业发展。我认为,在未来测试执行的成本将越来越低,需要人介入的阶段越来越少,只会使用工具执行测试或者只会编写自动化测试的人员没有出路,将被逐步边缘化。因为在高度成熟的测试平台支持下,这些工作变得非常容易,甚至在不远的将来会被机器完全替代,这也对QA提出了更多在代码能力,工具开发,平台建设,DevOps,质量保障等方面的要求。将来更需要的测试从业者将为以下几类角色:
- 测试方案的设计者,也就是俗称的测试架构师,负责确定公司和产品的测试方案,技术选型,需要什么样的测试平台和工具,分析监控线上数据,改进测试方法,构建质量保障体系等;
- 测试基础架构的设计者,一般是测试技术负责人,或者是高级的测试开发工程师,负责测试基础架构(包括测试平台,监控系统,自动化测试体系,调度系统等等)的设计,以及核心功能的开发。某些情况下前两种角色会融为一体,由同一个人承担。这两种角色都需要具备深厚的测试领域背景和工作经验,这样才能清楚测试架构的需求,同时又需要具备较强的开发能力和DevOps能力;
- 测试资源的管理者,俗称的测试经理,负责管理测试资源(不仅限于人),处理管理性事务,例如流程改进,人员培养,团队文化建设,绩效考核等等。这类角色和一般的项目经理类似,但是在当下敏捷转型盛行的年代,需要对敏捷开发理念,Scrum,看板,持续集成,质量内建等有深刻的理解;
- 测试开发工程师,对测试平台和工具进行开发,维护,使用,同时完成专职的测试工作。以前传统测试团队的很大一部分人员将会转型为这个角色。而且随着软件测试的发展,在平台和工具上所占的工作比重会越来越大,具体如何执行将越来越多交由自动化完成,人所需要介入的是结果分析,用例设计,以及更加有针对性的精准测试。
可以看出,整个互联网行业技术的发展给传统软件测试带来了巨大的便利,也给传统软件测试人员带来了巨大的挑战,无法适应时代的将可能被淘汰。但不仅是软件测试,社会其他领域也是一样,整个科技的发展趋势就是用机器来解放人类,我们以前开始普及自动化测试也是如此,让机器代替人去做手工重复的工作,现在只不过是把这个范围更加扩大了而已。但同时也会有新的机遇的产生,例如随着测试平台,人工智能等的盛行,也就需要更多具备相应专业技能的人去开发和维护。归根结底还是由人的能力决定,技术能力,管理能力,学习能力,思维能力更优秀的人,会有更加广阔的发展前景。