测试
软件测试
自动化测试
IT 行业
测试工程师

成为一个优秀的测试工程师需要具备哪些知识和经验?

关注者
377
被浏览
134,873

57 个回答

根据我的观察,优秀的测试人员可以做的事情可以包括如下3点:

  1. 由单纯的测试变成项目质量保证工作
  2. 持续集成探索和推动和自动化测试技术研究
  3. 测试相关工具的开发

1、我们先来讲第一点,由单纯的测试变成项目质量保证工作

测试,从狭义的角度来讲,包括如下这些环节:

测试计划和测试用例编写-测试执行-质量报告书写

测试人员一般会在开发阶段就进行测试计划和测试用例的编写和准备工作;在测试阶段,我们一般先会做功能测试,等项目功能基本稳定,bug较少了,就开始做兼容性测试、性能测试、安全性测试。兼容性测试保证了产品在多浏览器、APP在产品在不同机型下的兼容性;性能测试保证了产品在海量用户大流量下的服务能力;安全测试能发现产品可能会被攻击的各个隐患。做完了这些测试以后,人员发布质量报告,产品上线。

不过,优秀的测试人员需要向上游和下游拓展测试的领域,把自己放在“质量保障”的角色上,推动整个项目组一起保证质量,上游的工作包括:

  1. 在产品刚立项、进行需求确认的时候,测试人员就会参与进去,仔细地Review需求,看需求是不是完整、有没有漏洞,这个时候还没有进入正式开发,修改需求对于项目组来说代价是最少的。在这个环节,测试人员凭借缜密的推演、发散性的思维,往往能发现很多需求的漏洞,提高了项目的整体效率。
  2. 另外,测试人员在完成测试计划、测试用例以后,会邀请开发、策划一起来评审测试用例,在这个环节,由于测试人员把每个需求如何细化测试都体现在了用例里面,就相当于再次把需求分析了个透,往往还能发现很多需求的漏洞。这也是提早发现需求漏洞的有效环节。
  3. 我们知道,代码的质量归根结底是由开发保证的,测试做的工作,只是发现Bug让开发修复。如果一个花瓶,一开始就是很完美的;另一花瓶经过了各种修补,看起来比较完美,大家觉得哪个花瓶比较好?当然是第一个花瓶。所以,测试人员应该站在质量保障的立场,想办法跟项目组沟通、给开发提供工具,让开发自己把质量保障工作做好。比较可行的一些方式是:提供一些手工用例让开发自测;给一些自动化的接口和UI测试代码让开发自测;部署静态代码检查工具,并推动开发分析和修改发现的问题;有一些做得好的项目已经实现了持续集成,也可以尝试。

下游的工作包括:

  1. 在产品完成了测试以后,就是发布的环节了,测试人员在发布的环节也能发挥作用,首先,测试人员为了部署测试环境,研究自动化部署的技术,可以把上线部署的环节也自动化,以前需要2个小时的部署环节压缩到半个小时甚至更少,而且更加准确可靠。
  2. 如果有些版本修改比较多,上线的质量风险大,测试人员会跟产品一起制定灰度发布的方案并在技术上进行实现,让版本先面向一小部分用户开放,如果发现Bug了,影响的用户也比较小,Bug改掉以后,再逐渐扩大用户范围。

另外,优秀的测试人员还会发动项目组的其他人一起来保证项目质量,比如推动开发进行代码Review;引入冒烟自测流程,让开发先自测以后再提交给测试做冒烟测试;通过在项目组分析Bug,让开发提高自测,降低Bug数量等;引入策划、交互、视觉在测试阶段进行走查,等等各种措施。

2、持续集成探索和自动化测试技术研究

业界都在说持续集成,那持续集成究竟是个什么鬼呢?

持续集成原本的意思是让开发每提交一次代码就自动化测试一次,如果自动化测试发现问题了,测试用例就会失败,开发就会马上发现这个失败,并修改代码。

要做到持续集成可有很多工作要做。

  1. 首先就是编译环节,要把所有编译的环节都自动化起来,开发每次提交代码都能进行自动编译;
  2. 编译完成后,就是静态代码检查的环节,通过静态代码检查的工具检查代码的问题,比如,数据库连接池没有释放,参数不匹配等。
  3. 静态代码检查完成后,就是单元测试了,单元测试用例一般是开发人员或者测试人员编写,或者开发和测试合作编写,保证的是开发内部函数的正确性。一个健康的自动化测试方案中,单元测试用例的占比是最高的。
  4. 然后就是接口测试,一般保证的是后端开发提供给前端开发的HTTP接口,接口一般也比较稳定,用例比较容易维护,所以,接口测试的自动化占比也可以做到很高。
  5. 在接口测试的上层就是针对用户界面的UI测试了,就像测试人员手工执行一样,UI自动化测试能操作页面的元素,完成自动化。不过,由于用户界面常常要重构,所以我们常常会控制UI自动化测试的规模,只覆盖主干的用例。

优秀的测试人员可以把自己的工作尽量自动化,并用持续集成框架串起来,提高工作效率和质量。

3、测试相关工具的开发

优秀的测试人员会开发其他好用、趁手的工具来提高工作效率,比如数据自动生成、报表自动生成、报bug工具等。

其实归根结底就是一句话:测试人员最核心的工作就是保障项目的质量,各类测试流程、技术、工具和平台的发展让我们可以更好地保证项目的质量。

编辑于 2016-12-09 17:19

看到这个题目,头脑中马上就拆分出了3个小问题:

1、什么是优秀的测试工程师?
2、优秀测试工程师需要哪些知识?
3、优秀测试工程师需要哪些经验?

一个个讲解。


一、什么才是一名优秀的测试工程师呢?

什么才是一名优秀的测试工程师?我们可以通过测试日常的工作场景来发掘。

场景1:在一个项目中,需求发生变更了,如何处理?  
场景2:在项目上线紧张时刻,系统出现异常,如何处理? 
场景3:正在经历的项目有一个未知领域内的工作,需要攻克一些技术难关,发现没有带头人去做如何处理? 
场景4:后续基本稳定,需要迭代过程中如何通过自动化技术手段提高测试效率,能否带领团队从整体把控整个产品质量? 

软件测试是一个综合性很强的岗位,不仅仅需要具备一定的技术能力,还需具备团队合作及解决问题能力。那么优秀的测试人员针对上述测试场景会如何处理呢?

闭目想想....

接下来我们再来看看优秀测试人员的做法:

场景1:在一个项目中,需求发生变更了,如何处理?

普通测试工程师:省略n字
优秀测试工程师:变更流程及跨部门的沟通

场景2:在项目上线紧张时刻,系统出现异常,如何处理?

普通测试工程师:自己脑补
优秀测试工程师:有风险预防措施及应对方案

场景3:正在经历的项目有一个未知领域内的工作,需要攻克一些技术难关,发现没有带头人去做如何处理?

普通测试工程师:省略n字,自己脑补
优秀测试工程师:能确定技术的成熟度及方案的可行性

场景4:后续基本稳定,需要迭代过程中如何通过自动化技术手段提高测试效率,能否带领团队从整体把控整个产品质量?

普通测试工程师:省略n字,自己继续脑补
优秀测试工程师:具备高效完成工作的进阶技能


那么这样就算很优秀了么?

非也。

上面的场景属于先出现问题后解决问题。要达到优秀的测试工程师标准,

1)就需让测试工作前移,提前发现问题。
2)甚至要避免出现各种问题,以全面保障整个软件质量过程的管控。
3)能够带动团队,具备把控整理软件质量的能力。

