跳转至

用户故事 我的自动化学习之路

你好,我是上凯,目前在从事研发效能提升的相关工作。

我虽然在工程实践上积累了不少经验,但在自动化的实践中,有一些疑问,我却无法给出清晰的答案。自动化就像一个个技术孤岛,需要一座桥,将这些孤岛连接起来,找到背后的规律,才有可能解决我的疑问。

今天,我想分享一下我学习自动化的一些经历,也聊聊我对后面这三个问题现阶段的思考,希望能够带给你一些启发,少踩些坑,少走些弯路。

1.为什么个人级实践成功了,而团队级实践却失败了,幕后推手是什么?
2.假设时光倒流,那些未达预期的自动化方案,应该如何改进?
3.GUI自动化、接口自动化、单元测试以及手工测试,有什么方式能够实现相互融合?

我的自动化从业起点

先说说我的从业经历吧。从毕业至今,我一直从事软件开发工作。一开始负责电信通讯软件的开发,两年后转向了移动端开发,经历了WinCE - Windows Mobile - Android - Hybrid混合开发的技术变迁。

而我真正开始学习自动化,是在毕业10年以后。那时候我开始组建团队,去开发移动式的专业设备。由于当时的测试团队仅有功能测试人员,而产品的迭代速度又比较快,为了提升质量保障的效率,我们从研发侧起步,开始了自动化之旅。

从大幅迈进到反思优化

正如老师在课程中给出的技术成熟度曲线。刚开始的两年,我们在自动化乐观阶段大幅迈进,先是引入Robotium框架,在产品上实现了GUI自动化测试,接着又搭建了Jenkins服务器,初步实现了CI流水线和每日构建。

但两年以后,也就是2017年,我们似乎突然到了一个瓶颈点,不知道该怎么继续深入了。而那一年正是产品需求暴增的一年,客户需求如雪片一般飞来,我们的自动化测试和CI流水线,包括手工测试,完全跟不上需求的变化,几乎陷于瘫痪。

而研发人员这边,因为缺少了自动化的保障,改起代码来也是心惊胆战,每次产品发布,就会迎来多次“救火”。这使我们重新开始反思 —— 自动化到底有没有价值。

图片

带着这些疑问,我去参加了第一届Jenkins用户大会,这次大会对我的影响是巨大的。在会上我看到了CI/CD、DevOps以及很多成熟的最佳实践,让我察觉到自己团队存在的巨大差距,也领悟到研发工程化,对产品交付带来的巨大价值。

也是那次大会,让我明确了自己将来的方向 ——投身研发效能领域的相关工作。而通过自动化提升质量保障效率,就是研发效能提升中最关键的一环。

新的问题与尝试

在接下来的两年里,我所在的研发团队结合自身产品的特点,在软件架构、分支策略、GUI测试框架、Mock测试、Pipeline流水线等多个方面,对产品进行了全方位的改造。

随着改造的推进,我们的产品在研发效率方面也得到了显著提升,而这时新的问题又出现了。

由于质量保障部门采用的都是手工测试,研发和测试之间没法打通,造成研发的提测版本堆积。新功能实现了,测试没有资源投入的情况屡见不鲜。而自动化测试已经验证的部分,手工测试依旧要手动再走一遍。另外,自动化都集中在GUI层面,稳定性和扩展性不足。

最终的结果就是我们引入了不少新的技术,研发侧如火如荼地搞了很多自动化的东西,但产品交付并没有达到预期。

做了这么多努力,效果却并不理想,这让我产生了更多疑问:问题究竟出在哪里?我们的这些自动化方案,真的可以带来研发效能的提升吗?

团队级的自动化方案,达不到交付预期,影响因素众多,有人的因素,有产品的因素,很难找到根源。能想到的,只能将影响因素减至最小,即尝试产品小型化,将产品研发人员减至最少,来验证自动化的方案是否有效。而当时最合适的一种验证方式,就是个人小程序产品。

于是,后面的一年,我又通过一款个人小程序产品做了一些尝试。我主要做了下面这几方面的事儿:

  • 把自动化下移至单元测试,并保证业务层代码85%以上的单元测试覆盖率;
  • 通过将单元测试接入提交流水线,实现每次提交自动测试;
  • GUI测试,通过手工测试覆盖关键路径。

这个小程序产品迭代了半年,在产品、研发和测试,都只有我一个人的情况下,实现了两周一个版本的持续发布,并且没有因为重大的线上问题而造成版本回滚。

这次成功的尝试,又让我对自动化重拾信心。把我从自动化悲观阶段拉了回来,自动化测试是可以显著提升研发效能的。既然在个人产品中,自动化都能发挥那么大的作用,如果能够总结出一些背后的规律,将成功经验推广到团队,那对团队效能的提升,就将会是指数级的。

这些隐藏在背后的规律,就像是一把钥匙,它能够解开我开头提到的三个问题:实践如何从个人推广到团队;自动化方案的改进怎么做;各种不同维度的测试怎么融合得更好,形成提升研发效能的合力?

就在这个时候,《自动化测试高手课》来了,看了课程大纲,我觉得这门课和其他介绍自动化测试技术的课程不同,角度很新颖,也许能解决我的困惑。就这样,我踏上了这门课的学习之旅。

我从课程里学到了什么

我在极客时间上学过不少课程了,我想通过跟其他几门相关课程的对比,先整体说说我对这门课的理解,然后再和你聊聊我的学习方法。

首先,我先说说这门课和其他同类课程的区别。

