软件测试定义:
通过手工或者工具对“被测对象”进行测试操作,从而验证实际结果与预期结果是否存在差异
软件测试的作用:
通过测试软件可以发现并修复软件中存在的缺陷,从而提高用户对产品的使用信心。测试可以记录软件运行过程中产生的一些数据,从而为决策提供数据支持。测试可以降低同类产品开发遇到问题的风险
软件测试的七个原则:
我们在执行测试工作时必须要遵守的一些规则
**1.测试显示软件存在缺陷(Testing shows presence of defects)**测试只能证明软件中存在缺陷,但不能证明软件中不存在缺陷
2.穷尽测试是不可能的(Exhaustive testing is impossible) 随着软件规模越来越大,复杂度越来越高,想做到完全性的测试是不可能的。在测试阶段,测试人员可以根据风险和优先级来进行集中和高强度的测试
3.测试尽早介入(Testing early) 保证软件质量、降低风险和成本。缺陷发现的越早修复的成本就越小
4.缺陷集群性(2/8原则)Defect clustering 缺陷集群性表明小部分模块包括大部分的缺陷。帕累托原则:80%缺陷发生在20%的模块中
**5.杀虫剂悖论(Pesticide Paradox)**如果一直使用相同的测试方法或手段,可能无法发现新的bug。为了解决这个问题,测试用例应当定期修订和评审,增加心底的或不同的测试用例帮助发现更多缺陷
**6.测试活动依赖于测试内容(Testing is context dependent)**不同行业测试活动的开展都有所不同,如测试技术、测试工具的选择,测试流程都不尽相同,所以测试软件的活动开展依赖于所测试的内容
7.没有错误是好事谬论(Absence of error - fallacy) 有可能99%没有bug的软件也是不能使用的。软件测试不仅是找出缺陷,同时也需要确认软件是否满足需求
软件测试不仅是找出缺陷 同时也需要确认软件是否满足需求
测试对象
将软件分为三个部分组成:功能集合+使用说明+配置数据
**1.需求分析阶段:**各种要求规格说明。
**2.软件架构设计:**API接口文档(接口测试)
**3.编码实现阶段:**源代码(白盒测试、单元测试)
**4.系统功能使用:**软件功能主体(当前行业做的最多的一种测试)
测试级别:
软件的开发都会依据相应的开发模式,而测试级别指的就是在这个模型中的人为开发步骤
1.单元测试(UT unit test)
在软件测试中单元指的就是组成软件最小的底层代码结构,一般就是类、函数、组件
2.集成测试(IT system ingertaion test)
将多个单元模块组合在一起,然后验证他们之间 沟通的“桥梁”是否能正常工作(接口测试)
3.系统测试(ST system test)
当前行业做的最多的一种测试。由测试人员充当用户然后对软件的功能进行测试。
4.验收测试
(1)α(alpha)测试—>内测
(2)β(beta)测试—>公测
(3)UAT(user acceptance test)—>由客户派出对于业务非常精通的人员来使用该软件,从而对功能进行测试
(4)验收测试的核心就是让用户为当前软件“买单”
系统测试分类
**1.功能测试:**验证当前的软件主体功能是否可用
**2.兼容性测试:**验证当前软件主体功能是否可用
**3.安全测试:**验证软件是否只是能授权用户提供功能使用
**4.性能测试:**相对于当前软件消耗的资源,它的产出能力
常见的系统测试方法
1.按测试对象进行分类
(1)白盒测试:这种测试的主体就是软件底层代码,不在意外在的界面是否ok,只要求底层功能实现,同时逻辑正确
(2)黑盒测试:这种测试就是指测试软件外在主体功能是否可用
(3)灰盒测试:介于两者之间(接口测试)
(4)注意:上述三种方法当中的“盒”指的就是被测对象 (也就是我们所说的软件)
2.按测试对象是否执行分类
(1)静态测试:测试对象不执行。(一般测文档、纯界面静态展示性质)。
(2)动态测试:将软件运行在真是的使用环境中进行测试。
3.按测试手段进行分类
(1)手工测试:由测试人员手动的对被测对象进行验证,优点是可灵活的改变测试操作及环境
(2)自动化测试:所谓自动化主要有两种形式,一种是自己写脚本测试,另一种是通过第三方工具对被测消费对象进行测试。优点就是可以高效率的去执行一些人工无法实现的操作。
软件质量特性
描述当前软件是否好用,在当前的软件行业里我们采用的一套标准是基于ISO这个组织制定的
**1.功能性:**软件需要满足用户显式或者隐式功能
**2.易用性:**软件易于学习和上手使用
**3.可靠性:**指的就是软件必须实现需求当中指明的具体功能
**4.效率性:**类似于软件的性能
**5.可维护性:**要求软件具有将某个功能修复之后继续使用的能力
**6.可移植性:**当前软件可以从一个平台上移植到另一个平台上去使用的功能
软件测试流程
1.需求分析
(1)当前阶段的核心目的就是梳理清楚我们需要涉及的点是什么
(2)需求的来源:需求规格说明书、API文档、竞品分析、个人经验
2.设计用例
(1)用例就是用户为了测试软件的某个功能而执行的操作过程
(2)设计用例是有方法的(等价类、边界值、判定表)
3.评审用例
对当前的用例进行添加或删除
4.配置环境
(1)环境:指的就是当前被测试对象运行所需要的执行环境,作为测试人员需要具备环境的能力(一般情况下使用一键安装的集成环境)
(2)环境分类:操作系统+服务器软件+数据库+软件底层代码的执行环境
5.执行用例
(1)一般在执行用例之前我们会做一个冒烟测试。这种测试的核心就是快速的对当前软件的核心功能或者主体执行流程进行验证。如果冒烟测试阶段有问题,则可以将此版本回退给开发
(2)如果冒烟测试通过,那么才会开展全面的测试
6.回归测试及缺陷跟踪
(1)回归测试:是指的就是当我们将某个缺陷提交给开发之后,由他们进行修复,修复完成之后需要v测试人员再次进行测试
(2)缺陷跟踪:指的就是当测试人员发现某个缺陷之后 需要一直对其进行状态跟踪
7.输出测试报告
将当前的测试过程中产生的数据进行可视化的输出,方便其他人查看
8.测试结束
将整个测试过程中产生的一些文档进行整理归档,方便后续调用