软件测试技术01335复习考试

2021-09-28  本文已影响0人  东也_

教材《软件测试技术》第二版


测试教材.jpg

考试大纲 + 课后习题

第1章 概述

回归测试就是对上一版本测试中产生的缺陷问题,经过修改后,再次进行验证,确认bug是否修复的过程。

第3章 白盒测试

   int Test(int i_count, int i_flag) {
         int i_temp = 0;
   ①  while (i_count > 0) {
    ②    if(i_flag == 0) {
     ③       i_temp = i_count + 100;
            break;
            } 
     ⑨   else {
      ④      if (i_flag == 1) {
       ⑤         i_temp = i_temp + 10;
                } 
         ⑩   else {
        ⑥        i_temp = i_temp + 20;

            }
        }
    ⑦  i_count --;
    }
  
  ⑧  return i_temp;

  }

控制流图:


流程图.jpg

测试用例如下:
路径1: ① → ⑧ (i_count <= 0)
路径2: ① → ② → ③ → ⑧ (i_count > 0, i_flag = 0)
路径3:① → ⑨ → ④ → ⑤ → ⑦ → ① → ⑧ (i_count > 1, i_flag = 1)
路径4: ① → ⑨ → ④ → ⑥ → ⑦ → ① → ⑧ (i_count > 1, i_flag != 1)

  1. 用逻辑覆盖对下面的Java 代码段进行测试(画出程序流程图和控制流图,并写出每种覆盖准则设计测试用例)。
public char function(int x, int y) {


        char t;
      ①  if (x >= 90 && y >=90) {

          ②  t = 'A';


       ③ } else {
         ④   if (x + y >= 165) {
          ⑤      t = 'B';
            }
          ⑥  else {

                t = 'C';
            }
        }
    ⑩    return t;
    }

这里就只画图了


程序流程图.jpg

第4章 黑盒测试

课后习题:

  1. 黑盒测试的描述:
  1. 黑盒测试的方法有:等价类划分、边界值分析法、 错误推测法、因果图法、决策表法;
  2. 划分软件测试属于白盒测试还是黑盒测试的依据是:是否能看到被测源程序;
  3. 简述黑盒测试方法的特点。

特点如下:
1. 适用于功能测试、可用性测试及可接受性测试;对照说明书测试程序功能;
2. 可测试长的、复杂的程序的工作逻辑,易被理解。不可能进行完全的、毫无遗漏的输入测试,有一些软件Bug或人为设置的故障通过黑盒测试是无法检测出来的。
3. 黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身设计有问题或规格说明的规定有误,用黑盒测试方法是发现不了的。

  1. 健壮等价类测试和标准等价类测试的主要区别是什么?

等价类划分法是把所有可能输入的数据,即程序的输入域划分若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例;等价类就是指某个输入域的子集和;
针对是否对无效数据进行测试,可以将等价类测试分为标准等价类测试和健壮等价类测试;
1. 标准等价类测试是只考虑有效值的数据,测试用例使用每个等价类中的一个值;
2. 健壮等价类测试主要考虑了无效输入,对有效输入,测试用例从每个有效等价类中取一个值,对无效输入,一个测试用例取一个无效值,其他值均取有效值。

  1. 试为三角形问题中的直角三角形开发一个决策表和相应的测试用例。注意:存在等腰直角三角形。
    样例决策表:
    来不及细写了 格式大概如下:
    如果条件有n个,那么规则的个数就是2的n次方; ‘-’ 代表条件极为相似的关系,统一使用'-'表示;
条件 / 规则 规则
1-8
规则
9
规则
10
规则
11
规则
12
规则
13
规则
14
规则
15
规则
16
条件:c1: a、b、c构成三角形?
c2: a = b?
c3: b = c?
c4: a = c
N
-
-
-
Y
Y
Y
Y
Y
N
Y
Y
Y
Y
N
Y
Y
Y
Y
N
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
动作:r1: 不构成三角形
r2: 一般三角形
r3: 等腰三角形
r4: 等腰直角三角形
r5: 等边三角形
✔️







✔️




























测试用例:

测试用例编号 a b c 结果
1 10 10 10 等边三角形
1 1 2 3 一般三角形
1 0 10 10 不构成三角形
  1. 给定二元函数f(x,y),输入变量x,y分别满足x ∈[1,16], y∈[1,51]。 写出该函数采用边界值分析法设计的测试用例。
    如果程序有n个变量,那么采用边界值分析测试程序会产生4n + 1个测试用例(健壮性测试6n + 1),取值策略 包括min(最小值) min+(略大于最小值) nom(正常值) max-(略小于最大值) max(最大值) min-(略小于最小值) max+ (略大于最大值)

{ <1, 25>, <2, 25>, <15, 25>, <16, 25>, <8, 25>, <8, 1>, <8, 2>, <8, 50>, <8, 51> }
如果是健壮性边界测试再加上{<0, 25>, <17, 25>, <8, 0>, <8, 52>}

第5章 单元测试

课后练习

  1. 单元测试中用来模拟被测模块调用者的模块是:驱动模块

  2. 单元测试的内容包括:

    • 判断得到的结果是否正确;
    • 判断是否满足所有的边界条件;
    • 分析是否能够使用反相关联检查;
    • 分析是否可以强制一些错误发生;
    • 分析模块接口;
    • 分析局部数据结构;
    • 分析独立路径;
    • 分析出错处理是否正确;
  3. 在进行单元测试时,常用的方法是:采用白盒测试,辅之以黑盒测试;

  4. 单元测试有哪些步骤?各个步骤有哪些实施内容?

答: 单元测试步骤主要分为以下几个阶段:
1. 准备阶段,准备开发环境,设计测试用例并审查;
2. 编制阶段,程序员根据设计说明书进行编码;
3. 代码审查阶段,对源代码进行代码审查;
4. 单元测试阶段,利用相关测试工具对单元测试代码进行测试,最终生成测试报告和bug清单;
5. 评审、提交阶段,对源代码文件进行统计评审,给出评审结论,并将其提交到配置库中;

  1. 简述单元测试的目的和意义。

答:
单元测试的目的:
验证开发人员所编写的代码是否按照其所设想的方式执行,并产生符合预期值的结果,确保产生符合其需求的程序单元;
单元测试的意义:
程序在经过单元测试之后,系统集成过程将会大大的简化,开发人员可以将精力更好的集中单元之间的交互作用和全局的功能实现上,而不会陷入充满很多bug的单元之中不能自拔;

  1. 单元测试策略主要有哪些,并描述这些策略。

答:单元测试的策略如下:
1. 自顶向下的单元测试策略,从最顶层开始,将顶层调用的模块做成桩模块,再测试下一层的时候,以上一层为驱动模块进行测试,直到测试完所有单元;
2. 自底向上的单元测试,从调用模块的最底层模块开始测试,模拟调用该模块的模块为驱动模块,再对上一层模块测试时,用已经被测试的模块做桩模块,以此类推,直至测试完所有单元;
3. 孤立测试,无须考虑每个模块之间的关系,再对单个模块进行测试时,对模块单独设计驱动模块和桩模块,逐一完成所有单元模块的测试;

  1. 什么是驱动模块和桩模块?为下面的函数构造一个驱动模块。
int devide(int a, int b) {
       
       int c;
       if (b == 0) {
           printf("除数不能为0");
           return 0;
       }
       c = a / b;
       return c;
   }

答:
驱动模块相当于所测模块的主程序,它接受所测程序的数据,把这些数据传递给所测模块,最后再实际输出测试结果;
桩模块用于替代所测模块调用的子模块。桩模块可以进行少量的数据操作,不需要实现子模块所有功能,只需要根据需要来实现子模块的一部分功能;

驱动模块构造

void main() {

        int x, y, result;

        scanf("%d%d",x,y);

        result = divide(x,y);

        printf(result);

    }

第6章 集成测试

课后习题

  1. 集成测试有哪些不同的集成方法? 简述不同方法的特点。