从技术点来看,这是一门适合开发和测试来学习的课程,因为涵盖了两个岗位的测试相关技术点,在这之前,我看过《程序员的测试课》《软件测试52讲》,这两个课程都有所侧重,而《自动化高手课》,将这两门课的技术点,串接到一起了。

在我看来,这门课的关键点并不是技术本身,而是类似剥洋葱的方式,先说明问题场景,再引出公式、法则、模型,最后才是落地实践,读完给人一种豁然开朗的感觉。

另外,这门课的一些例子,大都是前后端结合。如果你对互联网端前后端架构有一定的了解,学习效果会更好。我自己是做移动端应用开发的,并没有后端的开发经验。但之前上过架构训练营,学过《全栈工程师修炼指南》,所以对后端架构有了一定了解,这时再听这门课时,就会更容易理解老师的思路。

学习方法

每个人从事的岗位不同,掌握的技术点不同,每一节课,肯定有自己最关注的点。这里我分享一下我的学习方法,供你做个参考。

我比较喜欢把自己最关注的点整理成笔记,这样后续查找和翻阅,都会比较方便。我用Notion来做笔记记录要点。专栏内容我通常会“刷上三遍”:

1.第一遍略读,了解课程内容;
2.第二遍精读,边读边做笔记;
3.第三遍直接看笔记,看能否回忆起课程内容,如果回忆不起来,就再补充笔记。

下面这张图是我的笔记截图,供你参考:

图片

除了学习留痕,勤记笔记,积极完成思考题对理解课程也有帮助。评论区是我们和老师的交流通道,这是专栏比纸质书更有价值的一个方面。老师的思考题,很多都没有标准答案,但会引导我们去思考,很多新的点子,也会在思考中逐渐显现出来。我在评论区的问题,老师几乎是有问必答,也会激发我不断追更的兴趣。

还有一个技巧就是知识点梳理。我在学架构实战营时,老师曾鼓励我们要自己画思维导图,这样才能加深自己对课程的理解。因此在这门课学习过程中,我也自己整理了一个思维导图,以ROI为主线串联每个章节,再区分理论和技术点,这对后续对课程整体的理解,很有帮助。

如何学以致用

我特别认可“从书中学,和高手聊,在事上练”这句话。这里我引申一下,刚好可以用这个框架,整理一下怎么让这门课程的学习效果最大化。

首先是从课中学。想把专栏里的知识真正学到手,变成自己的。不妨以问题为导向,也就是看看课程里讲的东西有哪些可以帮你解决问题。

比如我前面提了三个问题,通过课程学习,我感觉自己有了更清晰的思路。

第一个问题是,为什么个人级实践成功了,而团队级实践却失败了,幕后推手是什么?

没错,幕后推手就是ROI。我个人小程序产品的实践,选择了ROI最高的方式,所以效果好;而团队级的实践,忽视了产品整体的自动化ROI,同时缺少度量改进机制,导致研发的自动化只有单点效应,无法提升产品整体的交付效率。

第二个问题,假设时光倒流,那些未达预期的自动化方案,应该如何改进?

我的答案是,首先要拉通开发和测试,应用3KU法则,制定产品整体的质量保障策略。接下来通过Job模型进行自动化设计,对各层自动化进行分工。最后是建立度量模型,提升整体的自动化ROI。

第三个问题,GUI自动化、接口自动化、单元测试以及手工测试,有什么方式能够实现相互融合?

相互融合的方案,就是Job模型设计的过程。要实现Job模型框架,不过这样需要的周期比较长,可以先通过设计产品的Job模型,指导各层测试分工协作,这已经可以从一定程度上实现相互融合了。

然后就是和高手聊。我的建议是,除了在评论区做思考题,写下自己的问题,也可以多看看其他人提的问题,换位思考一下,如果是自己,会采取哪些方案去解决这些问题。你也可以在每节课上分享一下自己的实践案例或者相关问题,说不定就能从老师、同学的回复里得到启发。

最后,最重要的还是在事上练,也就是拿实际的项目练手,可以先找一个比较容易的问题,做单点突破,然后再逐渐扩展试点范围。

以我们的产品为例,原先以GUI自动化为主,就可以先引入接口自动化,降低GUI测试的比重。当团队同学看到测试时间缩短了,测试稳定性提升了,而维护成本却在降低,对自动化又有了信心后,再逐步扩展。

最后我想说,要提升产品的测试效率,不仅仅是掌握各种自动化技术和框架就可以的,而是要站在对产品架构熟悉的基础上,把课程中的3KU法则和Job模型这两个神器用起来。在每设计一个方案时,都要问问自己,这个方案可以提升自动化的ROI吗?具体是在哪些方面提升的?

我的分享就到这里,希望我的自动化经历,能够给你一点启发和帮助。自动化实践之路,充满着艰辛和坎坷,只要我们找到了实施路径中的关键点,并且保持足够的耐心,光明总在前方。付出会有回报,坚持会有结果,让我们一起努力!

精选留言(3)
  • Sophia-百鑫 👍(0) 💬(1)

    学习的过程就是把材料不断变薄的过程,此外把所有讲的内容揉搓在一起灵活做到各个点线面的逻辑自洽。每一个自我总结多问几个why 可保证真正理解,最重要的是练练练。

    2023-10-09

  • ifelse 👍(0) 💬(0)

    学习打卡,谢谢分享

    2024-03-07

  • AndyRF 👍(0) 💬(0)

    很好的学习方法👍

    2022-12-14