【转】做好软件测试需要具备的思维方式

首先,从需求,用户及研发角度考虑,要想为产品贡献最大的力量,就不能只专注于做好测试保证质量这一个方面,而应该是从多个角度全面衡量。

用户思维

在工作中,一部分测试同行特别是初入者在对待需求时都过于被动,不太会把产品各个模块的业务串联起来,成了因为需求来了所以做需求,纯粹看着需求文档就开始做测试用例的设计了,并没有想着先把需求理顺了想明白了再开始着手。

其实这个阶段也即是非常重要的需求分析及功能点拆解,即使说这主要是产品经理们的主要工作,但是他们也并非圣贤,对产品设计的细节考虑可能并不周全,甚至严重时会出现较大的需求漏洞,引发较严重的影响。而我们也应该具备该项能力,如果不能站在公司战略层面考虑该需求对业务上能带来哪些促进,也至少能站在用户的角度考虑能给用户带来什么价值,能满足用户哪方面的需求,同时能及时发现对于用户操作过程中的体验问题.

在糗事百科创始人著作的《结网》一书中,也提出了用户体验的三大原则:别让我等,别让我想,别让我烦。我觉得作为一名合格的QA是需要具备这方面能力的,但是在实际工作实操中还是需要具备沟通技巧,毕竟能对于用户体验方面的改进需要产品经理拍板,如果的的确确非常明显的体验问题,是有必要坚持真理说服他们优化的,否则还是把话语权留给他们,我们只是提供建议吧,不然工作中的**味一定会很浓。

架构思维

要想设计一份有效的测试用例,就必须要对软件开发设计思路有深入的了解,我们也经常有类似的事情,业务需求未做任何改变,而架构做了优化,如果单纯地拿着一份根据业务整理出的用例是无法准确而有效的测试的,架构的调整包括:底层数据结构的调整如分库分表,服务化(SOA),日志的收集处理以及容灾处理等等,另外,为了能有助于测试开展,我们同样需要了解开发技术,毕竟在测试环境的搭建及维护,测试过程中各种场景的模拟特别是异常情况,以及自动化测试,如果不借助于开发技术,自动化工作也是很难开展的。

比如被测系统依赖其他系统发的一条MQ消息而做相应的处理,那自动化代码中为了验证该逻辑,就需要MOCK这条消息(即设置桩Stub)并且发送到某个管道中,让被测应用接受并处理它,如果连MQ是什么都不知道,也不知道如何在代码中发送消息,那这个部分的自动化测试是没法开展下去了。

上面只是举了一个例子,总结一下,需要具备的架构思维包括:

1)了解并熟悉开发使用的技术及开发框架,比如用到的Spring MVC,Mybatis,Redis,前端HTML,JS,相关协议等(视不同项目具体情况而有所不同);

2)理解研发设计的架构及设计思路,并考察开发设计是否满足业务需求;

3)Review技术方案时,考察是否满足易维护性,易扩展以及对性能和安全的要求,并且在关键业务出现异常时是否添加报警等,而这一点也是大多数从事功能测试的同学最易忽略的。

测试思维

如果要特意区分用户思维和架构思维的话,在测试过程中,就要额外关注:以严谨的测试设计方法覆盖需求功能点及代码分支,具有场景思维和对异常情况的考察。对此我们可以细化总结为以下几点:

1.逆向思维

比如我们经常需要对接口做测试,通过输入验证输出,如果我们使用各种输入都无法得到接口设计中某一种输出的情况时,就需要从输出来逆向推导输入,另外比如验证一些异常情况,接口需要返回一些error code,使用正常手段是肯定不能得到的,就需要为了出现该error code借助环境及工具来模拟。另外,我们在分析很多问题时,同样也离不开逆向思维。

2. 组合思维

比如软件在多用户,多进程,多次执行等情况下,都可能出现意想不到的缺陷,甚至对于复杂的业务场景,在对同一份数据进行操作时,不同子业务并行执行情况下,都有可能造成数据上的错误,特别是对于与核心数据有关的业务上(如money),是否添加行级锁都是需要测试到的,同时,不同业务不同的操作顺序,组合方式下,不同的维度等都有可能出现bug。

