前几天写了一篇 解读!
《2018年度软件测试行业现状报告》的文章,在写的同时也发现了一些有趣的数据,后来仔细琢磨发现很有意思,分享一下。
首先我们看 解读!
《2018年度软件测试行业现状报告》里面的几个调研结果,如下:
静态测试活动

2018年度软件测试行业现状报告
软件开发模式
2018年度软件测试行业现状报告
软件自动化测试
2018年度软件测试行业现状报告
通过上面三项调查统计,我们不难得出:
1.测试人员对需求分析的投入在逐渐增大,同时测试人员逐渐开始注重客户问题的分析,更关注用户体验和用户反馈。
2.敏捷和类敏捷型项目已经占到了已经极高的百分比,而DevOps模式的使用已经持续数年稳定增长,DevOps正在成为软件交付的最佳模式 , 同时我们发现瀑布或类瀑布开发模式比重逐渐降低。
3.较去年,自动化测试技术比例基本保持稳定且处在一个高占比的状态。不了解、不使用自动化的越来越少。同时令人兴奋的是,发现越来越多的测试人员将自动化技术应用于日志和数据分析、综合监测。
引发的疑问测试人员对需求分析投入的增大,自动化测试技术持续稳定且处在一个高占比的状态、测试技术多样化(日志和数据分析、综合监测)发展是否与敏捷和类敏捷及DevOps模式应用的广泛性有一定关联性?是什么驱动测试技术的发展与应用?
关于疑问的思考与总结
关于疑问的思考与总结首先思考,敏捷和类敏捷及DevOps模式应用的广泛性对测试提出哪些要求?
1. 频繁迭代与部署
在采用敏捷和类敏捷及DevOps模式之后,我们能够根据项目具体情况做到每周甚至每周多次部署。在生产环境频繁部署软件,最大的挑战就是测试。以前,测试基本上都在开发阶段之后和产品上线之前完成。但现在,不再有充足的时间留给测试团队去发现问题再抛给开发团队来修复。因此,效率成了测试面临的一大挑战。
2. 自动化支撑
DevOps强调将流程自动化,测试作为其中一个重要环节,势必要大规模实现自动化。因此测试人员的自动化编码能力正在面临极大的挑战。
3. 部署与反馈
敏捷提倡我们要拥抱变化,通过不断的快速迭代适应需求的不断变化。虽然一部分功能性需求是明确又具体的,我们清楚的知道用户想要什么,也因此易于测试。然而, 也有一些非功能性需求的验收标准没那么明确,比如:提高应用性能达到良好的用户体验。我们如何才能验证用户体验是否真的良好呢?仅仅通过性能指标吗? 当然不是,满足指标只能说明一部分问题,唯有真实的用户数据和反馈才是可最靠的。如何实时有效的感知产品线上可靠性、健康度成了测试面临的一大挑战。
4. 协作
敏捷强调全功能开发团队的共同协作,但这仅仅止于开发阶段。而DevOps注重Dev、Ops和QA三个群体之间的密切协作。因此,良好的角色定位能够帮助测试人员将价值最大化。
其次,测试人员如何应对
在敏捷开发模型的软件生命周期中,我们通过不断快速的迭代,以使其最大限度地符合客户对系统的需求。此时测试的关注点基本停留在开发阶段,以保证产品达到上线标准。引入DevOps之后,我们不仅要关注产品的质量是否达标,还需要使产品或功能价值预期得到及时的验证。
因此,我们不仅要将测试前移,在开发环境验证功能的可用性,还要进行测试后移,通过监控产品在生产环境的运作情况,来验证其价值并获得反馈,从而持续改进。
1.新功能是什么?
在开发环境,我们开发新功能,并且通过测试保证其达到产品验收标准。
这就要求从产品生命周期开始时,各个角色(测试、开发、产品负责人等)对业务场景、用户需求达成一致的认识,从而使其从需求到最后的测试验证,进行高度的协作和沟通,最后交付最有价值的功能。同时测试人员能够根据用户需求进行需求分析,发现产品前期设计是否存在问题或者补充产品设计。这里体现出了测试前移的核心思想。
2.已有功能是否被破坏?
在开发环境,我们开发新功能,需要验证新功能的增加或缺陷的修复是否引入一些新的问题。
根据以往的测试经验,新功能的增加或者缺陷的修复可能会引入一些新的问题。那么,如何快速的验证新功能的同时,验证已有功能是否正常。通过手工测试的执行方式是很难做到回归的全面性性。换句话说,如何做到全面的回归测试?由于传统手工测试效率的局限性,因此,自动化测试是唯一的有效解决方案。
自动化测试提高了频繁迭代部署的测试执行效率,同时保证产品的整体功能持续得到回归和验证。另外,还需要做一些性能测试、可靠性测试、安全性测试等等。
3.新功能是否价值?
我们将新功能部署到生产环境以后,接下来就应该衡量业务价值是否达到预期。
通过自动化技术对用户日志或数据进行分析感知用户的行为变化。比如:比如页面新增了一个导出功能,发布上线后,发现用户的点击导出按钮的次数几乎为零,很可能是因为用户根本不需要这个功能,或者导出按钮的颜色、位置等易用性(产品质量属性之一)原因导致用户没有使用。这时候需要思考如何对该功能进行调整。如果一个功能没有使用或者没有给产品带来显著的价值,在功能正确性和性能上投入大量精力又有什么意义呢?
这里体现出了测试后移的思想。
4.功能线上是否是可靠的?
测试大多数情况只能覆盖已知的测试场景。产品部署在用户环境运行的过程中,可能会由于某些不确定性因素(比如数据量突然陡增,用户访问突然陡增、网络不稳定或者数据盘损坏等等)导致产品或功能失效,由于其不确定性使得测试人员很难模拟测试场景,因此产品线上质量运营需要通过监控的手段开展,通常我们需要监控两种特性:可用性、性能。
通过自动化技术持续获取用户日志或数据,分析产品性能、程序进程等稳定性、健康度进行问题报警、预警。同时增加用户沟通反馈渠道,获取用户反馈从而及时调整。除此之外,这一点也充分体现了Dev、 QA、Ops的协作,像监控等原本只能Ops做的事,现在Dev或QA一样可以做。
这里也体现出了测试后移的思想。
最后
看到这,开始的疑问也就清楚了。敏捷及DevOps模式的应用,对测试人员提出了不同于以往的要求(以前测试基本上都在开发阶段之后和产品上线之前完成),使得测试人员在开发阶段之前加大了对需求分析等测试分析和设计(测试前移)、同时提高自动化测试技术的投入和应用、促使测试技术多样化(如,日志和数据分析、综合监测)发展(测试后移)。
同时,敏捷一直强调“团队为质量负责”,测试不再是测试的专属,这里我们需要重新思考下,质量由整个团队负责,那么测试的价值如何更好的体现?——如何提高测试效率。
DevOps模式更是对测试、尤其是自动化测试、编码能力提出了更高的要求。
延伸思考
1.国内软件测试行业即将或者正在发生哪些变化呢。
猜想:基本的功能测试任务交由开发团队负责,测试人员专注于自动化测试开发、安全测试、测试建模、精准测试、性能测试、可靠性测试、灰度和监控等专项测试工作中,DevTestOps模式到来。
2.测试行业选择Python开发语言如何
猜想:近年人工智能,物联网、区块链、机器学习等热门技术应用都可以看到Python的身影,其影响及应用的广度和深度正在不断的扩散,很有前途。