概念与应用问题

  • 缺陷的概念,缺陷的等级?缺陷来源于什么?表现在哪些方面?
  • 缺陷报告必须要包含的一些基本信息是什么?包括哪些部分?
  • 决策表法(重点),决策表法设计测试用例(大题)
  • 什么是黑盒测试?什么是白盒测试?什么是性能测试?什么是压力测试?什么是自动化测试?
  • 边界值法的测试用例(大题)
  • 基本路径覆盖(大题),绘制出控制流图,设计最基本的测试用例(54页)
  • 测试需求分析需要做哪两方面的事情?
  • 测试用例是做什么用的?用来解决什么问题?
  • 判定覆盖的基本思想是什么?它是怎么做的?条件覆盖呢?
  • 什么是有效等价类?什么是无效等价类?
  • 软件测试解决了一个什么问题?:展开讨论
  • 接口测试的一个目的何在?为什么要进行接口测试?在进行白盒/黑盒测试的时候,黑盒测试怎么测试的?他起到什么作用,在什么情况下,要用白盒测试法,白盒测试法的作用是什么?
  • 因果图、正交法(补充)
  • 1-4章范围之内,考察最基本的概念,主要分值在第三章

题型

填空

  • 测试需求分析需要做哪两方面的事情?
  • 缺陷报告的主要组成部分

名词解释*20

  • 什么是性能测试?什么是压力测试?什么是自动化测试?
  • 缺陷的概念
  • 什么是有效等价类?什么是无效等价类?

简答*30

  • 缺陷来源于什么?表现在哪些方面?

  • 软件测试解决了一个什么问题?:展开讨论

  • 接口测试的一个目的何在?为什么要进行接口测试?

  • 在进行白盒/黑盒测试的时候,黑盒测试怎么测试的?他起到什么作用,在什么情况下,要用白盒测试法,白盒测试法的作用是什么?

  • 黑盒测试是通过什么方法来发现错误的?

  • 判定覆盖的基本思想是什么?它是怎么做的?条件覆盖呢?

综合题*40

  • 决策表法(重点),决策表法设计测试用例(大题)
  • 边界值法的测试用例(大题)
  • 基本路径覆盖(大题),绘制出控制流图,设计最基本的测试用例(54页)

软件测试大复习

第一章

为什么要进行软件测试?他的必要性?

软件测试是软件质量保证的关键步骤

软件测试和质量保障的关系

SQA(软件质量保证)与软件测试之间相辅相成,既存有包含又存有交叉的关系。

  • SQA指导、监督软件测试的计划和执行,督促测试工作结果客观、准确和有效,并协助测试流程的改进。
  • 软件测试是SQA重要手段之一,为SQA提供所需的数据,作为质量评价的客观依据。

第二章

软件缺陷的定义,表现在哪些方面?

  • 软件缺陷的定义:
    • 从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题
    • 从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背
  • 软件测试缺陷表现在:
    • 需求规格说明书有问题(需求分析问题)
    • 用户界面不美观(系统设计问题)
    • 设计不合理,存在缺陷(系统设计问题)
    • 用户不能接受的其他问题(系统设计问题)
    • 运行出错(系统设计问题)
    • 数据计算错误(编程阶段问题)
    • 功能、特性没有实现或者部分实现(编程阶段问题)
    • 在某种特定条件下没能给出正确和准确的结果(编程阶段问题)

软件缺陷的构成?

  • 需求分析
  • 系统设计
  • 编程阶段

缺陷报告的主要组成部分(填空)

  • 标题
  • 操作步骤
  • 期望结果
  • 实际结果

软件缺陷的按严重性的等级划分?(或许是简答题)

  • 致命的:不能执行正常工作功能或重要功能,或者危及人身安全
  • 严重的:严重地影响系统要求或基本功能的实现,不能执行正常工作或重要功能,没有办法更正
  • 一般的:
    • 操作界面不规范
    • 操作者感到不方便或者麻烦
    • 辅助说明描述不清楚
    • 长时间操作但不给用户提示,类似死机
  • 微小的:其他缺陷或建议类缺陷

什么是软件测试报告?由哪几方面组成?(或许是简答题)

  • 软件测试报告:测试报告是指把测试的过程和结果写成文档,对发现的问题和缺陷进行分析,为纠正软件的存在的质量问题提供依据,同时为软件验收和交付打下基础
  • 软件测试报告由哪几方面组成:
    • 概述
    • 测试对象和概要
    • 测试结果及发现
    • 对软件功能的结论
    • 分析摘要
    • 测试资源消耗

测试需求分析需要做哪两方面的事情?(或许是填空)

  • 详细了解并深挖需求
  • 确定测试范围

