软件测试转型之路

jopen 9年前
   <div id="news_body">     <p>        <strong>选择测试之路——路上的迷茫</strong></p>     <p>        2010年 12 月 31 日,在网易从事了多年开发之后,依依不舍地离开,面临的是一个完全从零开始的全新职位:SQA,也就是 tester。</p>     <p>        当时对为什么被选择做软件质量保证,而不是继续在研发上进取,持有保留态度:凭什么要我转,不是别人?这个时候,多年的伙伴、领队——雷叔就把我的优点暴露出来了:认真、心细、负责;好吧,基于以上几点,只有“我行”,只能给力了。</p>     <p>        从心底里,对质量管理、SQA 等概念,我并没有多想,因为根本想不了,脑子里面没有太全面的认知,即使雷叔讲过一些,我还是觉得不够全面,不知道业界是如何做的?所以心里多多少少有点担心!</p>     <p>        几个人成立一个新团队,什么都是从零开始,关键还是要有一些流程,这几年开发中也积累了些经验,总结了些问题。在 12 月底,我提交了《软件质量保证第一季度计划》,这个计划后来也成为了整个质量保证体系的核心,大概纲要如下:</p>     <ol>      <li>搭建项目管理平台</li>      <li>搭建持续集成平台</li>      <li>规范开发流程</li>      <li>制定软件质量保证规范流程</li>      <li>建立缺陷管理</li>      <li>建立风险管理库、经验教训库(长远计划)</li>     </ol>     <p>        2011年 1 月 25 日,苦于没有规范的流程,做起事来还是不够顺畅,在奋战多日之后,制定了《产品研发质保流程手册》,简单来说,划分了:需求、开发、发布三个阶段,每个阶 段定义验收的产物。为什么要制定这个?必须有章可依,否则步伐不稳健,走的再远,也会乱。</p>     <p>        道路上,难免遭遇坎坷,要不断提升自己,也有三点切身体会:</p>     <ol>      <li>如电影《热血教练》中卡特教练所说,先把基本功练扎实了,才能有胜算。既然从零开始,就不要被困惑不已的琐事所纠缠着,下决心突破,可以研读:质量管理、缺陷预防、软件测试、持续集成等书籍,并且通过互联网了解一些公司是如何开展测试和质量管理的方方面面。</li>      <li>个人价值迎合团队价值,果断取舍,为团队利益着想。</li>      <li>坚定信念,避免浮躁,把握远景,不要急于寻求成就感。</li>     </ol>     <p>        同时,在调研期间,我意识到持续集成很重要,并按照当前的需求,重点关注以下几点:持续测试、持续审查、持续反馈。</p>     <p style="text-align:center;"><img alt="软件测试转型之路" src="https://simg.open-open.com/show/8317f69c09f5dee1aaf330e3d5e994cd.jpg" width="415" height="284" /></p>     <p>        <strong>图:早期的开发、测试流程原型图</strong></p>     <p>        <strong>无悔选择测试之路——路上的抉择、进取</strong></p>     <p>        有了流程规范,接下来是实施和持续改进。这些规范运用在一个项目上,先做了三个月,不停地测试,编写功能测试用例,也走了 2 条弯路:</p>     <ol>      <li>用例花了大量时间编写,就连打开浏览器、输入 xx、点击登录,这些也记录了(这种是早期状况)。 我居然还请缨加入开发,因为看到一些任务完成不了。后来雷叔也指明,测试做测试应该去做的,如果我当时帮忙做开发,那么很多测试都完成不了,一样保证不了质量。</li>      <li>所以,测试人员除了要了解业务,使用简单、清晰的语言结构来进行测试之外,还应该准确定位自己,明白自己在整个版本迭代中,控制质量的位置!</li>     </ol>     <p>        事后想想,那段日子锻炼了什么?那三个月无法忘记,每天高强度测试,用的最多的就是:功能测试(边界值、场景法),白盒测试。其实就是锻炼了测试的基础技能和流程管理。</p>     <p>        后来测试管理流程逐步建立起来,但是在测试过程中,应当如何提高代码质量?这个阶段我们参考了<a href="/misc/goto?guid=4958339364941386939">敏捷开发中高质量 Java 代码开发实践</a>,做了一些适合团队的改进,见下图:</p>     <p style="text-align:center;"><a href="https://simg.open-open.com/show/236c7f8af0f26786c6366803df072c5a.jpg"><img style="width:543px;height:346px;" alt="软件测试转型之路" src="https://simg.open-open.com/show/236c7f8af0f26786c6366803df072c5a.jpg" /></a></p>     <p>        <strong>图:质量提升的模式</strong></p>     <p>        这种迭代版本中 java 代码质量提升的模式,已经采用了将近一年,非常有效。</p>     <p>        同年 Q2,我们对测试管理进行了改进,其中是受到 <a href="/misc/goto?guid=4958339365762331125">@段念-段文韬</a><a href="/misc/goto?guid=4958339366552822716">《组织敏捷测试》</a>影响,采用类似“一页纸计划”的测试文档(在此要感谢<a href="/misc/goto?guid=4958339365762331125">@段念-段文韬</a>)在 <a href="/misc/goto?guid=4958339368078372234">redmine</a> 进行管理。之前每次整理测试计划,发送给开发人员,实际上耗费了一些时间,并且成效不大,现在的任务:需求、开发、测试,全部交给 redmine 管理,所有事情一目了然,对任何人都是可见的,有没有完成,进度如何,非常清晰。</p>     <p>        为了规范整个开发测试流程的管理,包括开发、测试的交互,我们又制定了轻量级的 SQA 框架,见下图:</p>     <p style="text-align:center;"><a href="https://simg.open-open.com/show/c9c621b94c87f9db10c51a81a788c893.jpg"><img style="width:539px;height:232px;" alt="软件测试转型之路" src="https://simg.open-open.com/show/cde592950b347332f2abda3ba95a6282.jpg" /></a></p>     <p>        <strong>图:最初制定的 SQA 框架</strong></p>     <p>        不过此后这个框架也发生了比较大的变化,做得更好、更轻量级。无独有偶,我偶然的机会买了一本<a href="/misc/goto?guid=4958339368886282276">@朱少民老师</a>的:<a href="/misc/goto?guid=4958339369672691273">《全程软件测试》</a>,发觉这个 SQA 框架也是渗透到目前的每个环节,更适合目前团队的 scrum 模式,在此也要感谢@朱少民老师,真是相见恨晚,不然可以少走很多弯路!!!</p>     <p>        大家可能会问:Scrum 模式、用户故事,测试人员怎么利用?为什么想到这个?如果遗漏了测试场景,团队会很不爽,怎么避免呢?结合<a href="/misc/goto?guid=4958339370482211567">@Aullyxiao</a> 的<a href="/misc/goto?guid=4958339371270793489">《软件测试之魂》</a>提到分层测试的想法,想了想,还可以这么整:</p>     <p style="text-align:center;"><img alt="软件测试转型之路" src="https://simg.open-open.com/show/05de7c413d08ee5560a3ed553b40ab0c.jpg" width="505" height="592" /></p>     <p>        <strong>图:分层测试图</strong></p>     <p>        对于目前的开发架构来说,一个用户故事,涉及这四个点,可以从这四个点入手来进行质量保证。如何做呢?单元测试就开发人员处理了;代码审查,测 试人员可以参与和监督,其实就是要保证:将开发任务与提交到 SVN 的代码进行关联。这样一来,当测试人员检查开发任务的时候,就可以找到改变过的代码。我曾经试过从这些代码里面查看逻辑,找到分支场景,补充到测试用例里 面。</p>     <p>        在此期间,我还看过<a href="/misc/goto?guid=4958339372066301461">@架构师 Jack</a> 原创的《功能测试用例基础设计模型》,这个文档 2 天转发已超过 150 次,我也向所有同行推荐该测试设计模型实例化的测试用例,供大家消化该设计模型。想要的朋友可以去微盘下载<a href="/misc/goto?guid=4958339372851938899">《功能测试基础设计模型(24个设计方法的实例化用例)》</a>。</p>     <p>        我当时还借鉴了<a href="/misc/goto?guid=4958339373653919789">@季哥来自淘宝</a>的《探索式测试》系列文章,包括:<a href="/misc/goto?guid=4958339374448900939">《探索式测试的秘密——记在淘两年》</a>、 <a href="/misc/goto?guid=4958325596412780048">《组合测试法中的全对偶测试法》</a>、<a href="/misc/goto?guid=4958339375972601112">《探索式测试实践之缺陷大扫除和结对测试》</a>。</p>     <p>        当然这么多东西,我觉得自己还需要时间来消化。</p>     <p>        <strong>继续测试之路——路上的风景</strong></p>     <p>        也许会有人问:有没有后悔做 tester?</p>     <p>        我过去也常问自己:做得开心吗?产品质量提升了吗?看到自己的前景了吗?找到 high 点了吗?</p>     <p>        现在我可以回答:OK,我做到了,并且还可以持续做得更好。</p>     <p>        可能有很多测试人员会问:测试人员的价值到底何在?在这里,我套用和整合@朱少民老师的一些术语,给出我的回答。</p>     <p>        我认为,Scrum 中测试人员价值应当体现在:</p>     <ol>      <li> <p>        预防缺陷的手段,提高洞察力,增强业务知识。</p> <p>缺陷在需求、开发前期就已经存在了,关键是用什么手段去挖掘出来预防。在 sprint 前获取到的需求,测试人员可以站在客户角度上来阐述自己的观点,与开发人员进行充分交流和讨论,使自己在用户体验、业务逻辑等等方面的经验充分体现出来。</p> </li>      <li> <p>        在开发过程中,测试人员除了站在客户的角度进行测试,还应当提供更全面的质量反馈,包括代码质量的检查,这个可以通过 redmine 与 SVN 双向关联来做检查依据。目前整个过程测试人员尚未参与代码编写,应当参与并推进代码评审,将代码问题及时反馈出来;并且参与或者推进单元测试,检查单元测 试状态(确保单元测试达到 80% 以上覆盖率,帮助开发人员开发出具有良好可测试性的代码),自始至终将质量问题及时反馈出来,保证在 sprint 的整个过程中质量受到足够的关注,提高质量改进的持续性和可视性。</p> </li>      <li> <p>        随着版本任务的增加,每个版本回归测试的成本增加,可以适当考虑部分稳定功能进行自动化测试。当然,这是远景。</p> </li>      <li> <p>        持续改进、反馈,充分发挥每个版本统计报告的作用,对缺陷进行分析,总结出一些规律,帮助开发人员建立良好的习惯,改进代码的质量。</p> </li>     </ol>     <p>        测试人员,应当在自己的道路上看到风景,以前作为开发,写好一个功能,很 high;测试人员也要有这种心境,提高了产品质量,预防了缺陷,很 high。找到自己的 high 法,才可以把测试玩得更爽 ,我知道<a href="/misc/goto?guid=4958339368886282276">@朱少民老师</a>、<a href="/misc/goto?guid=4958339373653919789">@季哥来自淘宝</a>、<a href="/misc/goto?guid=4958339365762331125">@段念-段文韬</a>、<a href="/misc/goto?guid=4958339372066301461">@架构师 Jack</a>,都玩得很爽,但是有一点:要爽得靠自己,多跟高手交流,有利于提升自己,但是不要刻意复制别人成功的经验,因为每个团队的模式和环境不大相同。</p>     <p>        <strong>总结</strong></p>     <p>        每个人离开自己熟悉的领域,投入到新的领域中(说实在软件测试也囊括了开发领域),必然存在一些迷茫,不知如何入手,身边如果有一个靠谱的高 手,指点一下,眼前将会一片明亮。可惜,现实总是残酷的,往往很多时候,都要靠自己去摸索,只有经历了、深刻体会了,才知道如何改变,以及如何迎接新挑 战,调整到恰到好处的心态。这样子,才能够稳健进入转型的轨道。不要害怕改变和投入,一定要坚定信念,在前进的道路上,多参考同行的成功经验:<a href="/misc/goto?guid=4958339368886282276">@朱少民老师</a>、<a href="/misc/goto?guid=4958339365762331125">@段念-段文韬</a>、<a href="/misc/goto?guid=4958339373653919789">@季哥来自淘宝</a>、<a href="/misc/goto?guid=4958339372066301461">@架构师 Jack</a>、<a href="/misc/goto?guid=4958339370482211567">@Aullyxiao</a>,迎合团队价值,不断修正自己的偏差,走出一条华丽的直路!</p>     <p>        我很庆幸,经历了一个测试团队从无到有的创建,同时也帮助开发人员掌握了一些测试的基本技能,用于推进质量保证,让整个团队达到共识。现在的我,只是刚过了转型的痛苦期,测试工作也仅仅是刚刚开始,还有很多有意义的事情需要去做。</p>     <p>        路漫漫其修远兮,吾将上下而求索!</p>     <div id="come_from">     来自:      <a id="link_source2" href="/misc/goto?guid=4958339383407489595" target="_blank">InfoQ</a>     </div>    </div>