抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

软件测试转型之路

2012 年 5 月 08 日

选择测试之路——路上的迷茫

2010 年 12 月 31 日,在网易从事了多年开发之后,依依不舍地离开,面临的是一个完全从零开始的全新职位:SQA,也就是 tester。

当时对为什么被选择做软件质量保证,而不是继续在研发上进取,持有保留态度:凭什么要我转,不是别人?这个时候,多年的伙伴、领队——雷叔就把我的优点暴露出来了:认真、心细、负责;好吧,基于以上几点,只有“我行”,只能给力了。

从心底里,对质量管理、SQA 等概念,我并没有多想,因为根本想不了,脑子里面没有太全面的认知,即使雷叔讲过一些,我还是觉得不够全面,不知道业界是如何做的?所以心里多多少少有点担心!

几个人成立一个新团队,什么都是从零开始,关键还是要有一些流程,这几年开发中也积累了些经验,总结了些问题。在 12 月底,我提交了《软件质量保证第一季度计划》,这个计划后来也成为了整个质量保证体系的核心,大概 纲要如下:

  1. 搭建项目管理平台
  2. 搭建持续集成平台
  3. 规范开发流程
  4. 制定软件质量保证规范流程
  5. 建立缺陷管理
  6. 建立风险管理库、经验教训库(长远计划)

2011 年 1 月 25 日,苦于没有规范的流程,做起事来还是不够顺畅,在奋战多日之后,制定了《产品研发质保流程手册》,简单来说,划分了:需求、开发、发布三个阶段,每个阶段定义验收的产物。为什么要制定这个?必须有章可依,否则步伐不稳健,走的再远,也会乱。

道路上,难免遭遇坎坷,要不断提升自己,也有三点切身体会:

  1. 如电影《热血教练》中卡特教练所说,先把基本功练扎实了,才能有胜算。既然从零开始,就不要被困惑不已的琐事所纠缠着,下决心突破,可以研读:质量管理、缺陷预防、软件测试、持续集成等书籍,并且通过互联网了解一些公司是如何开展测试和质量管理的方方面面。
  2. 个人价值迎合团队价值,果断取舍,为团队利益着想。
  3. 坚定信念,避免浮躁,把握远景,不要急于寻求成就感。

同时,在调研期间,我意识到持续集成很重要,并按照当前的需求,重点关注以下几点:持续测试、持续审查、持续反馈。

图:早期的开发、测试流程原型图

无悔选择测试之路——路上的抉择、进取

有了流程规范,接下来是实施和持续改进。这些规范运用在一个项目上,先做了三个月,不停地测试,编写功能测试用例,也走了 2 条弯路:

  1. 用例花了大量时间编写,就连打开浏览器、输入 xx、点击登录,这些也记录了(这种是早期状况)。 我居然还请缨加入开发,因为看到一些任务完成不了。后来雷叔也指明,测试做测试应该去做的,如果我当时帮忙做开发,那么很多测试都完成不了,一样保证不了质量。
  2. 所以,测试人员除了要了解业务,使用简单、清晰的语言结构来进行测试之外,还应该准确定位自己,明白自己在整个版本迭代中,控制质量的位置!

事后想想,那段日子锻炼了什么?那三个月无法忘记,每天高强度测试,用的最多的就是:功能测试(边界值、场景法),白盒测试。其实就是锻炼了测试的基础技能和流程管理。

后来测试管理流程逐步建立起来,但是在测试过程中,应当如何提高代码质量?这个阶段我们参考了敏捷开发中高质量 Java 代码开发实践,做了一些适合团队的改进,见下图:

图:质量提升的模式

这种迭代版本中java 代码质量提升的模式,已经采用了将近一年,非常有效。

同年Q2,我们对测试管理进行了改进,其中是受到 @段念 - 段文韬《组织敏捷测试》影响,采用类似“一页纸计划”的测试文档(在此要感谢 @段念 - 段文韬)在 redmine 进行管理。之前每次整理测试计划,发送给开发人员,实际上耗费了一些时间,并且成效不大,现在的任务:需求、开发、测试,全部交给 redmine 管理,所有事情一目了然,对任何人都是可见的,有没有完成,进度如何,非常清晰。

为了规范整个开发测试流程的管理,包括开发、测试的交互,我们又制定了轻量级的 SQA 框架,见下图:

图:最初制定的 SQA 框架

