从这些年业界发展趋势来看,看起来很多公司都不需要专职测试了,只需要开发兼任测试工作就可以了。比如,Facebook号称自己没有专职测试工程师,Google和Amazon虽然有专职的测试工程师,但但是开发人员对质量负责,开发人员写大量的自动化测试代码。但这样真的可行吗?

在回答这个问题之前,我们还是先来看看,软件测试的主要工作是什么?只有搞清楚软件测试的工作,才能搞清楚这部分工作是否可以由开发来替代,是否需要专职测试

软件测试的主要工作是什么?

开发的工作一般是:在需求确定之后,开发人员开始针对需求进行架构设计,然后编码,最后对发现的bug进行修复,保障线上稳定运行。

而软件开发也类似,也是从需求开始,在需求确定后要去对需求进行分析,然后做测试设计。

如果说架构设计是对业务需求在技术方面的抽象,那么测试设计更像是对业务需求的具象,把业务需求分解成一个个具体的用户操作步骤,也就是测试用例。然后在开发完成后,按照设计好的测试用例进行逐一的测试验证,将发现的bug报告给开发人员,并跟踪bug的修复。

如果对软件测试的工作简单总结一下,就是发现 Bug,报告 Bug,跟踪 Bug

软件测试怎么发现bug

这里面最难的就是发现 Bug,尤其是如何尽早、尽可能全面地发现 Bug。

举个例子来说,如果现在你需要开发一个用户登录的功能,你在开发完成后会怎么测试?

一个普通的程序员通常只会简单测试一下以下用例:

  • 输入正确的用户名、密码,能登录;
  • 输入错误的用户名密码,提示错误,不能登录。

而一个有经验的程序员还会测试一下其他情况,例如:

  • 用户名或者密码为空,是否提示错误;
  • 没有注册的用户名和密码,是否会提示错误

但如果是一个专业的测试人员来测试,是不是只做上面的测试就够了呢?专业测试还会测试哪些内容呢?

对于专业测试人员来说,上面这些肯定是不够的,还需要有以下这些情况的功能性测试:

  • 用户名密码是否大小写敏感;
  • 用户名或密码如果是用特殊字符,会不会导致程序异常;
  • 用户名或密码如果特别长,是不是会有异常;
  • 是不是所有主流浏览器和终端设备都能使用

这就完了吗?并没有。除了功能性的测试,还需要进行非功能性的测试,也就是像性能、安全性和用户体验等方面的测试。比如以下测试用例:

  • 是否可以通过发送数据包反复登录,暴力破解密码;
  • 会不会有 Sql 注入的风险;
  • 用键盘 tab、回车键是否可以操作。

当然还会有其他测试用例,这里就不一一列举。为什么专业测试人员和开发人员的测试用例会差这么多?

因为开发人员的重点,是放在如何实现功能上,就拿上面用户登录的例子,开发人员会想着如何能校验用户输入的用户名密码,并给出相应的提示,对于异常流程和场景会相对考虑较少。

而对于测试人员来说,重点是在检测,也就是会考虑所有可能的用户使用场景,正常的、异常的,甚至各种极端情况,例如大量并发访问、黑客恶意破解,所以他们能想到更多、更全面的测试用例。

测试人员设计测试用例,就是要尽可能的做到覆盖所有用户操作的可能,但是理论上来说这是不可能的,因为组合是有无限多个的。不过从测试的角度看,没有必要每一个可能都去测试,可以通过一些科学的方法来通过有限的测试用例,保证尽可能多的测试覆盖。

有哪些方法呢?举几个例子

(1)等价类划分

  • 就是把所有用户可能输入的数据分类,如果一类数据对于发现 Bug 的效果是一样的,那么这类数据就是一个等价类,测试的时候只要从里面任意选取一个值就好了。
  • 比如一个输入框要求只能输入 1-100 之间的整数,那么 1 到 100 之间都是等价的,0 和任意负数也是等价的,101 和之上的整数也是等价的。
  • 因为分类是有限的,这样就可以用有限的测试用例实现尽可能多的测试覆盖。

(2)边界值分析

  • 边界值是对等价类的补充,因为输入输出的边界是非常容易出错的一个地方。
  • 比如说上面输入框的例子,0,1,100,101 都是边界值,可以设计用例来测试是否会有可能出错。

