![071785411156f20f324392e2c9aa941c.gif](https://i-blog.csdnimg.cn/blog_migrate/38513230e70db2786465ba73c5769065.gif)
![7fda615e470c87a09a5e8b9c526765ba.png](https://i-blog.csdnimg.cn/blog_migrate/d7a042da667fb52b9d8f56c58a139cb3.png)
序言:
记得前段时间在地铁里,听到这样一段对话,大意是:甲问乙公司如何做软件测试,乙说手动测试,甲不屑一顾的说:“我虽然刚入行,但我也知道自动测试比较高级。你都在你们公司工作好几年了,怎么还在手动测试?”乙笑笑,没有回答。
今天,我们就针对甲说的这个问题,跟刚入行的小白说说,究竟自动化测试和手动测试哪个更高级?
一、手动测试
手动测试,就是指完全依赖人工测试软件,主要根据测试用例来执行测试,但是测试用例也不可能100%覆盖软件功能还要通过其他方式来发现软件缺陷,这样就要求测试人员的经验要丰富并且具有发散思维的能力,通过错误猜测等方法来弥补测试用例没有覆盖的部分。
![7fda615e470c87a09a5e8b9c526765ba.png](https://i-blog.csdnimg.cn/blog_migrate/d7a042da667fb52b9d8f56c58a139cb3.png)
1、软件测试的优缺点有哪些?
优点
VS
缺点
在于,能够在测试过程中充分发挥人的主观能动性,灵活性;可以充分利用发散思维和优秀的逻辑思维能力,分析能力以及判断力;资金花费用小,测试用例等易维护;可以测试界面布局,排版,色彩等,以及用户体验;验证bug,测试规律性不强的issue。
但是,人工测试代价比较昂贵,人员投入较大并且测试者做的是重复的劳动很容易产生精神疲劳从而导致错误的产生和测试盲点,有些问题在其他人看来很容易发现但是测试者却看不到。
![7fda615e470c87a09a5e8b9c526765ba.png](https://i-blog.csdnimg.cn/blog_migrate/d7a042da667fb52b9d8f56c58a139cb3.png)
2、哪些项目更适合手动测试?
1)定制型项目(一次性的)
为客户定制的项目,维护期由客户方承担的,甚至采用的开发语言、运行环境也是客户特别要求的,即公司在这方面的测试积累就少,这样的项目不适合作自动化化测试。
2)项目周期很短的项目
项目周期很短,测试周期很短,就不值得花精力去投资自动化测试,好不容易建立起的测试脚本,不能得到重复的利用是不现实的。
![f55e0f523807bb9af2bae2e1b0fedf30.png](https://i-blog.csdnimg.cn/blog_migrate/d27c5cda360b55e34f5bb64bfefed35d.jpeg)
3)业务规则复杂的对象
业务规则复杂的对象,有很多的逻辑关系、运算关系,工具就很难测试。
4)美观、声音、易用性测试
人的感观方面的:界面的美观、声音的体验、易用性的测试,也只有人来测试
5)测试很少运行
一个月只运行一次测试很少运行,对自动化测试就是一种浪费。自动化测试就是让它不厌其烦的、反反复复的运行才有效率。
6)软件不稳定
软件不稳定,则会由于这些不稳定因素导致自动化测试失败。只有当软件达到相对的稳定,没有界面性严重错误和中断错误才能开始自动化测试。
7)涉及物理交互
工具很难完成与物理设备的交互,比如刷卡的测试等。
二、自动测试
而自动化测试,就是借助于一些测试工具来执行测试。首先,对于一些基本的、逻辑性不强的操作可以使用自动化测试,比如现在使用自动化测试最频繁的回归测试。其次,有些测试是人工不能实现的或者实现起来成本较高的测试需要使用自动化工具,比如压力,负载测试等。
![f7a9ce86b18c60b257550a011a53fc5f.png](https://i-blog.csdnimg.cn/blog_migrate/a436248c6d3e653ddaf441293454e530.jpeg)
![7fda615e470c87a09a5e8b9c526765ba.png](https://i-blog.csdnimg.cn/blog_migrate/d7a042da667fb52b9d8f56c58a139cb3.png)
1、自动化测试的优缺点有哪些?
在日常工作中,我们经常使用到黑盒测试和白盒测试。今天,我们就将结合实例共同探讨黑盒测试的主要测试方法。话不多说,上干货!
优点:
1)程序回归测试更方便
这也是自动化测试的主要用途之一,特别是在程序修改比较频繁的时候效果非常明显。由于测试的脚本和用例都是设计好的,测试期望的结果也可以预料,将回归测试自动化可以极大的提高效率缩短回归时间。
2)模拟真实情况
可以执行手工测试困难或不可能达到的测试,比如同时并发N个用户,不可能让N个测试人员同时测试,这时使用自动化测试工具模拟多用户并发从而达到目的。
3)更好的利用资源,解放人力资源
可以让更多更繁琐的事情执行自动化测试,减少了测试的错误,同时也解脱了测试人员,使有限的人力资源可以充分利用。
4)测试的重复利用
由于自动测试通常使用的是自动化脚本技术,这样就可以只需要做较少的甚至是不修改就可以实现在不同的测试过程中使用相同的用例。
5)减少错误
由于测试的自动执行,所以不存在执行过程中的疏忽和错误,测试的质量完全取决于测试的设计。
6)测试具有一致性和可重复性。
由于测试是自动执行的,每次测试的结果和执行的内容的一致性是可以得到保障的,从而达到测试的可重复的效果。
7)增加软件信任度。
![f48dd49b477c18b013391ebdf4695e9b.png](https://i-blog.csdnimg.cn/blog_migrate/c52bf4e4fcbb7fb9e0514cd54b2ba700.jpeg)
缺点:
1、自动化测试没有思维,设计的好坏决定了测试的质量,依赖测试质量;
2、无想像力,缺少一些人性化测试:它们只能检查一些比较主要的问题,如崩溃、死机,但是却无法发现一些一般的日常错误,这些错误通过人眼很容易找到,但机器却往往找不到。
3、自动化测试发现的问题比手工测试要少的多(测试专家James Bach的经验指出:在新缺陷的发现当中,85%是靠手工测试发现的,只有15%是靠自动化测试找出来的)。
4、自动化测试软件本身就是一个产品,它在运行的时候有可能影响被测软件的性能。
5、测试设计人员的要求很高:自动化测试并不是简单的录制和回放,需要修改脚本、设计场景等。
6、不能取代手工测试:不可能期望自动测试工具完全取代所有的手工测试。例如:测试结果需要人来判断;色彩模式的适合程度、页面结构的直观效果等。
7、测试自动化不能提高有效性:只能减轻人的工作量,测试的有效性不会比人手工做得好。
8、测试自动化可能会制约软件开发:由于自动测试比手动测试更脆弱,所以维护会受到限制,从而制约软件的开发。
9、通过自动化工具测试没有发现任何缺陷,并不说明该系统不存在缺陷,测试工具只能判断实际结果和期望结果之间的差别。
![7fda615e470c87a09a5e8b9c526765ba.png](https://i-blog.csdnimg.cn/blog_migrate/d7a042da667fb52b9d8f56c58a139cb3.png)
2、哪些项目更适合自动化测试?
1)产品型项目
产品型的项目,每个项目只改进少量的功能,但每个项目必须反反复复的测试那些没有改动过的功能。这部分测试完全可以让自动化测试来承担,同时可以把新加入的功能的测试也慢慢地加入到自动化测试当中。
![bb0149a0337294b13c4751d3e9520dfe.png](https://i-blog.csdnimg.cn/blog_migrate/354aa20fdcba4b9ed99339c2fc0bfd4c.jpeg)
2)增量式开发、持续集成项目
由于这种开发模式是频繁的发布新版本进行测试,也就需要自动化测试来频繁的测试,以便把人从中解脱出来测试新的功能。
3)能够自动编译、自动发布的系统
要能够完全实现自动化测试,必须能够具有自动化编译,自动化发布系统进行测试的功能。当然,不能达到这个要求也可以在手工干预下进行自动化测试。
4)回归测试
回归测试试自动化测试的强项,它能够很好的确保你是否引入了新的缺陷,老的缺陷是否修改过来了。在某种程度上可以把自动化测试工具叫做回归测试工具。
5)多次重复、机械性动作
自动化测试最喜欢测试:多次重复、机械性动作,这样的测试对它来说从不会失败。比如要向系统输入大量的相似数据来测试压力和报表。
6)需要频繁运行测试
在一个项目中需要频繁的运行测试,测试周期按天算,就能最大限度的利用测试脚本,提高工作效率。
三、综合运用,效率更高
测试工作无论是手工测试还是自动测试都是软件质量的保障途径,两者要有效的结合才能达到更好的效果。我们要明白无论是手动还是自动化测试,都只是完成测试工作的方式,知识处理方法不同,并无优劣之分。根据我个人的工作经验,结合手动测试和自动化测试的优势,应用于同一个项目中,那么工作效率会大大提升。
![2222eb9b839bbfd3185b9fc4c7f07928.png](https://i-blog.csdnimg.cn/blog_migrate/34eae0921d56f5c4267f70d318c1d902.jpeg)
在实际工作中,如何选择测试方式,可从这几个方面考虑:技术、成本、重复度。
![7fda615e470c87a09a5e8b9c526765ba.png](https://i-blog.csdnimg.cn/blog_migrate/d7a042da667fb52b9d8f56c58a139cb3.png)
1、从技术上来说
如果项目测试条件上,自动化人充足,或者技术高,就可以多选一些Case;如果自动化刚起步,就可以选择一些简单的,重复的Case实现。
举例:
比如现在我们要做一个外包小项目,两个月就交付了,以后很可能就不再继续了,那么没有必要也没有条件去搞自动化测试了。自动化测试的前期是需要很大投资的,其中的持续维护也是一笔不小的开支。当然如果像Visual Studio这样一个产品,不仅庞大、而且保持持续更新,那就必须要做自动化的,但是自动化和手动测试不会相互取代的,所以自动化测试和手动测试皆不可少。
另外我们最好建立成本模型,来更好地权衡使用自动化测试还是手动测试,具体方法这篇论文里有详述。
![7fda615e470c87a09a5e8b9c526765ba.png](https://i-blog.csdnimg.cn/blog_migrate/d7a042da667fb52b9d8f56c58a139cb3.png)
2)从重复度上来说
重复的,稳定的,适合于自动化测试(这是判别是否用自动化的根本标准)。诸如要模拟大量用户,经过多次重复测试,或者是需要大量数据的性能测试,负载测试,压力测试等是要做自动化测试的。
![58b566137248e760a71b09f40c225f6f.png](https://i-blog.csdnimg.cn/blog_migrate/d254c7a3022a4d42e2a07e086ad62a27.jpeg)
还有我们常常用自动化测试来,监视最重要(最有价值的)的需求。用手动测试来监视一些难以自动化的测试(比如布局和可用性)。或者说,用手动测试来做发散测试。
另外一个选择手动和自动测试的角度是:如果一个东西对外部世界有影响,那么建议使用自动化测试来体现它;如果它只是内部的东西,那么没有必要用自动化测试覆盖它(手工测试必要)。
![7fda615e470c87a09a5e8b9c526765ba.png](https://i-blog.csdnimg.cn/blog_migrate/d7a042da667fb52b9d8f56c58a139cb3.png)
总之:
手动测试和自动化测试各有利弊,让我们合理运用二者,让他们无间合作来为我们的项目服务吧。
![7bb9d614b84c63c30e5d4c0dd992c13e.png](https://i-blog.csdnimg.cn/blog_migrate/65c583e6ebb525bd9d1bd8294440debe.jpeg)
对软件测试感兴趣?赶紧了解一下相关课程~