这就需要测试人员锤炼如下本领:

  • 通过学习不断的提升自己
  • 夯实基本功多思考总结,在实践中反复验证改进

二、优秀测试工程师需要学习哪些知识,来不断提高自己?

1、问题引入

例如:
给你一个完整的xx项目,有web页面也有app甚至还有小程序,项目中给你产品需求说明书,那么测试要如何开展测试工作呢?

要能够开展测试工作,我们需要考虑3个方面:

1)得清楚测试的目的是啥?
2)按照什么流程步骤完成测试活动?
3)能否交付用户使用?

对于初级测试工程师而言,更多的是按部就班,按照领导的安排进行测试执行;

优秀的测试工程师需要从测试设计出发,以整体产品业务为主线,关注整个产品的质量以及稳定性等方面的测试点设计,同时还需要对已经设计的测试点转化为用例并执行,过程中还存在流程的优化,过程的改进,风险的把控等。

2、初级测试工程师提升到优秀测试工程师,需具备什么技能?

①熟悉必备的项目测试流程,能够轻松指导在项目中如何开展测试工作,流程如下:

  • 需求分析评审
  • 测试计划与方案制定
  • 测试用例编写与评审
  • 测试用例执行
  • 缺陷跟踪
  • 测试报告

②按照流程实施的过程需要进一步跟进确认:

  • 上述过程中,需求分析评审更多的需要对于产品需求达成一致理解;
  • 确定好需求范围后,按照项目计划制定测试实施计划及方案,描述做什么,谁来做,怎么做;
  • 侧重点是用例的设计编写,全面覆盖需要并验证最终的产品是否满足需求,是测试工作的核心;
  • 测试用例执行过程,需要等待开发达到提测标准,冒烟测试通过后进行测试用例执行;
  • 执行过程中产生bug,需要按照缺陷跟踪流程来跟踪验证bug,知道问题被修复完毕;
  • 当整个项目测试完毕后,进行测试报告的编写及项目的总结。

要完成上述整体的过程,需要知识技能的储备、时间管理把控、问题的分析定位及沟通解决等一系列的支撑。

3、如何才能获取优秀测试工程师具备的这些技能呢?

  • 计算机基本技能。例如:软件的基本管理和办公软件的基本使用等
  • 软件测试理论。例如:软件测试流程、测试用例、缺陷报告等
  • 测试专业技能。例如:计算机网络、操作系统、数据库、编程语言等
  • 其他相关能力。例如:和不同角色的人进行沟通解决问题能力,带领团图研发能力等。

详细知识点参见黑马软件测试资料分享链接(下方链接已附详细视频+配套软件)

那么,如何将视频知识转化为自己的技能呢?

第一种方式,可以直接通过自学方式完成,对于个人自律性要求较高,需要个人投入的时间成功更高。如果确定选择自学,建议可以看看下方文章,少走弯路:


第二种方式,可以参加专业的培训进行系统学习,适合基础比较薄弱的同学,同时系统学习能够比较全面夯实软件测试相关知识内容,对大多数人来说效果会更好。培训必定会涉及到第一个问题,那就是选择培训机构。如何选择培训机构呢?可以看下这个链接(1500+人点赞),一定会让你豁然开朗,不再迷茫:


三、优秀测试工程师需要哪些经验,来提高自己?

在实施过程中必然会碰到在理论知识中没有的问题,那这就需要经验。经验的获取源于不断的项目实战。

软件测试经验的获取需要大量的项目实战经验积累。所以参与具有一些实战意义的课程系统学习,无疑是一个积累经验的快速通道。

例如:一个手机银行APP项目,只有产品需求说明书或UI原型图,那么测试人员是如何进行一步步实施获取经验呢?


根据上述原型图:

首先读懂需求文档或原型图要表达的意思,比如上述UI描述的核心就是“转账功能”,对于转账来说,根据常识经验,需要验证转出账号的余额,转入账号的卡号姓名对应正确,转账的密码验证码,以及到账时间的正确性;

其次,需要考虑转账金额的正确性,如果转账过程中出现问题,能否回滚,金额原路退回;最后,还可以考虑能否多次转账,以及转账后记录是否可循。

把握住了这些关键测试点,那么就能验证到转账功能的核心,对于测试者来说就不会出现太大问题。而这些经验来源更多的是需要测试人员“站在用户使用角度”去思考,再结合产品需求文档就更加完善。

这就需要具备一定的理论知识,才能更好的完成实践:

  • - 软件测试技能
  • - 财务相关业务知识
  • - 生活常识

如果需要项目实践,这里推荐一篇文章,里面涵盖了如何找项目,如何选项目,如何懂项目,如何写项目,一定会对提升你的实战经验有效。


若你只是刚入门测试人员,想让自己快速成长为优秀测试工程师,在此特意为各位同学准备了一份13G的超实用干货学习资源,涉及的内容非常全面,涵盖功能测试(含测试流程)、Python编程语言,接口测试、UI自动化测试(含测试流程)......(满足你对测试知识的需求)

包括软件学习路线图,黑马50多天的上课视频、16个突击实战项目(满足你对测试经验的需求),80余个软件测试用软件,37份测试文档,70个软件测试相关问题,40篇测试经验级文章,上千份测试真题分享,还有2022软件测试面试宝典,还有软件测试求职的各类精选简历,希望对大家有所帮助…..

敲字不易,如果此文章对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

黑马精华知乎文章推荐

一、测试前景类

软件测试有前景吗?

软件测试行业到底有没有前景和出路?

软件测试工程师的工资有多高?

软件测试这个职业能干多久?

软件测试真的干到35就干不动了吗?

自动化测试的发展前景怎么样?相比于开发,测试的技术含量是否偏低?测试人员提升自身竞争力的速度是否没开发快?

软件测试的岗位会越来越少吗?

测试开发是什么?为什么现在那么多公司都要招聘测试开发?

国内的软件测试那么不受待见吗?

软件测试有哪些前景?

软件测试真的看不到前途吗?

27岁了,目前从事软件测试,听一些大神说测试前途是IT里最差的,是这样吗?

很多程序员都说 35 岁职业危机,那么为什么做开发的 35 岁程序员不转做测试呢?

最近十年,软件测试领域有什么重要进展?

二、测试择业类

二十五岁零基础转行做软件测试怎么样?

本人女,想转行做软件测试,没有任何经验,也没有基础,现在已经毕业两年了,25岁,现在转行来得及吗?

女生学软件测试,容易吗,这个工作会不会压力很大?

软件测试员比软件开发员要求低些吗?

软件测试的魅力何在?您为什么选择测试一行而不做开发?

软件测试的工资高还是开发者工资高?

软件开发和软件测试两个岗位应该选哪个?

为什么软件测试相比软件开发薪酬待遇差别那么大?

软件测试适合女孩子吗?

男27,想转行互联网,是学习软件测试好,还是前端编程?

软件测试工程师的一天工作内容是什么?

关于职业规划,自动化测试和软件开发我该如何选择?

想做软件测试,不知道自己是否合适?

软件测试适合女孩子吗,平时加班多吗?

想做软件测试,不知道自己是否合适?

软件测试和软件开发哪个比较好?

三、测试入门类

作为一名软件测试人员,有哪些网站是你应该多多关注的,哪些书籍是你必须要看的?

作为一名软件测试工程师,需要具备哪些能力?

软件测试人员怎么快速让自己牛逼起来?大概要多久才能很牛逼?

大四应届毕业生,想自学软件测试,要学到什么程度才能找到工作?

如何系统、高效地学习入门软件测试,并能找到软件测试的工作?