(3)探索性测试

  • 探索性测试就是根据前面的测试结果,通过有效的策略进行测试。

(4)…

借助这些方法,测试人员就可以对需求功能设计出完整的、有较高覆盖率的测试用例。

所以,有时候测试人员的工作看起来不过是用鼠标点点测试,但他们在拿到需求后,其实花了很多时间和精力分析需求,然后根据需求设计测试用例,准备测试数据。等到开发人员完成软件开发后,就按照设计好的测试用例逐一测试,这样就可以做到及时发现 Bug。

软件测试怎么报告 Bug?

在测试的过程中,如果测试人员发现了 Bug,就会通过 Bug 跟踪系统提交 Bug 给开发人员。

测试人员要做的就是创建一个新的 Ticket,在 Ticket 的描述中,详细说明 Bug 是什么,具体的重现步骤,必要的话还要附上截图、日志等辅助信息。这样开发人员在收到 Bug 后就能快速定位问题,按照优先级对 Bug 进行修复。

软件测试怎么跟踪 Bug?

Bug 的跟踪,并不仅仅是要跟踪开发人员什么时候修复了这个 Bug,通常还包括对 Bug 修复的验证。

开发人员修复完一个bug之后,测试人员首先会验证这个bug是不是真的被修复了,然后还要对整体功能做一个回归测试,确保不会因为修复bug而引起其他功能出现问题。

回归测试是指修改了旧代码后重新进行测试,以确认修改没有引入新的错误或者导致其他代码产生错误。

回归测试这一步很重要,因为通常开发人员在修复完 Bug 后,只会验证其修复的 Bug,而不会验证其他功能是不是会有影响。但实际上,软件项目中经常会出现修复一个 Bug,而导致系统其他功能出现问题的情况。回归测试,则能有效、及时地发现修复 Bug 导致系统不稳定的情况。

什么样的公司需要专职测试?

如果一个公司不需要专职测试,那么意味着专职测试的工作可以被其他工种替代,比如说由开发人员一起完成软件测试的工作。

想象一下,如果你是一名开发工程师,然后你要兼职做测试,那么你需要额外做好哪些工作?

首先,你在拿到需求后,除了做技术上的设计外,还需要做测试上的设计,借助测试方法设计测试用例。

这样做好处很明显,可以在写程序时,让程序更易于测试,设计时会对需求考虑更全面。缺点也显而易见,你不止要学习编程知识、了解业务,还要学习测试方法。也许对你来说可以做到,但是对于绝大多数开发人员来说,这是一个很高的要求。

然后在开发完成后,要对自己写的程序进行测试。这里可能存在一个问题,也就是如果你在程序实现的时候,漏掉了一个逻辑处理,比如说漏了检测 Sql 注入,那么你在测试的时候也不会想到要去测试这部分

测试自己的程序还要克服一个心理障碍,就是要对自己的程序进行破坏性测试,才可能找到潜在的问题,但去“破坏”自己完美的程序,对大多数开发人员来说也是很难接受的一件事。

如果上面两个问题都能克服,你还得再考虑一个问题:如果项目进度比较吃紧,作为开发人员你会压缩哪部分时间?

正常来讲,测试时间必然要被压缩的,因为你首先得保证代码实现。这可能就导致只要项目进度一紧张,测试就被严重压缩了,进而会严重影响质量。

这样看来,完全由开发人员兼职测试,还是很有难度的,不仅对开发人员要求非常高,而且需要开发人员承担所有的开发和测试的压力。

为什么 Facebook 可以做到没有专职测试呢?

首先 Facebook 的工程师水平确实是高于业界平均水平的,有能力同时做好开发和部分测试工作;

其次,Facebook 的产品周期相对宽松,可以有时间完成自动化测试代码;

Facebook 在功能发布之前,先发布新功能到内部环境,几千内部员工先测试,部分充当了测试人员角色;

Facebook 的发布和监控也比较完善,有问题能通过监控及时发现,并且可以随时快速回滚或者发布补丁;

最后就是用户对这类社交产品的 Bug 相对容忍度比较高,想想看如果是波音飞机上的软件能这么做吗?

