梗概
为什么要进行软件测试?
- 软件的某些缺陷只有在测试时才会发现;
- 提供对系统质量相关的信息和信息;
- 预防错误的发生;
什么是软件缺陷?
软件产品中存在的问题,最终表现为用户所需要的功能没有完全实现,不能满足或不能完全满足用户的需求。
为什么会存在缺陷?
- 需求的不完善定义;
- 客户-开发者交流失效;
- 对软件需求的偏离;
- 逻辑设计错误;
- 编码错误;
- 不符合文档编制与编码规定;
- 测试过程的不足;
- 规程的错误;
- 文档编制错误;
进行软件测试的好处是什么?
- 发现软件的错误行为;
- 可以界定错误的原因;
- 证明软件行为的正确;
什么是软件测试?
- 在特定的条件下运行系统或构件,观察或记录结果,对系统 的某个方面做出评价;
- 分析某个软件项以发现现存的和要求的条件之差别(即错误) 并评价此软件项的特性;
软件测试的过程:
-
需求和设计评审
需求评审和设计评审是验证软件产品的需求定义和设计实现, 验证所定义的产品特性是否符合客户的期望、系统的设计是 否合理、是否具有可测试性以及满足非功能质量特性的要求。
-
单元测试
单元测试的对象是程序系统中的最小单元—模块或组件上,在 编码阶段进行,针对每个模块进行测试,主要通过白盒测试方 法,从程序的内部结构出发设计测试用例,检查程序模块或组 件的已实现的功能与定义的功能是否一致、以及编码中是否存 在错误。多个模块可以平行地、对立地测试,通常要编写驱动 模块和桩模块 ;
-
集成测试
在单 元测试的基础上,将模块按照设计要求组装起来同时进行 测试,主要目标是发现与接口有关的模块之间问题;
-
功能测试
功能测试一般须在完成集成测试后进行,而且是针对应用 系统进行测试。功能测试是基于产品功能说明书,是在已 知产品所应具有的功能,从用户角度来进行功能验证,以 确认每个功能是否都能正常使用 ;
-
系统测试
系统测试是将软件放在整个计算机环境下,包括软硬件平 台、某些支持软件、数据和人员等,在实际运行环境下进 行一系列的测试,包括恢复测试、安全测试、强度测试和 性能测试等;
-
验收测试
向未来的用户表明系统能够像预定要 求那样工作,验证软件的功能和性能如同用户所合理期 待的那样;
-
安装测试
按照软件产品安装手册或相应的文档,在 一个和用户使用该产品完全一样的环境中或相当于用户 使用环境中,进行一步一步的安装操作性的测试;
需求和设计评审
评审的意义?
- 对软件元素或者项目状态的一种评估手段,以 确定其是否与计划的结果保持一致,并使其得到改进;
- 保证用户需 求在市场/产品需求文档及其相关文档中得到准确、完整、 无歧义的反映,并使各类开发人员在需求理解上达成一致;
主要有哪些人会出席评审会议?
- 主持人
- 内审员
- 作者
- 技术专业人员
- 记录员
- 列席人员
评审技术都有哪些?
- 检查表
- 场景分析
- 头脑风暴
- 工具
为什么会有需求评审?
软件缺陷并不只是在编程阶段才产生,需求和设计阶段同 样会产生缺陷。
需求评审的重要意义:
- 发现需求定义中的问题,尽早发现缺陷,降低劣质成本**(降成本)**;
- 保证软件需求的可测试性;
- 与市场、产品、开发等相关人员在需求理解上认识一致, 以免后期的争吵;
- 更好的理解产品的功能性与非功能性需求,为制定测试计 划打下基础;
- 确定测试目标与范围。虽然此后需求会发生变更,但能得 到有效控制,降低测试风险;
需求评测的标准:
- 正确性
- 完备性
- 易理解性
- 一致性
- 可行性
- 易修改性
- 易测试性
- 易追溯性
为什么要有系统架构设计的审查?
系统架构设计的基本要求就是保证系统具有高性能、高可 靠性、高安全性、高扩展性和可管理性 。系统架构设计评 审就是保证这些特性在设计中得到充分考虑。
测试用例设计
什么是测试用例?
测试用例(test case)是可以被独立执行的一个过程,这个 过程是一个最小的测试实体,不能再被分解。测试用例也就是 为了某个测试点而设计的测试操作过程序列、条件、期望结果 及其相关数据的一个特定的集合。
测试用例的意义是什么?
- 以最少的人力、资源投入,在最短的时间内完成测 试,发现软件系统的缺陷,保证软件的优良品质,则是 软件公司探索和追求的目标;
- 测试工作的指导;
测试用例的作用:
- 重要参考依据;
- 提高测试质量;
- 有效性;
- 复用性;
- 客观性;
- 可评估性和可管理性;
- 知识传递;
测试用例要求?
- 具有可操作性;
- 具备所需的各项信息;
- 各项信息描述准确、清楚;
- 测试目标针对性强;
- 验证点完备,而且没有太多的验证点;
- 没有太多的操作步骤;
- 符合正常业务惯例;
什么是好的测试用例?
- 分析其设计思路,是否符合业务逻辑、是否符合技术 设计的逻辑、是否可以和系统架构、组件等建立起完 全的映射关系?
- 在局部上,应有重有轻,抓住一些测试的难点、系统 的关键点,从不同的角度向测试用例的设计者提问;
- 在细节上,检查是否遵守测试用例编写的规范或模板 ,是否漏掉每一元素、每项元素是否描述清楚;
- 检查表,提问 ;
测试用例也是要随着产品的升级而维护的。
自动化测试
什么是自动化测试?
是相对手工测试 (manual test)而存在的一个概念,由手工逐个 地运行测试用例的操作过程被测试工具自动执行 的过程所代替。
自动化测试的特征是什么?
测试工具的使用是自动化测试的主要特征。
自动化测试和测试自动化的区别是什么?
- 自动化测试焦点集中在测试执行,主要是由测试 工具自动地完成测试;
- 测试自动化指“一切可以由计算机系统自动完成 的测试任务都已经由计算机系统或软件工具、程 序来承担并自动执行” ;
相对手动测试自动化测试的优点有哪些?
- 自动运行的速度快,是手工无法相比的;
- 测试结果准确。例如搜索用时及时是0.33秒或0.24 秒,系统都会发现问题,不会忽视任何差异;
- 高复用性。一旦完成所用的测试脚本,可以一劳永 逸运行很多遍;
- 永不疲劳;
- 可靠
自动化测试的好处?
- 测试周期缩短;
- 更高质量的产品;
- 软件过程更规范;
- 高昂的团队士气;
- 节省人力资源,降低企业成本;
- 充分利用硬件资源,降低企业成本;
都有哪些脚本技术?
-
线性脚本
录制手工执行的测试用例得到的脚本;
-
结构化脚本
类似于结构化程序设计,具有各种逻辑 结构、函数调用功能;
-
数据驱动脚本
将测试输入存储在独立的(数据)文 件中,而不是存储在脚本中;
-
关键字驱动脚本
数据驱动脚本的逻辑扩张 ;
单元测试
什么是单元测试?
单元测试就是对已实现的软件最小单元进行测试,以保 证构成软件系统的各个单元的质量。
单元测试的目标:
- 单元实现了其特定的功能,如果需要,返回正确的值;
- 单元的运行能够覆盖预先设定的各种逻辑;
- 在单元工作过程中,其内部数据能够保持完整性,包括全局变量的处理、内部数据的形式、内容及相互关 系等不发生错误;
- 可以接受正确数据,也能处理非法数据,在数据边界条件上,单元也能够正确工作;
- 该单元的算法合理,性能良好;
- 该单元代码经过扫描,没有发现任何安全性问题;
单元测试的方法:
-
黑盒测试
不考虑程序内部结构和内部特性, 而是考察数据的输入、条件限制和数据输出,完成测试;
-
白盒测试
白盒测试方法是根据模块内部结构了解, 基于内部逻辑结构,针对程序语句、路径、变量状态等来 进行测试,检验程序中的各个分支条件是否得到满足、每 条执行路径是否按预定要求正确的工作;
什么是驱动程序?
对底层或子层模块进行(单元或 集成)测试时所编制的调用被测模块的程序,用以模拟被 测模块的上级模块。
什么是桩程序?
对顶层或上层 模块进行测试时,所编制的替代下层模块的程序,用以模 拟被测模块工作过程中所调用的模块。
示例:
白盒测试的目标:
- 语句覆盖,使得程序中每一条可执行语句至少被执行一次;
- 分支覆盖,使得程序中每一个分支都至少被执行一次(所有路径);
- 条件覆盖,程序中每一个条件至少有一次被满足;
- 路径覆盖,对程序模块的所有独立的基本路径至少要测试一次 ;
自顶向下深度优先测试路径以及宽度深度测试路径示例:
自底向上测试集成测试的模块测试顺序:
E→B→C→F→D→A
先测试节点,再测试由节点组成的模块,最后测试由模块组成的系统
三明治测试法的优点是什么?
它将自顶向下和自底向上的集成方法有机地 结合起来,不需要写桩程序因为在测试初自底向上集成已经验证了底层模块 的正确性。采用这种方法的主要缺点是:在真正集成之前每一个独立的模块 没有完全测试过。
三明治测试法示例:
测试结果:
功能测试
什么是功能测试?
依据产品设计规格说明书完成对产品 功能进行操作,以验证系统是否满足用户的功能 性需求。
什么是等价类法?
- 等价类是某个输入域的子集,在该子集中每个输 入数据的作用是等效的;
- 将程序可能的输入数据分成若干个子集,从每个 子集选取一个代表性的数据作为测试用例;
- 在分析需求规格说明的基础上划分等价类,列出 等价类;
例题:
测试1600年至2100年的任意一天的下一天的日期情况
等价类划分如下:
- 1600<= y <=2100平年
- 1600<= y <=2100闰年
- y <1600
- y >2100
- m∈{1,3,5,7,8,10}
- m∈{4,6,9,11}
- m = 2
- m = 12
- m <1
- m >12
- 1<= d <=27
- d = 28
- d = 29
- d = 30
- d = 31
- d > 31
- d < 1
有效等价类:
- 2001.4.22
- 2000.2.29
- 1500.4.13
- 2000.3.31
- 2100.12.30
- 2001.2.28
无效等价类:
- 2101.5.10
- 2000.0.30
- 2000.13.2
- 2000.1.32
- 2000.1.0
什么是边界值法?
程序的很多错误发生在输入或输出范围的边界上, 因此针对各种边界情况设置测试用例,可以更有效 地发现缺陷。
边界值取值方式:
因果图法:
因果图样例:
因果图转判定表:
决策表例题:
系统测试
什么是系统测试?
- 用户的需求可以分为功能性需求和非功能性需求,而非功 能性的需求被归纳为软件产品的各种质量特性,如安全性 、兼容性和可靠性等;
- 系统测试就是针对这些非功能特性展开的,就是验证软件 产品符合这些质量特性的要求,从而满足用户和软件企业 自身的非功能性需求。所以,系统测试分为负载测试、性 能系统、容量测试、安全性测试、兼容性测试和可靠性测 试等;
仅供学习之用,侵删