软件测试复习

梗概

为什么要进行软件测试?

  1. 软件的某些缺陷只有在测试时才会发现;
  2. 提供对系统质量相关的信息和信息;
  3. 预防错误的发生;

什么是软件缺陷?

软件产品中存在的问题,最终表现为用户所需要的功能没有完全实现,不能满足或不能完全满足用户的需求。

为什么会存在缺陷?

  1. 需求的不完善定义;
  2. 客户-开发者交流失效;
  3. 对软件需求的偏离;
  4. 逻辑设计错误;
  5. 编码错误;
  6. 不符合文档编制与编码规定;
  7. 测试过程的不足;
  8. 规程的错误;
  9. 文档编制错误;

进行软件测试的好处是什么?

  1. 发现软件的错误行为;
  2. 可以界定错误的原因;
  3. 证明软件行为的正确;

什么是软件测试?

  • 在特定的条件下运行系统或构件,观察或记录结果,对系统 的某个方面做出评价;
  • 分析某个软件项以发现现存的和要求的条件之差别(即错误) 并评价此软件项的特性;

软件测试的过程:

  1. 需求和设计评审

    需求评审和设计评审是验证软件产品的需求定义和设计实现, 验证所定义的产品特性是否符合客户的期望、系统的设计是 否合理、是否具有可测试性以及满足非功能质量特性的要求。

  2. 单元测试

    单元测试的对象是程序系统中的最小单元—模块或组件上,在 编码阶段进行,针对每个模块进行测试,主要通过白盒测试方 法,从程序的内部结构出发设计测试用例,检查程序模块或组 件的已实现的功能与定义的功能是否一致、以及编码中是否存 在错误。多个模块可以平行地、对立地测试,通常要编写驱动 模块和桩模块 ;

  3. 集成测试

    在单 元测试的基础上,将模块按照设计要求组装起来同时进行 测试,主要目标是发现与接口有关的模块之间问题;

  4. 功能测试

    功能测试一般须在完成集成测试后进行,而且是针对应用 系统进行测试。功能测试是基于产品功能说明书,是在已 知产品所应具有的功能,从用户角度来进行功能验证,以 确认每个功能是否都能正常使用 ;

  5. 系统测试

    系统测试是将软件放在整个计算机环境下,包括软硬件平 台、某些支持软件、数据和人员等,在实际运行环境下进 行一系列的测试,包括恢复测试、安全测试、强度测试和 性能测试等;

  6. 验收测试

    向未来的用户表明系统能够像预定要 求那样工作,验证软件的功能和性能如同用户所合理期 待的那样;

  7. 安装测试

    按照软件产品安装手册或相应的文档,在 一个和用户使用该产品完全一样的环境中或相当于用户 使用环境中,进行一步一步的安装操作性的测试;

需求和设计评审

评审的意义?

  • 对软件元素或者项目状态的一种评估手段,以 确定其是否与计划的结果保持一致,并使其得到改进;
  • 保证用户需 求在市场/产品需求文档及其相关文档中得到准确、完整、 无歧义的反映,并使各类开发人员在需求理解上达成一致;

主要有哪些人会出席评审会议?

  • 主持人
  • 内审员
  • 作者
  • 技术专业人员
  • 记录员
  • 列席人员

评审技术都有哪些?

  • 检查表
  • 场景分析
  • 头脑风暴
  • 工具

为什么会有需求评审?

软件缺陷并不只是在编程阶段才产生,需求和设计阶段同 样会产生缺陷。

需求评审的重要意义:

  • 发现需求定义中的问题,尽早发现缺陷,降低劣质成本**(降成本)**;
  • 保证软件需求的可测试性;
  • 与市场、产品、开发等相关人员在需求理解上认识一致, 以免后期的争吵;
  • 更好的理解产品的功能性与非功能性需求,为制定测试计 划打下基础;
  • 确定测试目标与范围。虽然此后需求会发生变更,但能得 到有效控制,降低测试风险;

需求评测的标准:

  • 正确性
  • 完备性
  • 易理解性
  • 一致性
  • 可行性
  • 易修改性
  • 易测试性
  • 易追溯性

