测试基础知识

黑盒测试:
黑盒测试是将程序视为一个黑盒子,测试目标与程序的内部结构完全无关,而是将重点集中放在发现程序不按其规范正确运行的环境条件。黑盒测试不需要去了解程序的内部结构,如果想用黑盒测试来发现程序的错误,判定的标准就是穷举输入测试,将所有可能输入条件都作为测试用例。
白盒测试:白盒测试允许我们检查程序的内部结构,从中获取测试数据。用的是穷举路径测试的方法。
软件测试的原则:
(1)测试中一个必须的部分是对预期输出或结果进行定义
(2)程序员应当避免测试自己编写的程序
(3)编写软件的组织不应当测试自己编写的软件
(4)应当彻底检查每个测试的执行结果
(5)测试用例的编写不仅仅应当根据有效和预期的输入情况,而且也应当根据无效和未预料的输入情况
(6)检查程序是否“未做其应该做的”,仅是测试的一半,测试的另一半是检查程序是否做了其不应该做的
(7)避免测试用例后即弃,除非软件本身就是一个一次性软件
(8)计划测试工作时,不应默许假定不会发生错误
(9)程序某部分存在更多错误的可能性,与该部分已发现错误的数量成正比
软件测试是为发现错误而执行程序的过程,一个好的测试用例具有高效的发现某个尚未发现的错误的可能性,一个成功的测试用例能够发现尚未发现的错误
测试用例的设计
白盒测试:白盒测试关注的是测试用例执行的程度,或覆盖程序逻辑结构(源代码)的结构
逻辑覆盖测试
语句覆盖:
判定覆盖/分支覆 盖:编写足够的测试用例,使得每一个判断都至少有一个为真和为假的输出结果,判定覆盖通常可以满足语句覆盖,判定覆盖是一种比语句覆盖较强的准则
条件覆盖:条件覆盖的准则比判定覆盖的准则更强,在条件覆盖情况下,要编写足够的测试用例,以确保将每一个判断中的每条语句的所有可能结果全部执行一遍。
多重条件覆盖:将每个判定中所有的条件结果的组合以及所有入口点都执行一次,多重条件准则要优于其他准则
等价划分:使用等价划分方法,设计测试用例:(1)确定等价类(2)生成测试用例
确定等价类是选取每一个输入条件,并将其划分为两个或更多的组。
有效等价类:对程序的有效输入
无效等价类:其他任何可能输入的条件
例:数量可以是从1到999
有效等价类:(1<数量<9999) 无效等价类(数量<1,数量>999)
生成测试用例:(1)为每个等价类设置一个不同的编号,(2)编写新的测试用例,尽可能多的覆盖那些尚未被涵盖的等价类(3)编写新的用例,覆盖一个且仅一个尚未被覆盖的等价类
边界值分析:所谓边界条件,指输入或输出等价类中,恰好处于边界,或超过边界或在边界以下的状态。
边界值分析与等价类划分的不同:
(1)与从等价类中任意挑出一个值作为代表不同,边界值分析需要选择一个或多个元素,以便等价类的每一个边界都经过一次测试。
(2)与仅仅关注输入条件不同,边界值分析需要一定的创造性
因果图:因果图是一个根据条件的组合,而生成测试用例的系统方法
模块(单元)测试
1、测试用例的设计
设计测试用用例时,需要使用两种类型的信息,模块的规格说明和模块的源代码,模块测试总体上是面对白盒测试的。
模块测试的测试用例过程如下:使用一种或多种白盒测试的方法,分析模块的逻辑结构,然后使用黑盒测试的方法对模块的测试说明以补充测试用例。
增量测试与非增量测试:
增量测试:先将下一步要测试的模块组装到测试完成的模块集合中然后再进行测试
两种增量测试的方法:
(1)自顶向下测试:从程序的顶部或初始模块开始,测试开始之后,挑选哪一个模块进行增量测试,没有唯一正确的方法,唯一的原则是要合乎条件的下一个模块,至少该模块的从属模块事先经过了测试
优点:如果主要的缺陷发生在程序的顶层将会非常有利;一旦引入IO功能,提交测试用例会更容易;早期的程序框架可以进行演示,并可激发积极性
缺点:必须开发桩模块;桩模块要比最初表现的更复杂;在引入IO功能之前,向桩模块中引入测试用例比较困难;创建测试环境可能很难;
(2)自底向上测试:从程序的终端模块开始测试,有多个模块时,测试顺序由模块关键程度决定。
优点:如果主要的缺陷发生在程序的底层将会非常有利,测试环境比较容易建立,观察测试输出比较容易。
缺点:必须开发驱动模块,直到最后一个模块添加进去,程序才能形成一个整体。
非增量测试:先独立的测试每个模块,然后再将这些模块组装成完整的程序。单独测试每个模块需要一个驱动模块和一个或多个桩模块。驱动模块是人们编写的一个模块,用来将测试用例驱动或传输到被测模块中
增量测试与非增量测试的区别:(1)非增量测试所需要的工具多(2)如果使用了增量测试,可以较早的发现模块中与不匹配接口,不正确假设相关的编程错误。(3)使用增量测试,调试会更容易一些(4)增量测试会将测试进行的更彻底。(5)非增量测试占用的时间会更少(6)模块测试阶段开始时,如果使用的是非增量测试,就会有许多的机会进行并行操作,所有的模块可以同时测试三个
高级测试:
软件产品开发周期模型:最终用户->需求->目标->外部规格说明->系统设计->程序结构设计->模块接口规格说明->代码
1、将最终用户的要求转变成一个书面需求
2、通过评估可行性与成本,消除相互抵触的用户需求,将用户需求转化为具体的目标
3、将目标转化为一个准确的产品规格说明,,把产品视为一个黑盒子,仅考虑接口以及其与最终用户的交付
4、如果产品是一个系统,将系统分割为单独的程序,部件,或者子系统,并定义它们的接口
5、通过定义每个模块的功能,模块的层次以及模块间的接口,设计程序
6、设计一份准确的规格说明书,定义每个模块的接口与功能
7、将每个模块的接口规格说明转化为每个模块的代码算法
功能测试:功能测试是试图发现程序与其外部规格说明之间存在不一致的过程,功能测试是一种黑盒测试。常用的方法是:等价类划分法,边界值分析法,因果图分析法和错误猜测法
系统测试:系统测试并非是测试整个系统,而是将系统或程序与其初始目标进行比较
系统测试并不局限于系统,也可以是一个程序;如果产品没有书面的,可度量的目标,系统测试也就无法进行
系统测试的测试用例:能力测试,容量测试,强度测试,易用性测试,安全性测试,性能测试,存储测试,配置测试,兼容性/配置/转换测试,安装测试,可靠性测试,可恢复性测试,适用性测试,文档测试,过程测试,系统测试的执行
验收测试:验收测试是将程序与其最初的需求以及最终用户当前的需求进行比较的过程,验收测试最好的方法就是设计测试用例,尽力证明程序没有满足合同要求。
安装测试:为了发现安装过程中的错误
调试方法:暴力法调试,归纳法调试演绎法调试,回溯法调试,测试法调试
测试分类:
按开发阶段分
1)单元测试:是对软件组成单元进行测试。测试的对象是软件设计的最小单元位:模块。
测试内容:模块接口测试,局部数据结构测试,路径测试,边界测试。
测试方法:白盒测试
2)集成测试:联合测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。
测试内容:模块之间数据传输,模块之间功能冲突,模块组装功能正确性。
测试方法:黑盒测试与白盒测试相结合。
3)系统测试:将软件系统看成是一个系统的测试。
测试内容:功能,界面,可靠性,易用性,兼容性,安全性等。
测试方法:黑盒测试
4)回归测试:是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。在整个软件测试过程中占有很大的工作量比重。
5)冒烟测试:对一个硬件或一个硬件组件进行更改或修复后,直接给设备加电,如果没有冒烟组件就通过了测试。
6)验收测试(交付测试):
部署软件之前的最后一个测试操作。
测试方法:黑盒测试
按测试实施组织
a测试:由一个用户在开发环境下进行测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。
Beta测试:是一种验收测试,由软件的最终用户们在一个或多个客房场所进行。
区别:
(1)场所不同:a测试是指把用户请到开发方的场所来测试,beta测试是指在一个或多个用户的场所进行测试。
(2)a测试先于beta测试执行,用户数量相对比较少时间比较集中;beta用户数量相对比较多时间不集中。
第三方测试:介于开发方和用户方间的组织的测试。
按是否运行划分:
1)静态测试 包含代码静态分析和文档测试
2)动态测试 通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率,正确性和健壮性能。
按是否手工划分:
1)手工测试
2)自动化测试:就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。
按是否查看代码:
1)黑盒测试
把被测软件当作一个黑盒子,不关心盒子内部结构是什么,只关心软件的输入数据和输出数据。
2)白盒测试
又称结构测试,透明盒测试,打开盒子研究里面的源代码和程序结果。
灰盒测试
是介于白盒测试与黑盒测试之间的一种测试,多用于集成测试阶段,不仅关注输出,输入的正确性,同时也关注程序内部情况。
*黑盒测试:测试人员把软件产品看作是一个黑盒子,在测试过程中只需要关心对这个软件黑盒进行操作会得到什么样的结果,不必深入了解它的内部实现机制所进行的测试活动。
*为什么做黑盒测试?
验证软件产品是否符合需求文档的设计;证实软件产品符合终端用户的需求。
*黑盒测试方法:
输入值域和输出值域;
等价类划分;(对组件的输入值域和输出值域进行划分的模式来设计测试用例)
边界值分析;(边界值就是用来界定各个有序集合之间的边界点,一般都将最大值和最小值作为边界值)
状态转换测试法;(通常用状态转换图,状态转换模型,状态转换表来描述被测组件各状态之间的转换。
因果图法;(多组因果关系的逻辑组合)。
语法测试;
*白盒测试:也称结构测试或逻辑驱动测试,通过分析被测组件的内部工作原理,通过测试来检测被测组件内部的运行是否符合产品规格说明书。
*白盒测试方法:
1)语句覆盖:程序中每一个可执行语句都能执行一次的测试用例。
2)判定覆盖:判断语句在设计测试用例时,要设计判断语句有true和false两种结果的测试用例。
3)条件覆盖:设计测试用例针对判断语句中每个条件表达式true和false各取值一次,不考虑结果。
4)判定条件覆盖:设计测试用例时,使得判断语句中每个条件表达式的所有可能结果至少出现一次,每个判断语句本身的可能结果也至少出现一次。
5)条件组合覆盖:设计测试用例时,使得每个判断语句中条件结果的所有可能组合至少出现一次。
6)路径覆盖:设计测试用例时,覆盖程序中所有可能的执行路径。
覆盖准则由弱到强依次是语句覆盖、判定覆盖(分支覆盖)、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。
*黑盒测试和白盒测试的区别:
(1)黑盒测试
完全不考虑程序内部结构和内部特性;多用于针对软件界面,软件功能,性能,安全性等方面进行测试。
黑盒法是穷举输入测试,只有把所有可能的输入都作为测试情况使用。
适用于软件测试的各个阶段。
(2)白盒测试
全面了解程序内部结构,对所有逻辑路径进行测试。
多用于软件内部实现机制的正确性,有效性进行检验。
白盒测试是穷举路径测试。
多用于软件测试的单元测试阶段。
单元测试是对软件的最基本组成单元进行测试,它是软件测试中最低级别的测试。
*为什么要对程序进行单元测试?
保证被测代码有正确的行为,可以验证代码是否与详细设计一致。
窥探软件内部的实现机制,可以发现其他测试阶段难以发现的软件缺陷。
充分的单元测试可以极大地降低软件的开发成本。
集成测试是对软件已测试完成的单元或组件之间的接口进行测试,又称为组装测试。
为什么要对程序进行集成测试?
可以发现单元测试阶段难以发现的缺陷;
逐步的集成测试可以有效地定位软件因集成新的组件所引入的缺陷;
系统测试就是所有子模块完成集成测试后,测试人员按照规格说明书进行的功能验证测试。
用户验收测试:就是交付给用户,让用户执行产品验收所进行的测试。
回归测试:当开发人员对软件产品的基线版本做出任何改变时,测试人员针对这些改变进行有针对性的测试活动。
冒烟测试:是指对一个硬件或硬件组件进行更改或修复后直接给设备加电,如果没有冒烟,则表示该组件通过了测试。软件测试中指每个开发部门开发出的版本建立后,由测试部门或集成部门对系统的主要基本功能进行简单测试。
为什么进行冒烟测试?
为了节省测试部门的人力。
安全性测试:指有关验证应用程序的安全级别和识别潜在的安全性缺陷的过程。
兼容性测试:是指待测的软件与硬件之间,与其它软件之间,软件新旧版本之间以及在不同网络环境中是否存在冲突的测试。
易用性测试:易用性是一种以使用者为中心的设计概念,易用性设计的重点在于让产品的设计能够符合使用者的习惯与需求。