答:集成测试的方法包括:
1. 基于分解的集成:分解的集成又分为非增量式和增量式两大类。大爆炸集成方法属于非增量式测试,就是一次性把通过单元测试的模块集成到一起进行测试,不考虑组件之间的依赖关系和可能存在的风险。自顶向下和自底向上集成属于增量式集成。自顶向下集成就是从顶层控制模块开始,依照系统层次结构图,对各个模块一边组装一边进行测试。自底向上集成就是从最小的底层模块开始,按层次结构图,逐层向上集成。
2. 三明治集成,是一种混合式增殖式测试策略,综合了自顶向下和自底向上方法的优点,也叫基于功能分解集成。主要是区分出一个中间并以此为界,中间层上方使用自顶向下策略,中间层下方使用自底向上策略,中间层各模块先跟下层集成,然后字跟上层,最后对所有模块进行集成测试;
3. 修改过的三明治集成,主要是补充了三明治集成中间层不能进行充分测试的缺点。即对中间使用独立测试策略,就是开发相应的驱动模块和桩模块对中间层的模块进行测试
4. 基于调用图的集成,把程序内部个单元的调用关系模拟成单元调用图,而单元调用图是一种有向图,节点表示程序单元,边代表调用关系。有两种集成方式,成对集成和相邻集成。成对集成就是对调用图的每个边都创建一个集成测试会话,虽然会创建多个集成测试过程,但可以减少驱动模块和桩模块的开发。相邻集成是针对节点而言的,对节点及该节点邻居形成一个集成进行测试。
5. 基于路径的集成,根据源节点、汇节点生成模块执行路径的集成方式。源节点指的是程序开始执行或者开始处的点。汇节点指的是程序执行片段结束处的点。
6. 分层集成,对系统应用进行分层,然后各层采用大爆炸,自顶向下、自顶向上、三明治的策略进行集成测试。适用于通信系统,不适合各层关系复杂的系统;
6. 基于功能的集成,按照模块功能的重要程度组织模块的集成顺序。依次按照模块的重要程度进行集成测试;
7. 高频集成,频繁的向一个已经稳定的系统基线中添加新的代码(迭代),防止给稳定系统带来错误的一种集成测试方法。
8. 基于进度的集成,最大限度的保持开发和测试的并行性,对最早可获得代码进行集成,必要时开发驱动模块或桩模块进行集成测试;
9. 基于风险的集成,尽可能早的验证高风险的模块;
10. 基于事件的集成,又叫基于消息的集成,主要是验证消息路径的正确性,渐增式的把系统集成到一起;
11. 基于使用的集成,主要是针对面向系统,根据类之间的关系进行集成测试。
12. 客户服务器的集成,单独测试每个客户端和服务器端,必要时设计驱动模块和桩模块;

  1. 简述基于功能分解的集成的特点,并分析其适用的应用场景。

基于功能的分解集成也就是三明治集成,它的特点是:以系统功能分解为基础,在方法上综合了自顶向下和自底向上两种集成的优点,并在各个子模块上进行了真正的大爆炸集成,因此对于驱动器和桩模块的工作量较少,然而也会带来定位缺陷困难的问题;
它的使用场景:适用大部分软件开发项目,采用结构化编程方法的产品;

  1. 简述基于调用图的集成的特点, 并分析其适用的应用场景。

基于调用图的集成的特点:它属于结构性测试方法,将功能分解图细化为单元调用图。他有两种集成方式,分别是成对集成和相邻集成。这两种方法都能大大减少驱动器和桩模块开发的工作量,相邻集成的特点决定了它也具有缺陷隔离困难的缺点;
他的应用场景:使用与大部分软件开发项目,采用结构化编程方法的产品;

  1. 如图所示,采用基于功能分解的集成方法分析模块图的集成测试会话,分别采用自顶向下、自顶向上、三明治集成的方法。


    image.png