零基础想转行做软件测试,可以吗?

软件测试需要学什么?

想要成为一个优秀的软件测试人员,应该学些什么?

零基础如何通过学习进入软件测试行业?

在校生想成为软件测试工程师自学需要学什么?

新人如何入门和学习软件测试?

自学软件测试怎么学?

怎样做好软件测试

测试分为什么,白盒,黑盒,单元,集成测试?

在国外,资深的软件测试人员大多是手动测试,他们厉害之处在于测试用例的设计,但在国内,很多测试人员都把自动化测试当成很厉害的资本,为什么?

作为软件测试的前辈你能不能给我点建议?

我想问一下,软件测试要学会什么才能拿6k以上的工资?

学习软件测试有哪些推荐的网站,希望各位知友帮助?

28岁女失业,想从零学习软件测试,还来得及吗?

大四女生,软件测试岗,对测试也不太了解,编码能力也不行。不知道未来该如何规划,如何系统性学习测试呢?

没有软件测试经验的计算机毕业生如何准备面试测试工程师这一职位?

一个无经验的应届生,可以做软件测试吗?

完全未接触过软件测试的人,培训两个月就可上岗,这现实吗?

测试开发是代表懂测试的开发还是懂开发的测试?

今年30了,做了5年的软件测试,只会功能测试的怎么办?

学习软件测试需要掌握哪些知识点呢?

28岁转行软件测试真的很难吗?

我想问一下,软件测试要学会些什么才能拿6K以上的工资?

一个菜鸟怎样做好功能测试?

零基础转行学习软件测试如何入手?

25岁什么都不会进入软件测试晚吗?

零基础可以通过什么方式进入到软件测试行业?

测试分为什么,白盒,黑盒,单元,集成测试?

想学习软件测试,求推荐看什么书或者教程?

Python 和Java 哪个更适合做自动化测试?

初级测试工程师(能找到工作的水平就行)1、学多久2、学什么?

测试工程师到底是干啥的?测试工程师转开发有多大希望?

学软件测试需要准备啥?

国外知名 IT 企业是如何做测试的?

四、咨询培训类

软件测试培训靠谱吗?

这么多的软件测试培训机构,哪个好?

传智播客(黑马程序员)培训软件测试怎么样?

转行学软件测试,培训机构收费1.5W-2W不等,学习时间2个月左右,这种靠谱吗?

转行软件测试,报培训班3个月出来就是高薪工作,靠谱吗?

软件测试到底要不要报培训班?

五、测试求职类

怎么的技能可以让软件测试工程师获得高薪?

面试软件测试工作,如何回答:为什么要从事软件测试行业?你觉得你会什么?

如何去面试软件测试工程师?

好的软件测试人员简历是什么样子的?

四年手动软件测试,裸辞后找不到工作怎么办?

明天去面试软件测试,给我些建议,或者面试题预测?

测试工程师面试题,你都遇到过哪些呢?

最近在找实习。面试软件测试时,面试最想听到的答案是什么?

面试题:软件测试,如何测微信的朋友圈?

软件测试的真实面试题有吗?

应届生找软件测试的工作应该怎么准备?

软件测试,如何工资过万?

离职一个月了,也面了很多公司,但都没有offer,软件测试工作不难找,为啥我就那么难找?

软件测试简历项目经验怎么写,没有项目经验?

20岁零基础转行软件测试领域,求知友分享自学干货和面试经验?

六、技术分享类

如何编写测试用例?

手机软件的测试主要有哪些方面去测试,性能测试用什么去测试好?

如何做好app的测试工作?

软件测试完后,还有BUG,是测试人员的问题吗?

如何写出高效的软件测试用例?

做接口测试的流程一般是怎么样的?

软件测试人员能用python做哪些事情?

软件测试的环境部署怎么做?

如何做接口测试呢?接口测试有哪些工具

求推荐几款http接口自动化测试工具?

单元测试到底是什么?应该怎么做?

想学习LoadRunner,有没有好的资源(书籍、视频或网站)?

怎么看待QA(软件测试)漏测bug?

测试工程师都是怎么写测试用例的?

国内哪些移动 app 开发团队做了自动化测试?能否介绍一下具体的实现方案?

如何保证接口测试的覆盖率?

七、职场提升类

做了大半年的软件测试,可是觉得我在浪费时间,怎么办?

四年测试工程师经历,下一步转开发还是继续测试?

软件测试工程师应该怎样提高自己?

转行软件测试两个多月,感觉很迷茫,下一步该如何提高自己?

四年手动软件测试,裸辞后找不到工作怎么办?

做软件测试,如何才能实现月入20K?

如何学习自动化测试?

一个菜鸟怎样做好功能测试?

作为软件测试人,所在公司部门只有功能手动测试,如何进一步提升自己?

作为一个初级测试,想学接口测试,但是一点头绪都没有。求教大神指点,有没有好的书或者工具推荐?

做了一年的软件功能测试,想转自动化测试。目前在看了一些Python资料,感觉无从下手,求指导?

手工测试人员如何转测试开发?

已从事软件测试一年,感觉依然很菜,只会基础的功能测试,想进一步学习,有没有好的建议呢

想要成为一个性能测试工程师需要掌握哪些知识?

如何从零开始搭建公司自动化测试框架?

新人如何学习性能测试?

如何规范小开发公司的测试流程?


发布于 2022-07-04 18:49

1.首先必须一定要具备的就是认真、负责、严谨、耐心的态度,因为软件测试工程师吃的就是这口饭,所以必须对你所测试的产品负责。宁可错杀一千,也不可放过一个,虽然不能做到完全没有Bug,但一定要尽自己最大的努力保证产品质量。

2.要有过硬的技术本领,技术是为测试服务的,无论是测试理论、测试工具、开发知识、数据库、操作系统、网络知识、你都必须精通一门,知晓其它。当然这个做到比较难,什么都会很难,再者多了之后就不会精,什么都会也等于什么都不会,至于最后你选择深度还是广度,都由你自己把控。

3.光有技术,没有业务,再好的技术也很难使上劲,熟练的业务知识会帮助你发现更多的缺陷,进而更好的保证好产品的质量。不懂产品的工程师不是好工程师。测试工程师需要训练自己的用户思维、用户视角,把自己当作真正的用户去感受产品。同时你还可以收集产品数据来做分析,通过数据再量化产品。甚至你还要去研究竞品的相关情况,知己知彼方能百战不殆。

4.沟通能力超级重要。一个优秀的软件测试人员除了经常要与开发打交道外,还需要与产品、运维、售前、售后、客服等不同的人打交道。所以如何更准确、更简洁、更严谨的描述Bug,如何让开发人员接受你发现的Bug,如何让其他人员理解你的想法等都需要沟通,所以良好的沟通能力显的尤为重要。

5. 缜密的逻辑思维能力。测试人员不仅仅只是发现问题,找出Bug。更重要的是要去寻找Bug产生的真正原因,精准的找到问题发生的源头,以便协助开发人员更好更快的彻底解决Bug。这个比较考验你思维的灵敏度和推理能力。其实测试人员和刑侦有一些点类似,除了要求有缜密的逻辑思维能力,有时候还需要具备逆向反推能力。

6.测试虽然不像开发那样创造产品,但测试需要保证产品各方面的质量,让用户使用产品时觉得舒服、方便,所以大多数测试工程师都需要有一颗追求完美的心。

