目录

一、什么是低效率的软件测试?

二、什么是高效率的软件测试?

三、如何做到高效率的软件测试?

1、流程管理

2、环境和平台

3、工具

4、自动化

5、人员能力

四、结尾


一、什么是低效率的软件测试?

我们首先来看低效率的软件测试,我刚才说的“测试工作做起来又累效果又差”,这个描述很不准确,只是主观的感受,需要一些事实来将它具体化。不同公司不同项目组的差异很大,但根据我经历过的项目经验,低效率的软件测试主要有以下共同的表现:

  • 需求分析,开发与测试工作相互分离,测试工作在整个开发阶段的末尾,承担着所有和质量相关的压力;
  • 对于需求变动,设计变更,功能修改,代码重构等信息,测试人员往往是最后知道的,且能够了解到的信息有限;
  • 测试人员远离真实用户,接触不到产品环境的信息,缺少对在线数据和用户行为监控分析的手段和能力;
  • 团队无法做到有效的持续集成和持续发布,大量和运行环境,依赖系统有关的问题,每次发布的版本质量不可控;
  • 缺少有效的,健康的自动化测试体系,测试依靠手工执行,重复繁琐的回归测试成为严重的工作负担;
  • 缺少合适的测试工具,难以方便快速的完成构建测试数据,获取需要的信息,执行测试等工作。大量重复的无价值的工作需要手工完成,例如准备测试环境,安装被测产品等;
  • 开发人员只关注功能实现,不写或很少写测试代码。测试人员只会手工黑盒测试,缺少对被测系统的深入理解,缺乏进行灰盒或者白盒测试的技术能力。

二、什么是高效率的软件测试?

那么什么才是高效率的软件测试,或者说高效率的软件测试应该有哪些表现?我尝试着从流程管理,环境和平台,工具,自动化,人员能力五个方面阐述

以上的各个方面之间又存在着千丝万缕的联系,例如环境和平台部分中就隐含着工具和自动化的内容,要想构建起完善的测试环境,就需要CI,Docker等工具,也需要自动化的构建脚本。而工具部分中很多也是为了能够使机器自动化的完成重复工作,减少手工的工作量。而这一切又都需要团队有合适的流程管理方法作为前提,需要团队成员具备相应的技术能力。

三、如何做到高效率的软件测试?

好了,讲了这么多闲话之后,我们来看点干货。如何才能把测试人员从重复枯燥的工作中解脱出来,高效率的做软件测试呢?从上述的分析中可以看出,这是一个系统化的工程,就像给团队做敏捷转型一样,不是简单的引入某项技术或者做几次培训就能达到的。但是一个优秀的测试人员应该具有这方面的的能力,下边我依然尝试着从**流程管理,环境和平台,工具,自动化,人员能力五个方面来阐述**:

1、流程管理

这是一切后续工作的前提条件,没有合适的流程管理方法,再先进的技术也无法充分发挥作用。目前业界中的项目开发流程基本可以分为传统的瀑布式流程和敏捷开发流程。每个团队根据自己的情况又会有很多变种,例如迭代式瀑布,Scrum,看板等等。各种流程管理方法不是本文讨论的重点,单单从提高测试效率的角度,团队中的流程管理方法应该具备以下几个要素:

很不幸,传统的瀑布式模型对于测试人员是很不友好的,几乎必然会导致之前描述的问题。就我自己的实践经验来看,看板方法在这方面的效果不错,我曾经所在的一个严格遵循看板流程的团队,开发测试比长期在6:1至7:1,项目运作的很顺利。关于如何有效的引入和运用看板方法,可以参考看板之父大卫·J.安德森的著作:《看板方法:科技企业渐进变革成功之道》。

但是另一个常见的问题是:在一些传统开发团队中,测试人员的地位比较低,没有权利和职位去完成在团队内改变已有开发流程,推行新的开发流程的工作。可能的建议是:先通过某些方法,例如和权利干系人沟通,帮助团队解决某个复杂的问题等,获取领导层和团队内部的信任与支持,然后再根据项目的实际情况,调整具体的实践活动,逐步改善流程中存在的问题,引导团队接受和适应新的流程。