软件测试的几大分类?(包含许多考点)

  • 按层次分类:
    • 底层测试
    • 接口层次:
      • 软件接口测试是测试系统组件间接口的一项测试工作
      • 软件接口测试是以保证系统正确和文档为核心,以持续集成为手段,主要为了提高测试效率,以及降低产品开发成本
    • 系统层次
    • 用户层次
  • 按被测试的对象分类:
    • 单元测试
    • 程序测试
    • 系统测试
    • 文档测试
    • web应用测试
    • 数据库测试
  • 按测试阶段划分
  • 按测试目的划分
    • 功能测试:验证每个功能是否按照事先定义的要求那样正常工作
    • 压力测试:用来检测系统在不同负载条件下的系统运行情况,特别是高负载、极限负载下的系统运行情况,以发现系统的不稳定、系统性能瓶颈、内存泄漏、CPU使用率过高等
    • 性能测试:通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
    • 回归测试是指对软件的新版本测试时,重复执行之前某一个重要版本的所有测试用例
    • 冒烟测试:指在对一个新版本进行系统大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测性
    • 自动化测试利用工具软件,或者编写代码的方法,测试被测的软件系统

静态测试与动态测试的概念?

根据程序是否运行,测试可以分为静态测试和动态测试。

  • 静态测试:指不实际运行被测对象,而只是静态的检查程序代码、界面或文档中可能存在错误的过程
  • 动态测试:实际运行实测对象,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程或观察代码的运行来获取各方面信息的过程

黑盒测试与白盒测试?

  • 白盒测试:已知产品的内部工作过程,清楚最终生成软件产品的计算机程序结构及其语句,按照程序内部的结构测试程序。
  • 黑盒测试:在测试时,完全不考虑程序内部结构和内部特性,针对软件直接进行测试。

二者可以通过:

  • 静态测试方法
  • 动态测试方法

发现缺陷

测试计划与测试用例?

  • 测试计划:为了高效地、高质量地完成测试任务而做的准备工作,包括对工作量的估算、测试资源和进度安排、测试风险评估、测试策略制定等工作。
    • 内容:
      • 目标和范围
      • 项目估算
      • 风险计划
      • 进度安排
      • 资源配置
      • 跟踪和控制机制
  • 测试用例:为了特定的测试目的而设计的测试条件、测试数据以及与之相关的测试规程的一个特定的使用实例或场景。
    • 意义:
      • 测试用例是测试人员在测试过程中的重要参考依据
      • 测试用例将有助于节约测试时间,提高测试效率
      • 良好的测试用例不断地被重复使用,使得测试过程事半功倍
      • 测试用例是一个知识积累的过程

第三章(最重要的一章)

有效等价类与无效等价类

  • 无效等价类是指对于软件规格说明而言,没有意义的、不合理的输入数据集合
  • 有效等价类指输入完全满足程序输入的规格说明,有效、有意义的输入数据所构成的集合。

决策表设计测试用例(挺有意思)

看这篇文章,通俗易懂:决策表设计测试用例如何设计?

如果你是懒比,那看下面的小妙招就可以学会什么是决策表/判定表设计测试用例。

决策表/判定表这个东西主要由四个东西组成,由条件桩、条件项、动作桩、动作项组成。这些勾八概念不是人听的,但是要记住,因为可能考名词解释或者是简答题。我们先把这个决策表以表格的形式整出来。

序号 1 2 3 4
是否在寝室 Y Y N N
手机能否看片 Y N Y N
打胶
睡觉

序号下面的:是否在寝室、手机能否看片是条件桩,而打胶、睡觉则是动作桩。那么条件项就是是否在寝室、手机能否看片后面的1234,动作桩同理。

这便是最初的初始化判定表,还有个优化判定表。这是个什么鸡儿东西呢?

我们观察到,13或许可以合并一下,因为动作项√号位置相同,而条件项只有是否在寝室不同,那么我们就可以把他们合并,合并成如下的形式:

1/3
-
Y

(-)代表Y/N都有,是无关条件,由于合并之后的无关条件项(-)包含其他条件项取值,因此具有相同动作的规则还可进一步合并,这里要注意:1/3与4不能再合并了,因为除了无关条件之外,并没有条件项一样的了。

于是,我们的合并旅程结束了,得到的优化判定表如下:

序号 1/3 2 4
是否在寝室 - Y N
手机能否看片 Y N N
打胶
睡觉

由此我们得到了一个更牛逼的测试用例,只需要三组就可以达到之前四组才能测出程序缺陷的效果。为啥呢,因为你无论在不在寝室,只要你手机能看片,你也能打胶。

下面我们来点名词解释:

  • 条件桩:列出问题的所有条件
  • 动作桩:列出可能针对问题所采取的操作
  • 条件项:针对所列条件的具体赋值
  • 动作桩:列出在条件项组合情况下应该采取的动作

边界值法设计测试用例(勾八题目)

实践证明,程序往往在输入输出边界值情况下发生错误。边界包括输入等价类和输出等价类的大小边界,程序检查边界情况的测试用例是比较高效的,可以查出更多错误。