你所熟悉的软件测试类型都有哪些?
功能测试:也叫黑盒测试,所占比例最大,考虑每个细节,所有可能的功能问题。
性能测试:通过自动化测试工具模拟多种正常,峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试。
界面测试:界面是软件与用户交互的最直接的层,合理的界面能给用户带来轻松愉悦的感觉。
测试与调试的区别:
目的不同:测试任务是发现程序中的缺陷,调试任务是定位并且解决程序中的问题。
角色不同:调试由开发人员来执行,测试主要是由测试人员和开发人员来执行 ,黑盒测试主要由测试人员完成,单元/集成测试主要由开发人员完成。
执行级阶段:测试贯穿软件开发生命周期,调试一般在开发阶段
软件测试的目的和原则:
目的:验证软件有或没有问题。
原则:以客户为中心,遵循软件测试的规范,流程,标准和要求。
软件的生命周期:
软件的生命周期是指从软件产品的设想开始到软件不再使用而结束的时间。
生命周期:需求分析,计划,设计,编码,测试,允许维护。

测试用例和测试脚本:
实施测试用例是向被测试系统提供输入数据,操作或者各种环境设置以及期望结果的一个特定的集合。测试脚本是为了进行自动化测试而编写的脚本,测试脚本的编写必须对应相应的测试用例。
用户登录界面测试用例:
(1)组件相对大小和位置有序,协调,整齐。
(2)每组组件的字体,风格保持一致。
(3)输入密码时密码不能是明文,应是星号或其它符号代替。
(4)一个窗口移动所有组件都随之移动。
(5)随着字符的不断输入邮箱地址和密码域文本框不应随之拉长。
(6)最大化最小化按钮不应使用。
(7)提交时邮箱地址和密码不能为空。
(8)如果输入不正确,单击sign in按钮应有友好而足够的信息提示用户。
(9)参照需求,是否同一用户可以在多台机器上同时登录,须进行测试。
网站如何测试:
(1)分析设计需求:查找需求说明,网站设计等相关文档。
(2)制定测试计划:确定测试范围和测试策略。
1.功能性测试:链接测试,连接是否正确跳转,是否存在空页面和无效页面
2.界面测试:页面是否风格统一美观;页面布局是否合理,控件是否可以正常使用;文字细节。
3.性能测试:压力测试;负载测试;强度测试。
4.安全性测试:基本登录功能的检查;是否存在溢出错误导致系统崩溃;如果需要高级的安全性测试,确定获得专业安全公司的帮助,外包测试。
5.兼容性测试:浏览器的兼容性,操作系统的兼容性,软件平台的兼容性;数据库的兼容性。
测试一个纸杯的过程:
功能性:用水杯装水看水漏不漏,水能不能被喝到;
安全性:杯子有没有毒或细菌
可靠性:杯子从不同高度落下的损坏程度
可移植性:杯子在不同地方,温度等环境下是否可以正常使用
兼容性:杯子是否能够容纳果汁,白水,酒精,汽油等。
易用性:杯子是否烫手,是否有防滑措施,是否方便易用。
用户文档:使用手册是否对杯子的用法,限制,使用条件等有详细描述
压力测试:在针上面不断加重水杯中水的重量,看压强多大时会穿透。