2、环境和平台

要做软件测试,首要问题是在什么样的环境上做测试,以及如何能够快速高效的构建起需要的环境。两个关键的因素是:测试环境需要尽可能的模拟化产品环境存在较大差异,这样测试工作才能准确反映软件在使用中的真实状态;环境部署能够快速自动化完成,以避免测试人员在搭建测试环境这种重复且低价值的工作上耗费时间和精力。

Devops的兴起无疑是测试人员的福音,infrastructure as code,pipeline as code,容器化等技术可以极大的提高环境构建的自动化程度,减轻测试人员准备测试环境的工作量。而持续集成,持续交付等理念可以使测试人员更有效的控制代码合入质量,构建起更贴近产品环境的测试环境,可供参考的资料有:《持续交付:发布可靠软件的系统方法》。

这部分的内容属于团队的基础技术设施,直接影响着测试人员的工作效率和产品交付质量。但是在传统观念中,很多人认为这不是测试人员的职责所在,而很多测试人员由于职位或者自身技术能力的限制,也缺乏这方面的影响力。这就要求测试人员提升自己的技术能力,扩大自己的工作范围,从各个角度考虑影响产品质量的因素,并引导团队提升质量内建能力。(顺便说一句,虚拟化平台例如VMwar,AWS,容器化技术例如Virtual Box, Docker,都是测试人员的得力助手,值得深入了解和学习)

3、工具

“工欲善其事,必先利其器”,面对现代高度复杂的软件结构,没有合适的工具,全凭手工开发是不可想象的。但遗憾的是,大家往往把注意力放在了琳琅满目的开发工具上,而忽视了测试工具的重要性,这对测试人员是很不公平的。试想一下,如果一个项目中没有git,svn等版本管理工具,没有eclipse,intelllliJ等IDE工具,没有maven,gradle等构建工具,没有jenkins等CI工具,开发人员要用vi写代码,手工管理代码提交,手工编译打包,手工部署,那会是怎样一幅场景?完全不可想象的。但是事实上很多测试人员和测试团队就是工作在类似这样的原始条件下,能用的工具就是鼠标和键盘,能做的事情就是点击和输入,需要的测试资源无法轻易获取,出现问题后无法快速定位原因,只能一遍又一遍的找开发人员,带来了很多沟通成本,甚至影响与开发人员的合作关系。

James Whittaker在其著作《探索式软件测试》中举过一个很形象的例子,在游戏“魔兽世界”中,玩家的控制面板中有各种各样的信息,例如自己控制人物的血量,魔法量,技能冷却状态,施法距离,物品状态等等,而玩家借助这些信息可以做出更加正确的决策。同样的,应用到软件测试中,他提出未来的软件测试,也应该像魔兽世界一样,当做了某个操作后,有工具能够提示这个操作背后的数据流向,触发的逻辑,覆盖的代码路径等等信息,有了这些信息作为依据,测试人员可以做出更加高效和准确的决策。类似的,在很多游戏类的软件测试中,也有这样的后门工具,可以帮助测试人员成为这个游戏中的上帝,做任何想做的事情。例如让控制的人物金钱变成无限,等级升到最高,拥有各种各样的装备,穿越障碍物等等,以便充分测试软件的各种功能。

由此可见测试工具对于测试人员的重要性,缺少合适的工具,很多测试工作根本无法开展,也就是我们经常听到的“这个功能没法测”。根据自己的经验,测试人员需要的工具基本可以分为两大类:

有一些通用的工具可以帮助到测试人员,例如性能测试常用的jmeter,接口测试用到的postman,搭建mock server的moco,web程序常用的chrome开发者工具等等。但总的来说,不如开发工具丰富,而且由于测试工作不同于开发工作,没有那么高的通用性,很多时候还是需要根据项目情况自己开发。这就涉及到另一个问题:测试人员一般代码能力都比较弱,对产品的底层细节理解也不够深刻,自己开发测试工具存在困难。而求助于开发人员也比较困难,因为这些事情不像功能开发能直接产生价值,很容易被团队忽视。所以我的建议是:一方面在团队内普及测试相关的知识,所遇到的困难,提高团队的质量意识;另一方面依然需要测试人员提高自己的技术能力和代码能力,加深对产品底层的理解,最好自己具备开发测试工具的能力。毕竟是自己用的,需要什么样的工具自己最清楚。语言方面我建议Python或者Ruby这样的脚本语言,非常灵活轻巧,运行环境搭建简单,可以快速的完成所需功能,而且有很多通用的库可以使用。