未来软件测试将从繁复的手工操作中解放出来,在敏捷开发的基础上,一个测试能够做好的真正价将不在是测试执行,而在于测试分析和设计,比如自动化测试工具的使用,uiautomatorviewer、TestBird等,将手工操作逐渐淘汰,提高测试效率,这才是测试行业未来发展的趋势和净化的方向。

编辑于 2019-08-05 11:00

题主你好,作为一名优秀的测试工程师我们需要具备的能力有很多:

测试用例的设计:

缺陷定位:

自动化测试:


接口测试:


总的来说,可以看下面的一篇文章:

发布于 2020-04-22 22:35

基本的软实力,沟通、责任心、细心这些就不提了。我主要说下【优秀】的测试需要具备的知识技能点。

在我看来,测试在技术上可以分为3个阶段:

初级测试(足以应付日常测试工作)→中级测试(1-5年工作经验&大厂面试资本)→高级测试(5年以上经验的测试技术专家&业务专家)

这3大阶段对应要掌握的知识技能分别如下:

如果图片被压缩看不清,可以到网盘自取:

《测试知识技能图谱》

链接: pan.baidu.com/s/1Zxu84s 密码: 0upa

因为题主说的是优秀测试,所以初级这里就略过不表了,主要写下中级和高级测试需要掌握的。

中级测试(1-5年工作经验&大厂面试资本)

1)第一部分:测试知识进阶

测试手段、接口测试、性能测试、移动端测试、移动端专项测试、安全测试、单元测试,自动化测试,UI 自动化,接口自动化。

在这个阶段,你应当能独立负责一个系统的测试项目。比如测一个支付系统、订单系统等,所以接口、性能、移动端等你得都熟悉。
编写自动化测试用例的能力也很重要,这可以省去一部分繁琐的工作,提升你的工作效率,也是你升职加薪的必备技能。

2)第二部分:计算机知识进阶

计算机网络进阶、数据结构与算法、数据库进阶、Linux 进阶。

就目前来说,其实算法在测试工作中运用的并不算多。但这块是大厂面试必考(也算是筛选人才的一种手段),所以还是需要了解的,至少常考的八大排序什么的你要能写出来。
另外实际工作中,你可能会面临比初级测试更复杂的一些测试场景,如果你不懂数据库深层的原理,比如数据库事务和锁,数据库索引机制的原理,还有数据库的分库分表这些知识,你就很难去排查并解决问题。

3)第三部分:开发技能

Java,Python。

这一阶段,需要往自动化测试或者测试开发的方向发展,这就离不开编程技能。需要你能熟练使用Python或Java。同时只懂编程还不够,你必须对测试还有更加深入的了解。

高级测试(5年以上经验的测试技术专家&业务专家)

这一阶段你需要加宽你的知识体系,同时更深入地了解前端进阶,代码质量,测试架构,微服务及中间件,容器化,自动化测试设计,测试架构,CI / CD,测试左移,测试阶段,测试右移。

测试开发和研发的区别,其中一点就是研发更注重深度,而测开更注重广度。

比如:你要了解CI / CD,因为你做的测试工具/平台,可能需要接入到 CI/CD 的流水线,或者运维的监控系统中。
再比如:你做性能测试的时候,如果你对架构设计的核心知识不了解,那么在做全链路压测、服务降级等测试的时候,可能就会遇到很多问题难以解决。

找了一份测试开发JD来对照,也可以看到这个岗位要求对中间件、性能测试、私有化云平台都有了解。

除了加宽你的知识体系,还需要精进你的代码能力。

在上一个阶段,我是建议大家根据自己的实际情况,在Java和Python中优先选择一个学习。但是到了高级阶段,一门语言已经“不太够用了。”

你至少要特别熟悉一门后端开发语言一两门脚本语言,这里推荐后端开发语言掌握Java,脚本语言掌握 Python 和 Shell。

因为Java在Web开发领域的占有率还是很高的,比如:阿里、美团、京东等公司都把Java作为主要的后端开发语言,如果我们掌握了Java,就可以做到对代码进行Code Review,这对于提升代码质量十分有帮助。

简而言之,大厂用Java的多,如果你想去大厂,基本上就得熟悉Java,不然面试很容易被pass掉。

这里提一下,现在越来越多的公司开始推行用Go作为后端开发语言(比如字节跳动)。

Go在高并发方面做得很出色,但是Go是近几年才兴起的,网上资料比较少,后续变化也比较多,所以说还是优先推荐学习Java,如果有余力再去学Go。



以上,希望能帮到你。

我是专注分享测试干货的臻叔,喜欢的可以 关注哦~

其他精华文章——

臻叔自己转行到测试开发的经验总结(精华)

软件测试必看书单:

大厂测试经典面试题答案:

❤既然都看到这里啦,请你帮个忙:

1、点赞,让更多小伙伴看到;
2、关注我,持续更新测试干货。


最后,感谢您的阅读。

你的盛赞就是对创作者最大的支持!

发布于 2021-06-03 19:45

软件测试每个阶段有不同的要掌握的技术和经验,先按照薪资范围划分下(月薪)

  • 5-9K:零基础入门,学会功能测试能够找到工作
  • 15-25K:测试在职能搞定性能测试和自动化测试
  • 25K+:搞定测试开发,在一线大厂工作

每一个阶段的侧重也不同,入门到找工作的阶段肯定是以能就业为主,性能和自动化测试是在技术基础上有行业经验。进入一线大厂的话需要技术过硬的基础上有管理能力;

一、软件测试职业发展的前景

二、 入门阶段

如果你是一个即将转行,或者是刚毕业的同学想要进入测试这个行业,那么必要掌握的是基础的理论知识:

  • 软件测试的定义、生命周期、工作流程、需求分析;
  • 测试用例的设计、编写、评审;
  • bug的基本知识以及禅道的使用;
  • 测试计划、测试报告的编写;
  • SVN、Git版本控制工具的使用;

上述内容相关的理论知识搞定之后,还需要找一个项目进行测试一下:

  • 发布项目进行立项,建立项目组进行分工;
  • 需求评审,学会如何看需求文档,进行需求分析,罗列测试点;
  • 整理测试点,编写测试用例,然后进行用例评审;
  • 执行测试,比如功能、界面、前后台、兼容性、数据库,对于发现的bug提交到禅道;
  • 分析、总结、编写测试报告;

这个流程完整的顺一遍之后,只能算是掌握基本的测试流程了,但是还不够找一份工作,还需要学习:

Linux、数据库、接口测试、APP测试等

以上这些内容,就可以开始写减了,然后找到一份相关测试的工作。为什么大家都是掌握这些内容但是每个人的工资不一样?这也分城市/公司/学历。

资源分享

测试岗位职能 / 软件测试的HTML标签作用 / 设计测试点 / 用例执行以及缺陷管理 / 黑马头条测试

Linux相关内容: Linux远程连接/命令/ Linux命令大全/ 数据库

三、性能、自动化测试

  • 性能测试的概念和流程:常见问题剖析、流行工具、方案设计
  • 性能测试工具:jmeter工具的使用、实战;jmeter多协议、拓展与定制;分布式压测与任务调度;
  • 性能监控:性能监控体系与监控数据采集
  • 性能实施:分布式服务压测,场景设计、场景执行;测试结果关联分析,TPS、响应时间、线程关联分析,压力和资源使用率关联分析
  • 性能分析与报告:jvm调试与系统调试;性能瓶颈分析

性能到自动化之间需要编程语言的学习,一般都是选择Python,因为是脚本+胶水语言:

