You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

236 lines
18 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 33 | 测试工具为什么不应该通过QQ/微信/邮件报Bug
你好我是宝玉。十多年前当我还是个野路子程序员时我在外面接私活做项目客户在使用过程中遇到了Bug直接就截个图或者是用Word文档整理在一起从QQ或者邮件上把Bug信息发送给我我收到后再修复更新上线。
而现在正规的软件项目已经不会再用这种原始的方式来报Bug了而是会借助测试工具来帮助报告和跟踪Bug即使你偶尔能看到有项目还在采用原始方式报Bug你肯定也会觉得这样做不专业。
但不知道你有没有仔细想过这个问题为什么现在不通过QQ/微信/邮件报Bug又有哪些测试工具可以帮助你更好地发现、报告和跟踪软件中的Bug呢今天我们来展开讨论这个问题。
## Bug跟踪工具
我想你对于Bug这个词一定不陌生它是我们软件中的缺陷或错误。这个词的诞生也很有意思。
> 1947年9月9日一只小飞蛾钻进了哈佛大学的一台计算机电路里导致系统无法工作操作员把飞蛾贴在计算机日志上写下了“首个发现Bug的实际案例”。
[![](https://static001.geekbang.org/resource/image/79/3c/796010fd083207b660547887bbc5893c.png "图片来源WikiPedia")](http://en.wikipedia.org/wiki/Software_bug)
虽然Bug的历史已经有60多年了然而Bug跟踪工具却没有出现太久。软件项目中最早也是通过邮件、即时通讯等原始方式报告Bug直到1992年才有第一个专业的Bug跟踪软件[GNATS](http://www.gnu.org/software/gnats/)。
在这之后才逐步有了像Bugzilla、Jira、MantisBT等专业的Bug跟踪工具。而现在Bug跟踪工具已经成为软件项目中必不可少的工具之一。
那么Bug跟踪工具是怎么逐步替代QQ、邮件等方式来处理Bug的呢
#### 为什么要使用Bug跟踪工具
我们在上一节学习了软件测试相关的理论知识软件测试的主要工作就是发现Bug、报告Bug和跟踪Bug。测试人员发现Bug只是第一步还需要报告Bug让开发人员可以知晓和定位并且跟踪整个Bug修复的过程。
用QQ或者邮件报Bug的这种方式看起来快捷简单但是问题很多
* Bug不能有效被跟踪不知道一个Bug是不是已经被修复了
* 效率很低开发人员频繁的被这样的报Bug的消息打断不得不停下手头的工作去甄别Bug
* 不能直观的了解当前项目的Bug状态比如说修复了多少还有多少没有修复近期Bug数量是增加了还是减少了。
不难看出通过QQ等方式报告的Bug都是文字配合图片等信息很难检索和分类**而Bug跟踪工具采用结构化的数据来定义Bug每一个Bug都有一些关键的信息可以对Bug进行分类和检索。**
在Bug跟踪工具使用中一个基本的Bug信息包括
* 标题;
* 描述(包括期望结果、实际结果和重现步骤等关键信息);
* 优先级;
* 指派人;
* 状态New、Open、 Rejected、Fixed等
* 其他。
那这样的话就很容易的对Bug进行分类和检索比如说
* 张三想查看所有分配给他的Bug那只要列出所有指派人是张三的Bug
* 想列出所有未解决的Bug只要列出所有状态不是Close或Rejected的Bug即可。
这样对于开发人员来说可以直观的看到自己有哪些Bug需要处理Bug的描述信息也可以帮助重现Bug、快速定位到Bug的原因对于项目经理或者测试人员来说可以直观的看到哪些Bug还没解决及时了解项目进展。
另外,我在《[12 | 流程和规范:红绿灯不是约束,而是用来提高效率](http://time.geekbang.org/column/article/87129)》这篇文章中提到了项目中的流程和规范,**在软件项目中要把好的实践流程化把好的流程工具化。Bug跟踪工具则很好的贯彻了这一点将Bug的解决过程流程化。**
你平时在Bug跟踪系统中看到的Bug状态看起来只是一个有限的状态列表但背后其实是一套解决Bug的流程。就像下面这张图表示的这样一个Bug从创建到最后结束其实是有一个完整的流程的。
![](https://static001.geekbang.org/resource/image/4f/dd/4f56bf4d43b652ab2b92318775a850dd.png)
通过这样的流程开发人员就可以集中对Bug进行分配、按照优先级分别解决而测试人员则可以第一时间知道Bug处理的状态变化及时验证方便跟踪整个过程。
#### 使用Bug跟踪工具的注意事项
报告Bug的目的是为了能跟踪Bug以及帮助开发人员重现直到解决问题。要想做到测试和开发高效协作这里面有一些需要注意的事项。
首先所有的Bug都应该通过Bug跟踪系统管理和跟踪不应该再通过QQ/微信/邮件的方式跟踪Bug。如果客户、同事通过Bug跟踪系统之外的其他途径反馈Bug应该统一提交到Bug跟踪系统管理跟踪起来。
然后不能把多条Bug合并成一条一个Bug创建一个独立的Ticket。我遇到过有些测试为了省事把几条Bug合并成一个Ticket来报导致的问题就是必须这几条Bug都修复了这个Ticket才能改变状态如果其中一个Bug没有验证通过需要Reopen整个Ticket。
再有描述清楚如何重现Bug非常重要。一个Bug如果无法重现也没有日志、截图等辅助信息那是非常难以定位的会浪费很多开发人员定位Bug的时间。
最后不要把Bug跟踪系统当成讨论板用。在项目中一个常见的场景是一个Ticket下面跟讨论版一样添加了很多留言开发认为不是Bug测试认为是一个Bug开发又觉得是产品设计没定义清楚应该让产品经理来讲清楚皮球踢来踢去最后问题还没解决。
Bug跟踪系统的主要功能是用来跟踪Bug的不是用来讨论和扯皮的。遇到上面的情况其中一方就应该主动一点拉上相关人面对面讨论当面确认清楚这个Bug到底是什么问题然后马上解决掉。
## 自动化测试工具
除了Bug跟踪工具软件测试中还有很重要的一个工具就是自动化测试工具虽然我在《[29 | 自动化测试如何把Bug杀死在摇篮里](http://time.geekbang.org/column/article/93405)》中已经有了较多篇幅说明,但这里还是想继续提一下,因为我觉得,**未来自动化测试会占据越来越多的比例,很多手工测试的工作会逐步被自动化测试代替。**
像美国Facebook、Google、Amazon这些大厂单纯的手工测试职位在减少一些手工执行测试用例检查的工作外包到了人力成本更低的像中国、印度、罗马尼亚等国家而美国本土主要招聘的都是能写自动化测试的软件测试人员或者直接就是开发人员来写这些自动化测试代码。
这就意味着对于软件测试人员来说,要求越来越高了,不仅要会设计测试用例,还要能写自动化测试脚本。同时对于开发人员来说,不仅要写功能代码,还需要实现一定量的自动化测试代码。
这些年自动化测试工具的快速发展,也降低了自动化测试的实现难度,可以方便地搭建自动化测试环境,通过简单的脚本语言就可以模拟人工操作。
但很多团队还是不愿意投入在自动化测试的开发上面,宁可雇佣更多的初级测试人员手工测试。
其实这个问题还是要整体来看,这就像修路,如果你从一个地方到另一个地方(类比测试所有用例),偶尔走几次,那么可以不修路(手动测试),如果你未来一段时间需要频繁的在两个地方通行(反复测试),那么最好现在就开始修建高速公路(自动化测试),这样可以节约你大量通行的时间(测试时间)。
当然更多的情况其实是团队不知道该如何实施自动化测试,比如说测试人员不会写程序,开发人员太忙,或者开发人员不会写测试用例,或者不知道该选择什么样的自动化测试工具。
对于这种情况,我的建议是:
测试人员可以学习一些基本的编程知识尝试自己实现自动化测试。自动化测试所需要的技术主要是对API的调用并不需要复杂的逻辑其实学习门槛并不高而且这种技术在工作效率、薪资、个人职业发展等方面的投资回报都是巨大的。
从项目的角度,应该加大对自动化测试的投入,让开发人员参与到自动化测试代码的开发中。增加自动化测试代码的覆盖,对于提升软件质量是有明显好处的,通过自动化测试可以提升测试效率,及时发现软件质量问题。
对于开发人员来说,如果已经有了测试用例,完成自动化测试并不复杂,这个投入其实比做一些重要性不高的功能回报更高。
自动化测试工具的选择,需要根据你的软件的特点,去找出来适合你软件自动化测试的几款,然后自己搭建环境试用一下。在本文后面的附录中,我会列出一些自动化测试工具供参考。
## 其他帮助发现Bug的测试工具
软件测试的一个主要工作就是发现Bug而要发现Bug就需要对软件的各个领域进行测试比如说有性能、安全性、兼容性等领域。
这些不同领域的测试,要求也不一样,比如说性能测试要求能测试出软件是否有性能瓶颈,能达到多少用户的访问量,需要模拟大量用户并发访问;安全性测试则要求对软件可能存在的安全漏洞进行扫描、验证;兼容性测试则要针对不用环境不同设备,对软件进行测试,以确保不会因为环境不一致导致功能不正常。
这些测试要么人工很难完成,例如模拟大量用户并发访问;要么需要很深的专业知识,例如安全性测试;要么需要大量的设备和巨大的工作量,比如做兼容性测试。所以这些领域的测试,就需要借助工具的帮助才能进行测试,从而发现问题。
应用这些测试工具其实并不难毕竟都有很成熟的API网上也有很多教程真正需要的是去执行。另外如果想要最大化工具的价值及时发现问题还要考虑将测试工具的应用自动化加入到你的持续集成流程中去。
以压力测试为例你用Jmeter完成了压力测试脚本后还可以考虑和CI集成在每次构建时运行一遍压力测试代码可以在构建完成后看到直观的图表还可以设置性能数据的阈值如果性能指标低于阈值会导致构建失败这样就可以第一时间发现性能问题缩小问题范围并及时解决。
在这里,我也帮助搜集了一些相关的测试工具供参考,具体可以查看附录。
## 附录
#### Bug跟踪工具
在项目管理工具那一篇文章中,我已经给你介绍了一些任务跟踪系统,比如说[Jira](http://www.atlassian.com/software/jira)、[禅道](http://www.zentao.net)、[TAPD](http://www.tapd.cn)、[云效](http://cn.aliyun.com/product/yunxiao)等都可以用来跟踪Bug。
* Bugzilla
[Bugzilla](http://www.bugzilla.org) 是由Mazilla公司提供的一款开源免费的bug跟踪系统。这是一款历史很悠久的产品。
* MantisBT
[MantisBT](http://mantisbt.org) 是一个简单但功能强大的开源bug跟踪系统可以通过各种插件来扩展其功能。
* Redmine
[Redmine](http://www.redmine.org) 是一款开源的综合性的项目管理工具不仅可以用于Bug跟踪还可以用来跟踪项目进度。
#### 自动化测试工具
除了传统的桌面应用外,现在移动设备的普及,要测试的终端也越来越多。借助一些自动化测试工具,可以帮助简化多设备的测试。下面简单介绍几个自动化测试工具。
* Selenium
[Selenium](http://www.seleniumhq.org) 是一个 Web 端的自动化测试工具,直接运行在浏览器中,用来模拟用户操作。类似的还有[WebDriverIO](http://webdriver.io) 和 [Nightwatch.js](http://nightwatchjs.org) 支持JavascriptAPI更简单更方便。
* Appium
[Appium](http://appium.io) 是一个开源、跨平台的自动化测试工具,用于测试移动原生应用,支持 iOS, Android系统。
* Macaca
[Macaca](http://macacajs.com/zh/) 是阿里巴巴开源的一款面向多端的自动化测试工具支持桌面端、Web、移动端、真实设备和模拟器。
更多自动化测试工具可以参考:《[Best Automation Testing Tools for 2019 (Top 10 reviews)](http://medium.com/@briananderson2209/best-automation-testing-tools-for-2018-top-10-reviews-8a4a19f664d2)》([中文版](http://segmentfault.com/a/1190000012016234))。
#### 压力测试工具
很多软件在上线后,需要面对巨大的用户访问量,但如果等到上线后才发现程序性能不行,访问量一大就会导致服务崩溃,那就太晚了。所以最好是在测试阶段,就能测试出来程序的性能如何,瓶颈在哪里,然后在发布前对程序进行优化,确保能满足性能要求。
对程序性能的测试,就需要借助压力测试工具来模拟大量用户并发访问的场景。下面简单介绍一下几款常用的性能测试工具。
* Apache JMeter
[JMeter](http://jmeter.apache.org) 是一款开源的压力测试工具纯Java应用程序。
* LoadRunner
[LoadRunner](http://www.microfocus.com/en-us/products/loadrunner-load-testing/overview) 是惠普旗下的一款商业自动负载测试工具,可以通过录制的方式制作测试脚本,上手容易功能强大,可以方便的监控和分析性能测试结果。
* 阿里云性能测试 PTS
阿里云性能测试 [PTS](http://cn.aliyun.com/product/pts) 是基于云端的压力测试服务,可以模拟从全国各地域运营商网络发起的流量,真实地反映使用情况,生成有价值的性能测试报告。
* WebPageTest
[WebPageTest](http://www.webpagetest.org) 是一个可以用来测试和分析网页性能的在线工具支持不同浏览器支持API。可参考《[WebPagetest H5性能测试工具入门详解](http://blog.csdn.net/qq_24373725/article/details/80091044)》。
更多性能测试工具介绍可以参考:《[10大主流压力/负载/性能测试工具推荐](http://zhuanlan.zhihu.com/p/26671961)》。
#### 安全性测试工具
软件的安全性是非常重要的指标,有时候开发人员缺乏安全意识,就可能会导致程序存在安全漏洞。安全领域也是开发和测试之外的一个技术领域,中小公司一般不会有自己专业的安全团队,就需要借助一些安全性测试工具来帮助对软件进行安全性检测。
* HP Fortify On Demand
[Fortify On Demand](http://www.microfocus.com/en-us/products/application-security-testing/overview) 是惠普旗下的一款安全检测工具可以通过分析源代码、二进制程序或者应用程序URL检测程序安全漏洞。
* Sqlmap
[Sqlmap](http://sqlmap.org)是一款开源免费的检测SQL注入的工具。
* IBM Application Security APPScan
[APPScan](http://www.ibm.com/us-en/marketplace/appscan-standard) 是IBM旗下的一款漏洞扫描工具支持网站和移动App。
更多安全性测试工具介绍可以参考:《 [11款常用的安全测试工具](http://blog.csdn.net/lb245557472/article/details/88572607) 》《[安全测试工具篇(开源&商业)](http://codeshold.me/2016/09/security_tolls.html)》《[最受欢迎的软件安全性测试工具有哪些?](http://mp.weixin.qq.com/s/OZp7Q8Jq_voTAkHj3CAMMQ)》。
#### 浏览器兼容性测试工具
网站开发最苦恼的问题之一就是浏览器兼容问题不仅要兼容Chrome、IE/Edge、Firefox三大主流浏览器还得考虑桌面设备和移动设备上的不同表现。如果人工对所有浏览器做兼容性测试工作量比较大。好在也有一些不错的工具可以帮助做兼容性测试。
* Browsera
[Browsera](http://www.browsera.com) 可以对不同浏览器下的布局提供报告包括截图和Javascript错误。
* Browslering
[Browslering](http:////www.browserling.com) 可以针对不同浏览器进行测试,它在虚拟机中运行真实桌面浏览器,还可以人工进行交互。
更多浏览器兼容性测试工具可参考《[10个免费的顶级跨浏览器测试工具](http://blog.sae.sina.com.cn/archives/4515)》
* 测试用例管理工具
我们在上一篇里面已经学习了,设计测试用例是软件测试很重要的工作,有专业的工具帮助管理测试用例,也可以起到事半功倍的效果。
* TestRail
[TestRail](http://www.gurock.com/testrail) 是TestRail是一个专注于管理测试用例的工具可以用它来创建测试用例和用例集跟踪测试用例的执行和生成报告。
* 飞蛾
[飞蛾](http://feie.work/) 是Coding旗下的测试管理工具对中文支持好界面美观。
更多测试用例管理工具可以参考:《[有哪些比较好的测试用例管理工具?](http://www.zhihu.com/question/26898212)》
## 总结
今天我带你一起学习了软件测试工具的相关知识。软件测试主要工作就是发现Bug、报告Bug和跟踪Bug。软件测试工具也是围绕这三方面来帮助我们提高效率的。
Bug跟踪工具不仅可以方便的报告Bug和跟踪Bug更可以帮助开发人员将Bug的解决过程流程化。
自动化测试工具是发展趋势,未来自动化测试会占据越来越多的比例,很多手工测试的工作会逐步被自动化测试代替。
除了Bug跟踪工具和自动化测试工具软件测试中还有性能测试工具、安全性测试工具、兼容性测试工具等这些工具都可以更好的帮我们发现软件中的质量问题。
如果想要最大化工具的价值,及时发现问题,还要考虑将测试工具的应用自动化,加入到你的持续集成流程中去。
## 课后思考
你的项目中使用了哪些软件测试工具?看完本文,你觉得还可以在哪些方面加强对软件测试工具的应用?欢迎在留言区与我分享讨论。
感谢阅读,如果你觉得这篇文章对你有一些启发,也欢迎把它分享给你的朋友。