现在的软件越来越复杂,就像是现代化的战争一样,战场条件复杂多变,各种测试工具就像是武器装备,只有把自己武装到牙齿,才能打赢现代化的战争。

4、自动化

好吧,终于轮到了自动化。但这里我说的并不限于自动化测试,而是所有可以减少手工重复工作量的事情,即automated everything。在测试工作中有很多需要经常做,反复做的事情,自动化测试只是其中一方面,但是自动化测试需要的准备条件较多,而很多事情可能只需要几行shell脚本或者java代码,就可以节省很多工作。例如常见的web程序测试时,每次都要输入用户名和密码,然后登陆,那么完全可以写两行js的代码,每次在chrome的控制台里执行一下,省去手工输入一长串的用户名和密码。再比如我曾经碰到的一个产品,每次想要在本地启动服务,需要git checkout修改,git pull代码,export环境变量,yarn install安装依赖,yarn start加一串的参数启动服务。手工做完这一系列操作大约需要一到两分钟时间,每天大约需要做四五次。我把这些命令写成一个shell脚本文件,每次只需要./start.sh,然后我就可以去干别的事,服务启动好后再回来继续就行了。试计算一下,每次节省一分钟,一天做五次就能节省五分钟,一周能节省二十五分钟,如果这个项目做几个月,那么能节省多少时间?可以用这些时间去思考别的事,去做更有价值的事,而不是做这些重复的,产生不了价值的事情。

当然,自动化测试依然是重要的一部分,高效率的软件测试不能缺少自动化测试。关于自动化测试的话题和文章非常多,我想说的一点是,控制好投入产出比是最重要的。自动化测试是为测试人员服务的,不能为了自动化,为了指标而盲目的增加自动化测试。

5、人员能力

思想,技术,工具,这些都是外部因素,都需要人来应用到实践中。从上边的描述中能够看出,对于测试人员能力的要求是多方面的。 我的感受是,要想做到理想状态下高效率的软件测试,QA或者测试人员至少应该具备四个方面的能力:

四、结尾

写到这里,这篇文章基本上也该结尾了。可以看到,其中讨论的很多东西超出了传统软件测试的范畴,这也是我想表达的另一个观点:软件测试在软件开发过程中不是一个隔离的存在,它和各个方面息息相关。运作流程,产品结构,运行环境,部署实践,人员能力等等都会影响测试效率和交付质量。而作为软件测试的从业者,不能仅仅把自己的工作定位为“做软件测试”,所有和测试效率,交付质量相关的事情都值得我们去思考,分析,改进,优化。只有这样,才能高效率的完成软件测试,成为高效率的测试专家。