边界值分析法定义

边界分析法就是在某个输入输出变量范围的边界上,验证系统功能是否正常运行的测试方法。

这题据说考计算题,是真勾八啊,这题考鸡毛计算题啊!?

简而言之,软件测试所包含的边界检验有几种类型:数字、字符、位置、质量、大小、速度、方位、尺寸、空间等等,而相应的边界值就是最大/最小、首位/末尾、上/下、最快/最慢、最高/最低、最短/最长、空/满等。

小妙招:

比如计算闰年小程序,我们计算边界值,就可以选年月日的边界组合,一共有八种,年超界,月不超,日不超…等等。还可以钻特殊值,比如2月28号这种。

基本路径覆盖 计算复杂度(这题还有点含金量)

顾名思义,基本路径覆盖就是设计所有的测试用例,来覆盖程序中的所有的可能的、独立的执行路径。

重要的是画程序流图和计算程序环路复杂度。

因为谈到基于逻辑的覆盖方法了,那就直接把要考的所有关于此的考点都罗列在这个子问题下面,也方便理解什么是基本逻辑覆盖。

判定覆盖

判定覆盖的基本思想是设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均被满足。

条件覆盖

条件覆盖的基本思想是设计若干测试用例,执行被测试程序以后,要使每个判断中每个条件的可能取值至少满足一次。

条件组合覆盖

条件组合覆盖的基本思想是设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次。

这个就是把每个条件的组合写出来,它与条件覆盖的差别是他不是简单的要求每个条件都出现真与假两种结果,而是要求让这些结果的所有可能组合都至少出现一次。

我们拿个例子来说明:

程序代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 假设Z=1,输入两个整数x,y,通过程序判断返回值ret。程序Demo如下
public static int getNmb(int x,int y)
{
int z = 1;
int ret =0;
if (x<0){
z=y-x;
}
else{
z=y+x;
}
if(z<10 && y>0)
{
ret = z*y;
}
else
{
ret= z*x;
}
return ret;
}

程序流图:

程序流图

判定覆盖:

003 与 004 分别走了abde NN分支和acdf YY分支,真假分支每个都遍历到了。

条件覆盖:

005与006 分别执行了x<0 y>0 z>10条件与x>0 y<0 z>10条件,x y的取的真假都遍历到了,而z的真缺了,这个当时做实验的实验暂时没想到怎么设计。

条件组合覆盖:

相当于把xyz的真假取值都遍历一遍,一共有八种可能。但这个程序我只搞出了6种,剩下的2种没想出来。

编号 执行条件 输入 期望输出 实际输出 执行路径
001 语句覆盖 x=2,y=-3 -2 -2 abde
002 语句覆盖 x=-5,y=4 36 36 acdf
003 判定覆盖 x=1,y=-2 -1 -1 abde
004 判定覆盖 x=-3,y=4 28 28 acdf
005 条件覆盖 x=-2,y=4 24 24 acdf
006 条件覆盖 x=15,y=-3 180 180 abde
007 判定条件覆盖 x=-2,y=4 24 24 acdf
008 判定条件覆盖 x=15,y=-3 180 180 abde
009 条件组合覆盖 x=-1,y=12 -13 -13 acde
010 条件组合覆盖 x=-15,y=-2 -195 -195 acde
011 条件组合覆盖 x=-1,y=1 2 2 acdf
012 条件组合覆盖 x=-5,y=-4 -5 -5 acde
013 条件组合覆盖 x=1,y=7 56 56 abdf
014 条件组合覆盖 x=8,y=-2 48 48 abde

基本路径覆盖

结合条件组合覆盖和路径覆盖。路径覆盖就是执行路径的组合。

操了,写到这才发现这题目确实牛逼,我建议,如果有同学能把这题写出来,老师就直接给过吧,太几把费劲了。

写题目形式要这样:

测试用例 覆盖路径 覆盖条件
输入:x=-1,y=12,z=-13 输出:-13 acde T1,T2,F3

其中T1代表x<0取True,若有F3,则表示z<10取False。

覆盖组合就省略了,要不然还得用判定-条件组合来搞出覆盖组合,太麻烦了。

计算程序环路复杂度

通过对控制流图的分析和判断来计算模块复杂性。环路复杂性可以用V(G)来表示,其计算方法是:

  • V(G)=区域数目。区域是由边界和节点包围起来的形状所构成。计算区域时候应该包括图的外部区域,将其作为一个区域
    • 如下图是上面的程序流图抽象出来的小黑点程序流程图
    • 区域数目
    • 一共有3个区域,故复杂度为3
  • V(G)=边界数目-节点数目+2,从上图可以看出一共有8条边,7个节点,故有复杂度为3.
  • V(G)=判断节点数目+1,如图,判断节点一个有两个,故复杂度为3.