软件测试基础理论(重点)
一、软件的开发阶段划分
1、需求分析阶段
由需求分析人员完成
《需求规格说明书》
2、概要设计阶段
3、详细设计阶段
由系统架构师(分析师)完成
《概要设计说明书》、《详细设计说明书》
4、编码阶段
由开发人员完成
程序
问题:哪个阶段产生的bug最多?哪个阶段最少?
需求分析阶段引入的bug最多,其次是设计阶段,编码阶段引入的bug最少。
由此得出结论:测试时文档和程序都必须要测;测试工作应该要尽早介入,并且要贯穿整个开发周期始终(尽早测试原则,不断测试原则)
二、软件测试的阶段划分
说明:这四个阶段中没有涵盖文档测试部分的内容。
1、单元测试
1)单元测试是最小的测试单位,通常1个方法(函数)、窗口、功能模块、类等都可以是一个测试单元。
2)单元测试的主要依据是详细设计文档。
3)单元测试阶段主要采用白盒测试方法。(也有可能要辅助以黑盒测试的方法)
4)在企业的实际应用中,单元测试通常由程序员完成,这样可以节省成本,但是测试质量得不到保证,所以企业通常会采用交换测试,两轮测试(程序员1轮(白盒),测试人员第2轮(黑盒))的方式来加强单元测试的质量。
5)桩模块和驱动模块
在单元测试中,有可能要求测试者编写“桩模块”和“驱动模块”
驱动模块:模拟被测模块的上一级模块(调用被测模块)
桩模块:模拟被测模块的下一级模块(被“被测模块”调用)
驱动模块-->被测模块-->桩模块
2、集成测试(组装测试)
1)集成测试也叫组装测试,是在单元测试的基础上,将模块逐步组装的测试过程。
2)在集成测试阶段,功能模块要逐步组装形成多个临时版本。
3)集成测试阶段参考概要设计文档
4)集成测试阶段主要采用黑盒测试的测试方法,重点、难点、核心模块会辅助以白盒测试方法。
5)冒烟测试
当测试方拿到一个新的软件版本时,一般会先做“冒烟测试”(版本验证测试):使用较少的测试人员(1-3人,经验丰富),花费较少的时间(0.5-3天),对软件版本中的核心功能进行测试(一般不写用例),如果核心功能没有问题,全组再展开全面测试;如果核心功能问题较多,版本不稳定,就将该版本软件返回开发组。
6)集成测试阶段,当测试组拿到一个新的软件版本后,工作的思路:
首先:冒烟测试--确认测试组是否接受测试该版本。
接下来:
返测--对于已修复的缺陷,进行测试--确认缺陷是否修复成功!
回归测试--对于上一个版本测过的功能,再测试一遍。
最后:该版本中新功能的测试。(但是有的版本是专门用来修复bug的,没有新功能)
说明:在实际工作中,不一定工作思路中的内容都要做,要具体情况,具体分析。
3、系统测试
1)在功能全部完成后,对于集成了硬件和软件的完整系统进行的模拟真实环境的全面测试。
2)系统测试阶段的测试重点:(1)整个系统的正确性(2)系统的兼容性
3)系统测试阶段参考需求文档
4)系统测试阶段采用黑盒测试方法
5)确认测试:在系统测试之前,一般会安排一次“确认测试”,主要确认:
(1)软件是否可以进入全部的系统测试中。
(2)软件的相关文档是否准备齐全(尤其是交付给用户的和参与认证的)
说明:确认测试一般时间较短,参与人员较少,所以一般不把确认测试与单元、集成、系统、验收测试所并列。
4、验收测试
UAT:User Acceptance Testing 用户接受度测试
1)验收测试理论上是由用户参与的软件检查过程。
2)验收测试阶段分成两个小阶段:
(1)alpha测试
在软件公司的指定环境中(在软件公司的指定环境中,会是软件研发方对bug有更强的控制力),由用户对软件进行检查。(一般经常由软件公司替代用户进行验收,也有可能请第三方公司验收。)
(2)beta测试
在用户的实际环境中(此时软件公司对缺陷的控制力明显减弱),由最终用户对软件进行检查的过程。
例如:公共类软件的beta测试
公共类软件(输入法、QQ、os等)将软件免费发放给最终用户,收集用户在使用软件中发现的问题(bug)。
三、软件测试模型
1、软件测试模型可以表明软件的开发阶段和测试阶段(级别)的对应关系。测试模型有:v模型,w模型,H模型等
2、v模型(常见面试题)
1)会画--v模型
2)v模型的优点和缺点
(a)优点:
(1)v模型中开发阶段和测试阶段(级别)划分清楚,并且开发阶段和测试阶段(级别)的对应关系也清晰明确。
(2)v模型中既包含了单元测试(专业级、代码级),又包含了验收测试(用户级)。
(b)v模型缺点:
v模型中缺少软件开发前期需求和设计阶段的测试内容,不能体现出文档和程序都需要测试的内容,不符合尽早测试原则和不断测试原则,让人产生测试只是开发完成后的收尾工作的错觉。(测试和开发应该是同步的工作过程)
3、w模型
1)w模型可以被看成是双v模型,第一个v是开发活动,第二个v是测试活动
2)w模型的特点:w模型包含了需求和设计阶段的测试内容,体现了文档测试,并且符合尽早测试和不断测试原则。体现出开发和测试是同步进行的。
四、软件测试分类
1、按测试技术分类
1)黑盒测试:又称为功能测试,是不考虑程序内部结构特征,只考虑输入数据和输出的情况下进行的功能的测试。
2)白盒测试:又称为结构测试,只考虑程序内部结构,而不考虑程序功能的测试。
3)灰盒测试:是结合和黑盒测试和白盒测试的要素,对软件进行测试。一般先做黑盒测试,发现缺陷,再通过白盒测试对缺陷进行进一步的调查。(在集成测试阶段中经常采用灰盒测试)
扩展:白盒测试说明
1)白盒测试测试质量较高,白盒测试成本较高,白盒测试效率较低。
2)白盒测试一般是对风险较大,难度较大的核心模块进行补充测试。
3)白盒测试人员要懂代码,白盒测试也需要编写测试用例。
2、按是否需要运行代码进行分类
1)动态测试:需要使程序运行起来,进行的测试
例如:通常功能测试都是动态测试。
2)静态测试:不需要运行程序就可以进行的测试
例如:
文档测试
部分界面测试
(静态)代码测试:检查代码是否符合相应的标准和规范。
白盒测试有可能是静态测试,也有可能是动态测试。
面试问题:白盒测试和(静态)代码测试的区别?
白盒测试主要关注的是代码的逻辑实现,测试者必须要懂代码,白盒测试要求写用例。
代码测试主要关注代码的规范和标准,测试者不需要懂代码,不需要编写用例,只需要对照代码检查单进行代码检查即可。
3、按软件的特性分类:
1)功能测试
(1)任何软件必须要先做功能测试,保证其功能正确。
(2)功能测试既可以手工测试,也可以自动化测试(工具:QTP,selenium)
2)性能测试
(1)分布式软件(C/S,B/S)需要进行性能测试。
(2)性能测试必须要借助工具,通过自动化的方式实现。(loadRunner,Jmeter)
4、其它(名词)
1)返测:对程序员修改的缺陷进行测试,验证缺陷是否被修复。
2)回归测试:对上个版本中的所有功能重新测试一遍;验证在新版本中,程序原有的功能是否依然正常;回归测试中存在大量的重复性工作(重复执行用例),所以可以使用自动化测试来提高回归测试的效率。
3)随机测试(猴子测试):
在测试用例执行完成后,对软件进行的随意测试的过程。随机测试只是时间允许时,对正常测试用例之外的补充。
4)兼容测试:
兼容测试指所设计的软件与硬件、软件之间的兼容性测试,兼容性测试主要分成3大类:
(1)与硬件兼容
与整机兼容
与外设兼容
(2)与软件兼容
与操作系统兼容
与其他应用软件兼容
与浏览器兼容
与数据库兼容
(3)数据兼容
指软件的不同版本之间的数据兼容。
5)功能测试方法的测试策略
等价类划分+边界值
因果图、判定表、正交排列法
测试大纲法
场景法
回答的思路:将每个(每组)测试方法的应用场合和特征回答清楚。
最后强调:在测试时一个功能可能需要2-4种测试方法综合应用进行测试。
6)软件项目的测试流程(步骤)?
(1)需求分析
(2)制定测试计划
(3)测试的设计
(4)执行测试,记录测试结果(对测试结果的分析和记录)
(5)记录缺陷,跟踪和管理缺陷
(6)测试总结(报告)