`
zhaolicric
  • 浏览: 143803 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论
阅读更多

软件测试的基本概念

  软件测试方法之所以没能完全标准化和统一化,主要原因是因为软件产业产品到软件测试有各式各样的软件。但是目前仍有很多各样软件测试方法都基本可用的常用概念和方法。我们这里介绍的思路和方法就是可用于多数应用软件的测试。有六个有关软件测试方法的基本概念是很重要的:白箱测试,黑箱测试,灰箱测试,有效用例和无效用例,边界条件以及等价类测试。

  白箱测试或白盒测试(White-box testing 或glass-box testing)是通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。

  黑箱测试或黑盒测试(Black-box testing)是通过使用整个软件或某种软件功能来严格地测试, 而并没有通过检查程序的源代码或者很清楚地了解该软件或某种软件功能的源代码程序具体是怎样设计的。测试人员通过输入他们的数据然后看输出的结果从而了解软件怎样工作。通常测试人员在进行测试时不仅使用肯定出正确结果的输入数据,而且还会使用有挑战性的输入数据以及可能结果会出错的输入数据以便了解软件怎样处理各种类型的数据。

  灰箱测试或灰盒测试(Gray-box testing):灰箱测试就像黑箱测试一样是通过用户界面测试,但是测试人员已经有所了解该软件或某种软件功能的源代码程序具体是怎样设计的。甚至于还读过部分源代码。 因此测试人员可以有的放矢地进行某种确定的条件/功能的测试。这样做的意义在于:如果你知道产品内部的设计和对产品有透过用户界面的深入了解,你就能够更有效和深入地从用户界面来测试它的各项性能。

  有效用例(Valid case)或者叫合法输入用例:是那些已知软件程序能正确地处理的测试用例。一般是指软件输入的测试用例。比如说,在 Microsoft Excel 中,用键盘输入“=1+1”, 看到的结果是“2”。 这里输入的有效用例是“=1+1”。无效用例(Invalid case有人叫不合法输入用例)或者出错用例(error case):是那些事先就知道软件程序不支持处理的测试用例。比如说在 Microsoft Excel 中,用键盘输入“=a+1”, 看到的结果是“#NAME?”。这里输入的“=a+1”既是无效用例同时也是出错用例。

  边界条件(Boundary Cases):环绕边界值的测试。通常意味着最大值,最小值或者所设计软件能够处理的最长的字符串等等。比如说某软件字体的字号支持范围是:从8到72。那么边界测试用例应该包括:小于8, 等于8, 等于72 和大于72。

  等价类(equivalent classes):等价类测试用例指的是如果有很多测试用例执行再多也不会找到新的中的缺陷。因为虽然输入和输出结果有所不同,但是它们都通过同样的软件的源代码路径。通常只要一个源代码程序的路径是用于处理一定数值范围内的所有数值,那么除了边界值以外,在边界值范围以内的所有数值一般都属于等价类。因为如果软件程序能正确处理一个值,也就意味着该程序能正确处理在这个范围内的除了边界值以外的其他任何有效输入值。我们来用以上软件字体的字号来举例说明。软件支持的字号范围是:从8到72。那么8和72之间的所有支持的字号都可以被认为是等价类的测试用例。再比如:测试超链接时两个用例http://www.yahoo.com/ 和 http://www.yahoo2.com/ 也是等价类的测试用例。

 

数据测试

        软件由数据(包括键盘输入、鼠标单击、磁盘文件、打印输出等等)和程序(可执行的流程、转换、逻辑和运算)两个最基本的要素组成。

        对数据进行软件测试,就是在检查用户输入的信息、返回结果以及中间计算结果是否正确。主要根据下列原则来进行等价分配,以合理减少测试案例:边界条件、次边界条件和无效数据。

 

1. 边界条件测试

        程序在处理大量中间数值时都是对的,但是可能在边界处出现错误。比如数组的[0]元素的处理。想要在Basic中定义一个10个元素的数组,如果使用 Dim data(10) As Integer ,则定义的是一个11个元素的数组,在赋初值时再使用 For i =1 to 10 ...来赋值,就会产生权限,因为程序忘记了处理i=0的0号元素。
        边界条件是指软件计划的操作界限所在的边缘条件。

        数据类型:数值、字符、位置、数量、速度、地址、尺寸等,都会包含确定的边界。
        应考虑的特征:第一个/最后一个、开始/完成、空/满、最慢/最快、相邻/最远、最小值/最大值、超过/在内、最短/最长、最早/最迟、最高/最低。这些都是可能出现的边界条件。

       根据边界来选择等价分配中包含的数据。然而,仅仅测试边界线上的数据点往往不够充分。提出边界条件时,一定要测试临近边界的合法数据,即测试最后一个可能合法的数据,以及刚超过边界的非法数据。以下例子说明一下如何考虑所有可能的边界:


--------------------------------------------------------------------------------
                如果文本输入域允许输入1-255个字符。
                尝试:输入1个字符和255个字符(合法区间),也可以加入254个字符作为合法测试。
                            输入0个字符和256个字符作为非法区间。

--------------------------------------------------------------------------------
               如果程序读写软盘
               尝试:保存一个尺寸极小,甚至只有一项的文件。
                           然后保存一个很大的——刚好在软盘容量限制之内的文件。
                           保存空文件。
                           保存尺寸大于软盘容量的文件。

--------------------------------------------------------------------------------


               如果程序允许在一张纸上打印多个页面
               尝试:只打印一页
                           打印允许的最多页面
                           打印0页
                           多于所允许的页面(如果可能的话)

--------------------------------------------------------------------------------


--------------------------------------------------------------------------------
           
        2.  次边界条件测试

        上面所讲的是普通的边界条件,在产品说明书中有定义,或者在软件的过程中确定。但有些边界在软件内部,最终用户几乎看不到,但是软件测试仍有必要检查,这样的边界条件成为次边界条件或者内部边界条件。寻找这样的边界条件,不要求软件测试员成为程序员或者具有阅读源代码的能力,但是确实要求大体了解软件的工作方式。2的乘方和ASCII表是这样的两个例子:

--------------------------------------------------------------------------------
        2的乘方
        术语
范围或值

        位bit
         0或1

        双位doublebit
         0~15

        字节Byte
         0~255

        字word
         0~65,535或者0~4,294,967,295

        千K
         1,024

        兆M
         1,048,576

        亿
         1,073,741,824

        万亿
         1,099,511,627,776


        计算机和软件的基础是二进制数。因此二的乘方是作为边界条件的重要数据。如:在通讯软件中,带宽或者传输信息的能力总是受限制,因此软件工程师会尽一切努力在通讯字符串中压缩更多数据。其中一个方法就是把信息压缩到尽可能小的单元中,发送这些小单元中最常用的信息,在必要时再扩展为大一些的单元。假设某种通讯协议支持256条命令。软件将发送编码为一个双位数据的最常用的15条命令;如果用到第16到256之间的命令,软件就转而发送编码为更长字节的命令。这样,软件就会根据双位/字节边界执行专门的计算和不同的操作。

        在建立等价区间的时候,要考虑是否需要包含2的乘方边界条件。例如:软件接受1~1000范围内的数字,那么合法区间除了1和1000,也许还有2和999之外,还应该有临近2的乘方次边界:14,15,16以及254,255和256。


--------------------------------------------------------------------------------
        ASCII表

        ASCII码表并不是结构良好的连续表。数字0~9对应48~57;斜杠字符(/)在0的前面,冒号(在9的后面;大写字母A~Z对应65~90;小写字母对应97~122。这些情况都代表次边界条件。
        如果测试进行文本输入或文本转换的软件,在定义数据区间包含哪些值时,参考一下ASCII表是相当明智的。例如:测试的文本框只接受用户输入字符A~Z和a~z,就应该在非法区间中包含ASCII表中这些字符前后的值——@,',[,{。

--------------------------------------------------------------------------------


--------------------------------------------------------------------------------

    3. 默认值测试(默认、空白、空值、零值和无)

        好的软件会处理这种情况,常用的方法:一是将输入内容默认为合法边界内的最小值,或者合法区间内某个合理值;二是返回错误提示信息。
        这些值在软件中通常需要进行特殊处理。因此应当建立单独的等价区间。在这种默认下,如果用户输入0或-1作为非法值,就可以执行不同的软件处理过程。


--------------------------------------------------------------------------------

    4.  破坏测试(非法、错误、不正确和垃圾数据)

        数据测试的这一类型是失败测试的对象。这类测试没有实际规则,只是设法破坏软件。不按软件的要求行事,发挥创造力吧!


--------------------------------------------------------------------------------

     状态测试

        状态测试是通过不同的状态验证程序的逻辑流程。软件测试员必须测试软件的状态及其转换。软件状态是指软件当前所处的情况或者模式。软件通过代码进入某一个流程分支,触发一些数据位,设置某些变量,读取某些变量,从而转入一个新的状态。

        同数据测试一样,状态测试运用等价分配技术选择状态和分支。因为选择不完全测试,所以要承担一定的风险,但是通过合理选择减少危险。

        1.  建立状态转移图
               
        使用:方框和箭头;圆圈(泡泡)和箭头。
        应包含的项目:
            - 软件可能进入的每一种独立状态。
                    如果不能断定是否独立,先认为是;以后一旦发现不是,随时剔除。
            - 从一种状态转入另一种状态所需的输入和条件。
                    状态变化和存在的原因,就是我们要寻找的对象。
            - 进入或退出某种状态时的设置条件及输出结果。
                   包括显示的菜单和按钮、设置的标志位、产生的打印输出、执行的运算等等。
        由于是黑盒测试,因而只需从用户的角度建立状态图即可。

        2.  减少要测试的状态及转换的数量
       
        测试每一种路线的组合,走遍所有分支是不可能的事情。大量的可能性也需要减少到可以操作的测试案例集合。方法有以下5种:
            - 每种状态至少访问一次。
                    无论用什么方法,每种状态都必须测试。
            - 测试看起来最常见最普遍的状态转换
            - 测试状态之间最不常用的分支。
                    这些分支是最容易被产品设计者和程序员忽视的。
            - 测试所有错误状态机器返回值。
                    错误是否得到正确的处理、错误提示信息是否正确、修复错误时是否正确恢复软件等
            - 测试随机状态转换。

        3.  进行具体的测试——定义测试案例

         测试状态及其转换包括检查所有的状态变量——与进入和退出状态相关的静态条件、信息、值、功能等等。如:窗口外观、窗口尺寸定义(固定/上次使用时的尺寸)、显示的菜单、默认设定值、文档的名称等。状态无论是否可见,都必须进行状态确定。       状态变量也许不可见,但是很重要,一个常见的例子时文档涂改标志(以此判断退出时是否询问保存)。

 

 

分享到:
评论

相关推荐

    软件测试规范

    软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序...

    软件测试过程

    软件测试过程介绍,知识点整理,测试方法、测试过程、

    对软件测试感悟

    对软件测试感悟软件测试我非常热爱软件测试,包括软件测试工具,方法,理论,技术。因为我在3年的测试工作中,深刻体会到软件测试的重要性和趣味性。此时,我已经跳出了“小程序员”的圈子,以软件系统工程的更大...

    软件测试要点总结

    软件测试要点总结软件测试一、环境配置测试(1)网络连接是否正常(2)网络流量负担是否过重(3)软件测试平台是否可选(4)如果(3),是否在不同的软件测试平台进行软件测试(5)所选软件测试平台的版本(包括ServicePack)是否...

    软件测试模板

    软件测试模板 软件测试模板是软件测试过程中的一种重要工具,旨在确保软件产品的质量和可靠性。本文档将对软件测试模板的各个组成部分进行详细的解释,并阐述每个组件的目的、范围和内容。 1. 简介 软件测试模板...

    全程软件测试.pdf

    软件测试的作用是什么?软件测试在软件开发生命周期中的位置在哪里?软件测试过程是怎样的?软件测试团队地位如何?软件测试和软件质量保证有何区别?

    计算机软件测试

    计算机软件测试(原书第2版),ISBN:9787111142461,作者:(美)Cem Kaner等著;王峰等译;王峰译

    软件测试报告模板

    软件测试报告模板

    软件测试年终总结PPT课件

    软件测试年终总结,软件测试年终总结课件,软件测试年终总结PPT

    软件测试期末课程设计大作业.zip

    基于java web项目的软件测试期末课程设计包含:测试项目简介、测试需求说明书、测试需求评审、测试计划、测试方案、功能测试用例、性能测试用例、安全测试用例、自动化测试用例、测试报告、缺陷报告、测试总结、测试...

    软件测试指导手册

    软件测试指导手册软件测试单元测试一、单元测试环境配置测试1.网络连接是否正常2.网络流量负担是否过重3.软件测试平台是否可选4.如果(3),是否在不同的软件测试平台进行软件测试5.所选软件测试平台的版本(包括...

    软件测试超详细提测模板

    软件测试超详细提测模板 本资源提供了一份软件测试超详细提测模板,旨在帮助测试工程师更好地进行软件测试。该模板包括了软件测试的各个方面,涵盖了测试的准备、测试用例的设计、测试环境的搭建、测试数据的准备、...

    东北大学软件学院软件测试课程资料

    课程PPT和随堂测试相关资料

    软件测试Okr模板及内容示例

    针对10人以上软件测试团队,制定年度和半年Okr,提供可复制,可指引性,可落地文档示范,为团队新年度,提供指此方法及考核目标,加速团队管理、技术、效率等提升。

    软件测试计划编写的几点注意

    软件测试计划编写的几点注意软件测试软件测试是有组织的活动,软件测试之前必须做计划。《ANSI/IEEE软件测试文档标准829-1983》将测试计划定义为:“一个叙述了预定的测试活动的范围、途径、资源及进度安排的文档。...

Global site tag (gtag.js) - Google Analytics