为什么要有系统架构设计的审查?

系统架构设计的基本要求就是保证系统具有高性能、高可 靠性、高安全性、高扩展性和可管理性 。系统架构设计评 审就是保证这些特性在设计中得到充分考虑。

测试用例设计

什么是测试用例?

测试用例(test case)是可以被独立执行的一个过程,这个 过程是一个最小的测试实体,不能再被分解。测试用例也就是 为了某个测试点而设计的测试操作过程序列、条件、期望结果 及其相关数据的一个特定的集合

测试用例的意义是什么?

  • 以最少的人力、资源投入,在最短的时间内完成测 试,发现软件系统的缺陷,保证软件的优良品质,则是 软件公司探索和追求的目标;
  • 测试工作的指导;

测试用例的作用:

  1. 重要参考依据;
  2. 提高测试质量;
  3. 有效性;
  4. 复用性;
  5. 客观性;
  6. 可评估性和可管理性;
  7. 知识传递;

测试用例要求?

  1. 具有可操作性;
  2. 具备所需的各项信息;
  3. 各项信息描述准确、清楚;
  4. 测试目标针对性强;
  5. 验证点完备,而且没有太多的验证点;
  6. 没有太多的操作步骤;
  7. 符合正常业务惯例;

什么是好的测试用例?

  • 分析其设计思路,是否符合业务逻辑、是否符合技术 设计的逻辑、是否可以和系统架构、组件等建立起完 全的映射关系?
  • 在局部上,应有重有轻,抓住一些测试的难点、系统 的关键点,从不同的角度向测试用例的设计者提问;
  • 在细节上,检查是否遵守测试用例编写的规范或模板 ,是否漏掉每一元素、每项元素是否描述清楚;
  • 检查表,提问 ;

测试用例也是要随着产品的升级而维护的。

自动化测试

什么是自动化测试?

是相对手工测试 (manual test)而存在的一个概念,由手工逐个 地运行测试用例的操作过程被测试工具自动执行 的过程所代替。

自动化测试的特征是什么?

测试工具的使用是自动化测试的主要特征。

自动化测试和测试自动化的区别是什么?

  • 自动化测试焦点集中在测试执行,主要是由测试 工具自动地完成测试;
  • 测试自动化指“一切可以由计算机系统自动完成 的测试任务都已经由计算机系统或软件工具、程 序来承担并自动执行” ;

相对手动测试自动化测试的优点有哪些?

  • 自动运行的速度快,是手工无法相比的;
  • 测试结果准确。例如搜索用时及时是0.33秒或0.24 秒,系统都会发现问题,不会忽视任何差异;
  • 高复用性。一旦完成所用的测试脚本,可以一劳永 逸运行很多遍;
  • 永不疲劳;
  • 可靠

自动化测试的好处?

  • 测试周期缩短;
  • 更高质量的产品;
  • 软件过程更规范;
  • 高昂的团队士气;
  • 节省人力资源,降低企业成本;
  • 充分利用硬件资源,降低企业成本;

都有哪些脚本技术?

  • 线性脚本

    录制手工执行的测试用例得到的脚本;

  • 结构化脚本

    类似于结构化程序设计,具有各种逻辑 结构、函数调用功能;

  • 数据驱动脚本

    将测试输入存储在独立的(数据)文 件中,而不是存储在脚本中;

  • 关键字驱动脚本

    数据驱动脚本的逻辑扩张 ;

单元测试

什么是单元测试?

单元测试就是对已实现的软件最小单元进行测试,以保 证构成软件系统的各个单元的质量。

单元测试的目标:

  • 单元实现了其特定的功能,如果需要,返回正确的值;
  • 单元的运行能够覆盖预先设定的各种逻辑;
  • 在单元工作过程中,其内部数据能够保持完整性,包括全局变量的处理、内部数据的形式、内容及相互关 系等不发生错误;
  • 可以接受正确数据,也能处理非法数据,在数据边界条件上,单元也能够正确工作;
  • 该单元的算法合理,性能良好;
  • 该单元代码经过扫描,没有发现任何安全性问题;

