一、软件测试方法
1.1、简述
软件测试是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
软件的六个生命周期:计划,需求分析,代码设计,代码编码,测试,运行,维护
软件测试流程:需求分析,制定测试计划,编写测试用例,用例评审,执行测试,测试评估
软件测试阶段:单元测试、集成测试、系统测试、验收测试
二、分类
2.1、按设计方法分类
黑盒测试:黑盒测试是把测试对象看做一个黑盒子,利用黑盒测试法进行动态测试时,需要测试软件产品已经实现的功能是否符合功能设计要求,不需测试软件产品的内部结构和处理过程。黑盒测试注重于测试软件的功能性需求,也即黑盒测试使软件工程师派生出执行程序所有功能需求的输入条件。黑盒测试并不是白盒测试的替代品,而是用于辅助白盒测试发现其他类型的错误。
白盒测试:设计者可以看到软件系统的内部结构,并且使用软件的内部知识来指导测试数据及方法的选择。白盒测试通常被认为是单元测试与集成测试,期中有六种测试方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖。
灰盒测试:介于黑盒和白盒之间,是一种综合测试的方法,他将白盒测试和黑盒测试结合在一起,构成一种无缝测试技术。灰盒测试是基于程序运行时的外部表现又结合程序内部逻辑结构来设计测试用例,执行程序并采集程序路径执行信息和外部用户接口结果的测试技术。灰盒测试法旨在验证软件满足外部指标以及软件的所有通道或路径都进行了检验。
2.2、按自动或手动分类
手工测试:测试人员用鼠标去手动测试,手工测试更容易发现软件的缺陷。
自动测试:用程序测试软件系统功能,由测试人员根据手工测试用例来决定自动化测试的测试用例,再编写程序或者脚本来替代手工做自动化测试。
对于项目来说, 手动测试和自动化测试同等重要,都是保障软件质量的方法。目前大部分的项目组都是手动测试和自动化测试相结合。因为很多测试无法做成自动化,很多复杂的业务逻辑也很难自动化, 所以自动化测试无法取代手动测试。总的来说,手工测试胜在测试业务逻辑,而自动化测试胜在测试底层架构。如果被测试的程序可测试性比较好,能做自动化的尽量做成自动化。
2.3、按目的分类
功能测试:测试的范围从小到大,从内到外, 从程序开发人员(单元测试)到测试人员,到一般用户Alpha/Beta测试。
- Unit Test 单元测试:在最低的功能/参数上验证程序的准确性,比如测试一个函数的正确性(开发人员做的)
- Functional Test 功能测试:验证模块的功能 (测试人员做的)
- Integration Test 集成测试:验证几个互相有依赖关系的模块的功能 (测试人员做的)
- Scenario Test 场景测试:验证几个模块是否能完成一个用户场景 (测试人员做的)
- System Test 系统测试:对于整个系统功能的测试 (测试人员做的)
- Alpha 测试:软件测试人员在真实用户环境中对软件进行全面的测试 (测试人员做的)
- Beta 测试:真实的用户在真实的用户环境中进行的测试, 也叫公测 (最终用户做的)
非功能测试:一个软件除了基本功能之外,还有很多功能之外的特性,这些叫“Quality of Service requirement”服务质量需求。没有软件的功能,这些特性都无从表现出来,因此,我们要在软件开发的适当阶段-基本功能完成后做这些测试。
- Stress test 压力测试:验证软件在超过负载设计的情况下仍能返回正确的结果,没有崩溃
- Load test 负载测试:测试软件在负载情况下能否正常工作
- Performance test性能测试:测试软件的效能,是否提供满意的服务质量
- Accessibility test:软件辅助功能测试-测试软件是否向残疾用户提供足够的辅助功能
- Localization/Globalization:本地化/全球化测试
- Compatibility Test:兼容性测试
- Configuration Test:配置测试-测试软件在各种配置下能否正常工作
- Usability Test:可用性测试–测试软件是否好用
- Security Test:软件安全性测试
性能测试:性能测试要求测试人员熟练性能测试工具,比如QTP, LoadRunner, Jmeter。要求测试人员对低层协议非常理解和编写脚本。
安全性测试:安全性测试的内容很广,要求高。 比如有XSS(跨站脚本攻击)、SQL注入攻击等等。
2.4、按阶段分类
单元测试:是指对软件中的最小可测试单元进行检查和验证。桩模块(stud)是指模拟被测模块所调用的模块,驱动模块(driver)是指模拟被测模块的上级模块,驱动模块用来接收测试数据,启动被测模块并输出结果。
集成测试:是单元测试的下一阶段,是指将通过测试的单元模块组装成系统或子系统,再进行测试,重点测试不同模块的接口部门。集成测试就是用来检查各个单元模块结合到一起能否协同配合,正常运行。
系统测试:指的是将整个软件系统看做一个整体进行测试,包括对功能、性能,以及软件所运行的软硬件环境进行测试。系统测试的主要依据是《系统需求规格说明书》文档。
验收测试:指的是在系统测试的后期,以用户测试为主,或有测试人员等质量保障人员共同参与的测试,它也是软件正式交给用户使用的最后一道工序。 验收测试又分为a测试和beta测试,其中a测试指的是由用户、 测试人员、开发人员等共同参与的内部测试,而beta测试指的是内测后的公测,即完全交给最终用户测试。
2.5、按作用分类
冒烟测试:针对每个版本或每次需求变更后,在正式测试前,对产品或系统的一次简单的验证性测试。
BVT测试:验证构建是否通过基本测试。这是一种冒烟测试, 指Build生成好之后,自动运行的自动化测试脚本来检查这个Build的基本功能。
验收测试:为了全面考核某功能/特性而做的测试。
2.5、按策略分类
回归测试:对一个新的版本,重新运行以往的测试用例,看看新版本和已知的版本相比是否有退化。
探索性测试:随机进行的,探索性的测试。
粗略测试: 只需要执行部分的测试用例(比如很多Web网页,确定比较重要以及常用的URL链接是活着的,能正常打开返回数据)
2.6、其他测试类型
回归测试:指对软件的新的版本测试时,重复执行上一个版本测试时的用例。是指对软件的新的版本测试时,重复执行上一个版本测试时的用例。
随机测试:指测试中所有的输入数据都是随机生成的,其目的是模拟用户的真实操作,并发现一些边缘性的错误。
三、测试设计案例
实际项目测试中,当前我们的项目将测试内容分为功能测试,兼容性测试,性能测试,稳定性测试四项,分别在不同的测试阶段进行(具体排期在测试计划时确定):
(1)、功能测试 —— 版本测试阶段
(2)、兼容性测试 —— 回归测试阶段前期
(3)、性能测试 —— 回归测试阶段,版本功能稳定后执行
(4)、稳定性测试 —— 贯穿整个测试阶段,每晚执行
参考文献
[1].https://www.cnblogs.com/zhuminghui/p/10788968.html
[2].https://www.cnblogs.com/Ming8006/p/5798186.html
[3].https://www.jianshu.com/p/3e5fa338aec7