软件测试理论总结_软件测试经典总结理论
软件测试理论总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“软件测试经典总结理论”。
软件测试理论复习
软件测试:在规定条件下对程序进行操作,以发现错误,对软件质量进行评估
软件质量:软件特性的总和,软件满足规定或潜在用户需求的能力
软件测试与质量保证的区别:
质量保证(QA):质量保证的重要工作是通过预防、检查与改进来保证软件质量。QA采用“全面质量管理”和“过程改进”的原理开展质量保证工作。所关注的是软件质量的检查与测量。虽然QA的活动中也有一些测试活动,但所关注的是软件质量的检查与测量。QA的工作是软件生命周期的管理以及验证软件是否满足规定的质量和用户的需求,因此主要着眼于软件开发活动中的过程、步骤和产物,而不是对软件进行剖析找出问题或评估。
软件测试:测试虽然也与开发过程紧密相关,但关心的不是过程的活动,而是对过程的产物以及开发出的软件进行剖析。测试人员要“执行”软件,对过程中的产物----开发文档和源代码进行走查,运行软件,以找出问题,报告质量。测试人员必须假设软件存在潜在的问题,测试中所做的操作是为了找出更多的问题,而不仅仅是为了验证每一件事是正确的。对测试中发现的问题的分析、追踪与回归测试也是软件测试中的重要工作,因此软件测试是保证软件质量的一个重要环节。
软件测试的目的:尽可能多的发现软件中存在的错误。
Grenford J.Myers 就软件测试目的提出了以下观点:
1、测试是程序的执行过程,目的在于发现错误
2、一个好的测试用例在于能发现至今未发现的错误
3、一个成功的测试是发现了至今未发现的错误的测试
测试的目的,是想以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正各种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患所带来的商业风险。
软件测试原则:
1、所有的测试都应当追溯到用户需求
2、应当尽早地和不断地进行测试
3、完全测试是不可能的,测试需要适可而止
4、测试应充分注意软件中的群集现象。测试中该模块残存的缺陷与该模块中已发现的缺陷数成正比。
5、程序员应避免检查自己的程序,软件项目组应避免测试自己组开发的程序
6、工程界中的80-20原则;BUG的80-20原则
7、测试应从“小规模”开始,逐步转向“大规模”
8、同化效应,为了达到最佳测试效果,可以由第三方来构造测试
9、检查程序是否做了该做的工作只是完成了一半,另一半是检查程序是否做了不该做的工作
10、设计测试用例时必须包括正常的输入和异常的输入
软件包括程序、数据和文档
软件测试对象:程序、数据和文档
软件测试中的V&Vi:
验证(vertification)是保证软件正确实现特定功能的一系列活动和过程,目的是保证软件生命周期的每一个阶段的成果满足上一个阶段所设定的目标(是否按需求做出了功能正确的产品)
确认(validation)是保证软件满足用户需求的一系列的活动和过程,目的是在软件开发完成后保证软件与用户需求相符合(是否做出了用户想要的产品)
验证与确认都属于软件测试,它包括对软件分析、设计以及程序的验证与确认。软件测试分类
按照开发阶段划分:单元测试、集成测试、系统测试、(确认测试)和验收测试
单元测试:又称模块测试,逻辑测试或结构测试,是针对软件设计的最小单位--程序模块进行正确性检验的测试工作。其目的在于检查每个程序单元能否正确实现详细设计说明中的模块功能、性能、接口和设计约束等要求,发现各个模块内部可能存在的各种错误。单元测试需要从程序的内部结构出发设计测试用例。
单元测试的内容:
1)模块接口测试
2)局部数据结构测试
3)路径测试
4)错误处理测试
5)边界测试
单元测试辅助模块:
驱动模块(drive):相当于所测模块的主程序。它接收测试数据,把这些数据传送给所测模块,最后再输出实测结果
桩模块(stub):也叫做存根模块。用以代替所测模块调用的子模块
集成测试:又叫组装测试,综合测试或联合测试。通常在单元测试基础上,将所有的程序模块进行有序的、递增的测试。集成测试是检验程序单元或部件的接口关系,逐步集成为符合概要设计要求的程序部件或整个系统。
集成测试需要考虑的问题:
1)在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失
2)一个模块的功能是否会对另一个模块的功能产生不利的影响
3)各个子功能组合起来,能否达到预期要求的父功能
4)全局数据结构是否有问题
5)单个模块的误差累积起来,是否会放大,以至达到不能接受的程度
集成测试组装方法:一次性组装方式和渐增式组装方式;后者又包括:自底向上、自顶向下、混合集成集成测试完成的标志:
1)成功地执行了测试计划中规定的所有集成测试
2)修正了所发现的错误
3)测试结果通过了专门小组的评审
确认测试:通过检验和提供客观证据,证实软件是否满足特定预期用途的需求。确认测试是检测与证实软件是否满足软件需求说明书中规定的要求。
确认测试一般包括有效性测试和软件配置复查
系统测试:是为验证和确认系统是否达到其原始目标,而对集成的硬件和软件系统进行的测试。系统测试是在真实或模拟系统运行的环境下,检查完整的程序系统能否和系统(包括硬件、外设、网络和系统软件、支持平台等)正确配置、连接,并满足用户需求。
验收测试:按照项目任务书或合同、供需双方约定的验收依据文档进行的对整个系统的测试与评审,决定是否接收或拒收系统。
验收测试往往在系统测试完成后、项目最终交付前进行。
验收测试计划、测试方案与测试案例一般由开发方制定,由用户方与监理联合进行评审。验收小组由开发方、用户方、监理方代表、主管单位及行业专家构成。
按照测试技术划分:白盒测试、黑盒测试、灰盒测试;也可划分静态测试和动态测试。
静态测试是指不运行程序,通过人工对程序和文档进行分析与检查;
动态测试是指通过人工或使用工具运行程序进行检查、分析程序的执行状态和外部表现。白盒测试:又称结构测试、逻辑测试,指通过对程序内部结构的分析、检测来寻找问题。白盒测试把程序看成装在一个透明的白盒子里,也就是清楚了解程序结构和处理过程,检查是否所有的结构及路径都是正确的,检查软件的内部动作是否按照设计说明的规定正常进行。白盒测试用例设计方法:逻辑覆盖法和基本路径测试法
逻辑覆盖法:
根据覆盖目标的不同,逻辑覆盖又可分为语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖。
语句覆盖:选择足够多的测试用例,使得程序中的每个可执行语句至少执行一次
判定覆盖:通过执行足够多的测试用例,使得程序中的每个判定可能取值(真或假)都至少满足一次,也称为“分支覆盖”
条件覆盖:设计足够多的测试用例,使得程序中的每个判定包含的每个条件的可能取值(真/假)都至少满足一次
判定/条件覆盖:设计足够多的测试用例,使得程序中每个判定包含的每个条件的所有情况(真假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次
组合覆盖:设计足够多的测试用例,使得程序中每个判定的所有可能的条件取值组合都至少出现一次
路径覆盖:设计足够多的测试用例,要求覆盖程序中所有可能的路径
基本路径测试方法:
在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。包括以下四个步骤和一个工具方法:
1)以详细设计或源代码作为基础,导出程序的控制流图
2)计算得到的控制流图G的环路复杂性V(G)
3)确定线性无关的路径的基本集
4)生成测试用例,确保基本路径集中每条路径的执行
环路复杂性V(G)也称圈复杂度V(G)=区域数=判断结点数+1=边数—结点数+2
黑盒测试:又称功能测试或数据驱动测试,指通过软件的外部表现来发现缺陷和错误。黑盒测试把测试对象看成一个黑盒子,完全不考虑程序内部结构和处理过程。黑盒测试是在程序界面处进行测试,它只是检查样序是否按照需求规格说明书的规定正常实现。
黑盒测试用例设计方法:等价类划分法、边界值分析法、错误推测法、决策表法、因果图法、场景法、功能图法
等价类划分法:不考虑程序的内部结构,测试人员要对需求规格说明书的功能需求进行细致分析,然后把程序的输入域划分成若干部分,从每个部分中选取少数代表性数据当作测试用例。
等价类分为:有效等价类和无效等价类
有效等价类:指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合,可以检验程序是否实现了规格说明书中所规定的功能和性能
无效等价类:指对于程序的规格说明来说是不合理的、无意义的输入数据构成的集合。确定等价类的原则:
1)在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类
2)在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类
3)在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。
4)在规定了输入数据的一组值(假定N个),并且程序要对每一个输入值分别处理的情况下,可确定n个有效等价类和一个无效等价类
5)在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)
6)在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则应将该等价类进一步划分为更小的等价类
根据已列出的等价类表,按以下步骤确定测试用例:
1)为每一个等价类规定一个唯一的编号
2)设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖
3)设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步骤,使所有无效等价类均被覆盖
灰盒测试是介于白盒测试与黑盒测试之间,主要关注输出对于输入的正确性;同进也关注内部表现,但这种关注不像白盒测试那么详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态。
自动化测试:通过测试工具或其他手段,按照测试工程师的预定计划对软件产品进行自动的测试
自动化测试的优势:
1)提高测试质量
2)提高测试效率,缩短测试工作时间
3)提高测试覆盖率
4)执行手工测试不能完成的测试任务,如压力测试
5)更好地重现软件缺陷的能力
6)更好的利用资源
7)增进测试人员与开发人员之间的合作伙伴关系
自动化测试的局限性:
1)定制型项目
2)周期很短的项目
3)业务规则复杂的对象
4)人体感观与易用性测试
5)不稳定的软件
6)涉及物理交互
开发模型:瀑布模型、原型模型、螺旋模型、增量模型、渐进模型、快速软件开发(RAD)以及Rational统一过程(RUP)
瀑布模型:需求分析、可行性研究、概要设计、详细设计、编码、测试、运行维护
软件的生命周期:需求分析、概要设计、详细设计、编码、测试、运行维护、退出使用 软件的全寿命周期费用(LCC:Life cycle cost)
测试的花费减少了运行维护阶段的花费,从全寿命周期费用来看,测试是使LCC降低了 测试模型:V模型、W模型、H模型、X模型、前置测试模型
软件测试策略:单元测试、集成(组装)测试、确认测试和系统测试。
软件失效分类:软件错误(software error)、软件缺陷(software defect)、软件故障(software fault)、软件失效(software failure)
软件缺陷定义:
1、软件未达到产品说明书中明确指明要实现的功能
2、软件出现了产品说明书中指明不会出现的错误
3、软件功能超出了产品说明书中指明的范围
4、软件未达到产品说明书中虽未明确指出但应达到的目标
5、软件测试人员认为软件难以理解、不易使用、运行速度慢,或最终用户认为不好使用 缺陷与错误严重性和优先级:
严重级:表示软件缺陷所造成的危害的恶劣程序;分为以下四个等级:
严重:系统崩溃、数据丢失、数据毁坏
较严重:操作性错误、错误结果、遗漏功能
一般:小问题、错误字、UI布局、罕见故障
建议:不影响使用的瑕疵或更好的实现
优先级:表示修复缺陷的重要程度与次序
最高优先级:立即修复,停止进一步测试
次高优先级:在产品发布之前必须修复
中等优先级:如果时间允许应该修复
最低优先级:可能会修复,但是也能发布
软件缺陷跟踪管理
(1)Bug记录信息
主要包括以下几项内容:
测试软件名称、测试版本号、测试人名称、测试事件、测试软件和硬件配置环境、发现软件错误的类型、错误的严重等级及优先级、详细步骤、必要的附图、测试注释、提交给谁
(2)Bug处理信息
主要包括以下4项内容:
处理者姓名、处理时间、处理步骤、错误记录的当前状态
软件错误的状态:
软件错误的主要状态包括以下内容:
新信息(New):测试中新报告的软件Bug
打开(Open):被确认并分配给相关开发人员处理
修正(Fixed):开发人员已完成修正,等待测试人员验证
拒绝(Declined):拒绝修改Bug
延期(Deferrend):不在当前版本修复的错误,下一版本修复
关闭(Closed):Bug已被修复
错误管理流程:
错误管理的流程可以概括为以下几项内容:
1、测试人员提交新的错误入库,错误状态为“New”
2、高级测试人员验证错误
1)如果确认是错误,分配给相应的开发人员,设置状态为“Open”
2)如果不是错误,则拒绝,设置为“Declined”状态
3、开发人员查询状态为“Open”的错误,做如下处理
1)如果不是错误,则拒绝,设置为“Declined”状态
2)如果是错误,则修复并置状态为“Fixed”
3)如果不能解决的错误,要留下文字说明并保持错误为“Open”状态
4)对于不能解决和延期解决的错误,不能由开发人员自己决定,一般要通过某种会议(评审会)通过才能认可
4、测试人员查询状态为“Fixed”的错误,验证错误是否解决,做如下处理
1)如果问题解决了,置错误状态为“Closed”
2)如果问题没有解决,置错误状态为“Reopen”
测试用例:
为实施测试而向被测试系统提供的输入数据、操作或各种环境设置以及期望结果的一个特定的集合。
测试用例基本组成要素:项目名称、测试人员、用例编号、测试用例说明、测试的模块、测试的输入条件、测试的预期结果、测试实际结果、缺陷编号
1、什么是软件测试,为什么要进行软件测试?软件测试与调试的区别?
答案:(1)软件测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。
(2)因为没有经过测试的软件很难在发布之前知道该软件的质量,就像ISO质量认证一样,软件同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作。在测试的过程发现软件中存在的问题,及时让开发人员得知并修改问题,在即将发布时,从测试报告中得出软件的质量情况。
(3)在软件开发的过程中,调试和测试是两个不同的过程,分别由程序开发人员和测试人员来完成。
第一,调试的过程是随机的不可重复的;而测试的过程是有计划的、可以重复的过程。
第二,调试的目的是为了隔离和确认问题的所在,并加以解决,使得程序能够正常运行;而测试的目的是为了找出与软件实现定义的规格和标准不符合的问题,保证软件能都满足用户需求。
但二者也有相同之处,最终目的都是为了提高软件质量。
2、a测试与b测试的区别?静态测试与动态测试的区别?
答案:(1)Alpha测试(α测试)是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试;Beta测试(β测试)是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。总而言之,前者是内部模拟上线,后者是真正上线,让用户参与测试。
(2)静态方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。
动态测试方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,这种方法由三部分组成:构造测试实例、执行程序、分析程序的输出结果。