使用自顶向下集成步骤如下:
1. 测试M1模块,并且设计桩模块D2、D3、D4代替M1模块实际调用的M2、M3、M4模块;
2. 使用实际M2模块代替D2桩模块测试;
3. 使用M3实际模块代替D3桩模块,并设计D5、D6桩模块代替M3的调用模块M5、M6进行测试;
4. 使用实际模块4代替D4桩模块进行测试;
5. 使用实际模块M5代替D5桩模块进行测试;
6. 使用实际模块M6代替D6桩模块,并设计D7桩模块代替M6调用的M7模块,然后进行测试;
7. 使用M7代替桩模块D7进行测试;
使用自底向上集成策略步骤如下:
1. 为M7的调用模块M6设计D6驱动模块,然后将M7和D6集成进行测试;
2. 模拟M3调用M6的关系,设计D3驱动模块,把通过集成测试的M6和M7集成起来进行测试;
3. 模拟M1调用M3设计D1驱动模块,与M7、M6、M3模块集成进行测试;
4. 其他以此类推...
使用三明治集成步骤如下:
以M3模块为中间层,并行测试目标层上一层,目标层下一层,具体步骤如下:


IMG_1971.jpg

第7章 系统测试

课后习题

  1. 什么事系统测试?

系统测试就是将已经集成好的软件系统,作为整个计算机系统的一个单元,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。

  1. 系统测试主要包括哪些内容?

测试主要包括:
1. 功能测试
- 系统中最基本的测试,验证所开发的系统是否达到了客户的要求,是否能够按照需求说明正常工作;
2. 协议一致性测试
- 主要针对分布式系统,测试系统之间的通信协议的一致性、性能、互操作性、健壮性;
3. 性能测试
客户端的性能测试
- 并发性能测试,利用自动化负载工具进行测试;
- 疲劳强度测试、系统咋正常情况支持的用户最大并发数;
- 大数据量测试、针对系统存储、传输、看,
- 速度测试: 测试软件的响应时间
网络性能测试
应用在服务器的性能测试
4. 压力测试
- 又叫强度测试,就是在系统各种资源超负荷的情况下,软件的运行情况、反应速度。
5. 容量测试
- 在系统正常运行的过程中,测试软件能够处理的数据容量;
6. 安全性测试
- 软件的用户数据、机密信息是否安全,系统内的保护机制是否能够抵御入侵者的共计;
7. 恢复性测试
- 检验软件在发生错误后,是否能够从错误中恢复过来,继续运行;
8. GUI测试
- 软用户界面测试,测试软件界面是否与设计的一致,是否可以按照规定流程显示正确的内容;
9. 备份测试
- 测试软件备份数据的能力
10. 健壮性测试
- 检查软件的容错能力,在软件出现错误时,软件是否能够继续运行或者自动恢复;
11. 兼容性测试
- 属于适配性测试,验证能否在不同的系统上面有正确的表现
12. 可用性测试
- 验证软件产品的设计是否是真正的面向用户,用户是否易用;
13. 可安装性测试
- 验证软件是否能够正确的安装到支持的环境中
14. 文档测试
- 验证文档是否和软件的表现一致
15. 在线帮助测试
- 在线帮助用户,提供实时咨询的服务
16. 数据转换测试
- 验证软件升级时,新旧数据的适配
17. 验收测试
客户根据需求进行验收软件

  1. 针对某论坛,考虑需要要测试的内容。

针对论坛涉及的增、删、改、查、登录等方面进行测试内容的设计,具体就不写了;

  1. 针对某杀毒软件(如360杀毒), 考虑其需要测试的内容。

以平时自己使用软件的思路,设计测试内容;

第8章 软件测试自动化

课后习题

  1. 简述软件测试自动化的意义。

适时地进行自动化测试,能够使测试功能得以改进,并提高开发工作的质量,降低开发成本和缩短开发周期。

  1. 在运用软件自动化测试时,应注意哪些缺点和事项。

在运用软件自动化测试时,应注意以下几点:
1. 自动化测试的所花费的成本,尤其是时间成本;
2. 手工测试能够发现自动化测试所不能发现的问题;
3. 如果产品的行为变了,自动化测试就可能会报告一些不真实的bug;
4. 自动化测试价值的大小和生命周期的长短;
5. 要不断跟踪bug报告并加以修改,保留和测试相关的文档;
自动化测试的缺点:
1. 自动化测试不能取代手工测试,测试主要还是要靠人工;
2. 新缺陷越多,自动化测试失败的几率就越大;
3. 工具本身不具有想象力;
4. 技术问题、组织问题、脚本维护实施难;
5. 测试工具和其他软件的互操作性,难以适应新技术革新;

  1. 软件测试工具主要分为哪几类?