不过此后这个框架也发生了比较大的变化,做得更好、更轻量级。无独有偶,我偶然的机会买了一本 @朱少民老师的:《全程软件测试》,发觉这个SQA 框架也是渗透到目前的每个环节,更适合目前团队的scrum 模式,在此也要感谢@朱少民老师,真是相见恨晚,不然可以少走很多弯路!!!

大家可能会问:Scrum 模式、用户故事,测试人员怎么利用?为什么想到这个?如果遗漏了测试场景,团队会很不爽,怎么避免呢?结合 @Aullyxiao 《软件测试之魂》提到分层测试的想法,想了想,还可以这么整:

图:分层测试图

对于目前的开发架构来说,一个用户故事,涉及这四个点,可以从这四个点入手来进行质量保证。如何做呢?单元测试就开发人员处理了;代码审查,测试人员可以参与和监督,其实就是要保证:将开发任务与提交到SVN 的代码进行关联。这样一来,当测试人员检查开发任务的时候,就可以找到改变过的代码。我曾经试过从这些代码里面查看逻辑,找到分支场景,补充到测试用例里面。

在此期间,我还看过 @架构师 Jack 原创的《功能测试用例基础设计模型》,这个文档 2 天转发已超过 150 次,我也向所有同行推荐该测试设计模型实例化的测试用例,供大家消化该设计模型。想要的朋友可以去微盘下载《功能测试基础设计模型(24 个设计方法的实例化用例)》

我当时还借鉴了 @季哥来自淘宝的《探索式测试》系列文章,包括:《探索式测试的秘密——记在淘两年》《组合测试法中的全对偶测试法》《探索式测试实践之缺陷大扫除和结对测试》

当然这么多东西,我觉得自己还需要时间来消化。

继续测试之路——路上的风景

也许会有人问:有没有后悔做 tester?

我过去也常问自己:做得开心吗?产品质量提升了吗?看到自己的前景了吗?找到 high 点了吗?

现在我可以回答:OK,我做到了,并且还可以持续做得更好。

可能有很多测试人员会问:测试人员的价值到底何在?在这里,我套用和整合 @朱少民老师的一些术语,给出我的回答。

我认为,Scrum 中测试人员价值应当体现在:

  1. 预防缺陷的手段,提高洞察力,增强业务知识。
    缺陷在需求、开发前期就已经存在了,关键是用什么手段去挖掘出来预防。在 sprint 前获取到的需求,测试人员可以站在客户角度上来阐述自己的观点,与开发人员进行充分交流和讨论,使自己在用户体验、业务逻辑等等方面的经验充分体现出来。
  2. 在开发过程中,测试人员除了站在客户的角度进行测试,还应当提供更全面的质量反馈,包括代码质量的检查,这个可以通过 redmine 与 SVN 双向关联来做检查依据。目前整个过程测试人员尚未参与代码编写,应当参与并推进代码评审,将代码问题及时反馈出来;并且参与或者推进单元测试,检查单元测试状态(确保单元测试达到 80% 以上覆盖率,帮助开发人员开发出具有良好可测试性的代码),自始至终将质量问题及时反馈出来,保证在 sprint 的整个过程中质量受到足够的关注,提高质量改进的持续性和可视性。
  3. 随着版本任务的增加,每个版本回归测试的成本增加,可以适当考虑部分稳定功能进行自动化测试。当然,这是远景。
  4. 持续改进、反馈,充分发挥每个版本统计报告的作用,对缺陷进行分析,总结出一些规律,帮助开发人员建立良好的习惯,改进代码的质量。

测试人员,应当在自己的道路上看到风景,以前作为开发,写好一个功能,很 high;测试人员也要有这种心境,提高了产品质量,预防了缺陷,很 high。找到自己的 high 法,才可以把测试玩得更爽 ,我知道 @朱少民老师 @季哥来自淘宝 @段念 - 段文韬 @架构师 Jack ,都玩得很爽,但是有一点:要爽得靠自己,多跟高手交流,有利于提升自己,但是不要刻意复制别人成功的经验,因为每个团队的模式和环境不大相同。

总结

每个人离开自己熟悉的领域,投入到新的领域中(说实在软件测试也囊括了开发领域),必然存在一些迷茫,不知如何入手,身边如果有一个靠谱的高手,指点一下,眼前将会一片明亮。可惜,现实总是残酷的,往往很多时候,都要靠自己去摸索,只有经历了、深刻体会了,才知道如何改变,以及如何迎接新挑战,调整到恰到好处的心态。这样子,才能够稳健进入转型的轨道。不要害怕改变和投入,一定要坚定信念,在前进的道路上,多参考同行的成功经验: @朱少民老师 @段念 - 段文韬 @季哥来自淘宝 @架构师 Jack @Aullyxiao ,迎合团队价值,不断修正自己的偏差,走出一条华丽的直路!

