`
lujar
  • 浏览: 516341 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

第21回 测试用例设计方法的综合运用

阅读更多


测试用例是按一定的顺序执行的与测试目标相关的测试活动的描述,是确定“怎样”测试。测试用例被看作是有效发现软件缺陷

的最小测试执行单元,也被视为软件的测试规格说明书。在测试工作中,测试用例的设计是非常重要的,是测试执行的正确性、有效性的基础。如何有效地设计测试用例,一直是测试人员所关注的问题;设计好测试用例,也是保证测试工作的最关键的因素之一。<o:p></o:p>

设计测试用例,也分为白盒设计方法和黑盒设计方法。白盒设计方法又分为逻辑覆盖法和基本路径覆盖法,或者分为语句覆盖、判定覆盖、条件覆盖方法,而黑盒设计方法分为等价类划分法、边界值划分法、错误推测法、因果图法等。在实际测试用例设计过程中,不仅根据需要、场合单独使用这些方法,常常综合运用多个方法,使测试用例的设计更为有效。<o:p></o:p>

<o:p> </o:p>

1判定-条件覆盖方法<o:p></o:p>

判定-条件覆盖方法就是将两种白盒设计方法“判定覆盖”和“条件覆盖结合起来的一种设计方法,它所设计的测试用例是判定覆盖的设计的测试用例和条件覆盖设计的设计的测试用例的交集,即设计足够精巧的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果也至少执行一次。<o:p></o:p>

举个例子,源程序是:<o:p></o:p>

Dim a,b as Integer<o:p></o:p>

Dim c as Double<o:p></o:p>

If a > 0 and b > 0 Then<o:p></o:p>

c = c/ a<o:p></o:p>

End If<o:p></o:p>

If a>1 or c>1 Then<o:p></o:p>

c=c+1<o:p></o:p>

End If<o:p></o:p>

c=b+c<o:p></o:p>

则用两个测试用例(如表1)来覆盖了两个判定“P1=a > 0 and b > 0)”和“P2 =a>1 or c>1)”和四个条件“C1= a > 0”、“C2= b > 0”、“C3= a>1”和“C4= c>1”。<o:p></o:p>

1 判定-条件覆盖的测试用例<o:p></o:p>

测试用例<o:p></o:p>

具体取值条件<o:p></o:p>

取值条件<o:p></o:p>

判定条件<o:p></o:p>

输入:a=2b=1c=6<o:p></o:p>

输出:a=2b=1c=5<o:p></o:p>

a>0b>0a>1c>1<o:p></o:p>

C1, C2, C3, C4 = True<o:p></o:p>

P1, P2= True<o:p></o:p>

输入:a=-1b=-2c=-3<o:p></o:p>

输出:a=-1b=-2c=-5<o:p></o:p>

a<=0b<=0a<=1c<=1<o:p></o:p>

C1, C2, C3, C4 = False<o:p></o:p>

P1, P2= False<o:p></o:p>

<o:p> </o:p>

2.条件组合覆盖<o:p></o:p>

条件组合覆盖的基本思想是:设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次,条件覆盖是简单地要求每个条件出现“真”与“假”两种结果,而条件组合覆盖是让这些结果的所有可能组合都至少出现一次。<o:p></o:p>

按照条件组合覆盖的基本思想,针对8种组合条件,来设计所有能覆盖这些组合的设计用例,如表2所示。即使我们用四个测试用例覆盖了所有8种组合条件,但还不能保证所有的路径被执行,如这个例子少了一种路径,即P1= True, P2= false<o:p></o:p>

  2 条件组合覆盖的测试用例<o:p></o:p>

测试用例<o:p></o:p>

覆盖条件<o:p></o:p>

覆盖组合<o:p></o:p>

输入:a=2b=1c=6<o:p></o:p>

输出:a=2b=1c=5<o:p></o:p>

C1=True, C2=True, <o:p></o:p>

C3=TrueC4=True<o:p></o:p>

P1=True, P2=True<o:p></o:p>

输入:a=2b=-1c=-2<o:p></o:p>

输出:a=2b=-1c=-3<o:p></o:p>

C1=True, C2=false, <o:p></o:p>

C3=TrueC4=false<o:p></o:p>

P1=false, P2=True<o:p></o:p>

输入:a=-1b=2c=3 <o:p></o:p>

输出:a=-1b=2c=6<o:p></o:p>

C1=false, C2=True, <o:p></o:p>

C3=falseC4=True<o:p></o:p>

P1=false, P2=True<o:p></o:p>

输入:a=-1b=-2c=-3<o:p></o:p>

输出:a=-1b=-2c=-5<o:p></o:p>

C1=false, C2=false, <o:p></o:p>

C3=falseC4=false<o:p></o:p>

P1=false, P2=false<o:p></o:p>

<o:p> </o:p>

3. 等价类划分法和边界值分析法的组合<o:p></o:p>

数据测试是功能测试的主要内容,或者说功能测试最主要手段之一就是借助数据的输入/输出来判断功能能否正常运行。所以在测试用例的黑盒设计方法中,最常用的方法是等价类划分法、边界值分析法<o:p></o:p>

等价类划分方法的基本思想是设想用一组有限的数据去代表近似无限的数据,就是基于对输入或输出数据的评估将数据划分为两个或更多子集(如有效的和无效的数据集),从每个等价类中选择一定的代表值进行测试,来代表整个数据集的输入/输出。<o:p></o:p>

边界值分析法就是在某个变量范围的边界上,验证独立的输入/输出是否正确的测试方法。因为实践证明,程序往往在输入/输出数据边界更容易发生错误,所以检查边界情况的测试用例是比较高效的,可以更快地查出错误。<o:p></o:p>

但是,仅仅测试边界数据是不够的,正常区域内的数据也是需要测试的,而且对于那些非法的、无效的数据也需要测试,以测试系统的容错性。所以,必须采用等价类划分方法来对边界值分析法的补充。从另一个方面看,要划分数据的等价类,首先是要确定数据边界,也就是找出数据等价类的边界。所以,在实际测试用例设计工作中,将边界值分析法和等价类划分方法结合起来,先用边界值分析法确定数据边界,再用等价类划分方法得到等价的数据类,从而有效地设计出精而少的测试用例。<o:p></o:p>

让我们看一个简单的例子。假如一个输入数据是一个有限范围的整数,如学生成绩管理系统中的学生分数的输入(不计小数点)。这时,我们可以确定输入数据的最小值Nmin和最大值NMax,则有效的数据范围是NminNNMax ,学生分数的输入范围是0N100,这个范围就是有效数据区域。除此之外,就是无效数据区域,即N <NminN>NMax,如N <0N>100。这时测试的数据从近乎无限的数据简化为5个输入数据,就是:


  • 边界值两个:Nmin和NMax,如0和100
  • 有效数据的等价输入值 Ni, 如75
  • 无效数据的等价输入值两个:NLm1和NLm2, 如 -999和 999
为了得到更好的覆盖率,可以在最靠近边界取一些值,共四个,即:<o:p></o:p>

 Nmin +1Nmin -1NMax +1NMax -1,如 -1199101<o:p></o:p>

所以一个有效的测试数据集合是{-10199100101};更完整的测试数据集合是{-999-1017599100101999}


4.因果图法和组合分析法<o:p></o:p>

因果图法和组合分析可以看作测试用例黑盒设计方法的综合方法。因果图法就是一种利用图解法分析输入的各种组合情况,生成判定表,从而设计测试用例的方法,它适合于检查程序输入条件的各种情况的组合。我们知道,即使各种单个输入条件可能出错的情况已经被排除了,但多个输入情况组合起来还是可能会出错。检验各种输入条件的组合并非一件很容易的事情,因为即使将所有的输入条件划分成等价类,它们之间的组合情况也相当多,因此,必须需要考虑采用一种适合于多种条件的组合,相应能产生多个动作的形式来进行测试用例的设计,这就是因果图法。<o:p></o:p>

而组合分析是一种基于每对参数组合的测试技术,主要考虑参数之间的影响是主要的错误来源和大多数的错误起源于简单的参数组合。<o:p></o:p>

<o:p> </o:p>

5功能图法<o:p></o:p>


    功能图法是一种黑盒和白盒混合用例设计方法,在功能图方法中,要用到逻辑覆盖和路径测试的概念和方法,这属于白盒设计方法;而确定输入数据序列以及相应的输出数据,则是黑盒设计方法。

    我们知道,每个程序的功能通常由静态说明和动态说明组成,动态说明描述了输入数据的次序或者转移的次序;静态说明描述了输入条件和输出条件之间的对应关系。对于比较复杂的程序,由于大量的组合情况的存在,如果我们仅仅使用静态说明来组织测试往往是不够的,必须还要动态说明来补充。功能图法就是因此而产生的一种测试用例设计方法。

    功能图法就是使用功能图形式化地表示程序地功能说明,并机械地生成功能图的测试用例。功能图模型由状态迁移图和逻辑功能模型组成。其中,状态迁移图用于表示输入数据序列以及相应的输出数据,由输入和当前的状态决定输出数据和后续状态; 逻辑功能模型用于表示再状态输入条件和输出条件之间的对应关系。逻辑功能模型只适合于描述静态说明,输出数据仅仅由输入数据决定。测试用例测试由测试中经过的一系列的状态以及在每个状态中必须依靠输入/输出数据满足的一对条件组成。

  预知后事如何,请读下回分解: 第22回 测试用例的复审

<o:p>  </o:p>版权所有,软件测试演义®<o:p></o:p> ——系列讨论的目录,见: 软件测试演义——中高级系列(序)

 
分享到:
评论

相关推荐

    80道经典常见测试面试题.docx

    - **详细解释**:从需求分析开始,经过测试计划制定、测试用例设计与执行,直至最终的测试总结报告,每一步都需要精心设计和执行。 ### 31. SQA 的职责 - **核心知识点**:SQA(Software Quality Assurance)的...

    2023年山西省职业院校技能大赛(高职组)“软件测试”赛项竞赛规程

    2. **测试文档和用例设计**:测试文档的编写和测试用例的设计是考核的重点,要求逻辑清晰,覆盖全面。 3. **工具掌握**:熟悉并能灵活运用单元测试、自动化测试、性能测试和接口测试等工具。 4. **团队协作**:通过...

    软件测试十大原则.docx

    - **设计思维:** 测试用例的设计需要综合考虑多种因素,包括功能需求、边界条件和异常处理。 - **有效性评估:** 测试用例的有效性取决于其能否发现潜在的问题。 **应用实践:** - 运用等价类划分、边界值分析等...

    软件设计师章节讲义

    4. **第四章**:通常涵盖软件测试,包括测试策略、测试用例设计、缺陷管理和自动化测试。了解测试流程和方法对确保软件质量至关重要。 5. **第五章**:软件维护和演化,讲解软件在上线后的修改、优化、更新和版本...

    第12周-常佳辉-工作日志1

    在常佳辉的工作日志中,我们可以看到他在2020年5月21日,即5月份的第12周,进行了多项与IT工作相关的重要任务。以下是根据日志内容提炼出的相关知识点: 1. **项目协作与沟通**: - **会议讨论**:常佳辉参与了...

    5G网络环境下的自动化测试技术.pptx

    - **测试用例设计难度**:测试用例的设计需要充分理解系统功能和业务逻辑。 - **测试环境配置复杂性**:不同的测试环境可能需要不同的配置。 - **维护成本**:自动化测试脚本需要定期更新以适应系统的变化。 随着...

    软件工程期末试卷.zip

    试卷可能包含测试用例设计的问题,或者让你分析和改进现有的测试计划。 5. **项目管理**:敏捷开发、Scrum框架、风险管理等项目管理知识在软件工程中占据重要地位。试题可能涉及到如何分配资源、估算工作量,或者...

    ACCP5.0 Y2 本月 机试试题

    由于提供的文件名为“20081221Y2 机试5.0”,可以推测这是一次于2008年12月21日进行的ACCP5.0第二年课程的上机考试。试题集可能包含了上述各类题目,学员在做题时需要结合理论知识和实践操作,展示其在编程、数据库...

    Teach Yourself Perl 5 in 21 days

    - **第21天:综合项目** - 结合前面所学的知识点。 - 实现一个完整的应用项目。 - 项目评审与展示。 ### 总结 通过这21天的学习计划,《21天自学Perl 5》不仅为读者提供了Perl 5的基础知识,还涵盖了大量实用的...

    软件工程试题(挺不错的 和大家分享一下)

    25.测试用例应包含输入数据和预期的输出结果。 26.程序的结构或控制流程是程序设计的一个关键要素,它影响着程序的可读性和可维护性。 这些知识点涵盖了软件工程的基础概念和实践,对于理解和掌握软件开发过程至关...

    蓝桥杯第十三届第二场程序设计题

    【标题】:“蓝桥杯第十三届第二场程序设计题”是指在蓝桥杯这一全国性的编程竞赛中,举行的第十三届比赛的第二场程序设计题目。蓝桥杯是中国影响力较大的编程竞赛之一,旨在培养和选拔优秀的计算机及软件工程人才,...

    Wrox.Code Leader.Using People Tools and Processes to Build Successful Software.2008.pdf

    - **概述**:介绍了一种软件开发方法论——测试驱动开发(TDD),该方法鼓励开发者首先编写测试用例,然后再编写能够通过这些测试的代码。 - **关键点**: - TDD有助于提高代码质量和可维护性,因为每次修改都会经过...

    PD21_FM:南大物理设计专业的HW1

    【标题】"PD21_FM:南大物理设计专业的HW1"揭示了这是一份南京大学物理设计专业学生的作业,可能涉及到计算机科学与技术领域的课程,特别是与编程相关的任务。"PD21_FM"可能是课程代码或者作业编号,而"HW1"表示这是...

    golang book

    通过一个具体的案例,综合运用前面所学的变量概念,加深对变量使用场景的理解。 #### 五、控制结构 **5.1 循环** 循环结构使得程序能够重复执行一段代码多次。Go语言提供了两种主要的循环结构:`for`循环和`range`...

    cpp代码-LeerCode 21

    综合以上信息,我们可以推测这个压缩包是一个C++编程学习资源,主要针对LeetCode的第21题。解题者已经编写了`main.cpp`来实现问题的解决方案,并在`README.txt`中提供了关于如何使用这些代码以及解题思路的说明。...

    Assignment10

    【标题】:“Assignment10”通常指的是一个课程或项目中的第十次作业,这可能是一个编程任务、数据分析项目或者涉及特定IT技术的实践活动。在这种情况下,我们假设这是一个与信息技术相关的作业,可能涵盖各种主题,...

Global site tag (gtag.js) - Google Analytics