引言
软件
软件是计算机系统中与硬件相互依存的另一部分。包括程序、数据及其文档的完整集合。
- 程序:按实现设计的功能和性能要求执行的指令序列。
- 数据:使程序能正常操纵信息的数据结构。
- 文档:与程序开发、维护和使用有关的图文材料。
软件的分类(按系统功能划分):
- 系统软件:Unix、Windows
- 支撑软件:数据库,驱动,文件系统
- 应用软件
测试
用任何一种可能采取的方法进行的直接实际实验。
- 验证特性
- 查找错误
软件测试
通过一些经济有效的方法,发现软件中存在的缺陷,从而保证软件质量。
软件调试/排错(Debug)
- 利用测试结果和测试提供的信息进行全面的分析。
- 找到错误的根源和出现错误的原因。
- 纠正已发现的问题。
- 弄清了出错原因和错误根源,立即修正。
- 不确定出错原因,作出推测,再次进行测试。
软件缺陷
即指程序中存在的错误,也指可能出现在软件设计过程中,甚至需求分析、规格说明或其他的文档中的种种错误。
软件测试概述
软件测试的概念 /h2>
- 定义1:1983年IEEE(国际电子电气工程师协会)提出的软件工程标准术语中给软件测试下的定义是:“使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别”。
- 定义2:软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例,并利用这些测试用例去执行程序,以发现软件故障的过程。该定义强调寻找故障是测试的目的。
- 定义3:软件测试是一种软件质量保证活动,其动机是通过一些经济有效的方法,发现软件中存在的缺陷,从而保证软件质量。
软件测试过程 /h2>
软件测试过程模型
V 模型
V 模型非常明确地表明了测试的不同级别,清晰地展示了软件测试与开发之间的关系。
H 模型
在 H 模型中,软件测试的活动过程完全独立,形成了一个完全独立的流程,贯穿于整个产品的周期,与其他流程并发进行。
某个测试点准备就绪后就可以从测试准备阶段进行到测试执行阶段,软件测试可以根据被测产品的不同分层进行。
软件测试环境的搭建
测试环境是指用来运行软件的环境。
测试环境 = 硬件+软件+ 络+数据准备+测试工具
-
硬件环境
主要是指PC机、笔记本电脑、服务器、各种PDA终端等。 -
软件环境
主要是软件运行的操作系统。还有Java虚拟机,MySQL等。 -
络环境
主要指的是C/S结构还是B/S结构。 -
数据准备
主要指的是测试数据的准备。测试数据应考虑数据量和真实性,即尽可能获得大量的真实的数据,包括正确和错误的数据。当无法取得真实数据时应尽可能模拟出大量的数据。 -
测试工具
静态测试工具、动态测试工具、黑盒测试工具、白盒测试工具、测试执行评估工具、测试管理工具等。
搭建软件测试环境还应注意:
- 尽量模拟用户的真实使用环境;
- 测试环境中尽量不要安装其它与被测软件无关的软件,但最好安装杀毒软件,以确保系统中没有病毒;
- 测试环境应与开发环境独立。
总之,搭建的软件测试环境应与软件生产运行环境一致,但还要从软件开发环境中独立出来。
软件测试工具
- 测试管理工具:帮助完成测试计划,跟踪测试运行结果。
- 白盒测试工具:单元测试,集成测试。(静态测试工具,动态测试工具)
- 黑盒测试工具:集成测试,系统测试。(功能测试工具,系统测试工具)
- 专用测试工具:其他测试。
- 测试辅助工具:
- 测试设计和开发工具:选择并生成测试用例。
- 测试执行和评估工具:执行测试用例并对结果进行评估。
软件测试的原则 /h2>
- 尽早地和不断地进行软件测试:缺陷存在放大趋势。问题发现越早,解决问题的代价就越小,这是软件开发过程中的黄金法则。
- 不可能完全的测试:
- 不可能测试程序对所有可能输入的响应。
- 不可能测试到程序每一条可能的执行路径。
- 无法找出所有的设计错误。
- 不能采用逻辑来证明程序的正确性。
- 增量测试,由小到大:单元测试 → 集成测试 → 系统测试。
- 避免测试自己的程序。
- 注意错误集中的现象。
- 确认BUG的有效性:有时候测试人员提交的BUG并不是真正的BUG。一般由A测试人员发现的BUG,一定要由另外一个B测试人员来进行确认。
- 合理安排测试计划:严谨、准确。
软件缺陷
软件缺陷概述 /h2>
软件缺陷的定义
- 不可能测试程序对所有可能输入的响应。
- 不可能测试到程序每一条可能的执行路径。
- 无法找出所有的设计错误。
- 不能采用逻辑来证明程序的正确性。
软件缺陷的定义
- 文档缺陷
- 文档在静态检查过程中发现的缺陷,通过测试需求分析、文档审查对被分析或被审查的文档发现的缺陷。
- 代码缺陷
- 对代码进行同行评审、审计或代码走查过程中发现的缺陷。
- 测试缺陷
- 由测试执行活动发现的被测对象的缺陷。(被测对象一般是指可运行的代码、系统,不包括静态测试发现的问题)
- 测试活动:内部测试、连接测试、系统集成测试、用户验收测试。
- 过程缺陷
软件缺陷的种类
- 输入/输出缺陷
- 输入:不接受正确输入、接受不正确输入、描述有错或遗漏、参数有错或遗漏;
- 输出:格式有错、结果有错、在错误的时间产生正确的结果、不一致或遗漏结果、不合逻辑的结果、拼写/语法错误、修饰词错误。
- 逻辑缺陷
- 遗漏情况、重复情况、极端条件出错、解释有错、遗漏条件、外部条件有错、错误变量的测试、不正确的循环迭代、错误的操作符。
- 计算缺陷
- 不正确的算法、遗漏计算、不正确的操作数、不正确的操作、括 错误、精度不够、错误的内置函数。
- 接口缺陷
- 不正确的中断处理、I/O时序有错、调用了错误的过程、调用了不存在的过程、参数不匹配、不兼容的类型、过量的包含。
- 数据缺陷
- 不正确的初始化、不正确的存储/访问、错误的标志/索引值、不正确的打包/拆包、使用了错误的变量、错误的数据引用、缩放数据范围或单位错误、不正确的数据维数、不正确的下标、不正确的类型、不正确的数据范围、传感器数据超出限制、出现1次断开、不一致数据。
软件缺陷的产生
- 疏忽造成的错误(Carelessness Defect,CD)
- 不理解造成的错误(Misapprehend Defect,MD)
- 二义性造成的错误(Ambiguity Defect,AD)
- 遗漏造成的错误(Skip Defect,SD)
软件缺陷数目估计
- 散播模型
N N + M = n n + m LARGE frac{N}{N+M}=frac{n}{n+m} N+MN/span>=n+mn/span>
N = n m M LARGE N=frac{n}{m}*M N=mn/span>/span>M
N : 固 有 缺 陷 N:固有缺陷 N:固有缺陷
M : 人 工 植 入 的 缺 陷 M:人工植入的缺陷 M:人工植入的缺陷
- 静态模型
- 覆盖率预测模型
- 错误与时间曲线
- 错误与覆盖率曲线
- 覆盖率与时间曲线
缺陷的生命周期 /h4>
- 关键状态:
- 未经确认(Unconfirmed)
- 直接来自最终用户或系统外部。
- 活跃(Active/Open)
- 新的缺陷。
- 直接来自内部(开发或测试)团队。
- 曾经关闭的缺陷,被重新激活。
- 已分配(Assigned)
- 经过评估,分配给相关开发人员处理。
- 开发人员自己发现的缺陷。
- 未通过测试的解决方案,需要进一步研究。
- 已解决(Resolved)
- 经过评估确认的解决方案。
- 已验证(Verified)
- 测试通过,但是需要后续处理 – 归档,完善测试覆盖,原因分析。
- 测试不通过,重新分配给开发人员。
- 关闭(Close)
- 处理完毕。
- 未经确认(Unconfirmed)
- 实际情况不必经过每一个状态。
黑盒测试
黑盒测试的基本概念 /h2>
- 黑盒测试:不考虑内部实现,依据输入输出设计实验。
- 白盒测试:依据内部的实现逻辑设计测试。
- 灰盒测试:在实际工作中,需要结合黑盒测试和白盒测试。
测试用例:为实施测试而向被测试系统提供的输入数据、操作或各种环境设置以及期望结果的一个特定的集合。
黑盒测试是从一种从软件外部对软件实施的测试,也称功能测试或基于规格说明的测试。其基本观点是:任何程序都可以看作是从输入定义域到输出值域的映射,这种观点将被测程序看作一个打不开的黑盒,黑盒里面的内容(实现)是完全不知道的,只知道软件要做什么。
黑盒测试是从用户观点出发的测试,其目的是尽可能发现软件的外部行为错误。
黑盒测试的两个显著优点:
- 黑盒测试与软件具体实现无关,所以如果软件实现发生了变化,测试用例仍然可以使用。
- 设计黑盒测试用例可以和软件实现同时进行,因此可以压缩项目总的开发时间。
等价类划分法 /h2>
完全不考虑程序的内部结构,只根据程序规格说明书对输入范围进行划分,把所有可能的输入数据,即程序输入域划分为若干个互不相交的子集,称为等价类,然后从每个等价类中选取少数具有代表性的数据构成测试用例,然后进行测试。
等价类划分法的原理
所谓等价类是指输入域的某个互不相交的子集合,所有等价类的并便是整个输入域。
-
划分等价类
- 有效等价类:检验程序是否实现了规格预先规定的功能和性能。
- 无效等价类:检查软件功能和性能的实现是否有不符合规格说明要求的地方。
-
常用的等价类划分原则
- 按区间划分;
- 按数值划分;
- 按数值集合划分;
- 按限制条件或规则划分;
- 细分等价类。
- 同样,可按输出条件,将输出域划分成若干等价类。
- 列出所有划分出的等价类表。(| 输入条件 | 有效等价类 | 无效等价类 |)
-
等价类划分测试用例
- 确定输入需求及输入项。
- 为每个等价类规定一个唯一的编 。
- 设计一个新的测试用例,尽可能多地覆盖尚未被覆盖的有效等价类,直到测试用例覆盖了所有的有效等价类(包括输出域)。
- 设计一个新的测试用例,使其覆盖并且只覆盖一个还没有被覆盖的无效等价类,直到测试用例覆盖了所有的无效等价类。
-
等价类测试的两个问题
- 规格说明往往没有定义无效测试用例的期望输出应该是什么样的。因此,测试人员需要花费大量时间来定义这些测试用例的期望输出。
- 强类型语言没有必要考虑无效输入。
等价类划分法的测试运用
示例一:三角形问题
示例二:保险公司保费计算程序
示例二:加法器
测试用例不全,少了10个:4*2+7*2+1=23
- 约束
在实际问题中,输入状态之间可能存在某些依赖关系,称之为约束。
- 输入条件的约束:
- 异或(Exclusive,E);
- 或(Inclusive,I);
- 唯一(One and Only,O);
- 需要(Require,R);
- 输出条件的约束:
- 强制(Mask,M)。

- 因果图法测试用例的设计步骤
- 确定软件规格中的原因和结果。
- 确定原因和结
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!