Python从变量到数据类型 / 输出格式大全!代码都可复制
基础学习输入 / 转换数据类型的函数 / 算数、赋值、复合赋值、比较、逻辑运算符
条件语句边学边练,习题均有答案 / while的语法和应用 / while循环嵌套以及练习题
字符串 / Python列表的常用操作 / 元祖 / 集合 / 公共操作
推导式学习 / 函数 / 函数 / 文件的基本操作汇总(上) / 基本操作汇总(下)
面向对象基础篇 / 面向对象之魔法方法 / 面向对象实际案例:烤地瓜和搬家具
继承 / 面向对象的三大特征 / 异常学习 / 模块 / 包 / 面向对象版学员管理系统

性能测试笔记(更新中):

从理解到体验,最后能够对比说出Loadrunner和JMeter的优缺点
JMeter环境搭建完成第一个案例 / JMeter主要元素以及相关的作用域 / Jmeter直连数据库

自动化接口测试(已完结):

Postman环境安装与插件安装 / 接口、接口测试、URL、HTTP协议、接口文档解析 / 接口用例设计思路、单接口用例、业务场景用例、postman / Postman用例集、断言、前置脚本、关联、生成测试报告 / 读取外部数据文件、iHRM项目实战

Web 自动化测试笔记(已完结):

认识web自动化在什么项目中适用 / web自动化工具选择 / Selenium安装配置 / Selenium-XPath、CSS定位 / Selenium-CSS定位 / 元素操作 / Selenium—鼠标操作 / Selenium—键盘操作 / Selenium元素等待 / 下拉选择框、弹出框、滚动条操作 / Selenium之frame切换、多窗口切换 / Selenium窗口截图、验证码处理 / 掌握UnitTest框架的基本使用方法

到了这个阶段的小伙伴,可以在通过招聘软件的基础上,多多认识一些圈里的人。然后把简历也放到猎聘网等等。

四、测试开发冲击大厂

在性能和自动化学通了之后,可发展的两条路是技术专家或者是管理岗。但是这两个岗位都需要既继续精进技术。

  • 完善测试技术体系:Linux、docker、shell、SQL、Python/java
  • 打牢自动化测试技术基础:
  • web自动化测试:selenium测试框架;PageObject设计模式、原则、演练;
  • APP自动化测试:Android自动化测试框架;appium高级应用于原理剖析;APP自动化测试实战;测试框架封装改造;ios自动化测试;
  • 移动专项测试:健壮性测试、弱网测试、崩溃检测、耗电量分析等;移动端性能测试;移动端安全测试;
  • 接口自动化测试:接口协议与抓包、代理技术与mock;接口自动化测试框架、HTTPrunner测试框架;dubbo接口自动化测试;接口管理工具swagger、接口安全测试
  • docker容器技术:docker容器、docker镜像;
  • 持续集成/持续交付/devops:jenkins持续集成;Jenkins持续交付;

五、什么是核心竞争力

其实我们到招聘软件上就可以清晰的之后,首先我们要掌握的就是编程语言。稍微高一点薪资的岗位都要学会语言基础,如果可以的话,建议两门都掌握。

其次就是自动化方面的能力,UI自动化、接口自动化,持续集成持续交付这就是核心能力。

再晋升就是持续交付、Devops,白盒能力,测试的监控能力,往架构方面发展。

六、业务分析能力

  1. 了解业务流程:这个不了解是根本无法进行测试的
  2. 分析被测业务数据:懂数据的来源以及预测,才明白软件的数据库架构
  3. 系统架构:什么语言开发,用的什么服务器等
  4. 分析业务模块:比如首页、注册页面...
  5. 分析测试需要的资源:需要几台电脑,几个手机,手机是什么系统,什么型号
  6. 分析测试完成目标:并发达到多少,cpu占用率不能高于多少?内存占用不能超多少?

以上内容知道的越多,测试的思路就越清晰。如果你还能发现隐形问题、连带问题,问题隐患等等,并且可以给出问题的解决办法,就完全称得上是优秀的测试工程师。

发布于 2022-04-27 11:29

经验肯定是垂直的软件测试经验越丰富越好了。

知识,多看看企业招聘信息就成了,技多不压身,会的越多越值钱。

对于零基础的小白来说,找个靠谱的软件测试培训课程,认真学三个月,就等于出山自带1年经验了,自信点就可以,自信技能点数加满,就约定于起码半年经验了。

因为没培训的干一年,真的不见得比我们培训出去的会的多,因为我们也是亲自动手做过不少项目的。

转行软件测试相关阅读:

测牛学堂软件测试就业培训:零基础通过软件测试培训机构能学好找到满意的工作吗?

测牛学堂软件测试就业培训:软件测试培训都是割韭菜,找不到工作吗?

测牛学堂软件测试就业培训:软件测试培训哪里学比较好?

测牛学堂软件测试就业培训:软件测试培训课程可靠吗?学费贵吗?

测牛学堂软件测试就业培训:究竟该不该离职去参加软件测试培训?

测牛学堂软件测试就业培训:零基础小白学习软件测试应该注意什么?

测牛学堂软件测试就业培训:应届生投软件测试简历,没有回应怎么调整心态?

测牛学堂软件测试就业培训:软件测试,这么多劝退的,又不知道做什么?

发布于 2024-04-01 16:13

成为一个优秀的测试工程师需要具备哪些知识和经验?

针对这个问题,可以直接拆分以下三个小问题来详细说明:

1、优秀软件测试工程师的标准是什么?
2、优秀测试工程师需要具备哪些专业知识?
3、优秀测试工程师需要具备哪些经验?
PS:这里分享一套软件测试的自学教程合集。教程很全,总量达到300G,有从0基础开始学的全套完整视频教程配套的视频课件,以及大量的测试项目练习案例(市面上绝无仅有),配合视频一起学,大概坚持个30天,就能学到不少知识点,学完后找个初级的功能测试工作是没问题的!
----资料包内容详情----
 215-零基础到精通全套视频课程
 [PPT+代码]-完整配套的教学课件
 18-测试实战项目源码
 37-测试工具软件包
 268-测试猿毕业学员真实面试题
 500-面试简历模板信息完整
【300G 软件测试全套自学教程】

一、优秀软件测试工程师的标准是什么?

对于“优秀的软件测试工程师”的定义其实是没有一个统一标准的,每个公司对“优秀的软件测试工程师”标准都不一样。

比如:有的企业需要专业人才,会认为“能将一个比较复杂的测试环境设置好”的工程师就是一名优秀的测试工程师;

还有的测试工程师在技术领域特别强,擅长多语言的自动化测试框架(Python/Java等),或是全面发展类型的软件测试工程师(性能测试/渗透测试/安全测试),也都是非常优秀的软件测试工程师。所以一名优秀软件测试工程师可能是一个专业人才,也可能是一个全通型人才。

通常,从各企业测试经理的角度出发,大部分人认为集合了:扎实的专业能力、良好的沟通能力、优秀的素质等。可以称得上是一个优秀的软件测试工程师

▶ PS:后台看到很多小伙伴有找软件测试自学教程的需求,故而特意给大家准备了一份300G的超实用干货自学资源,涉及的内容非常全面。包括软件测试学习路线图、完整软件测试教程视频、一些经典的实战项目、软件测试会用到的所有软件工具包、测试文档、软件测试相关问题、还有软件测试求职的各类精选简历,肯定对你有所帮助…..
---戳下方链接,前往下载

从上面图表总结可以看到,一名优秀的软件测试工程师要具有的素质和能力:

⚪热爱测试行业
⚪良好的沟通能力
⚪知识接触面广,然年深入一门(技术)
⚪四心:责任心、耐心、细心、信心、
⚪思路开阔,创新探索精神
⚪学习能力强,善于总结

