软件测试
FreeL00P

一. 软件测试的基本概念

1 什么是软件质量

  • 基本概念:质量和客户。

  • 定义:软件产品满足规定的和隐含的需求与能力有关的全部特征和特性。(P19)

  • 包含:

    • 软件产品质量满足用户需求的程度。
    • 软件各种属性的组合程度。
    • 用户对软件产品的综合反应程度。
    • 软件在使用过程中满足用户要求的程度。
  • 产品质量
    功能适用性、效率、兼容性、易用性、可靠性、安全性、可维护性、安全性、可维护性、可移植性。

  • 使用质量
    有效性、效率、满意、远离风险、语境覆盖。

2 软件缺陷

  • 定义:

    • 从产品内部看,软件缺陷是软件产品开发过程或维护过程中所存在的错误、毛病等各种问题。
    • 从产品外部看,软件缺陷就是系统所需求实现的某种功能的失效或者违背。
  • 人们喜欢用bug代替Defect。

  • 产生原因

    • 技术问题、软件本身、团队工作。
  • 软件缺陷的构成

    • 代码、详细设计、初步设计、需求定义(占比最高)。

3. 软件测试的分类

  • 按测试层次划分为四个层次:

    • 底层测试:单元测试;
    • 接口层次:集成测试;
    • 系统层次:系统测试;
    • 用户/业务层次:验收测试。
  • 按测试目的分类:

    • 功能测试,也成为正确性测试;
    • 性能测试;
    • 兼容性测试;
    • 安全性测试;
    • 可靠性测试(系统是否能够长期稳定的运行);
    • 易用性测试,也称用户体验测试;
    • 回归测试(添加新功能后不会对原功能影响)。
  • 按测试方法分类

    • 根据被测软件是否被执行,软件测试可以分为:

      • 静态测试(F)
      • 动态测试(T)
    • 根据是否针对系统内部结构和具体实现算法来完成测试可以分为:

      • 白盒测试 (T)
        结构化测试或逻辑驱动测试。
      • 黑盒测试 (F)
        基于需求规格的测试或数据驱动测试方法。
    • 按照测试是否由软件工具完成测试可以分为:

      • 手工测试
      • 自动化测试
    • 其他测试方法:

      • 精准测试、模糊测试、蜕变测试、基于模型的测试。

4. 软件测试层次

  1. 单元测试(主要使用白盒测试方法);

    • 单元测试是测试执行的开始阶段,由编码人员完成,检查程序模块或组件已实现的功能与定义的功能是否一致。
  2. 面向接口的集成测试;

    • 目的是发现单元之间的接口问题
  3. 系统测试;

    • 不考虑代码实现方式,只检查程序功能是否按照需求规格说明书的规定正常使用。
  4. 面向业务的验收测试。

    • 在用户环境完成测试。

二. 软件测试方法

1. 基于输入域的方法

1.等价类划分方法
  1. 定义:选择合适的数据子集来代表整个数据集,通过降低测试的数目去实现合理的覆盖。

  2. 过程:分类和抽象。

  3. 优缺点

    • 优点:基于较少的测试用例就能够完整覆盖,减少了重复性;

    • 缺点:缺乏特殊用例的考虑,同时需要深入的了解系统知识,才能选择有效的数据。

  4. 有效等价类和无效等价类

    • 有效等价类:输入满足程序输入的规则。
    • 无效等价类:输入无效数据或规则外的数据。

2. 边界值分析法

3. 基于组合及其优化的方法

1. 判断表法(P51)

5个概念:条件桩、动作桩、条件项、动作项、规则。

2. 因果图法

介绍

因果图(Cuase-effect Graph)是一种描述输入条件的组合以及每种组合对应的输出的图形化工具。在因果图的基础上可以设计测试用例。因果图法通常和判定表相结合