3. 全局思维

即能把握整个项目的多个方面,多个团队的任务及分工,整体的数据流及业务流,从全局思考是否满足业务需求,这其实并不只是说对于需求的评审,更多的是关注上下游相关联的系统或接口等,凡是涉及跨团队开展的工作,一定就需要更多的沟通协调,很明显的就体现在对业务理解不正确,接口定义有误,具有全局思维的人更能在大型项目中游刃有余,体现其leader的潜质,毕竟做leader就需要关注本部门之外其他部门都在干些什么,以备能做出对大局有利的决定。

4. 两极思维

即站在事情的两个极端来考虑,比如数据上的无穷大与无穷小,在数据存储上,数据库层面字段设置为int与bigint所支持的数量级是不一样的,基于**,如果存在超过int的长度的数据,那么在存储上以及代码中,都需要做相应支持,否则就只会显示到该类型的最大值了,而且在业务层面也经常有两个极端的情况,比如商家入驻开店,很多时候都只是考虑到开店该怎么做,却忽略关店的情况。其实在边界值用例设计方法中也用到了两极思维模式。

5. 简单思维

简单思维表现在很多方面,比如经常非常严重的bug都可能是犯了一个很简单的错误引起,在处理测试环境时经常出现无法正常访问,也许可能只是磁盘空间满了而已或者一个简单的配置不正确引起,在日常工作中这样的例子非常多,我们也要善于一层一层剥开问题的现象,找到其本质,就好比剥洋葱一样,不要一开始就把问题想的过于复杂,往往事情并没有那么复杂。

6. 比较思维

比较思维其实贯穿在我们整个测试生涯中,测试本来也就是一种验证,根据实际结果跟预期结果对比。而且我们在平时工作排查问题时,也有非常多需要去对比的,比如配置文件的差异,环境的差异引起的不正常结果,此外,我们也通过svn中代码diff的差异来明确改动的范围制定回归策略。还比如在做一些前后两个版本吐出的数据差异时,页面显示差异时,都可以使用diff的思想来开展自动化的工作,大大提高效率。其中,包括我很久之前写的《我在兰亭这三年(九)之AutoDiff自动化测试框架》也是基于比较的思维。

总之,用好了以上几种思维方式,我想在以后的测试工作中,一定更加的游刃有余,有效且高效!

时间: 2024-08-12 20:19:04

【转】做好软件测试需要具备的思维方式的相关文章

做好SEO应该具备什么条件

