软件测试的定义和目的
什么是软件测试?
其实,目前没有公认非常完整的定义形式。经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
软件测试是一个过程,包含若干活动,运行软件进行测试只是活动之一。
进行软件测试可以用人工方式也可以借助于工具,可以运行软件也可以不运行软件
软件测试的目的:
人们对软件测试目的的认识经历了如图下一个过程:
• 软件测试的目的不仅仅是为了发现错误,还可以预防或减少可能制造错误的信息。
软件的诞生
其实,软件也是有生命周期的:
计划→需求分析→设计→编码→测试→验收→上线→运行与维护
1)计划的工作内容:接到一个项目,要先确定软件开发总目标,给出软件的功能、性能、可靠性以及接口等方面的设想;研究完成该项目的可行性,探讨问题解决方案;对可供开发使用的资源、成本、可取得的效益和开发进度作出估计;最后制定完成开发任务的实施计划。
2)需求分析的工作内容:对开发的软件进行详细的定义,由需求分析人员和用户共同讨论决定,哪些需求是可以满足的,并且给予确切的描述,写出软件需求说明书SRS (Software Requirement Specification)。
3)设计的工作内容:设计是软件工程的技术核心,这个阶段需要完成设计说明书。①概要设计(HLD),在设计阶段把各项需求转换成相应的体系结构,每一部分是功能明确的模块;②详细设计(LLD),对每个模块要完成的工作进行具体的描述。
4)编码的工作内容:把软件设计转换成计算机可以接受的程序,即写成以某个程序设计语言表示的源程序清单,使用RDBMS工具建立数据库(常用的数据库软件有Oracle、SQL Server等)。
5)测试的工作内容:测试是检验软件是否符合客户需求,达到质量要求,一般由独立的小组执行,测试工作分为:单元测试、 集成测试、 系统测试。
6)运行与维护的工作的内容:这个阶段将软件交付用户投入正式使用,以后便进入维护阶段,可能有多种原因需要对它进行修改,如软件错误、系统软件升级、增强软件功能、提高性能等。
软件质量
质量的定义:ISO对质量的定义为一个实体的所有特性,基于这些特性可以满足明显的或隐含的需求。而质量就是实体基于这些实体特性满足需求的程度。
①提供一个评估标准
②提供测试方向、测试思路
质量的层次:
1) 符合需求规格:符合开发者明确定义的目标,即产品是不是在做让它做的事情。目标是开发者定义的,并且是可以验证的;
2)符合用户显式需求:符合用户所明确说明的目标。目标是客户所定义的,符合目标即判断我们是不是在做我们需要做的事情;
3) 符合用户实际需求:实际的需求包括用户明确说明的和隐含的需求。
质量铁三角(影响质量的因素):
①组织 ②技术 ③流程
软件质量模型
(1)功能性:①适合性 ②准确性 ③互操作性 ④保密安全性
(2)可靠性:①成熟性(很好处理内部错误) ②容错性(很好处理外部错误) ③易恢复性(异常退出提示恢复)
(3)易用性:①易理解性 ②易学性 ③易操作性(菜单级数3级以内) ④吸引性(界面等)
(4)效率:①时间特效(响应时间,358原则:3秒等待为良好,5秒等待可接受,8秒等待不能忍受) ②资源利用性(CPU、内存占用等)
(5)可移植性:①适应性(兼容性) ②易安装性(不同电脑安装) ③共存性(如360与QQ电脑管家) ④易替换性(升级、降级)
(6)维护性(内部质量):①易分析性 ②易改变性 ③稳定性 ④易测试性
软件质量管理体系:
1、ISO9000
2、CMM:软件能力成熟度模型
1) 初始级 Initial:不可预测并且缺乏控制(不用评,都是初始级)
2)可重复级Repeatable:可重复以前的主要经验
3)已定义级 Defined:过程被描述,并得到良好理解
4)已管理级 Managed:过程被测量并受控
5)优化级 Optimizing:关注过程改进
CMM模型概要:(如下图)
软件项目组成人员:
1)需求分析人员
2)设计人员
3)开发人员
4)测试人员
5)配置管理人员(职责是配置项的管理、部署环境)
6)软件质量保障人员(SQA,即质量保障人员QA,软件software)
区别一下质量保障人员(QA)与测试工程师(TE)有什么不同:
①目的不同:QA主要是预防缺陷的,TE是发现缺陷的
②工作内容不同:QA的职责是预防缺陷、制定规范;监督项目组成人员;评审测试成果;而TE是比较预期与实际结果,找bug
软件研发模型
这里主要讲比较有对比性的两种:瀑布模型与敏捷开发模型
(1)瀑布模型
瀑布模型是将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工作,形如瀑布流水,最终得到软件产品。
优点:质量高、bug少
缺点:时间长、工作量大、早期的错误可能要等到开发后期的测试阶段才能发现,如需求分析时易出bug
适合研发航空航天软件等,大部分公司得考虑成本与利益,一般都是敏捷开发模型
(2)敏捷开发模型(scrum)
敏捷是一种相对于“非敏捷”的新型软件开发方法。
有迭代周期,一般2~4周迭代一次
优点:开发周期短、早期易于发现问题
缺点:需求常改、编程常改、易出bug
软件测试的原则:
(1)尽早启动测试工作
(2)所有得测试都应追溯到用户需求
(3)穷尽测试是不可能的
(4)测试是有风险的
(5)测试应由独立的第三方进行(甲方用户方,乙方开发方)
(6)并非所有的缺陷都值得修复(有些可延迟处理)
(7)群集效应(bug扎堆)
(8)帕累托法则(28法则,即80%的bug存在于20%的业务核心中)
(9)good-enough:既不做过分的测试,也不做不充分的测试
(10)杀虫剂怪事(测试方法不能固定,下次使用可能会找不到bug了)
(11)前进两步,后退一步(回归测试)
eg:V1.00 有5000条用例,500条执行失败,4500条通过
发布V2.00后:①验证500个bug修复是否正确 ②新功能测试 ③重复测试(4500条重新测试)
软件缺陷和Bug:
软件缺陷:既指静态存在于软件工作产品(文档、代码)中的错误,也指软件运行时由于这些错误被激发引起的和软件产品预期属性的偏离现象。
Bug:代码中的缺陷。有时也被泛指因软件产品内部的缺陷引起的软件产品最终运行时和预期属性的偏离。
在实际工作中可以认为软件错误、软件缺陷、Bug是一样的。
引入缺陷的原因:
(1)需求:60%(描述不完善),缺陷的根源
(2)设计:20%
(3)编码:15%
(4)其他:5%
常见的引入缺陷的原因:
• 开发过程缺乏有效的沟通,或者没有进行沟通
• 软件复杂度越来越高
• 编程中产生错误
• 需求不断变更
• 项目进度的压力
• 不重视开发文档
• 软件开发工具本身隐藏的问题
所有缺陷可以归结为三类:
1)遗漏:规定的或预期的需求未体现在产品中(可能未将规格说明全面实现,也可能需求分析阶段就遗漏了需求)
2)错误:未将规格说明正确实现(可能设计错误、也可能编码错误)
3)额外的实现:规格说明并未规定的需求被纳入产品,得到实现
测试方法
1、根据是否关注程序内部结构来划分:
(1)白盒测试(需要看懂代码)
(2)黑盒测试(不用看代码)
(3)灰盒测试(介于白盒、黑盒之间)
2、根据是否动态运行软件来划分:
(1)动态测试
(2)静态测试
3、根据是否使用自动化测试工具来划分:
(1)手工测试
(2)自动化测试
测试过程
1、测试阶段
(1)单元测试
a、测试对象:最小单位,函数或类
b、测试方法:白盒测试
c、测试依据:详细设计说明书
d、评估基准:逻辑覆盖
(2)集成测试
a、测试对象:接口、组装后的功能
b、测试方法:灰盒测试
c、测试依据:概要设计说明书
d、评估基准:接口覆盖
(3)系统测试
a、测试对象:整个系统的功能及非功能
b、测试方法:黑盒测试
c、测试依据:需求规格说明书(SRS)
d、评估基准:需求覆盖
(4)验收测试(用户体验测试UAT)
①α测试:用户参与测试,开发场地执行测试,有技术人员指导
②β测试:用户参与测试,用户环境场地执行测试,无技术人员指导
2、回归测试
在测试或其他活动中发现的缺陷经过修改后,应该进行回归测试。目的是验证缺陷得到了正确的修复,同时对系统的变更没有影响以前的功能。
回归测试可以发生在任何一个阶段,包括单元测试、集成测试、系统测试。
回归测试策略:
(1)完全重复测试
(2)选择性重复测试:①覆盖修改法 ②周边影响法 ③指标达成方法
3、测试流程
(1)测试计划阶段:测什么?(测试计划)
(2)测试设计阶段 :怎么测?( 测试方案)
(3)测试实现阶段:细化测试点(测试用例文档)
(4)测试执行阶段 :执行用例
(5)测试总结
4、软件测试模型
1、V模型(如下图)
2、W模型(如下图)
5、系统测试的测试类型
a、测试对象:整个系统的功能及非功能
b、测试方法:黑盒测试
c、测试依据:需求规格说明书(SRS)
d、评估基准:需求覆盖
e、测试类型
①功能测试 ②性能测试 ③界面测试(UI测试) ④兼容测试 ⑤安全测试
⑥可靠性测试 ⑦稳定性测试 ⑧易用性测试
⑨压力测试(服务器的压力或超过预期不断加压,挑战极限)
⑩负载测试(达到预期不断加压的过程,见好就收)
⑪文档测试(需求、设计等文档) ⑫接口测试(第三方接口)
⑬容量测试(占用空间) ⑭安装测试(单机版、C/S) ⑮升级测试 ⑯卸载测试
6、系统测试执行过程
(1)构造系统测试环境
(2)系统测试预测试(冒烟测试)
(3)转系统测试评审(通过与否,需开会决定)
(4)执行系统测试,进行系统测试记录,填写测试日报
(5)提交缺陷报告,并反馈并跟踪缺陷解决,进行缺陷管理
(6)撰写并评审系统测试总结报告
软件测试的职业规划:
(1)管理路线
测试工程师→测试组长→测试经理→测试总监→项目经理
(2)技术路线
A、手工功能测试(黑盒):初级测试工程师→中级测试工程师→高级测试工程师
B、自动化测试(功能):初级测试工程师→中级测试工程师→高级测试工程师
C、性能测试
D、白盒测试