一、软件项目的开发阶段划分
1、软件开发的阶段划分
(1)需求分析阶段--《需求规格说明书》
(2)概要设计阶段--《概要设计说明书》
(3)详细设计阶段--《详细设计说明书》
(4)编码阶段--程序
2、问题:哪个阶段引入的bug最多?哪个阶段最少?对测试有什么影响?
需求分析阶段引入bug最多,其次是设计阶段,引入bug最少的是编码阶段
由此可以得出结论:
1)需求和设计阶段也要测试,不能只测试程序,文档也必须要测
2)测试应符合“尽早测试原则”和“不断测试原则”
二、软件测试的阶段划分
说明:需求和设计阶段的测试内容没有涵盖在这4个阶段中,涵盖的是从编码之后的阶段
1、单元测试
(1)单元测试是最小的测试单位,例如测试一个窗口、方法、函数,功能模块、类等
(2)单元测试主要依据:详细设计的说明文档
(3)单元测试理论上应采用:白盒测试方法
实际:专业测试人员用白盒测试方法做单元测试成本较高,为了降低成本,公司常用开发人员进行单元测试(白盒),为了保证单元测试的质量,公司常会采用:交叉互测,还有开发人员测试1轮(白);测试人员再测1轮(黑盒)的方式
(4)驱动模块和桩模块
背景:在单元测试阶段,测试者可能需要编写驱动模块或桩模块
驱动模块:就是模拟被测模块的上一级模块(调用被测模块的)
桩模块:就是模拟被测模块的下一级模块(被“被测模块”调用的)
总结:驱动模块->被测模块->桩模块
2、集成测试
(1)集成测试也叫组装测试,是在单元测试的基础上,将功能模块逐步有序的合并起来的测试过程
(2)集成测试阶段,功能模块是逐步合并起来的,不是一蹴而就的,这就会形成若干的临时版本
(3)集成测试阶段主要依据:概要设计说明文档
(4)集成测试阶段的测试方法是黑盒结合白盒测试(核心功能、重点模块会辅助以白盒测试)--灰盒
(5)冒烟测试<smoke test>
说明:当开发团队提测(提交一个版本给测试进行测试)新版本时,测试方通常会对该版本展开冒烟测试。
冒烟测试:就是组织较少的人(1-3人,业务熟练,经验丰富),花费较少的时间(0.5-2天),对提测版本的主要功能展开快速测试,如果主要业务可以实现,就接受该版本,全测试组展开全面测试:如果主要业务都无法实现,版本不稳定,就拒绝该版本,打回开发组。
(6)在集成测试阶段,如果测试团队接到开发方提测的新版本,通常的工作思路是:
首先:冒烟测试,验证是否接受该版本,展开全面测试
接下来--回归测试
返测
最后--如果提测版本中有新增功能,要重点对新增功能展开测试(说明:有的版本可能是修复版本,没有新增功能)
3、系统测试
(1)系统测试:是在软件组装完成的基础上,将包含硬件和软件的完整系统,在模拟真实的环境中测试的过程
(2)系统测试的两个重点/要点:
1)就是完整系统在模拟真实的环境中是否全面满足需求规格说明书的要求
2)就是完整系统中,硬件和软件以及软件之间的兼容性测试
(3)系统测试主要依据:需求规格说明书
(4)系统测试阶段的测试方法就是黑盒测试
(5)补充:确认测试
在系统测试之前,通常会进行确认测试,主要确认两个内容
1)确认组装完成的软件是否可以进入全面的模拟测试真实环境的系统测试
2)确认相关的文档,尤其是要交付给用户的文档,是否准备齐全
提示:由于确认测试相对参与人员较少、时间较短,所以没有将其与单元、集成、系统、验收测试阶段并列
4、验收测试(UAT)
UAT-user acceptance test-用户接受度测试
(1)验收测试是以用户为主体检查软件质量的过程,通常用户会使用自己的真实数据,按照自己使用软件的习惯进行操作(非专业),测试人员如果有需要可以从旁配合、帮助
(2)验收测试分为两个小阶段
1)alpha(α)测试
Alpha测试要在软件公司指定的环境中进行,这样公司对发现的bug控制力更强
Alpha测试理论上应该由最终用户亲自到场进行检查,但是实际情况用户可能无法到场,这种情况通常由公司的测试人员代替用户进行,或者由用户请第三方测试机构代替自己进行
2)beta(β)测试
在用户的真实使用环境中,由用户亲自进行beta检查(软件公司很难获取bug的信息)
例:公共类软件(游戏、浏览器、输入法、os等)的beta测试
将beta版软件免费发放给用户,通过收集用户在使用过程中遇到的问题来获取bug信息
三、软件测试的模型
1、概念
可以表示开发阶段和测试阶段(级别)之间的对应关系,最常用的是V模型,此外还有W模型、X模型、H模型等
2、V模型(常考)
(1)会画V模型
(2)V模型的优点
1)开发阶段和测试阶段(级别)划分清晰明确
2)开发阶段和测试阶段(级别)之间的对应关系也是清晰明确的
3)V模型中既包括了测试最低级别的单元测试(专业级、代码级),又包括了测试最高级别的验收测试(用户级、界面级)涵盖比较全面
(3)V模型的缺点
1)缺少需求和设计阶段的测试内容,容易造成误解,测试只是编码之后的收尾工作
2)V模型不符合尽早测试和不断测试的原则
3、W模型(了解)
(1)W模型其实是双V模型、第一个V是完整的开发活动,第二个V是完整的测试活动
(2)W模型的特点:加入了需求和设计阶段的测试活动,使测试和开发阶段看起来是同步并行的
W模型符合尽早测试原则和不断测试原则
四、软件测试的分类
1、按测试技术划分
(1)黑盒测试:也叫功能测试,就是把程序看作是黑色盒子,在不考虑程序内部结构和内部特性的情况下,检查程序功能是否按照需求规格说明书的规定正常使用。
(2)白盒测试:也叫结构测试,就是将程序看成是透明盒子,要求全面了解程序内部逻辑结构,对所有的逻辑路径进行检测。
补充白盒测试:
1)白盒测试的测试质量较高,但是效率低成本高
2)白盒测试要求测试者至少要能读懂代码(代码能力越强越好),也需要白盒测试的方法(例:代码检查法、逻辑覆盖法、静态结构分析法等),也需要编写测试用例。
(3)灰盒测试:结合黑盒测试和白盒测试的要素,对软件进行测试,常在集成测试阶段采用
2、按是否需要运行程序划分
(1)动态测试:就是需要运行程序才能进行测试,例:功能/黑盒测试
注意:白盒测试有时是静态测试,也有时是动态测试
(2)静态测试:就是不需要运行程序,就可以进行测试
例:文档测试、界面测试、静态代码测试(对代码的格式标准、规范进行检查)
问题:白盒测试和静态代码测试的区别?
白盒测试:测试的是程序的内部逻辑实现,要求测试者读懂代码,会白盒测试方法,能够编写用例;
静态代码测试:测试的是代码的规范性和标准性,测试者不需要懂代码,也不需要写用例,只需要按照代码检查单对照检查即可。
3、功能测试和性能测试
功能测试:所有的软件都需要进行功能测试,而且需要先保证功能正确,再考虑其它。
功能测试既可以手工实现,也可以自动化实现,自动化功能测试主要依赖工具,常用的功能自动化测试工具有:selenium、appium、qtp(惠普公司)等
性能测试:不是所有软件都需要进行性能测试,通常分布式软件(C/S,B/S)需要进行性能测试。
性能测试不能手工实现,必须要依赖性能测试工具,常用的性能测试工具有:loadrunner(HP,收费)、Jmeter(常用)等
4、其它
(1)返测:对开发人员已解决的bug进行测试,以验证bug是否被修复
(2)回归测试:在当前版本中,对上个版本中测过的功能再重新测试一遍。用以验证当前版本中的原有功能是否依然正常,是否出现了新的问题。
(3)随机测试(猴子测试)
就是在常规测试用例执行完成后,可以随意测试的过程,随机测试只能是常规测试之外的补充测试方式
(4)兼容性测试
所测软件与硬件和其他软件之间的兼容性的测试,兼容性测试主要分为3类:
1)与硬件兼容
与整机兼容
与外设兼容
2)与软件兼容
与操作系统的兼容(品牌、版本、位数:64位、32位)
浏览器兼容性
与其他应用软件兼容
与数据库兼容
3)数据兼容
测软件的不同版本之间,数据是否兼容
(5)功能/黑盒测试中常用的设计测试用例的方法有哪些?这些测试方法的应用/选择策略是什么?
常用的测试方法有:等价类划分法、边界值法、判定表法、场景法
选择策略的答题思路:就是说清楚每种方法的应用场合
在测试设计中经常用来补充测试用例的方法:错误推测法(经验型方法)