上次,微型为大家投稿了"浅析什么是黑猫SEO和白猫SEO",今天微型和大家聊聊,做好SEO应该具备什么条件?需要什么样品质?微型再这里告诉大家,每个人的心态其实非常重要,你在这边打一枪,那边又打一枪,也就是说做SEO,感觉没意思,就去做别的了,当然,微型只能说适合自己的才是最好的."一个朝着自己目标永远前进的人,整个世界都给他让路"微型喜欢的一句话. 1.学会付出 做SEO的人一定要学会付出,无论做什么事情,再开始时都要学会付出,天上不会无缘无故的掉金钱给你(当然中

软件测试工程师具备技能

工作两年了,一直在做着APP测试,目前自己的技能离一名优秀的软件测试工程师还是有很大差距的. 按照我的理解,一名优秀的软件测试工程师需要具备的知识: 自动化测试工具:功能测试工具(mongkey.monkeyrunner等).性能测试工具(QTP.roadrunner.Jmeter等).测试管理工具(禅道.Bugfree等): 软件测试理论:软件测试基本流程.相关术语: 开发基础:数据库(SQL.Oracle).开发语言(Java.C.Python): 计算机基础:Windows操作系统.Lin

软件测试面试准备题

一.常见问题 软件测试的目的是什么? 1.为了发现程序中的缺陷,保证软件质量: 2.满足用户需要. 软件测试的一般流程是怎么样的? 1.需求分析:首先需要学习并了解软件的业务,分析需求点: 2.测试计划:编写整个测试计划,在这个过程中需要参考需求规格说明书: 3.测试用例设计:根据需求文档制定测试用例,然后进行用例评审: 4.执行用例:问题记录,跟踪问题修改情况: 5.提交测试报告:写测试报告,对整个测试的过程和版本的质量做一个评估. 探索性测试是什么?应该怎么做? 在需求文档不完善或者压根没有

[转]软件测试为什么失败?

原文链接:软件测试为什么失败 案例1: A公司是一家从事网游点卡交易的互联网公司,去年年底我司做调研时发现一个问题:测试部门有近40人,独立于研发团队,团队成员分为自动化测试和手工测试两个小组,测试经理则是从IBM过来的,但据研发和测试人员反应,测试人员的地位非常低,自动化测试岗位形同虚设,没有起到任何作用,在互联网软件开发的过程中,测试人员的价值非常有限,测试员工的成就感非常低,最近一个月也有30%-40%的离职率,这个问题让负责测试部门的陈总非常头痛,一方面人员不太稳定,一方面软件质量的问题

【转】测试职业思考:如何成为一名优秀的软件测试工程师

如何成为一名优秀的软件测试工程师                                                                                             --------记录自己阅读<赢在测试>读书笔记           来北京快一年了,在自己喜欢的岗位快乐的工作着,这里是自己职业的开始,一直希望自己未来在测试的岗位上走的更远,思考着如何成为一名优秀的测试工程师,最近利用每天晚上回去休息的时间,逐渐读完了<赢在测试>

【转】 测试职业思考:如何成为一名优秀的软件测试工程师

如何成为一名优秀的软件测试工程师                                                                                             --------记录自己阅读<赢在测试>读书笔记           来北京快一年了,在自己喜欢的岗位快乐的工作着,这里是自己职业的开始,一直希望自己未来在测试的岗位上走的更远,思考着如何成为一名优秀的测试工程师,最近利用每天晚上回去休息的时间,逐渐读完了<赢在测试>

软件测试自我修养(一):修心三问

"授人以鱼,不如授之以渔" 说的是传授给人知识,不如传授给人学习知识的方法.今天我想针对于此从思维层面再做一个升华:"授之以渔,则先令人悟之". 做好软件测试,首先具备的修养是需要弄明白三个问题.这就是上面讲到要的"悟".假如开发人员修改提交了BUG,我们使用"三问"的思想进行测试,对于测试人员了解需求会起到很大的帮助. 何以悟"三问".您一定会问:"哪三问?" 举个例子,咱们来设计一个

软件测试知识点汇总目录(持续更新)

个人在工作之余通过word文档长期持续更新工作中需要涉及到的一些理论和技术知识.所谓好记记性,不如乱笔头.根据工作年限和职位的变化,以及就职公司参与的产品或者项目所涉及到的测试方面的技能不一样,会存在有些之前的技能不经常使用,会导致生疏的现象.虽然不至于归零,但是一旦需要使用的时候,有一个相对比较完整规范的文档来应急阅读来回顾其使用等是很有帮助的.比在网上搜索出来的相关零散的不完整的知识点方便的多. 文档创建年限不是很长,有很多知识项没有写入文档或者还没有来得及编写,需要在后续持续更新.文档编写

闽江学院2015-2016学年下学期《软件测试》课程-第五次博客作业

在老师的推荐下我花了两周的时间通读了<构建之法>,读完了这本<构建之法>之后不得不说,这着实令我获益良多. 之前我一直没有认真阅读过这本书,虽然主要原因是因为自己的惰性使然,但是同样不可否认的是,之前看的软件工程的教材大多数都是干巴巴的,看起来实在没有意思,经常看不到多久就看不下去了,可是这本书就不同,它通过几个简单的人物和场景就把一个原本让人感觉索然无味的教材转变成我们的日常生活,原本感觉虚无缥缈的理论,一下子就鲜活的展现在我面前. 通过第一章,我大概了解我将要从这本书中学习什么