一.软件的开发阶段划分
1.需求分析:由需求分析人员完成,产出物《需求规格说明书》
2.设计阶段:1)概要设计阶段 2)详细设计阶段
由系统架构或分析师完成 产出物《概要设计说明书》、《详细设计说明书》
3.编码阶段:由开发人员完成 产出物:程序
拓展:软件开发设施包括开发平台、开发环境、开发语言
问题:那个阶段引入的bug最多?那个阶段最少?
需求分析阶段引入bug最多,其次是设计阶段,最少的是编码阶段。
因此1)测试不能只测试程序,文档也必须要测
2)尽早测试是原则,不断测试原则
4.补充:设计用例(黑盒方法):(1)逐级细分法(2)输入域测试法 (3)输出域分析法 (4)正交试验设计法 (5) 业务流程分析法 (6)状态迁移法 (7)因果图法 (8)判定表法 (9)错误猜测法 (10)等价类划分法 (11)边界值分析法
二.软件的测试阶段划分 ***
说明:该阶段划分中没有涵盖文档测试(需求和设计)部分
1.单元测试
1)单元测试是最小的测试单位,一个窗口、类、方法(函数)、功能模块等
都可以是一个单元
2)单元测试主要参考《详细设计文档》
3)单元测试阶段以白盒测试阶段为主
4)在实际应用中经常会安排开发人员进行单元测试,这样可以节省成本,
但是测试质量得不到保证,所以企业常常只要采用交换测试和
开发人员测一轮, 测试测试人员再测一轮的方式提高测试质量
5)在单元测试阶段,需要测试者编写桩模块和驱动模块
a.驱动模块:是模拟被测模块的上一级模块(调用被测模块)
b.桩模块:是模拟被测模块的下一级模块(被“被测模块”调用)
调用关系:驱动模块→被测模块→桩模块
2.集成测试
1)也叫组装测试,通常在单元测试的基础上,把软件的功能模块
逐步组装合并在一起,进行集成测试(将所有模块按照设计要求组装成一个完整的系统进行的测试)
2)集成测试中的组装过程一般是逐步完成的,会形成若干的临时版本
3)集成测试阶段主要依据《概要设计文档》
4)集成测试阶段主要采用黑盒测试方法。核心功能、难点功能会适当辅助白盒测试
5)冒烟测试<又叫“版本验证测试”>:测试团队拿到一个新版本后,先会做“冒烟测试”
说明:冒烟测试使用较少的人(经验丰富的、业务能力强1-3人),较少的时间
(0.5-2天)对新版本的核心功能进行测试,如果核心功能没有问题,就接受
该版本,展开全面测试;如果核心问题较多,版本不稳定,拒绝接受,返回
开发组(不是必须)
6)集成测试阶段,测试工作的工作思路:
a.拿到一个新版本后,首先会做“冒烟测试”,确认是否接受该版本
b.返测:对在当前版本中已经解决好的bug,进行测试
c.回归测试:对上一个版本中的所有功能重新再测试一遍
d.该版本中新增加的功能重点测试(有可能只是修复以前的bug,没有新功能)
拓展:集成测试的方法有非增式、增式和混合方法: 非增式测试是指首先对每个模块分别进行单元测试,再把所有模块组装成一个完整的系统进行测试; 增式测试就是逐个把未经测试的模块组装到已测试的模块上去进行集成测试,每加入一个新的模块进行一次集成测试,重复此过程直到程序组装完毕; 混合方法中包含衍变的自顶向下的渐增式测试(步骤是从模块开始,沿着被测程序的顶层的控制路径逐步向下测试)、自底向上和回归测试三种方法。
3.系统测试
1)整个功能全部组装完成后,对集成了硬件、软件的完整系统进行
模拟真实环境的测试
2)系统测试阶段的测试重点:
a.整个系统的兼容性
拓展:a.兼容性测试:主要是检查软件在不同的软\硬件平台上是否可以正常的运行,即软件可移植性
b.兼容性测试的类型:细分为平台的兼容,网络兼容,数据库兼容,以及数据格式的兼容。
C. 兼容性测试的重点:对兼容环境的分析
b.整个系统的正确运行
3)系统测试依据:需求文档
4)系统测试阶段全部为黑盒测试
5)在系统测试之前,一般安排一次“确认测试”(确认测试是在模拟环境下运用黑盒测试方法,由专门测试人员和用户参加的测试)
a.该系统是否可以进入全面的系统测试阶段(有效性测试)
b.确认相关文档是否齐全<软件配置复查>(特别是交付给用户的文档)
说明:确认测试一般时间较短,参与人员较少,所以一般不把
其与单元、集成、系统、验收测试阶段并列
4.验收测试
1)UAT(user Acceptance testing:用户接受度测试)
2)主要由用户参与的检查过程
3)验收测试阶段:可以分为两个小阶段
a.Alpha(ɑ)测试阶段
是在研发方提供的环境中,理论上由用户对软件进行检查
(一般常常由软件公司替用户完成,也有可能请第三方测试机构代替)
说明:在研发方的提供的环境中,此时研发方对于bug有很强的控制能力
b.Beta(ß)测试阶段
在最终用户的实际环境中进行,由最终用户对软件进行检查
如,对于公共类软件(OS、网络游戏、输入法、QQ等),一般是把软件免费
发放给最终用户,通过用户收集问题
说明:此时软件研发方对bug的控制力减弱
拓展:a.验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务,满足用户的需求
b.1)软件调试的内容: 调试是为了证明软件开发的正确性。
2)软件调试的目的:找出错误所在并改正
3)调试必须由了解详细设计的开发人员完成。 调式时,开发人员能利用的工具主要是调试器
三.测试模型
1.测试模型就是为了表达软件开发阶段和软件测试阶段(级别)的对应关系
如,V模型、W模型、H模型等
2.V模型
1)会画
2)优、缺点
优点:a.开发阶段和测试阶段(级别)划分清晰、明确。开发阶段与测试阶段(级 别)的对应关系明确
b.测试阶段既包含单元测试(专业级、代码级),又包含验收测试(用户级)
缺点:缺少开发前期的需求和设计阶段的测试内容,容易造成误解,测试工作只是开发的收尾工作。不能提现:
1)测试的尽早原则和不断测试原则
2)测试不能只测试程序,文档也必须要测
3.W模型(了解)
1)W模型可以看成是双V模型,第一个V是开发活动,第二个V是测试活动
2)W模型比V模型多加入了需求和设计阶段的测试内容
3)W模型强调了:
a.程序和文档都要测试 b.尽早测试原则,不断测试原则
c.开发和测试是同步进行的
四.测试分类
1.按测试计术划分
1)黑盒测试(功能测试):是不考虑程序的内部结构特征,只知道输入
和输出的情况下进行的功能的测试
2)白盒测试(结构测试):只考虑程序内部结构,而不考虑功能的测试
3)灰盒测试:结合黑盒和白盒测试的要素,对软件进行测试,一般先做黑盒测试,
当发现有bug,再采用白盒测试的手段对bug进行进一步调查。
通常在集成测试阶段采用灰盒测试
补充说明:
1)白盒测试一般是对核心模块、风险较大、难度较大的模块进行的补充测试
2)白盒测试要求测试人员要懂编程,白盒测试效率较低,成本较高(时间、金钱)
3)白盒测试需要具备测试技术,并且需要编写测试用例
2.按是否需要运行程序代码划分:***
1)静态测试
不需要使用程序运行起来就能进行的测试
如,文档测试、界面测试、[静态]代码测试(主要测试代码是否符合相应的标准和规范)
2)动态测试
需要运行程序才能进行的测试:语句覆盖、判定覆盖、条件覆盖、、判定条件覆盖、条件组合覆盖、路径覆盖(6种主要白盒测试方法:强度由低到高)
如,功能(黑盒)测试是动态测试
问题:白盒测试和代码测试的区别?
1)白盒测试主要关注程序的逻辑实现,要求测试人员要懂编程,
可以编写测试用例
2)代码测试(白盒测试者检查)主要关注的是代码的规范、标准,
测试者不需要懂代码,也不需要编写测试用例,只需要参考
代码检查单,检查即可
3.按软件特效划分:
1)功能测试
a.应用:任何软件都必须先做功能测试,以确保其功能的正确性
b.方式:手工测试方式,也可以采用自动化测试(QTP、SELENIUM功能自动化工具) 方式
2)性能测试
a.应用:分布式(B\S、C/S)软件要进行性能测试
b.方式:只能借助自动化工具(LoadRunner、Jmeter)实现
4.其它
1)返测:对程序员修改的bug进行测试,验证bug是否被修复
2)回归测试(回测)
对上一个版本中所有功能再重新测试一遍,检验新版本中程序原有的功能
是否依然正常。回归测试中存在大量重复性的工作,如果满足一定条件,
使用自动化工具实现会提高回归测试的效率
3)随机测试(猴子测试)
在测试用例执行完成后,对软件进行的随意测试的过程,随机测试只是时间允许时,
对正常测试用例之外的补充测试
4)兼容测试
指所测程序与硬件和软件之间的兼容性的测试
主要分为3大类:
a.与硬件兼容:与整机兼容、与外设兼容(如,打印机、摄像镜头等)
b.与软件兼容:操作系统、应用软件之间、浏览器(B/S)、数据库
c.数据兼容:不同版本之间的数据兼容
5)软件测试流程
熟悉需求→制定测试计划→用例设计→执行测试→记录测试执行结果→
bug记录(《缺陷报告》)→跟踪和管理缺陷→测试报告(测试报告)
6)功能测试方法的使用策略
答题要点:所学的7种测试方法的应用场合和基本测试思想答清楚
在实际测试中还经常会将2-4中测试方法综合应用(工资发放系统)
扩展:补码
整数在计算机存储时会采用补码运算法,但是正整数和负整数的补码算法不同:
正整数的补码:就是它的原码 如,11的原码0000 1011
负整数的补码:是负数的绝对值的原码,按位数取反+1 如,1111 0101
如,-17补码
1110 1111
补充:
白盒测试方法:代码测试、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、路径覆盖和程序变异
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆盖(六种覆盖标准发现错误的能力有弱到强的变化)
语句覆盖:每条语句至少执行一次
判定覆盖:每个判定的分支至少执行一次
条件覆盖:每个判定的每个条件应取到各种可能的值
判定条件覆盖:同时满足判定覆盖条件覆盖
条件组合:覆盖每个判定中个条件的每一种组合至少出现一次
路径覆盖:程序中每一条可能的路径至少执行一次