我很庆幸,经历了一个测试团队从无到有的创建,同时也帮助开发人员掌握了一些测试的基本技能,用于推进质量保证,让整个团队达到共识。现在的我,只是刚过了转型的痛苦期,测试工作也仅仅是刚刚开始,还有很多有意义的事情需要去做。

路漫漫其修远兮,吾将上下而求索!


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012 年 5 月 08 日 00:007469

评论 1 条评论

发布
用户头像
1
2019 年 11 月 26 日 21:26
回复
没有更多了
发现更多内容

带你读论文丨异常检测算法及发展趋势分析

华为云开发者社区

深度学习 异常检测算法 深度异常检测算法 深度半监督 群体异常检测

知乎的一次29.7元的咨询

why技术

Java 程序员成长

走近设计模式:写代码一定要用设计模式吗?

华为云开发者社区

设计模式 代码 软件设计 面向对象软件 GoF设计模式

react源码解析1.开篇介绍和面试题

全栈潇晨

React React Hooks react源码

QCon 演讲实录 | 大型软件团队的数字化项目管理实践

万事ONES

研发管理 团队协作 数字化 ONES Qcon

架构实战-模块5作业

大师兄

设计微博系统中”微博评论“的高性能高可用计算架构

9527

一文带你搞懂RPC到底是个啥

万俊峰Kevin

c++ 微服务 RPC RPC 协议实现原理 srp

初探可编程网关 Pipy

张晓辉

代理 网关 服务网格

【Flutter 专题】117 图解 Dismissible 滑动清除 Widget

阿策小和尚

5月日更 Flutter 小菜 0 基础学习 Flutter Android 小菜鸟

震惊,PostGIS还可以这样用!!!

华为云开发者社区

数据库 分布式 GaussDB 地理数据库 PostGIS

OpenResty入门

捉虫大师

nginx openresty

和12岁小同志搞创客开发:如何选择合适的传感器?

不脱发的程序猿

DIY 传感器 创客开发 如何选择合适的传感器?

别把单测玩出“坏味道”

九叔

单元测试 测试 单元测试 单元测试必要性

软件研发中的错误假设

赫杰辉

设计 低代码 研发工具 x-series

长连接网关技术专题(五):喜马拉雅自研亿级API网关技术实践

JackJiang

Netty nio 网关

华云大咖说 | 华云数据助力高校建设实训室平台

华云数据

Java 面试基础:Java 语言的特点

三掌柜

5月日更

重庆区块链公共服务平台—“渝快链”2.0正式发布

浪潮云

六一特辑丨8岁小程序员献礼儿童节:我DIY了聊天机器人,做3D printer,还想和外星人对话!

华为云开发者社区

编程 开发者 代码 机器人 小程序员

鸿蒙操作系统发布在即 万物互联时代将给开发者带来更多机遇

科技汇

高并发存储优化篇:诸多策略,缓存为王

Coder的技术之路

缓存 缓存击穿 缓存雪崩 缓存架构

业务架构训练营,模块5作业,微博评论高性能架构

好吃不贵

业务架构

JWT(auth0):RS256非对称加密算法实现Token的签发、验证

西门阿浪

Java Token RS256

6月日更,优质更文,“定制”来袭~

InfoQ写作平台官方

活动专区 6月日更

SphereEx 获数百万美元天使融资,接力 ShardingSphere 开启 Database Plus 新篇章

SphereEx

从一个HTTP请求来看网络分层原理

IT视界

计算机网络 网络协议 HTTP 网络层

带你看懂MySQL执行计划

Simon

MySQL 执行计划

开发人员应该害怕低代码吗?

禅道项目管理

程序员 低代码 开发 低代码平台

🔎【Java 源码探索】深入浅出的分析Mutex底层源码

李浩宇/Alex

Java JVM mutex Condition 5月日更

Spring 实例化方式有几种?为什么会用到 Cglib?

小傅哥

Java spring 小傅哥 cglib 手写框架

Study Go: From Zero to Hero

Study Go: From Zero to Hero

软件测试转型之路-InfoQ