二、优秀测试工程师需要具备哪些专业知识?

软件测试工程师每个阶段对于要掌握的技术和经验是不同的,这里我们主要划分为三个阶段:

·零基础入门,掌握基础功能测试(能够找到工作)
·掌握性能测试和自动化测试(测试在职)
·测试开发(一线大厂工作)

1、入门阶段

▶ 为了能让大家少走弯路,我给大家推荐一波《软件测试》的自学资料。教程很全,总量达到300G,有从0基础开始学的全套完整视频教程配套的视频课件,以及大量的测试项目练习案例(市面上绝无仅有),配合视频一起学,大概坚持个30天,就能学到不少知识点,学完后找个初级的功能测试工作是没问题的!
戳下方卡片 > 直接领取

2、掌握性能测试和自动化测试

从性能测试到自动化测试之间我们至少需要掌握一门编程语言,大家可以自己需求选择Python或者Java语言,建议先从Python开始入手。

3、测试开发

在熟练掌握性能测试和自动化测试后,不管是选择往技术专家或管理岗发展,都还是需要继续精进技术的。

史上最牛的《软件测试》自学资源:
215集-零基础到精通全套视频课程
[PPT+代码]-完整配套的教学课件
18套-测试实战项目源码
76套-测试工具软件包
268道-测试猿毕业学员真实面试题
500个-面试简历模板(信息完整)
点击下方卡片 > 直接领取:

三、优秀测试工程师需要具备哪些经验?

软件测试人员在测试实际工作中肯定会遇到理论知识中没有提到的问题,这个时候就需要靠测试人员的工作经验积累来解决处理问题。而这个经验的来源就是测试人员一次又一次项目实战。


测试猿课堂高热度知乎文章推荐:

一、测试培训机构选择

转行软件测试,报培训班3个月出来就是高薪工作,靠谱吗?

这么多的软件测试培训机构,哪个好?

二、软件测试转行前景

软件测试有哪些前景?

软件测试工程师发展前景如何?

软件测试这个职业能干多久?

零基础转行学习软件测试如何入手?

男27,想转行互联网,是学习软件测试好,还是前端编程?

软件测试工程师的工资有多高?

27岁了,目前从事软件测试,听一些大神说测试前途是IT里最差的,是这样吗?

软件测试的岗位会越来越少吗?

软件测试真的干到35就干不动了吗?

软件测试行业到底有没有前景和出路?

测试开发是什么?为什么现在那么多公司都要招聘测试开发?

三、软件测试技术学习

新人如何学习性能测试?

软件测试完后,还有BUG,是测试人员的问题吗?

求推荐几款http接口自动化测试工具?

Python 和Java 哪个更适合做自动化测试?

软件测试的环境部署怎么做?

有哪些比较好的测试用例管理工具?

四、软件测试求职面试

如何去面试软件测试工程师?

软件测试简历项目经验怎么写,没有项目经验?

好的软件测试人员简历是什么样子的?

明天去面试软件测试,给我些建议,或者面试题预测?

面试软件测试工作,如何回答:为什么要从事软件测试行业?你觉得你会什么?

没有软件测试经验的计算机毕业生如何准备面试测试工程师这一职位?

20岁零基础转行软件测试领域,求知友分享自学干货和面试经验

发布于 2022-08-16 19:31

简单说几个点:

1. 软件工程的系统知识

2. 测试理论知识

3. 服务器知识

4. DB知识

5. 简单的网络基础

6. 基本的脚本知识

关于能力:

1. 问题定位能力

2. 问题跟进能力

3. 严谨的思维

4. 问题归类总结能力

5. 自驱动、学习能力

其他的看楼上其他同学的回答~~~~

不多说~~~~

发布于 2016-06-23 12:45

其实我们觉得自己很菜的时候,其实是非常好的一个感觉,因为不管任何一个行业,你干的时间久了,就会觉得这个行业的水越深,会的越多就感觉自己越什么都不会,这样才有求知的欲望。

建议的话:

1至少熟悉一门编程语言(不用特别精通,当然精通也是非常好的)

2如歌你现在做的是基础的功能测试,就要深挖功能测试,做到精通,样样会不如一样精。最起码不能让自己处在一个可有可无的尴尬地位。

3MYSQL数据库,Linux操作系统,接口测试,性能测试,等这些都需要了解一些。

4如果自己的学历很低,那就提升自己的学历,如果你是专科升一个本科,如果你是本科也可以继续往上升。

题主,我不知道你现在的工资是多少?因为不知道你是在哪个城市?每个城市的薪资水准都是不一样的,但如果想继续往上升,就必须要学习,学习,在学习,直到超过你们公司里最牛的人,然后可以选择跳槽,

众所周知,IT行业其实是一个回报率级高的行业,为什么这么说?因为只要你每学会一门技术或者编程语言或者学会一个测试工具,你下次跳槽的时候肯定就能多涨工资,这个难吗?其实不难,难得的是什么?

是如何学习!是否有毅力学习!

发布于 2021-01-07 14:51

成为一个优秀的测试工程师需要具备的内容有很多的,但是主要是技术方面的提示,

这边推荐你去看一下这套Python全栈自动化测试的视频,主打技术提升,接口-web-app全套视频,还有配套的笔记

视频笔记

发布于 2023-03-06 16:16

一个优秀的测试工程师需要具备以下知识和经验:

  1. 熟悉软件开发过程,了解不同阶段的需求、设计、编码、测试等
  2. 掌握常用的测试方法和技巧,如黑盒测试、白盒测试、灰盒测试、边界值分析、等价类划分、场景测试等
  3. 熟悉测试工具的使用,包括自动化测试工具、性能测试工具、安全测试工具等
  4. 掌握软件质量管理体系,了解测试计划、测试用例设计、缺陷跟踪等
  5. 对测试流程有清晰的认识,能够通过流程的规范化来提高测试效率
  6. 具备良好的沟通能力和团队合作精神,能够与开发人员、产品经理、项目经理等密切配合
  7. 持续学习和探索新的测试技术和工具,不断提升自己的专业技能和素质

总之,一名优秀的测试工程师需要具备广泛的技术知识和对软件质量的深度理解,同时还需要有良好的沟通和协作能力来保证测试过程的顺利进行。

自动化测试学习视频推荐

发布于 2023-04-18 21:59

函数式接口

问:Lambda 表达式的类型是什么?

答:函数式接口问:函数式接口是什么?答:只包含一个抽象方法的接口,称为函数式接口 (functional interface) , 一般用 @FunctionalInterface 注解来检测是否是函数式接口。

自定义函数式接口

@FunctionalInterface
public interface MyFunctionalInterface {
    String test(String p);
}

使用泛型
@FunctionalInterface
public interface MyFunctionalInterface<T,R> {
    R test(T t);
}

函数式接口作为方法参数

public void test(MyFunctionalInterface mfi,String str) {
    System.out.println(mfi.getValue(str));
}

调用test()
test(p -> p.toUpperCase(),"luojie");
控制台输出:
LUOJIE

常见函数式接口

方法引用

问:什么是方法引用?

答:当我们需要完成的 Lambda 体操作,已经有实现的方法了,可以使用方法引用!

问:为什么用方法引用?

答:省略参数,少写代码

举个例子

Comparator<Integer> com2 = (x, y) -> Integer.compare(x,y);
//上面我们之前学过的Lambda表达式,其中Lambda体操作是比较两个整数的大小,
//而且Integer的compare()正好完就是我需要完成的操作。
//可以方法引用替代
Comparator<Integer> com3 = Integer::compare;

