软件工程第七章单元测试

1. 通常把( 编码)和(测试 )统称为实现。
2. 单元测试主要使用(白盒 )测试技术。
3. 单元测试时要为每个单元测试开发(驱动 )软件和( 存根)软件。
4. 为了使源程序代码逻辑简明,易读易懂,编码时应该遵循那些规则?
(1)内部的文档
  包括恰当的标识符、适当的注解和程序的视觉组织等等。
  选取含义鲜明的名字,使它能正确地提示程序对象所代表的实体,这对于帮助阅读者理解程序是很重要的。如果使用缩写,那么缩写规则应该一致,并且应该给每个名字加注解。
  注解非常有助于对程序的理解。
  每个模块开始处有序言性的注解:简要描述模块的功能、主要算法、接口特点、重要数据以及开发简史;
  程序中间与一段程序代码有关的注解:主要解释包含这段代码的必要性。
  不能滥用注释,应利用注解提供一些额外的信息。注解的内容一定要正确。
  程序清单的布局对于程序的可读性也有很大影响,应该利用适当的阶梯形式使程序的层次结构清晰明显。
(2)数据说明
数据说明的次序应该标准化。有次序就容易查阅,因此能够加速测试、调试和维护的过程。
  当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。
  如果设计时使用了一个复杂的数据结构,则应该用注解说明用程序设计语言实现这个数据结构的方法和特点。
(3) 语句构造
构造语句时应该遵循的原则是,每个语句都应该简单而直接,不能为了提高效率而使程序变得过分复杂。下述规则有助于使语句简单明了:
不要为了节省空间而把多个语句写在同一行;
尽量避免复杂的条件测试;
尽量减少对“非”条件的测试;
避免大量使用循环嵌套和条件嵌套;
利用括号使逻辑表达式或算术表达式的运算次序清晰直观。
(4)输入输出
在设计和编写程序时应该考虑下述有关输入输出风格的规则:
​对所有输入数据都进行检验;
​检查输入项重要组合的合法性;
​保持输入格式简单;
​使用数据结束标记,不要要求用户指定数据的数目;
​明确提示交互式输入的请求,详细说明可用的选择或边界数值;
​当程序设计语言对格式有严格要求时,应保持输入格式一致;
​设计良好的输出报表;
​给所有输出数据加标志。
(5)效率
​效率主要指处理机时间和存储器容量两个方面。
​应该清晰3条概念:
首先,效率是性能要求,因此应该在需求分析阶段确定效率方面的要求。软件应该像对它要求的那样有效,而不应该如同人类可能做到的那样有效(需求分析相关);
其次,效率是靠好设计来提高的(设计相关);
第三,程序的效率和程序的简单程度是一致的,不要牺牲程序的清晰性和可读性来不必要地提高效率(效率不是第一位的)。
5. 软件测试的目标是什么?
  什么是测试?它的目标是什么?G.Myers给出了关于测试的一-些规则,这些规则也可以看作是测试的目标或定义。