详细描述一个测试活动完整的过程:
1)项目经理和客户交流完成需求文档,由开发人员和测试人员共同完成需求文档的评审,评审的内容包括:需求描述不清楚的地方和可能有明显冲突或者无法实现功能的地方。
2)项目经理综合他们的意见,完成项目计划。然后进入项目开始跟踪。
3)开发人员根据需求文档完成需求分析文档,测试人员进行评审,审评主要内容有是否有遗漏或者双方理解不同的地方。测试人员完成测试计划文档。
4)测试人员根据修改好的需求文档开始写测试用例,同时开发人员完成概要设计文档,详细设计文档,两份测试文档成为测试人员撰写测试用例的补充材料。
5)测试用例完成后,测试和开发需要进行评审。
6)测试人员搭建环境,开发人员提交版本,测试人员进行测试,一般2-3个版本后BUG数量减少,达到出货要求。
7)如果有客户反馈问题,需要测试人员协助重现并重新测试。
为什么做测试?最大的兴趣?测试职业的发展目标?
通过测试工作能使软件产品越来越完善,从而体会到收获效果的乐趣。
测试入门容易,但是做好很难,测试的精华在于测试用例的设计上,在测试一个新的任务时,需要花一定的时间去消化业务需求和技术基础,业务需求通过沟通交流就可以达到目的,而技术基础可能没那么简单,这需要一定的自学能力和挑战性。
测试经验越多,测试能力越高,职业发展需要时间的积累,不断更新和提升自己,向着高级测试工程师奔去。
自己做测试的优势在哪里?
有耐心,喜欢总结,较强的沟通能力
如果有机会转成开发人员,会做开发吗?
如果公司确实需要我可以从事开发,但相对来说我更喜欢测试,我认为我更适合做测试。
假设有一个文本框要求输入6个字符的邮政编码,对于该文本框应该怎样划分等价类?
特殊字符;英文字符;小于十个字符;大于十个字符;数字和其他混合;空字符;保留字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值