软件测试基础(理论)
目录
- 1、软件的生命周期
- 2、软件生存周期及其模型
- 3、什么是软件测试?软件测试的目的与原则是什么?
- 4、什么是软件质量?
- 5、软件产品质量特性是什么?
- 6、目前主要的测试用例设计方法有哪些?
- 7、软件测试的策略是什么?
- 8、软件测试分为几个阶段,各阶段的测试策略和要求是什么?
- 9、软件测试各个阶段通常完成什么工作?各个阶段的结果文件是什么?包括什么内容?
- 10、黑盒测试的测试用例常见设计方法都有哪些?
- 11、黑盒测试和白盒测试是软件测试的两种基本方法,请分别说明各自的优点和缺点
- 12、测试人员在软件开发过程中的任务是什么?
- 13、什么是测试用例、什么是测试脚本,两者的关系是什么?
- 14、什么是静态测试、动态测试、黑盒测试、白盒测试、α测试、β测试?
1、软件的生命周期
计划阶段(planning)-〉需求分析(requirement)-〉设计阶段(design)-〉编码(coding)-〉测试(testing)-〉运行与维护(running maintrnacne)
2、软件生存周期及其模型
软件生存周期(Software life cycle)又称为软件生命期,生存期。是指从形成开发软件概念起,所开发的软件使用以后,直到失去使用价值消亡为止的整个过程。一般来说,整个生存周期包括:问题的定义及规划、需求分析/评审、软件设计、软件编码、测试阶段、运行维护六个时期。每个时期又划分为若干个阶段。每个阶段有明确的任务。
周期模型:
(1)快速原型模型:快速原型模型允许在需求分析阶段对软件的需求进行初步而非完全的分析和定义,快速设计开发出软件系统的原型,该原型向用户展示待开发软件的全部或部分功能和性能;用户对该原型进行测试评定,给出具体改进意见以丰富细化软件需求;开发人员据此对软件进行修改完善,直至用户满意认可之后,进行软件的完整实现及测试、维护。
(2)迭代模型:迭代包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他外围元素。在某种程度上,开发迭代是一次完整地经过所有工作流程的过程:需求分析、设计、实施和测试工作流程。实质上,它类似小型的瀑布式项目。RUP认为,所有的阶段都可以细分为迭代。每一次的迭代都会产生一个可以发布的产品,这个产品是最终产品的一个子集。
生命周期阶段:
(1)软件计划与可行性分析
(2)需求分析
(3)软件设计
(4)编码
(5)软件测试
(6)运行与维护
3、什么是软件测试?软件测试的目的与原则是什么?
定义:
在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
目的:
(1)测试是程序的执行过程,目的在于发现错误。
(2)软件测试为了发现程序中存在的代码或业务逻辑错误。
(3)软件测试为了检验产品是否符合用户的需求。
(4)软件测试为了提高用户体验。
原则:
(1)测试应尽早启动、介入(需求分析阶段)。
(2)所有的测试应追溯到用户需求。
(3)测试证明软件存在缺陷。
(4)不可能执行穷尽测试,完全测试是不可能的,测试需要终止。
(5)二八原则,测试发现的错误中80%很可能的起源于20%的模块中(缺陷存在群集现象)。
(6)对错误结果要进行一个确认的过程(测试的详细数据,截图,前置条件等)。
(7)制定严格的测试计划。
(8)妥善保管测试过程中的所有文档。
(9)程序员尽量避免自己的检查程序。
(10)设计测试用例是应该考虑到合法的输入和不合法的输入。
4、什么是软件质量?
概括地说,软件质量就是“软件与明确的和隐含的定义的需求相一致的程度”。
具体地说,软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准、以及所有专业开发的。软件都应具有的隐含特征的程度。
影响软件质量的主要因素,这些因素是从管理角度对软件质量的度量。可划分为三组,分别反应用户在使用软件产品时的三种观点。
(1)正确性、健壮性、效率、完整性、可用性、风险(产品运行);
(2)可理解性、可维修性、灵活性、可测试性(产品修改);
(3)可移植性、可再用性、互运行性(产品转移)。
5、软件产品质量特性是什么?
功能性:适应性、准确性、互操作性、依从性、安全性。
可靠性:成熟性、容错性、易恢复性。
可使用性:易理解性、易学习性、易操作性。
效率:时间特性、资源特性。
可维护性:易分析性、易变更性、稳定性、易测试性。
可移植性:适应性、易安装性、遵循性、易替换性。
6、目前主要的测试用例设计方法有哪些?
白盒测试:逻辑覆盖、循环覆盖、基本路径覆盖
黑盒测试:等价类划分、边界值分析法、错误猜测法、因果图法、状态图法、测试大纲法、随机测试、场景法
7、软件测试的策略是什么?
在一定的软件测试标准、测试规范的指导下,依据测试项目的特定环境约束而规定的软件测试的原则、方式、方法的集合。
8、软件测试分为几个阶段,各阶段的测试策略和要求是什么?
测试过程会依次经历单元测试、集成测试、系统测试、验收测试四个主要阶段。
(1)单元测试:单元测试是针对软件设计的最小单位––程序模块甚至代码段进行正确性检验的测试工作,通常由开发人员进行。
(2)集成测试:集成测试是将模块按照设计要求组装起来进行测试,主要目的是发现与接口有关的问题。由于在产品提交到测试部门前,产品开发小组都要进行联合调试,因此在大部分企业中集成测试是由开发人员来完成的。
(3)系统测试:系统测试是在集成测试通过后进行的,目的是充分运行系统,验证各子系统是否都能正常工作并完成设计的要求。它主要由测试部门进行,是测试部门最大最重要的一个测试,对产品的质量有重大的影响。
(4)验收测试:验收测试以需求阶段的《需求规格说明书》为验收标准,测试时要求模拟实际用户的运行环境。对于实际项目可以和客户共同进行,对于产品来说就是最后一次的系统测试。测试内容为对功能模块的全面测试,尤其要进行文档测试。
各阶段的测试策略:
(1)单元测试测试策略:
1)自顶向下的单元测试策略:比孤立单元测试的成本高很多,不是单元测试的一个好的选择。
2)自底向上的单元测试策略:比较合理的单元测试策略,但测试周期较长。
3)孤立单元测试策略:最好的单元测试策略。
(2)集成测试的测试策略:
1)大爆炸集成:适应于一个维护型项目或被测试系统较小。
2)自顶向下集成:适应于产品控制结构比较清晰和稳定;高层接口变化较小;底层接口未定义或经常可能被修改;产品控制组件具有较大的技术风险,需要尽早被验证;希望尽早能看到产品的系统功能行为。
3)自底向上集成:适应于底层接口比较稳定;高层接口变化比较频繁;底层组件较早被完成。
4)基于进度的集成:
优点:具有较高的并行度;能够有效缩短项目的开发进度。
缺点:桩和驱动工作量较大;有些接口测试不充分;有些测试重复和浪费。
(3)系统测试的测试策略:
数据和数据库完整性测试;功能测试;用户界面测试;性能评测;负载测试;强度测试;容量测试;安全性和访问控制测试;故障转移和恢复测试;配置测试;安装测试;加密测试;可用性测试;版本验证测试;文档测试。
9、软件测试各个阶段通常完成什么工作?各个阶段的结果文件是什么?包括什么内容?
(1)单元测试阶段:各独立单元模块在与系统的其他部分相隔离的情况下进行测试,单元测试针对每一个程序模块进行正确性校验,检查各个程序模块是否正确地实现了规定的功能。生成单元测试报告,提交缺陷报告。
(2)集成测试阶段:集成测试是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。该阶段生成集成测试报告,提交缺陷报告。
(3)系统测试阶段:将通过确认测试的软件,把整个计算机系统作为一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行全面的功能覆盖。该阶段需要提交测试总结和缺陷报告。
10、黑盒测试的测试用例常见设计方法都有哪些?
(1)等价类划分:
等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试。因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据,取得较好的测试结果。
等价类划分可有两种不同的情况:有效等价类和无效等价类。
(2)边界值分析法:
是对等价类划分方法的补充。
测试工作经验告诉我,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。使用边界值分析方法设计测试用例,首先应确定边界情况,通常输入和输出等价类的边界,就是应着重测试的边界情况。
应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。
(3)错误猜测法:
基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例的方法。
错误推测方法的基本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。例如在单元测试时曾列出的许多在模块中常见的错误,以前产品测试中曾经发现的错误等,这些就是经验的总结。还有,输入数据和输出数据为0的情况,输入表格为空格或输入表格只有一行,这些都是容易发生错误的情况,可选择这些情况下的例子作为测试用例。
(4)因果图方法:
前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系,相互组合等。考虑输入条件之间的相互组合,可能会产生一些新的情况,但要检查输入条件的组合不是一件容易的事情,即使把所有输入条件划分成等价类,他们之间的组合情况也相当多,因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例,这就需要利用因果图(逻辑模型)。
因果图方法最终生成的就是判定表,它适合于检查程序输入条件的各种组合情况。
(5)正交表分析法:可能因为大量的参数的组合而引起测试用例数量上的激增,同时,这些测试用例并没有明显的优先级上的差距,而测试人员又无法完成这么多数量的测试,就可以通过正交表来进行缩减一些用例,从而达到尽量少的用例覆盖尽量大的范围的可能性。
(6)场景分析方法:指根据用户场景来模拟用户的操作步骤,这个比较类似因果图,但是可能执行的深度和可行性更好。
(7)状态图法:通过输入条件和系统需求说明得到被测系统的所有状态,通过输入条件和状态得出输出条件;通过输入条件、输出条件和状态得出被测系统的测试用例。
(8)大纲法:大纲法是一种着眼于需求的方法,为了列出各种测试条件,就将需求转换为大纲的形式。
大纲表示为树状结构,在根和每个叶子结点之间存在唯一的路径。大纲中的每条路径定义了一个特定的输入条件集合,用于定义测试用例。树中叶子的数目或大纲中的路径给出了测试所有功能所需测试用例的大致数量。
11、黑盒测试和白盒测试是软件测试的两种基本方法,请分别说明各自的优点和缺点
黑盒测试的优点有:
(1)比较简单,不需要了解程序内部的代码及实现。
(2)与软件的内部实现无关。
(3)从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题。
(4)基于软件开发文档,所以也能知道软件实现了文档中的哪些功能;在做软件自动化测试时较为方便。
黑盒测试的缺点有:
(1)不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的30%。
(2)自动化测试的复用性较低。
白盒测试的优点有:
帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐藏的问题。
白盒测试的缺点有:
(1)程序运行会有很多不同的路径,不可能测试所有的运行路径。
(2)测试基于代码,只能测试开发人员做的对不对,而不能知道设计的正确与否,可能会漏掉一些功能需求。
(3)系统庞大时,测试开销会非常大。
12、测试人员在软件开发过程中的任务是什么?
(1)尽可能早的找出系统中的Bug
(2)避免软件开发过程中缺陷的出现
(3)衡量软件的品质,保证系统的质量
(4)关注用户的需求,并保证系统符合用户需求
总的目标是:确保软件的质量
13、什么是测试用例、什么是测试脚本,两者的关系是什么?
用例:未实施测试而编制的一组测试输入、执行条件、各种环境设置以及预期结果以及期望结果的一个特定的集合。
脚本:测试脚本是为了进行自动化测试而编写的脚本。
测试脚本的编写必须对应相应的测试用例。
14、什么是静态测试、动态测试、黑盒测试、白盒测试、α测试、β测试?
静态测试:是不运行程序本身而寻找程序代码中可能存在的错误或评估程序代码的过程。
动态测试:是实际运行被测程序,输入相应的测试实例,检查运行结果与预期结果的差异,判定执行结果是否符合要求,从而检验程序的正确性、可靠性和有效性,并分析系统运行效率和健壮性等性能。
黑盒测试:一般用来确认软件功能的正确性和可操作性,目的是检测软件的各个功能是否能得以实现,把被测试的程序当作一个黑盒,不考虑其内部结构,在知道该程序的输入和输出之间的关系或程序功能的情况下,依靠软件规格说明书来确定测试用例和推断测试结果的正确性。
白盒测试:根据软件内部的逻辑结构分析来进行测试,是基于代码的测试,测试人员通过阅读程序代码或者通过使用开发工具中的单步调试来判断软件的质量。
α测试:是由用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由程序员或测试员完成。
β测试:由软件的一个或多个用户在实际使用环境下进行的测试,开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。