方法引用格式

方法引用使用操作符 :: 将方法名和对象或类的名字分开。
分三种格式:

  • 类::静态方法
  • 对象::实例方法
  • 类::实例方法

类::静态方法

(x, y) -> Integer.compare(x,y);
方法引用改造:
Integer::compare;

对象::实例方法

(x) -> System.out.printf(x);
方法引用改造:
System.out::println;

类::实例方法

test((x,y)->x.equals(y),"123","123");
方法引用改造:
test(String::equals,"123","abc");  
注意:当引用方法的第一个参数是调用对象,并且第二个参数是需要传入参数(或无参数)时:ClassName::methodName
比如上例子中:"123"当作equals方法调用对象,"abc"为传入equals()参数。
相当于:"123".equals("abc")

发布于 2024-02-19 16:52
@钱蓓

钱总监的回复是基于测试理论的知识(需要花点时间,结合自己工作实践),这边我作为开发(和测试打交道是家常便饭),从实践角度,给大家讲讲我心目中,优秀的测试工程师应该具备哪些技能and 素质?(非测试岗,有不足地方,烦请指正)

【技能】

1) 测试用例-xmind

一个好的思维导图,可以涵盖所有的测试路径。(不要期待excel可以解决战斗,因为Excel是表哥,更适合报表,而思维导图是树状,更适合来表示测试路径的N种可能性)

比如,腾讯内部的测试用例基本采用思维导图的方式来管理。

2) 自动化脚本- python

首先,自动化可以来做压力测试,掌握一门脚本语言是必要的。而目前,自动化测试可能跑在多种系统上,比如window,mac,android,ios等,测试工作内容在变(跳槽频率较高),跨平台是必要的。

比如,我们有一个python脚本专门用来测试app的fps。

3) 自动单元测试

“别指望开发做好单元测试”,一个既“运动员”又当“裁判”,靠谱吗?

反正,目前,我还没见过靠谱的,更多的是测试再帮忙做一些单元测试工具,但前提条件是足够通用。

比如,我们app有广告系统,涉及收入,至关年终kpi考核(一年收入上百亿的产品,随便一个版本疏忽,可能影响收入上百万,神经高度绷紧)。所以,我们会收集广告的规则,写了一套bvt测试工具,用来验证广告系统是否OK。

4) bug管理工具-tapd

为什么我不推荐禅道,试试腾讯开放的tapd就知道,这二者相差十万八千里(传统厂商与互联网公司的区别)。

比如,腾讯内部使用tapd来管理(除了bug还可以做许多事情)



【素质】

1) 刨根问底

需求功能点,实现逻辑,参数设定,框架设计,乃至查阅代码等等。

比如,我们的测试会在需求评审、用例评审、提测前等阶段,详细了解整个需求的设计和实现方案。这里面与测试交流最多是开发。一般情况下,很多是基于线下沟通来了解细节的。

2) 轻重缓急

对事不对人,分事情当然要有轻重缓急。这也要与刨根问底相结合,因为不是所有的事情,我们都需要去追问。重点关注核心问题。

比如,我们app新支持h5离线缓存的能力,测试首先质疑我们的问题在于覆盖率问题(机型/系统兼容性),我觉得这个蛮重要的,因为如果覆盖面不广,那么做那么多的工作也没意义。

3) 风险意识

风险评估贯穿整个项目周期。这里的风险更多集中在功能点异常case上。

比如,机型/系统兼容性、弱网络条件、性能瓶颈、压力测试、告警提示等。

4) 主导者

在不少公司里,测试一直被当做边缘岗位,一般都是按照部门负责人或是项目经理的安排,来被动执行测试工作。其实,这样反而不会把事情做好。我们希望更多地起在项目质量环节起主导者作用,同项目经理和开发紧密配合。

比如,开发完成后,经常存在产品体验不足、流程不顺畅的地方。所以,测试要求我们引入show case环节。要求项目经理、产品、开发、设计师等一起来体验功能,对功能提出问题点,保证发布后的产品质量。

4) 复盘

每次项目发布后,可以回归整个测试流程,发现这个过程中出现的问题,想出一些问题的解决办法,用来改进整个测试or开发流程。

比如,我们会收集re-open的bug,找出是测试用例不足还是开发不合理修改带来的问题,从而想办法去减少此类问题的出现几率。

好吧,先写到这!

编辑于 2017-10-09 12:31

我们知道,在项目管理中,建立一套规范的缺陷管理体系,可以提升缺陷修复效率,保障研发质量。因此,对缺陷管理的投资是提高项目管理效率的重要手段,不仅可以减少人力、财力和时间的浪费,还能助力团队持续过程改进,提升团队效能。

学生时代,我们就开设了软件工程的学科,而工作后入职的每一家公司,也会进行项目管理的流程培训。同时,各种技术博客、IT圈专讲,铺天盖地的都是讲流程、讲规范,都或多或少提到了缺陷管理的重要性。

于是,我们知道很多关于软件测试的概念。知道测试左移,也知道缺陷预防;知道降低研发风险,也知道降低研发成本;更知道清晰的缺陷描述会让修复工作事半功倍。但是,我们真的建立了良好的缺陷管理体系了么?

工具选对 事半功倍

任何产品从创建开始,缺陷就会逐渐产生,并且数量越来越多。若在产品的生命周期过程中不建立良好的缺陷修复、验收制度,并对已发现的缺陷不采取有效的控制措施,最终可能导致产品无法具有相应的使用功能,整个研发过程以失败告终。

因此,必须建立一套完整的缺陷管理体系,针对具体的产品特征制定相应的缺陷探测、确认、处理、验收等一系列措施,不断的纠正和避免产品缺陷,让产品在其生命周期中始终处于可控的状态。

面对庞大的缺陷数据,以及各缺陷在生命周期中的状态流转、管理、沟通、存档、分析等过程,通过文档记录的方式已经不现实。缺陷管理工具应运而生,它可以帮助我们进行缺陷全流程管理。

那么,什么样的缺陷管理工具才满足日常工作需求?这样的缺陷管理工具又承载着哪些能力?本节将从以下几个方面展开叙述。

▇ 基本能力

研发团队每天都会面对缺陷的创建、修复等工作,一款合适的缺陷管理工具至少需要满足以下基本要求:

  • 界面简洁、操作简单、降低甚至无学习门槛
  • 状态流转可定制、符合当前研发管理流程
  • 易用的富文本框,可定制的描述信息模板,并支持测试用例信息自动回填
  • 丰富的查询筛选能力,多维度的数据导出能力

▇ 多维度关联

独立存在的缺陷数据长远来看是没有过程价值的。当企业发展到一定的规模,应用数量达到一定的量级,当发布计划呈现井喷状态,缺陷必须与版本、应用、模块、上线计划以及人员强关联。这样沉淀的数据资产才具有参考和分析价值,才能基于部门、应用、模块、上线计划等维度进行多角度分析度量,展示与聚合缺陷数据、分析研发过程质量、度量研发时效和成本。

▇ 分析度量

通常一个缺陷会包含概要、类型、严重性、状态、描述信息、开发、测试人员、功能模块、发布版本等信息。那么如何进行缺陷分析,需要进行哪些维度的分析,不同维度的缺陷数据能够反馈什么样的信息呢?下面我们选取几种常见的维度进行叙述。

▶ 应用维度分析