软件测试怎么样才能提高自己的效率?相关推荐

  1. 博士生该怎么做才能提高科研效率?

    这是一名普通博士生的日程: 这只是大多数情况,偶尔有实验或者写课题写论文要通宵,周末加班是常态-- 实验室时间超过12个小时,但是回过头来,却发现自己好像也没有做多少事情,这是为什么? 笔者想说,大家 ...

  2. AI提高药物发现效率 | ML,Supercomputers and Big Data

    摘要 药物研发成本的增加和投资回报率的降低对制药行业构成了巨大的威胁.新兴技术有可能大幅提高药物研发和制造的效率.人工智能(AI)被认为是一种令人难以置信的工具,可以增强医疗保健的多个方面,特别是药物 ...

  3. 客户管理系统代码项目_西安人力资源管理系统如何有效管理销售,提高工作的效率...

    人力资源管理系统如何有效管理销售,提高工作的效率 发布人:汇聚华企管理系统 原创分享 销售过程会出现的管理问题各种各样,比如说库存状态,比如说报价,又比如说客户关系管理,其实这些管理上的问题都能用软件 ...

  4. 提高项目开发效率之--会议室墙的进度表

    我是做开发的,做项目带团队都是家常便饭了,但是每次都有不一样的收获.这次项目为了提高组员的开发工作效率,我想起了PMBOK书中提到的给团组找一个封闭的空间工作,于是我就每日在墙上贴上日工作进展图形统计 ...

  5. (1) 使用supervisor提高nodejs调试效率

    转载地址 : http://www.cnblogs.com/pigtail/archive/2013/01/08/2851056.html 使用supervisor提高nodejs调试效率 以往我们在 ...

  6. 提高 Linux 开发效率的 5 个工具

    提高 Linux 开发效率的 5 个工具 我们经常需要长时间地坐在电脑前做一项具体的工作只为能够优化工作流程.这包括选择和配置能让你最高效工作的工具.从长远来看,简单易学的工具并不总是好的,那些能够充 ...

  7. 如何提高数据分析的效率

    数据分析的目的是集中和提取隐藏在大量看似杂乱无章的数据背后的信息,并总结出研究对象的内在规律.面对海量的数据时,提高数据分析的效率已成为分析人员面临的一个难题. 数据分析主要是指从初级商业智能(BI) ...

  8. 提高系统开发效率的“银弹”——X-series可视化大规模应用开发工具集

    子曰,知之为知之,不知为不知,是知也. 知道自己不知道也是一种知道,但作为开发人员,面对一个系统时,无论是开发新功能还是维护老系统,我们更多的是处在一种茫然无助,不知道如何下手,甚至不知道自己不知道的 ...

  9. 巧用PaperPass自建库免费检测提高降重效率

    在介绍PaperPass自建库之前,先客观的讲解一下使用paperpass的情况,这个系统检测出来的重复率会偏高,有些是同义转换或者概述的句子段落都会被标红,认为是抄袭.(除此之外,该网站后期开发票特 ...

最新文章

  1. Cortex-A、Cortex-R、Cortex-M处理器的性能比较
  2. 运行android模拟器,emulator: ERROR: x86 emulation currently requires hardware acceleration!
  3. 微信二次修改微信号_微信支持修改微信号了!功能正式上线,附详细教程
  4. java object对象的方法_Java常见对象Object类中的个别方法
  5. VC设置CEdit控件背景透明、文字背景也透明
  6. 使用计算机仿真的作用是什么,计算机仿真及其在制造业中的应用
  7. 苹果电脑更改sd卡只读_SD卡变为只读系统
  8. Visio——软件工程实验贰——面向对象软件设计方法
  9. Android 应用开发(9)---内联复杂的XML资源
  10. linux从表中提取信息,如何用Linux命令提取表格文本中的某列
  11. 支付功能如何软件测试
  12. 图像处理中滤波(filtering)与卷积(convolution)的区别
  13. STM32 USB Host 鼠标和键盘驱动 -- 原创
  14. C++萌新来看,一篇文让你让你彻底搞定类(超详细)!
  15. 7-27 EDG nb(20 分)
  16. Java项目校园兼职平台(含代码)
  17. 当年意气不肯平,白发如丝叹何益。贪心跳跃游戏
  18. 三种最流行的商业模式解析:让顾客感觉占便宜,你才能赚更多钱
  19. 简单的猜数字游戏--入门
  20. win10命令行cd进入到指定目录

热门文章

  1. 配置Oracle到MySQL透明网关
  2. 老公老婆之间的道歉。。。有点幽默有点感动
  3. Python迷宫游戏
  4. JAVA RESTful WebService实战笔记(二)
  5. 提高代码质量的那些建议
  6. Flutter TextField 去掉下滑线和底部字符数计数
  7. 网络钓鱼仍然是安全行业的祸害
  8. APP推送消息测试点分析
  9. 计算机维修logo在线设计,硕思logo设计师电脑版
  10. 基于java+jsp+ssm工程车辆租赁系统