您好,欢迎访问三七文档
第二章软件测试基础[本章要点]•软件测试基础知识;•白盒测试和黑盒测试的定义;•常见的白盒和黑盒测试设计技术;•白盒测试与黑盒测试的区别;•测试计划和测试报告的编制;•测试用例的定义和编制方法。[本章目标]掌握有关测试的一些数学知识,包括集合、函数和图论基础等;理解并掌握白盒测试和黑盒测试,以及二者的优缺点和各自的应用范围;能够熟练使用几种常见测试用例设计技术;了解测试计划和测试文档的作用,以及应该包含的内容和制定方法;了解测试报告的基本内容,以及测试用例的基本内容和编制方法。2.1用于测试的离散数学和图论基础一般而言,在功能性测试中,通常要用到离散数学知识,而在结构性测试领域中,则要用到一些关于图论的知识。2.1.1集合论集合论可分为:自然和不言自明两种。自然的集合论把集合看作是基本术语,我们把集合看作一个单位,或一个整体引用多个事物。集合的表示法有以下两种:1、将集合所有元素一一列出的表示法叫做“枚举法”,但有时也可以只列出一部分元素。2、用一个集合所具有的共同性质来刻画这个集合。2.1.2函数简而言之,函数是将唯一的输出值赋予每一输入的“法则”。2.1.3关系通俗的讲,关系就是客观世界一定范围的对象之间的某种特定联系。集合之间的关系定义:给定两个集合A和B,关系R是笛卡儿积AB的一个子集。如果希望描述整个关系,则通常只写RAB。对于特定元素aiA、biB,我们记做aiRbi。关系的表示关系表示事物之间的某种联系,二元关系表示两个事物之间的关系,如果把这两个事物分别放在一边,如果某两个元素有关系,那么就在它们之间画一条有向线,用这种方式表示关系,称作关系图。这里我们必须对“势”进行解释。势在用于集合时,是指集合中的元素的个数。定义:给定两个集合A和B,一个关系RAB,关系R的势是:1)一对一势2)多对一势3)一对多势4)多对多势单个集合上的关系首先,我们对关系进行定义。设A是一个集合,RAA是定义在A上的一个关系,a,a、a,b、b,a、b,c、a,cR。关系具有四个特殊属性:定义:关系RAA是:1)自反的2)对称的3)反对称的4)传递的2.1.4命题逻辑凡是能分辨其真假的语句都叫做命题。我们通常采用小写字母p,q和r表示命题。命题逻辑有着和集合论相似的操作,表达式和标识。命题的真值只有两种,T代表真,而F代表假。命题公式的分类:①如果命题公式A在任意的真值赋值函数t:U®{0,1}下的真值t(A)都为1,则称命题公式A为永真式(tautology)(或称重言式);②如果命题A在任意的真值赋值函数下的真值都为0,则称A为矛盾式(contradiction);③如果A不是矛盾式,则称为可满足式。2.1.5概率论概率是随机事件发生的可能性的数量指标。在独立随机事件中,如果某一事件在全部事件中出现的频率,在更大的范围内比较明显的稳定在某一固定常数附近。就可以认为这个事件发生的概率为这个常数。对于任何事件的概率值一定介于0和1之间。2.1.6用于测试的图测试中使用两种基本图:无向图和有向图。这里我们给出一些概念。图(又叫做线性图)是一种由两种集合定义的抽象数据结构,即一个节点集合和一个构成节点之间连接的集合。图中节点的度是以该节点作为端点的边的条数。在本节中将介绍的三种图:程序图、有限状态机、状态图。1、程序图经过改进的程序图定义:节点要么是整个语句,要么是语句的一部分,边表示控制流(从节点i到节点j有一条边,当且仅当对应节点j的语句或语句的一部分,可以立即在节点i对应的语句或语句的一部分之后执行)。程序的有向图公式化能够非常准确地描述程序的测试方面的问题。基本结构化程序设计的构造,例如:串行、选择和循环等可以用如图2-1所示的有向图表示。串行If-Then-ElseIf-Then条件前测试环路后测试环路图2-1结构化程序设计构造的有向图2、有限状态机有限状态机已经成为需求规格说明的一种相当标准的表示方法。有限状态机是一种有向图,其中状态是节点,转移是边。图2-2是一个简单的自动柜员机(SATM)系统。该图描述了用于个人标识编号PIN尝试部分的有限状态机。这种机器包含5个状态(空闲、等待第一次PIN尝试等等)和8个用边表示的转移。转移上的标签所遵循的规则是,“分子”是引起转移的事件,“分母”是与该转移关联的行为。空闲等待第一次PIN输入尝试等待事务选择等待第三次PIN输入尝试等待第二次PIN输入尝试合法卡显示屏幕S2正确PIN显示屏幕S5不正确的PIN显示屏幕S4非法卡显示屏幕S1;退卡不正确的PIN显示屏幕S3不正确的PIN显示屏幕S3正确PIN显示屏幕S5图2-2用于PIN尝试的有限状态机3、状态图状态图现在被Rational公司选为统一建模语言,即UML的控制模型。ABCD图2-3状态图的团点Harel使用与方法无关的术语“团点”表示状态图的基本构建块。在图2-3中,团点A包含两个团点B和C,通过边连接。团点A通过边与团点D连接。根据Harel的意图,我们可以把团点解释为状态,把边解释为转移。在图2-4中,状态A是初始状态,当进入到这个状态时,也进入低层状态B。当进入某个状态时,我们可以认为该状态是活动的,这可与Petri网中的被标记地点类比。状态图工具采用色彩表示哪个状态活动的,并等效于Petri网中的标记地点。图2-4中有一些微妙的地方,从状态A转移到状态D初看起来是有歧义的,因为它没有区分状态B和C。约定是,边必须开始和结束于状态的周围。如果状态包含子状态,就像图中的A一样,边会“引用”所有的子状态。因此,从A到D的边意味着转移可以从状态B或从状态C发生。如果有从状态D到状态A的边,如图2-5所示,则用B来表示初始状态这个事实,意味着转移实际上是从状态D到状态B。这种约定可以大大减缓有限状态机向“空心代码”发展的趋势。ABCD图2-4状态图中的初始状态ABCD图2-5进入自状态的默认入口我们最后要讨论的一个状态图的特性就是并发状态图概念。图2-6中状态D的虚线用于表示状态D实际上引用两个并发状态E和F。ABCEFD图2-6并发状态2.2白盒测试白盒测试是一种可视的测试软件的方法,即它把测试对象看作一个透明的盒子,测试人员要了解程序结构和处理过程,按照程序内部逻辑测试程序,检查程序中的每条通路是否按照预定要求正确工作。白盒测试的过程如图2-7所示:源程序测试用例被测程序执行路径分析覆盖情况分析图2-7白盒测试过程示意图那么,在对被测软件进行白盒测试时,主要对程序进行哪些方面的检查呢?有如下几点:(1)保证一个模块中的所有独立执行路径至少测试一次;(2)对所有逻辑判定取值“true”和“false”的两种情况都至少测试一次;(3)在循环边界和运行界限内执行循环体;(4)测试内部数据结构的有效性。在软件测试领域,有六种基本的测试类型:单元测试,集成测试,功能测试/系统测试,可接受性测试,回归测试和Beta测试。白盒测试可以用在其中的三种测试类型中:1、单元测试2、集成测试3、回归测试2.2.1白盒测试与调试的异同白盒测试和调试有哪些不同点呢?1、从承担的任务来看,白盒测试同其他类型测试一样,它的任务是发现所开发的项目中的缺陷;但是,调试不属于测试,其任务是纠正软件中的缺陷。2、从最终的结果来看,白盒测试有预知的结果,不可预知的只是程序是否通过测试,并且成功测试的结果是发现错误的症状,从而引起调试的进行;而调试的结果是消除项目中的错误。3、从执行的过程来看,测试是一个发现错误、改正错误、重新测试的过程;而调试是一个推理过程。4、从准备工作来看,测试从已知的条件开始,使用预先定义的程序;调试一般是以不可知的内部条件开始,做统一性调试。5、从执行的计划性来看,测试是有计划的并要进行测试设计;而调试则不受时间约束。6、从执行的人员来看,测试经常是由独立的测试组在不了解软件设计的条件下完成的,而调试必须由程序员来完成。7、从所使用的工具来看,大多数白盒测试的执行和设计可有工具支持,而调试程序员能利用的工具主要是调试器。2.2.2白盒测试的用例设计白盒测试用例设计技术就是研究如何用最少的测试用例最大限度地发现软件中的错误,目前主要有基本路径测试、等价类划分/边界值分析测试、覆盖测试、循环测试、数据流测试、程序插桩测试、变异测试等等方法。下面主要对几种常见的方法加以介绍:一、基本路径测试二、等价类划分/边界值分析(Equivalencepartitioning/boundaryvalueanalysis)三、控制流/覆盖测试(Control-flow/CoverageTesting)⑴方法覆盖方法覆盖可用于衡量测试用例所覆盖的方法的百分比。⑵语句覆盖(StatementCoverage)语句覆盖是一种衡量测试所覆盖的程序语句百分比的措施。通过测试应该达到100%程序语句覆盖的目标,可以标识圈数,然后执行最少的一组测试用例就可以达到语句覆盖的目标。⑶判断/分支覆盖判断/分支覆盖是为了衡量在测试过程中覆盖了多少个程序中的布尔表达式。简单循环嵌套循环串接循环无结构循环图2-11各种循环图四、循环测试是一种白盒测试技术,注重于循环构造的有效性。n循环结构测试用例的设计循环可以划分为以下几种模式,如图2-11:可以使用如下方法设计循环测试用例:一、简单循环:二、嵌套循环:三、串接循环:四、无结构循环:五、数据流测试:六、程序插装:程序插装(ProgramInstrumentation)是指在程序中设置断点或打印语句,在执行过程中了解程序的一些动态特性。七、变异测试变异测试(MutationTesting)的提出始于70年代末期,是一种错误驱动测试,即针对某类特定程序错误而进行的测试,也是一种比较成熟的排错性测试方法(排错性测试方法的基本思想是通过检验测试数据集的排错能力来判断软件测试的充分性)。2.2.3白盒测试举例(略)2.3黑盒测试黑盒测试也称作功能测试和行为测试,主要是根据功能需求来测试程序是否按照预期工作。黑盒测试的目的是尽量发现代码所表现的外部行为的错误,主要有以下几类:⑴功能不正确或不完整;⑵接口错误;⑶接口所使用的数据结构错误;⑷行为或性能错误;⑸初始化和终止错误。黑盒测试的示意图如图2-14所示。从图2-14中,我们可以看出黑盒测试只考虑程序的输入和输出,无须考虑程序的内部代码。图2-14黑盒测试示意图2.3.1黑盒测试和白盒测试的异同本书归纳出以下几点:1.执行测试人员不同黑盒测试通常由用户以及非开发人员来进行;而白盒测试通常要有了解软件内部结构的开发人员来做。2.测试覆盖目标不同如果我们用一个盒子来代替整个软件系统,那么黑盒测试可以看成是一种系统测试。而对盒子内部的多个单元的测试就可以称作为白盒测试。另外一种区别就是,二者的覆盖目标不同。黑盒测试的目标是覆盖所有的用户需求;而白盒测试的目标是覆盖所有的代码。3、测试动机不同有效的安全测试有时也需要详细了解代码以及系统结构,此时把这些技术称作白盒测试。另外一种风险测试的目标可能就只是测试软件是否能够为用户提供预期输出。可用性测试就是如此,所以被称作黑盒测试。4、测试方法不同一个最普通的区别就是行为测试设计是基于功能需求来定义测试,而结构测试则是基于代码本身来定义测试的。这就是两种设计测试的方法。因为行为测试是基于外部功能定义的,所以称作黑盒测试;结构测试则是基于代码内部结构来定义的,所以称作白盒测试。5、评估测试方法不同一些技术是使用代码工具来跟踪软件内部的工作过程,因此称为白盒测试技术。与之相比,黑盒测试技术只是简单的观察程序的正常输出。2.3.2黑盒测试的用例设计常用的黑盒测试用例设计方法主要有以下几种:功能图分析方法,等价类划分方法,边界值分析方法,错误推测方法,因果图方法,判定表驱动分析方法,正交实验设计方法和功能图分析方法等。下面对上述方法分别作以简要介绍。一、基于用户需求的测试黑盒测试用例就是基于用户需求的,也是从研究客户需求工作开始的。二、对等区间划分对等区间划分是一种黑盒测试方法,该方法也称为等
本文标题:软件测试第2章.
链接地址:https://www.777doc.com/doc-1991709 .html