单元测试的方法:

  • 黑盒测试

    不考虑程序内部结构和内部特性, 而是考察数据的输入、条件限制和数据输出,完成测试;

  • 白盒测试

    白盒测试方法是根据模块内部结构了解, 基于内部逻辑结构,针对程序语句、路径、变量状态等来 进行测试,检验程序中的各个分支条件是否得到满足、每 条执行路径是否按预定要求正确的工作;

什么是驱动程序?

对底层或子层模块进行(单元或 集成)测试时所编制的调用被测模块的程序,用以模拟被 测模块的上级模块。

什么是桩程序?

对顶层或上层 模块进行测试时,所编制的替代下层模块的程序,用以模 拟被测模块工作过程中所调用的模块。

示例:
软件测试复习
软件测试复习
白盒测试的目标:

  • 语句覆盖,使得程序中每一条可执行语句至少被执行一次;
  • 分支覆盖,使得程序中每一个分支都至少被执行一次(所有路径);
  • 条件覆盖,程序中每一个条件至少有一次被满足;
  • 路径覆盖,对程序模块的所有独立的基本路径至少要测试一次 ;

自顶向下深度优先测试路径以及宽度深度测试路径示例:
软件测试复习
自底向上测试集成测试的模块测试顺序:
软件测试复习
E→B→C→F→D→A

先测试节点,再测试由节点组成的模块,最后测试由模块组成的系统

三明治测试法的优点是什么?
它将自顶向下和自底向上的集成方法有机地 结合起来,不需要写桩程序因为在测试初自底向上集成已经验证了底层模块 的正确性。采用这种方法的主要缺点是:在真正集成之前每一个独立的模块 没有完全测试过。

三明治测试法示例:
软件测试复习
测试结果:
软件测试复习

功能测试

什么是功能测试?

依据产品设计规格说明书完成对产品 功能进行操作,以验证系统是否满足用户的功能 性需求。

什么是等价类法?

  • 等价类是某个输入域的子集,在该子集中每个输 入数据的作用是等效的;
  • 将程序可能的输入数据分成若干个子集,从每个 子集选取一个代表性的数据作为测试用例;
  • 在分析需求规格说明的基础上划分等价类,列出 等价类;

例题:

测试1600年至2100年的任意一天的下一天的日期情况

等价类划分如下:

  1. 1600<= y <=2100平年
  2. 1600<= y <=2100闰年
  3. y <1600
  4. y >2100
  5. m∈{1,3,5,7,8,10}
  6. m∈{4,6,9,11}
  7. m = 2
  8. m = 12
  9. m <1
  10. m >12
  11. 1<= d <=27
  12. d = 28
  13. d = 29
  14. d = 30
  15. d = 31
  16. d > 31
  17. d < 1

有效等价类:

  1. 2001.4.22
  2. 2000.2.29
  3. 1500.4.13
  4. 2000.3.31
  5. 2100.12.30
  6. 2001.2.28

无效等价类:

  1. 2101.5.10
  2. 2000.0.30
  3. 2000.13.2
  4. 2000.1.32
  5. 2000.1.0

什么是边界值法?

程序的很多错误发生在输入或输出范围的边界上, 因此针对各种边界情况设置测试用例,可以更有效 地发现缺陷。

边界值取值方式:
软件测试复习
因果图法:
软件测试复习
软件测试复习
软件测试复习
软件测试复习
软件测试复习
因果图样例:
软件测试复习
因果图转判定表:
软件测试复习
决策表例题:
软件测试复习
软件测试复习

系统测试

什么是系统测试?

  • 用户的需求可以分为功能性需求和非功能性需求,而非功 能性的需求被归纳为软件产品的各种质量特性,如安全性 、兼容性和可靠性等;
  • 系统测试就是针对这些非功能特性展开的,就是验证软件 产品符合这些质量特性的要求,从而满足用户和软件企业 自身的非功能性需求。所以,系统测试分为负载测试、性 能系统、容量测试、安全性测试、兼容性测试和可靠性测 试等;

仅供学习之用,侵删