至于 Google 和 Amazon 这些公司,他们也是类似的情况:

  • 大量优秀的工程师,可以同时兼任开发和测试;
  • 有大量的自动化测试代码覆盖;
  • 强大的发布和监控系统;
  • 时间进度比较宽松;
  • 用户对 Bug 容忍度较高。

对于不能满足上面条件的公司,有专职的测试是更有利于软件项目开发和质量保障的。

大厂不设专职测试的启示

虽然对于大部分公司来说,要做到完全没有专职测试还不现实,但这些大厂不设专职测试的实践还是有值得借鉴和思考的地方。

  • 首先,用自动化测试代替重复性的手动测试是必然趋势。随着自动化测试技术的成熟,写自动化测试代码的成本将逐步降低,而自动化测试,可以极大地提高测试效率,尤其是像回归测试这种需要频繁进行的。
  • 其次,测试设计是软件测试人员的核心竞争力。无论是自动化测试还是手工测试,测试用例是核心。无效的测试用例,用任何方法去测试,都不会达到良好的测试目的,只有测试用例设计好了,真正做到有效高覆盖,测试才是高质量的。
  • 最后,开发人员和测试人员的更多融合是一种双赢。比如说测试人员可以给开发人员提供测试用例作为测试参考,开发人员可以写更多自动化测试代码,这些方式都能有效保障产品质量。

虽然大厂都没有专职测试,但是测试可不含糊,都有一套严谨的,并且行之有效的测试流程。

以谷歌的 Chrome 浏览器为例,除了自动化测试以外,每个 Chrome 的版本发布之前,都要经历以下几个版本。

  • 金丝雀版本(Canary Channel): 过去煤矿工人要下井会带着带着金丝雀,这种鸟对危险气体的敏感度超过人。如果金丝雀死了,矿工便知道井下有危险气体,需要撤离。金丝雀版本会频繁发布,但并不太可靠,就像金丝雀一样用来第一时间发现严重的问题。
  • 开发版本(Dev Channel):工程师日常使用的版本,一边开发一边使用,让工程师可以第一时间验证自己开发的功能。
  • 测试版本(Test Channel):给内部员工的版本,就像 VS Code 介绍的 Eatyour own food,自己人先试用。
  • Beta 版本或发布版本(The Beta Channel or Release Channel):是给外部用户使用的测试版本,并不保证稳定,但是用户可以提前体验新功能,也能帮助开发团队及时发现Bug。

类似的,如果你看 Windows 10 的发布流程,也是这样一个一个的测试版本的测试流程,最后正式发布的版本已经是经过千锤百炼,反复测试过的。

总结

简单来说软件测试的工作,就是发现 Bug,报告 Bug,跟踪 Bug。

要能及时发现 Bug,需要针对需求进行分析和测试设计,把需求具象成一个个用户操作步骤的测试用例。通过一些科学的测试方法,像等价类划分、边界值分析、探索性测试,能有效提升测试的覆盖率。

公司是否需要专职测试,还是取决于公司的具体情况,例如是否有大量优秀的工程师可以同时兼任开发和测试,有大量的自动化测试代码覆盖,有强大的发布和监控系统,时间进度宽松,用户对 Bug 容忍度较高。

问题

测试用例模板

试试testrail,它的测试用例模板非常专业。

对于测试用例,几个关键的字段是:标题、描述、优先级、分类

关于 测试驱动开发DDD

测试驱动是一种很好的开发实践,但普及率也不算很高。

测试驱动写的是单元测试,并不能保证不出Bug,只是说能有效提升代码质量。

还有就是开发人员测试自己代码,很容易遗漏编码时就没考虑到的逻辑。

