什么是EP英文简称“Engine Productivity”直译:工程生产力,通俗点:提升研发生产力。我在第一篇中提到百度QA职责中有一部分是提升研发效率,而不仅是提升测试效率。这项职责不是一个日常工作中测试管理者刻意去强调的工作内容,而是因为QA角色的特点,在自己的日常工作中会参与产品的全流程研发环节,因此当发现流程中有可以提升效率的地方或是通过外部交流知道了可提升效率的技术后自发地去做的事。当然做好了自然会得到组织的认可,于是QA都有这个习惯会自发主动地去思考如何提升研发效率,除了帮QA提升工作效率,也帮产品开发者提升工作效率,帮产品经理提升工作效率,从而可以全流程的优化加快产品发布上市的速度。总体而言,QA主要通过各类自动化工程手段、研发流程的工程化改造、产品代码可测试性改造、测试环境工程化改造等实现从开发阶段、测试阶段、版本发布阶段三个领域同时进行研发效率提升的目标。
作为QA要提升研发效率最早也最容易想到的就是自动化一切提升测试效率,不仅是自动化回归功能测试,自动化性能测试,自动化测试框架、还演进出自动化找代码缺陷,自动化找出算法效果缺陷的数据集、自动化Code Review过程、自动化进行代码级的扫描准入(valgrind、vitamin、errhunter)、自动化定位Crash位置新的自动化工程手段。例如:在我目前服务的某产品线,有个QA每周都会分析一些bug的缺陷根因,然后抽取出Code Review规则给另一个QA来自动化实现后再提供给开发同学使用,减少开发同学Code Review的时间提升工作效率。当我们在测试过程中触发了crash,会有一个平台自动在1-3分钟内给出这个crash发生的代码行,这个crash之前的代码调用序列,大大减少了开发同学和QA分析原始log定位crash的时间成本,帮助开发同学快速定位和修复crash代码。除了本地运行的回归测试用例,质量部还提供了分布式并行测试平台帮助各产品加快大量其他功能回归测试任务执行的速度,缩短整体回归测试时间,自动化功能回归测试执行时间缩短为原来的几十分之一,为产品更快发布又节省了研发周期。
QA对公司研发效率的提升不只是自动化一切,还有其他的工程手段诸如:进行可测试性改造、单元测试效率提升、测试环境搭建与仿真。
可测试性改造的目的既有减少产品缺陷的产生的效果也有减少测试实现成本、发现问题可快速定位的效果。因此一些百度的高阶QA会和开发配合合作进行产品的可测试性改造以提升后期测试执行和开发定位问题的效率。首先:QA会给RD提供代码可测试性的方法论和设计准备,降低代码的圈复杂度,不但减少复杂逻辑引起的代码问题、还更有利于降低单元测试开展的复杂度从而提升单元测试覆盖率,预防软件缺陷的产生,就减少了后期定位和修复bug的成本,提升产品整体生产效率。其次:为了帮助后续RD更好的定位问题,以及QA更容易开展系统测试,QA还会提出一些可测试性设计理念给RD,希望能融入到产品设计中。例如我今年搞的一个可测试性框架,不但实现了测试代码不驻留产品代码,QA通过在测试阶段一键自动注入测试代码到产品代码中进行专项crash风险挖掘工作,而且挖掘出来的每个crash都是必现的,都能在1到5分钟内复现,都能直接给出是哪一行代码的发生的crash,是什么原因触发的crash。这样的可测试性改造不但大大提升了测试人员发现crash的效率和crash复现的效率,结合我们的crash自动分析平台还提升了开发定位和修复crash的效率,开发人员定位的时间可以缩小到分钟级。因此提升研发测试效率除了自动化一切,产品进行可测试性改造和设计也是减少bug定位和复现成本的重要EP手段之一。
在QA的EP支撑过程中,除了通过可测试性设计预防缺陷减少后期的研发成本消耗,在缺陷预防领域还大力支持RD更简单更高效地开展单元测试降低单元测试实施的成本和难度,提升单元测试开展的效率。支持的主要手段有:提供更简化使用的单元测试框架、单元测试的教练式辅导。
在日常的开发和测试工作中,无论开发人员还是测试人员都会相当比例的时间用在测试环境搭建、调试和环境问题的定位中,直接影响了研发工作效率。因此QA必须进行测试环境的EP工程改造,诸如:测试环境自动部署、测试环境仿真、开发测试模拟器的来降低相关的研发成本、加快测试工作速度和开发定位的效率。据我了解,几乎所有产品测试团队都实现了测试环境自动部署来提高研发工作效率,减少测试环境搭建和调试的成本。同时还通过测试环境仿真,让产品实际运行环境中的变量成为可控的因子来减少环境问题的定位成本,提升QA和开发在环境问题上的定位效率。在移动APP的测试中有成本很低的测试仿真环境来模拟低质量的移动网络,不但可仿真低质量网络的丢包率、时延和低速这些特征,还能仿真真实移动网络中手机被迫频繁退出和接入网络的效果(如坐地铁或走动的场景)。通过仿真的移动网络,我们不但可为用户提供更高可用性的产品而且还大大缩短了户外真正网络环境引起的产品问题效果的定位时间。以前认为是环境问题无法复现的问题都可以实现分钟级为单位快速复现,并根据仿真环境设置的参数快速定位产品问题根源。
在测试阶段除了自动化测试、可测试性工具、测试环境搭建和仿真外。各测试团队还积极结合产品特点开发一些测试辅助工具、进行测试设计模式和测试模式的改进,力求在不增加测试周期的条件下甚至减少测试周期的条件下可以尽早发现更多产品中存在的质量风险,提升测试效率。例如:2012年时很多产品组都积极应用探索测试方法,有些产品组在未增加测试时间和测试人力的情况下,通过应用探索测试方法新发现的bug数量占据总bug数量的30%以上,相比过去直接提升了40%以上的测试生产力。还有一些团队在回归测试范围领域进行测试技术探索精准回归测试,缩短回归测试工作量,提升了测试团队的工作效率。
以上内容是我在百度看到的比较普适性的在开发阶段和测试阶段提升工程效率的QA工程实践,代表了百度成熟的应用,不代表全部。
下一篇文章计划给大家分享百度QA在版本发布阶段进行的EP工作实践。
版权声明:本文出自 架构师Jack 的51Testing软件测试博客:http://www.51testing.com/?293557
原创作品,转载时请务必以超链接形式标明本文原始出处、作者信息和本声明,否则将追究法律责任。
相关链接:
《我眼中的百度QA》第一篇:百度QA的特点与核心价值
《我眼中的百度QA》第一篇:百度QA的特点与核心价值(下半部分)
《我眼中的百度QA》第二篇:百度用户体验提升的产品评测