因果图设计测试用例基本步骤如下:

  1. 分析程序规格说明书描述内容:确定程序的输入与输出,即确定“原因”和“结果”
  2. 分析得出输入与输入之间、输入与输出之间的对应关系:将这些输入与输出之间的关系使用因果图表示出来
  3. 在因果图上使用若干个约束符号来标明约束条件:由于语法与环境的限制,有些输入与输入之间、输入与输出之间的组合情况是不可能出现的
  4. 将得到的因果图转换成判定表
  5. 根据判定表设计测试用例:因果图法考虑了输入情况的各种组合以及各种输入情况之间的相互制约关系,可以帮助测试人员按照一定的步骤高效率地开发测试用例

因果图的图形符号表示关系

imageimage

  • (a)恒等。若原因出现,则结果出现;若原因不出现,则结果不出现。
  • (b)非。若原因出现,则结果不出现;若原因不出现,则结果出现。
  • (c)或。若几个原因中有一个出现,则结果出现;若几个原因均不出现,则结果不出现。
  • (d)与。若几个原因都出现,结果才出现;若几个原因中有一个不出现,则结果不出现。
公交一卡通自动充值模拟系统,其需求描述如下。
  ●系统只接收50元或100元纸币,一次充值智能使用一张纸币,一次充值金额只能为50元或100元。
  ●若输入50元纸币,并选择充值50元,完成充值后退卡,提示充值成功。
  ●若输入50元纸币,并选择充值100元,提示输入金额不足,并退回50元。
  ●若输入100元纸币,并选择充值50元,完成充值后退卡,提示充值成功,找零50元。
  ●若输入100元纸币,并选择充值100元,完成充值后退卡,提示充值成功。
  ●若输入纸币在规定时间内不选择充值按钮,退回输入的纸币,并提示错误。
  ●若选择充值按钮后不输入纸币,提示错误
使用因果图法给出公交一卡通自动充值系统的测试用例设计。
(1)给出条件与结果;
●投币50元(1)●投币100元(2)●选择充值50元(3)●选择充值100元(4)输出(结果)为:●完成充值、退卡(a)●提示充值成功(b)●找零(c)●提示错误(d)
(2)画出因果图;(为了描述的更清楚,可以将每种情况单独画一个因果图说明)
(3)转换为判定表;
(4)设计测试用例

imageimage

3. Pairwise方法(两两组合测试)

4. 基于组合及其优化的方法

1.判定覆盖
程序的每个判断条件的真分支和假分支都需要执行一次。

2. 条件覆盖
程序的每个判断条件的可能取值至少满足一次。

a>0?T1:F1,b>0?T2:F2,
a>1?T3:F3,c>1?T4:F4,

测试用例 取值条件 具体取值条件
输入: a=2,b=-1,c=-2
输出:a=2,b=-1,c=-2
T1,F2,T3,F4 a>0.b<=0,a>1,c<=1
输入: a=-1,b=2,c=3
输出:a=-1,b=2,c=-6
F1,T2,F3,T4 a<=0,b>0,a<=1,c>1

3. 判定-条件覆盖
程序的判断条件中的所有条件可能取值至少执行一次,所有判断结果都要执行一次。

4. 条件组合覆盖
程序的每个判断条件的所有可能至少出现一次。
条件:a>1||b<0,用例:TT,TF,FT,FF

5. 基本路径覆盖
设计所有的测试用例,来覆盖程序中所有可能的、独立的执行路径。
环路复杂度V(G)=区域数目=边界数-节点数+2=判断节点数+1。
基本路径集合不是唯一,但需要确保每条路径都走到。

image

流程图->控制流图

imageimage

5. 基于缺陷模式的测试

1. 常见的缺陷模式

错误使用语法类故障
安全漏洞模式
低性能模式
并发缺陷模式
不良习惯模式
硬编码模式
易诱骗代码模式

6. 基于模型的测试

一般运用于通信协议测试、API测试
工具:Spec Exploer

7. 功能图法

一个程序的功能通常由静态说明和动态说明组成

  • 动态说明描述了输入数据的次序或者转换的次序。
  • 静态说明描述了输入条件和输出条件之间的对应关系。

功能图法使用功能图形式化的表示程序的功能说明,并按照图覆盖原理生成测试用例。
图覆盖准则可以分为:

  • 节点覆盖、边覆盖、路径覆盖。

三. 软件测试流程