软件工程:什么样的公司需要专职测试相关推荐

  1. 软件测试:什么样的公司需要专职测试?

    你好,我是测试萌萌,我今天想与你讨论一下,什么样的公司需要专职测试这个问题. 从这些年业界发展趋势来看,看起来很多公司都不需要专职测试了,只需要开发兼任测试工作就可以了.比如,Facebook 号称自 ...

  2. 软件工程 | 第六章 系统集成与测试

    软件工程 系列为本学期(2020春季)软件工程以及软件工程实践课程笔记整理~ 转眼间6月份快要到来了,考试要临近了~ 问题:一个软件经过各种测试后没问题,但到用户电脑上无法运行,给出解决方案?(预计会 ...

  3. 【软件测试】公司招个测试员,我又面试了100多人,结局......

    目录:导读 前言 一.Python编程入门到精通 二.接口自动化项目实战 三.Web自动化项目实战 四.App自动化项目实战 五.一线大厂简历 六.测试开发DevOps体系 七.常用自动化测试工具 八 ...

  4. saas 测试_为什么SaaS公司需要进行安全测试?

    saas 测试 SaaS公司在为客户提供基本软件解决方案时提供了很大的灵活性. 它们具有易于访问的附加优点,并且在所有类型的设备上也很容易访问. 结果,现代企业正在Swift转向SaaS供应商提供的这 ...

  5. 怎么在公司里面做好测试工作(做好测试工作)

    怎么做好测试工作,我们都知道软件测试都是关注客户的需求,关注主体的业务流程,我在上家公司,因为上家公司是自主研发的,所以业务流程很快就被我熟悉,加上只有我一个测试,所有所有的活都是我一个人干,那么就更 ...

  6. 软件工程小组问世第八章之测试文档

    1.引言 1.1编写目的 编写此文档的目的主要在于确定整个测试阶段建立测试测试的内容和范围,以供软件测试人员作为软件测试实施的参考. 1.2 项目背景 项目名称:燃烧我的卡路里 项目提出者/开发者/实 ...

  7. orange软件_Orange和戴尔技术公司合作 联合测试和开发5G和商业模式

    戴尔技术公司(Dell Technologies)已与电信供应商Orange合作,共同开发边缘计算和加速技术(edge computing and accelerator Technologies)旗 ...

  8. 对某公司一次***测试

    这是一次内网***,为何标题不写内网呢,因为当时搞的时候不知道是内网,搞到一台主机之后才知道是双网卡,有对内的网卡,以为只是一次简单web***, 所以没必要夸大标题. 不会写的太详细,大概记录下流程 ...

  9. 飞控cpci计算机靶机公司,CPCI专用测试系统的研制

    摘要: 随着航天装备的现代化发展,对自动测试系统的要求也日益提高,特别是被测信号的数量,密度,种类等日益复杂.如何在装备使用前快速,全面,准确,机动的完成整套复杂测量任务,是装备性能保障的关键.为开展 ...

最新文章

  1. python代码实现二叉树的序列化和反序列化
  2. 自己搭建的CISCO实验环境
  3. 《剑指Offer》解题目录(更新完毕)
  4. zabbix计算型监控项函数last_zabbix 自定义key类型之计算(Calculated items)-阿里云开发者社区...
  5. shiro 升级_小米11消息再次确认:骁龙875有独占期,超广角镜头大升级
  6. 函数指针实现无类型打印
  7. python类:类方法和静态方法
  8. mysql替代符号,mysql特殊符号
  9. icp许可证怎么申请
  10. android 解决微信登录白屏样式问题
  11. 关于开发语言个人随想
  12. 《网络架构系列2-Http详解》
  13. 移动开发(IOS) – iOS系统架构
  14. 分立器件~二极管三极管
  15. 干货 | 查资料利器:线上图书馆
  16. 处理中文乱码和中文部分乱码
  17. 细胞生物学-5-细胞质基质与内膜系统Cytosol and Endomembrane system
  18. P2P之NAT穿透原理
  19. Android 红米Note5 刷机魔趣系统
  20. ubtunu打开firefox_虚拟机Ubuntu下安装Firefox浏览器

热门文章

  1. python连接sql server数据库并模糊查询
  2. 七月三日服务器维护,《不败战神》7月3日更新维护公告
  3. MPU866ADS初始化配置
  4. 随机产生一个1-100之间的整数,看能几次猜中
  5. 系统产生一个50-60的随机数 , 猜出这个数字是多少?
  6. PAT甲级 1002
  7. springboot(三)整合多数据源
  8. 【译文】KKR与CDR53亿美元收购Cloudera影响
  9. 设置复选框选中及其使用
  10. html案例:体育新闻