(1)测试是为了发现程序中的错误而执行程序的过程
(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案
(3)成功的测试是发现了至今为止尚未发现的错误的测试
  从上述规则可以看出,测试的正确定义是“为了发现程序中的错误而执行程序的过程”。这和某些人通常想象的“测试是为了表明程序是正确的”,“成功的测试是没有发现错误的测试”等等是完全相反的。正确认识测试的目标是十分重要的,测试目标决定了测试方案的设计。如果为了表明程序是正确的而进行测试,就会设计一些不易暴露错误的测试方案;相反,如果测试是为了发现程序中的错误,就会力求设计出最能暴露错误的测试方案。
6. 软件测试的准则是什么?
主要的软件测试准则如下:
①所有测试都应该能追溯到用户需求;
②应该远在测试开始之前就制定出测试计划;
③把Pareto原理应用到软件测试中;
④应该从“小规模”测试开始,并逐步进行“大规模”测试;
⑤穷举测试是不可能的;
⑥为了达到最佳的测试效果,应该由独立的第三方从事测试工作。
7. 软件测试的步骤有那些?
  根据第4条测试准则,测试过程也必须分步骤进行,后一个步骤在逻辑上是前一个步骤的继续。
  大型软件系统通常由若干个子系统组成,每个子系统又由许多模块组成,因此,大型软件系统的测试过程基本上由模块测试、子系统测试、系统测试、验收测试和平行运行等五个步骤组成。

  • 1.模块测试
      模块测试的目的是保证每个模块作为一个单元能正确运行,所以模块测试通常又称为单元测试。在这个测试步骤中所发现的往往是编码和详细设计的错误。
  • 2.子系统测试
      子系统测试是把经过单元测试的模块放在一起形成-一个子系统来测试。模块相互间的协调和通信是这个测试过程中的主要问题,因此,这个步骤着重测试模块的接口。
  • 3.系统测试
      系统测试是把经过测试的子系统装配成一- 个完整的系统来测试。在这个过程中不仅应该发现设计和编码的错误,还应该验证系统确实能提供需求说明书中指定的功能,而且系统的动态特性也符合预定要求。在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误。子系统测试和系统测试,都兼有检测和组装两重含义,通常称为集成测试。
  • 4.验收测试
      验收测试把软件系统作为单–的实体进行测试,测试内容与系统测试基本类似,但是它是在用户积极参与下进行的,而且可能主要使用实际数据(系统将来要处理的信息)进行测试。
      验收测试的目的是验证系统确实能够满足用户的需要,在这个测试步骤中发现的往往是系统需求说明书中的错误。验收测试也称为确认测试。
  • 5.平行运行
      所谓平行运行就是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。这样做的具体目的有如下几点:
    (1)可以在准生产环境中运行新系统而又不冒风险。
    (2)用户能有一段熟悉新系统的时间。
    (3)可以验证用户指南和使用手册之类的文档。
    (4)能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标。
    8. 软件测试的方法有那些?
      测试任何产品都有两种方法:如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用:如果知道产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。前一种方法称为黑盒测试,后一种法称为白盒测试。
      (1)黑盒测试法把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息(例如,数据库或文件)的完整性。黑盒测试又称为功能测试。
      (2)白盒测试法与黑盒测试法相反,它的前提是可以把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。白盒测试又称为结构测试。
    9. 单元测试的重点是那些方面?
    在单元测试期间着重从下述5个方面对模块进行测试。
    (1)模块接口
      首先应该对通过模块接口的数据流进行测试,如果数据不能正确地进出,所有其他测试都是不切实际的。在对模块接口进行测试时主要检查下述几个方面:参数的数目、次序、属性或单位系统与变元是否一致:是否修改了只作输入用的变元;全局变量的定义和用法在各个模块中是否一致。
    (2)局部数据结构
      对于模块来说,局部数据结构是常见的错误来源。应该仔细设计测试方案,以便发现局部数据说明、初始化、默认值等方面的错误。
    (3)重要的执行通路
      由于通常不可能进行穷尽测试,因此,在单元测试期间选择最有代表性、最可能发现错误的执行通路进行测试就是十分关键的。应该设计测试方案用来发现由于错误的计算、不正确的比较或不适当的控制流而造成的错误。
    (4)出错处理通路
      好的设计应该能预见出现错误的条件,并且设置适当的处理错误的通路,以便在真的出现错误时执行相应的出错处理通路或干净地结束处理。不仅应该在程序中包含出错处理通路而且应该认真测试这种通路。当评价出错处理通路时,应该着重测试下述一些可能发生的错误:
  • 对错误的描述是难以理解的;
  • 记下的错误与实际遇到的错误不同;
  • 在对错误进行处理之前,错误条件已经引起系统干预;
  • 对错误的处理不正确;
  • 描述错误的信息不足以帮助确定造成错误的位置。
    (5)边界条件
      边界测试是单元测试中最后的也可能是最重要的任务。软件常常在它的边界上失效,例如,处理n元数组的第n个元素时,或做到i次循环中的第i次重复时,往往会发生错误。使用刚好小于、刚好等于和刚好大于最大值或最小值的数据结构、控制量和数据值的测试方案,非常可能发现软件中的错误。
    10. 代码审查小组应该由那些人组成?
      人工测试源程序可以由编写者本人非正式地进行,也可以由审查小组正式进行。后者称为代码审查,它是一种非常有效的程序验证技术,对于典型的程序来说,可以查出309, 6~70% 的逻辑设计错误和编码错误。
      审查小组最好由下述4人组成:
    (1)组长,应该是一个很有能力的程序员,而且没有直接参与这项工程
    (2)程序的设计者
    (3)程序的编写者
    (4)程序的测试者
      如果一个人既是程序的设计者又是编写者,或既是编写者又是测试者,则审查小组中应该再增加一个程序员。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值