需求评审=>设计评审=>单元测试=>集成测试=>系统测试=>验收测试=>测试计划
=>测试设计=>执行和监控=>结果分析与评估=>项目总结。

一些知识点

白盒测试有静态测试,也有动态测试
软件缺陷是由很多方面造成的,以下哪个方面是造成软件缺陷的最多的地方 编写代码
覆盖准则最强的是 路径覆盖
实际的逻辑覆盖测试中,一般以 条件组合覆盖 为主设计测试用例。
发现错误能力最弱的覆盖准则是 语句覆盖
单元测试所使用的主要测试方法是 白盒测试
对于软件缺陷的修复费用,在哪个阶段的费用花费最小 分析阶段
静态测试的主要对象是 代码检查、代码风格与规范
单元测试主要测试是模块在 语法、格式、逻辑 上的错误。
单元测试主要由 开发人员和测试人员 完成,其中 开发人员 起主要作用。
集成测试所使用的主要测试方法是 黑盒测试
系统测试主要包括包含了多种测试活动,主要分为 功能性测试、非功能性测试。系统集成测试常见的有哪几种不同模式 非渐增式测试模式、渐增式测试模式
软件的兼容性测试包括 向前和向后兼容、横向测试
软件的缺陷通常集中在 需求分析、系统设计 阶段。
对于一些关键代码或新人写的代码,主要采取 会议审查 方式。
在集成测试中,主要的集成方法有 自顶向下、自底向上、大爆炸、三明治
文档测试主要检查文档的 正确性、完备性、易理解性、一致性
验收测试完成后还需要提交 验收报告、交付报告,才可交付用户使用。
软件本地化工作中除了翻译之外还应该 处理字符集问题、数据格式、页面显示和布局、配置和兼容性等问题
造成软件的主要原因可从 技术问题、软件本身、团队工作 方面来查找。
代码评审有哪些方法 代码走查、正式会议审查、代码会审、代码咨询
软件产品的质量中的非功能需求包括 适用性、有效性、可靠性、性能
当程序有修改,并且要求保证原有功能正常的情况下,必须采用 回归测试 方法。
对于整个软件的本地化过程来说,需要解决的技术问题主要有 数据格式、页面显示和布局、配置和兼容性问题
测试团队的基本责任应该是 发现软件程序、系统或产品中的所有问题、尽早地发现问题、督促开发人员尽快地解决程序中的缺陷、帮助团队解决资金问题
驱动程序,用以模拟被测模块的 上级模块
整体测试用例的质量要求包括 覆盖率、易用性、易维护性、粒度适中
易用性、兼容性、安装、文档测试等主要在 单元测试 阶段完成。

一些判断题

  1. 能够尽可能早的发现软件缺陷,就能够尽可能地节约修复缺陷的成本,因此,因此在软件的设计阶段修复缺陷的费用最低。(F)
  2. 根据著名的瀑布模型,软件测试应该处在“编程”的下游、在“软件维护”的上游,先有编程,后有测试,测试的位置很清楚。(T)
  3. 为了能更多测试出软件的缺陷,测试用例的一般要求越复杂越好。(F)
  4. 因为软件开发人员不止一人,因此在测试时候,只能进行松散地实施测试。(F)
  5. 每一种测试方法都必须执行程序,才能得到最好的效果。(F)
  6. 单元测试的主要人员构成是开发人员。(T)
  7. 集成测试就是系统测试。(F)
  8. 在进行系统测试的时候,当发现有错误时候,应该及时修正,紧接着修正下一个错误。(T)
  9. 有的时候因为时间紧迫,可以临时安排几个程序员或者行业新手做测试工作。(F)
  10. 在实际的运用中,无论对于白盒测试和黑盒测试,通常使用其中一种方法就可以完成对某一软件的测试工作。(F)
  11. 验收测试是测试的最后一个环节,该测试完成后,马上可以交付用户使用。(F)
  12. 软件质量的要求是要满足软件的功能性需求。(F)
  13. 系统测试的目的是检查已经通过单元测试的单元之间的接口是否存在问题。(T)
  14. 在软件的开发中,每次回归测试都要重新运行完整的测试包。(F)
  15. 在整个软件团队中,对软件测试人员的要求比较低,会操作计算机、有一定的软件使用经验就可以。(F)
  16. 在对软件缺陷的描述中,测试人员可以对有个人的观点,也可以对开发人员进行评价,有利于开发人员提高开发质量。(F)
  17. 在整个软件生命周期中的每个阶段、每个时刻都存在着软件测试活动,软件测试伴随着软件开发。(T)
  18. 验收测试是由用户完成的。(F)
  19. 在一个规范的软件的开发中,开发人员的人数一般大于测试人员的人数。(F)
  20. 在整个开发周期中要对测试用例进行有效的跟踪和维护。(T)
  21. 功能测试也可以采用白盒测试的方法。(F)