测试工具大体分为以下几类:
1. 白盒测试工具:静态测试工具Logiscope,动态测试工具
2. 黑盒测试工具:TeamTest
3. 测试管理工具:Test Manager
4. 其他自动化测试工具:针对数据库测试的TestBytes 和针对应用性能进行优化的EcoScope等;

  1. 请解释LoadRunner下最大并发用户数、业务操作响应时间,服务器资源监控指标的含义与用途。

LoadRunner是一种预测系统行为和性能的工业级性能测试负载测试工具;
1. 最大并发用户数,是指服务器的某一功能,在同一时间下,支持访问的最大用户数。可以明确软件规格说明;
2. 业务操作响应时间,是指服务器在响应用户的操作所花费的总时间。
3. 服务器资源监控指标,是指服务器在运行过程中,系统的状态相关的一些数据。比如:吞吐量,内存情况、cpu情况等;

  1. 了解当前常用的自动化测试工具,并对这些进行针对性的说明。
  1. JUnit,是 Java编程语言编写的面向对象的单元级测试工具;主要是开发人员在开发时做单元测试使用;
    2. C++ Test,能够使用与任何开发周期的易于使用的产品,可以有效的防止软件错误、提高代码的稳定性,实现自动化单元测试;
    3. LoadRunner是一种预测系统行为和性能的工业级标准性能负载测试工具;它可以做到轻松创建虚拟用户,创建真实的负载,定位性能问题,分析结果精准定位问题;

第9章 软件BUG和管理

课后习题

  1. bug的来源和影响有哪些?
  1. bug的来源有:程序编写错误、需求变更频繁导致的错误、软件设计过于复杂、交流不充分或者沟通出问题、测试人员的经验与技巧不足、时间过于紧迫、缺乏文档、管理上的缺陷;
2. bug的影响有:
    - 因为bug过多,可能摧残人员的意识;
    - 资源的损失;
    - 影响了产品的质量,同时也会严重损坏公司形象;
  1. bug的种类有哪些?并通过对实际案例的测试,分析一下找出的bug都是在软件生命周期的哪个阶段出现的?

bug的种类有:
1. 需求阶段的bug,如:产品提出的需求模糊、不清晰;还有些需求可能被忽略;有些需求可能相互冲突;
2. 分析设计阶段的bug, 如:忽略一些情况的设计;混乱的设计;模糊的设计;
3. 实现阶段的bug,如:程序员在编码时,可能会出现消息错误、用户界面接错、遗漏一些需求、内存溢出或者程序崩溃;
4. 配置阶段的bug,如:旧代码覆盖了新的代码、测试服务器上的代码跟实现人员本机的代码不一致;
5. 短时将来的bug,设计的时候想的不够全面导致的,如:千年虫问题,如果id的类型使用的Int,但是在长时间的累积,数值会突破峰值,导致溢出;
6.静态文档的bug,如:文档描述不完整,或者描述与实际不一致;

  1. 简述bug的管理流程。

对bug的管理是测试工作中一个重要部分,测试是为了尽早的发现缺陷,因此对bug进行跟踪管理,确保每个被发现的缺陷都能得到及时处理;
1、bug管理的第一步是测试员选择一个测试用例开始测试;
2、发现实际输出值和程序期望值不一致的时候,就发现了一个bug;
3、将bug提交到bug跟踪管理系统,管理系统会将bug保存到数据库,并同步发送一个消息给最终负责实施员;
4、实施员根据bug的唯一id从数据库查询到改bug信息,修复后,将bug状态改为Fixed并提交数据库;
5、修复bug后,跟踪管理系统会发送消息给测试员;
6、测试员对bug进行确认测试,确认修复就关闭bug,否则就回到第3步;

上一篇下一篇

猜你喜欢

热点阅读