从应用模块维度分析缺陷,我们除了对当前应用的质量进行一定的了解,还可以对各模块的复杂度进行更准确的把握。从上图中我们可以看到模块B和模块C的缺陷占据了该应用总数的67.7%,相比较模块A、模块D和模块E,我们可以理解为模块B和模块C的实现复杂度应该比较高。我们可以通过复盘来分析这两个模块,是不是复杂度较高,是否需要重构,下次迭代如果涉及这两个模块,是否需要着重评审概要设计和用例设计。

▶ 人员维度分析

除了从应用模块的维度分析,我们也可以从人员维度来分析。这里以开发人员为例,假定这个应用有四位开发人员共同开发,且分配的工作量和难易程度没有太大的差异。从上图中我们可以看出Dev_陈的缺陷数在产品的开发过程中远少于其他三位开发人员,可以说明其对需求的理解以及研发的质量意识是比较高的。可以对其研发能力给予肯定,也可以让其总结和分享经验,引导其他开发人员进行学习和改进。

▶ 严重性维度

严重性维度的统计,也是我们对研发质量进行评判的重要依据。我们以某发布版本为例,上图中展示了这个版本中各级别缺陷的数量和占比,可以看出有17个严重性为一般的缺陷,占缺陷总数的44.7%,严重程度为次要的缺陷占据到了31.5%,严重和阻塞级别的缺陷占总数的23.6%。

基于上述缺陷严重性占比数据,我们如何来分析产品的质量呢?从占比上看,本次发布版本的严重及以上的缺陷占比不到总的1/4,说明本次迭代的提测质量较高。但是,从缺陷总数上看,严重程度一般和次要的缺陷数达到了29个,超过了总数3/4。那我们就要思考,为什么低级别缺陷会有这么多?

▇ 风险控制

缺陷分析的目的就是通过得到的统计数据对研发过程采取对应的措施,防范更多的缺陷产生,控制当前发布版本的风险。那我们以最常用的缺陷趋势模型叠加用例执行进度趋势,来分析当前用例执行的进度,缺陷创建和修复的趋势,来评估风险和质量,确认应用是否可以上线。

如上图所示,红色为每天创建的缺陷数量,绿色为每天修复的缺陷数量,黄色为每天遗留未关闭的缺陷,蓝色为每天测试用例执行的情况 (假定用例的执行在上线前也需要执行完毕)。

  • 每天创建缺陷的趋势

缺陷创建的趋势主要反映测试效率,从上图可以看出,测试阶段开始之后,前两天并未发现太多的问题,这可能和功能确认、环境搭建、服务配置等都有关系。

通过问题沟通解决后开始全面测试,缺陷的发现速度保持在一定的速率。在测试周期的中期03-08就已经达到了峰值并有所收敛,这对整体项目来讲,风险是可控的。如果这个时候还未呈现收敛趋势,则需要及时调查,是代码质量差或其它原因导致缺陷较多,需尽快调整计划。

在测试中后期,缺陷创建曲线下降,其中有回归测试重新发现问题,有小幅回弹,但最终回落,项目一直在可控范围之内。

  • 每天修复缺陷的趋势

缺陷修复趋势主要反映开发人员对缺陷的响应和修复效率。从上图可以看出从03-03开始,开发人员的响应速度变慢,而缺陷趋势明显上升。这个时候应该和开发团队沟通,确认导致问题产生的原因并积极配合提升效率,让修复趋势紧追创建趋势。

随着创建缺陷的速度降低,研发的修复速度会超过创建速度。我们可以看出,在03-08之后,缺陷的修复趋势明显变好,未关闭缺陷逐渐减少,最终全部关闭。

  • 每天遗留缺陷的趋势

遗留缺陷趋势主要反映当前项目未关闭的缺陷。如果遗留缺陷较多,并且严重性较高的缺陷数占比较大,则项目存在一定的风险。需要测试和开发人员及时沟通,确认问题并讨论得出解决的办法,推进项目进度。

  • 每天用例执行的趋势

测试用例执行趋势主要反映当前发布计划首轮用例执行的情况。如果在测试中后期首轮用例执行的趋势还在向上,则说明进度滞后,留给缺陷验证和回归测试的时间不足,需要积极协调资源加快速度来推动项目进度。

借鉴“零缺陷”思想

▇ 思想的产生

“零缺陷”思想是一种管理思想,不等同于我们项目管理中的没有缺陷。

被誉为“全球质量管理大师”、“零缺陷之父”和“伟大的管理思想家”的菲利浦·克劳士 (Crosbyism) 在20世纪60年代初提出“零缺陷”思想,并在美国推行零缺陷运动。后来,零缺陷的思想传至日本,在日本制造业中得到了全面推广,使日本制造业的产品质量得到迅速提高,并且领先于世界水平,继而进一步扩大到工商业所有领域。

▇ 如何改进和尝试

“零缺陷”思想核心是:“第一次就把事情做对”。

我们引入“零缺陷”思想,希望能在缺陷管理体系中贯彻下去,无论在开发还是测试工作中,第一次就把事情做正确,使上游的输出满足下游的需求。如果我们第一次就把事情做对,那些浪费在补救工作上的时间、金钱和精力就可以避免。

我们在缺陷管理系统中增加了Reopen数的计算,任何缺陷修复完未通过验证或在后续的使用中发现问题依旧存在,都将“重新打开”,Reopen数累计加一,并且通过时间、团队等维度对开发人员的Reopen数进行度量。只有通过不断地优化做事方式,从思想上认识到实现“零缺陷”有利于公司也有利于个人,才能改变做事的不良习惯,通过过程创造价值。

思考

回到本文最初的话题,我们记录和跟踪缺陷的目的是什么?只是为了产品在研发过程中跟踪BUG直至修复么?或是为了产品顺利交付、上线使用?

▇ 每一次迭代都是一次考试

回顾学生时代,我们参加每一场考试后都会对错题进行分析总结并查漏补缺,以便能更好地去面对下一轮更重要的考试。那么,我们也可以对产品缺陷进行分析,对其共性进而分类,从而建立项目的“错题集”,为下一次迭代提供宝贵的 经验。

▇ 分析的周期

缺陷记录是为更好的跟踪和分析缺陷做准备的,而缺陷分析是软件质量保证的重要环节,对于研发过程的改进、产品的发布具有十分重要的参考价值,所以各项目都要定期做缺陷分析。

那什么时候该进行缺陷的分析呢?通常,推荐每个迭代周期分析一次,并且基于历史迭代横向对比,进行趋势比较。当然,有时候可能一个迭代发现的缺陷非常少,分析的周期可以根据具体情况做出调整。

▇ 强化团队意识

我们把缺陷管理的过程价值归纳为强化团队质量意识、提升团队协作效率和提高团队风控能力。这些过程价值在短期可能看不到太大的反馈,但仔细观察其实是在潜移默化地改变团队的行为习惯,这些习惯不单单会改变当前项目的质量,而且会无形中影响后续所有项目的质量。当团队养成了能够正向影响项目质量的习惯后,其迭代会变得越来越顺利,质量也会逐步提升。

总结

缺陷管理体系看似独立,实际与研发过程密切相关,我们除了对缺陷跟踪和统计之外,更要对缺陷进行多维度分析。本文抛砖引玉,提出缺陷分类归纳的思路,强调缺陷分析的重要性,通过对缺陷数据的分析,思考影响项目质量的原因并采取措施改进。同时,引入“零缺陷”思想,引导和督促团队第一次就将事情做好,降低额外的成本浪费。尽管,我们做不到一步到位,但可以持续优化,持续改进,这样同类型缺陷就会越来越少,我们也能有更多的精力面对更多未知和有价值的缺陷。

发布于 2022-11-24 16:14