简答题

给出白盒测试与黑盒测试的不同

  • 白盒测试和黑盒测试是两类软件测试方法,传统的软件测试活动基本上都可以划分到这两类测试方法中。下表给出了两种方法的一个基本比较。 黑盒测试和白盒测试比较

  • 白盒测试和黑盒测试各有侧重点,不能相互取代,在实际测试活动中,这两种测试方法不是截然分开的。通常在白盒测试中交叉着黑盒测试,

  • 黑盒测试中交叉着白盒测试。相对来说,白盒测试比黑盒测试成本要高得多,它需要测试在可以被计划前产生源代码,并且在确定合适数据和决定软件是否正确方面需要花费更多的工作量。

黑盒测试设计测试用例主要有哪几种方法?

  • 1)等价类划分方法
  • 2)边界值分析方法
  • 3)错误推测方法
  • 4)因果图方法
  • 5)判定表驱动分析方法
  • 6)正交实验设计方法
  • 7)功能图分析方法

测试用例由哪两部分组成?

  • 测试输入数据和对应的预期输出

集成测试中的两种集成模式是?

  • 非渐增式集成

软件性能测试包括?

  • 容量测试、压力测试、界面测试、安全测试、可靠性测试、负载测试、强度测试

编写单元测试用例说明书的依据是?

  • 需求分析、实际数据、预期结果

软件验收测试包括哪三种类型?

  • Alpha版、Beta版、正版

软件开发的基本过程包括?

  • 设计、实现、测试

软件测试活动的生命周期分为哪几部份?

  • 软件定义、软件开发、软件使用与维护

软件的缺陷等级应如何划分?每类错误包括哪些错误?

  • A类—严重错误
  • B类—较严重错误
  • C类—一般错误
  • D类—较小错误

描述静态测试和动态测试的区别。

  • 静态测试:不运行被测程序,通过分析或检查源程序来检查程序的正确性。
  • 动态测试:通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能。

比较负载、容量测试和强度测试的区别?

  • 负载测试:测试系统在超负荷环境中运行的能力。
  • 强度测试:在系统资源特别低的情况下测试软件系统运行情况。
  • 容量测试:确定系统可处理同时在线的最大用户数。

软件测试的原则?

  • 尽早和不断的测试。
  • 避免程序员检查自己的程序。
  • 考虑合法和不合法输入以及各种边界条件。
  • 注意错误集中发生现象。
  • 对测试错误结果有确认过程。
  • 制定严格的测试计划,安排宽松的测试时间。
  • 回归测试的关联性。
  • 进行版本控制,制定变更测试文档的流程。

一个优秀的测试工程师应该具备哪些素质?

  • 良好的计算机编程基础
  • 创新精神和超前意识
  • 不懈努力,追求完美
  • 整体观念,对细节敏感
  • 团队合作精神

软件测试活动的生命周期及各阶段的内容。

  • 计划、需求分析、设计、程序编写、测试实施、运行和维护

测试结束的标准是什么?

  • 严重程度在可接受范围内的缺陷已关闭
  • 是否达到原先的覆盖定义标准

简单介绍至少五款软件测试或测试管理的工具。

  • WinRunner:进行功能测试
  • LoadRunner:进行性能测试
  • QuickTest Professional:支持功能测试和验收测试
  • JMeter:进行web测试
  • Badboy
  • VUnit 2.6
image