版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象的实现主要包括两项工作:(1)写面向对象程序;(2)测试并调试面向对象程序面向对象程序的质量基本上由面向对象设计的质量决定,但程序设计语言的特点和设计风格也将影响程序的可靠性、可重用性和可维护性软件测试是保证软件可靠性的主要措施面向对象的实现主要包括两项工作:1§9.1程序设计语言9.1.1面向对象语言的优点(1)一致的表示方法(2)可重用性(3)可维护性§9.1程序设计语言9.1.1面向对象语言的优点(1)一29.1.2面向对象语言的技术特点(1)支持类与对象概念的机制(2)实现整体----部分结构的机制(3)实现一般----特殊结构的机制(4)实现属性和服务的机制(5)类型检查(6)类库(7)效率(8)持久保存对象(9)参数化类(10)开发环境9.1.2面向对象语言的技术特点(1)支持类与对象概念的机39.1.3选择面向对象语言(1)将来是否占主导地位(2)可重用性(3)类库和开发环境(4)其他因素9.1.3选择面向对象语言(1)将来是否占主导地位4§9.2程序设计风格9.2.1提高可重用性(1)提高方法的内聚(2)减小方法的规模(3)保持方法的一致性(4)把策略与实现分开(5)全面覆盖(6)尽量不使用全局信息(7)利用继承机制
调用子过程分解因子使用委托把代码封装在类中§9.2程序设计风格9.2.1提高可重用性(1)提高方法59.2.1提高可扩充性(1)封装实现策略(2)不要用一个方法遍历多条关联链(3)避免使用多分支结构(4)精心确定公有方法9.2.1提高可扩充性(1)封装实现策略69.2.1提高健壮性(1)预防用户的操作错误(2)检查参数的合法性(3)不要预先确定限制条件(4)先测试后优化9.2.1提高健壮性(1)预防用户的操作错误7组装(Composition)组装关系是一个实现级关系,它对应于应用级的聚合关系。它也叫做component(部件)或叫做ispartof(是…的一部分)。组装与消息两者都是类间的关系,在这种关系中,一个类的实例将是另一个类的实现的一部分。可以利用既存类来生成新类组装(Composition)组装关系是一个实现级关系,它对8考虑Dictionary类的实现。在Dictionary中存储item的一种数据表示是使用散列表(HashTable)。进行Dictionary类的低层设计时,要指明在Dictionary类和HashTable类之间的一个ispartof关系。在实现时,应当在Dictionary类的定义中声明这个HashTable的实例。考虑Dictionary类的实现。9继承(Inheritance)继承允许在既存类的基础上定义新的类。一个新类B继承了既存类A,则B包括了A定义的某些行为,以及它自定义的某些附加行为。有多少种面向对象程序设计语言,就有多少种不同的继承实现方式。继承(Inheritance)继承允许在既存类的基础上定义新10继承图继承图11①针对实现的继承两个类之间“针对实现”的继承关系的建立指的是使用既存类的内部表示来做为新类的内部表示的一部分。我们不推荐这种继承方式。考虑使用继承来实现一个Circle类,为了定义一个圆,需要定义一个点和一个值,做为圆的圆心和半径。因此,Point类可支持Circle类的一部分实现。把Point当做派生类。①针对实现的继承两个类之间“针对实现”的继承关系的建立指的12如果Circle类直接使用Point的数据成员x和y,将失去抽象。而且失去做为一个点的圆心的标识。针对实现的继承一般在原型开发中使用。如果Circle类直接使用Point的数据成员x和y,将失去13②针对特殊化的继承这种继承的使用适合于大多数面向对象程序设计语言所提供的关系,是针对一般化-特殊化关系的。这种继承使用isa关系。类B的一个实例是(isa)类A的一个实例。在使用中,继承将使得既存类的界面成为新类的界面。这表明新类具有它的基类的所有行为。②针对特殊化的继承这种继承的使用适合于大多数面向对象程序设14为了定义Dictionary类,应当首先查找既存的抽象,看Dictionary类会是哪个既存抽象的特殊情况。Dictionary应是一个有序表,但具有它自己特有的操作,如使用关键码进行搜索等。既存的OrderedList类可以提供Dictionary类的某些行为,但不是全部。还要确认,在OrderedList中是否有的行为在Dictionary中是不需要的。如果有,可能需要重新组织层次或者开发某些附加的抽象。为了定义Dictionary类,应当首先查找既存的抽象,看D15iskindof
(是一种…)继承这种继承允许有选择地包含既存类的属性,从而建立新的定义。一个鸟类可能有一个关于飞行的属性。一个鸵鸟派生类在模型化时可能就不选择这个属性,因为鸵鸟不会飞。鸵鸟是一种(iskindof)鸟,但具有的属性与鸟不完全相同。iskindof继承是不严格继承。iskindof(是一种…)继承这种继承允许有选择地包16类的实现一种方案是先开发一个比较小的比较简单的类,做为开发比较大的比较复杂的类的基础。即从简单到复杂的开发方案。在这种方案中,类的开发是分层的。一个类建立在一些既存的类的基础上,而这些既存的类又是建立在其它既存的类的基础上。通过诸如“isa”或“ispartof”之类的关系,利用既存代码就能着手建立新的类。类的实现一种方案是先开发一个比较小的比较简单的类,做为开发比17§9.3面向对象的测试策略§9.3面向对象的测试策略18测试计算机软件的经典策略是从“小型测试”开始,逐步过渡到“大型测试”测试顺序:单元测试->集成测试->确定测试->系统测试测试计算机软件的经典策略是从“小型测试”开始,逐步过渡到19单元测试(类测试)
在面向对象环境下,最小的可测试的单元是封装了的类或对象,而不是程序模块。面向对象软件的类测试等价于传统软件开发方法中的单元测试。但它是由类中封装的操作和和类的状态行为驱动的。完全孤立地测试类的各个操作是不行的。单元测试(类测试)20考虑一个类的层次。在基类中我们定义了一个操作X。每一个派生类都使用操作X,它是在各个类所定义的私有属性和操作的环境中使用的。因使用操作X的环境变化太大,所以必须在每一个派生类的环境下都测试操作X。在面向对象开发环境下,把操作完全孤立起来进行测试,其收效是很小的。考虑一个类的层次。在基类中我们定义了一个操作X。21集成测试因为面向对象软件没有一个层次的控制结构,所以传统的自顶向下和自底向上的组装策略意义不大。每次将一个操作组装到类中(像传统的增殖式组装那样)常常行不通,因为在构成类的各个部件之间存在各种直接的和非直接的交互。对于面向对象系统的集成测试,存在两种不同的测试策略。集成测试22基于线程测试(Thread-basedTest)
它把为响应某一系统输入或事件所需的一组类组装在一起。每一条线索将分别测试和组装。基于使用的测试(Use-basedTest)它着眼于系统结构,首先测试独立类,这些类只使用很少的服务器类。再测试那些使用了独立类的相关类。一系列测试各层相关类的活动继续下去,直到整个系统构造完成。基于线程测试(Thread-basedTest)23确认测试在进行确认测试和系统测试时,不关心类之间连接的细节。着眼于用户的要求和用户能够认可的系统输出。为了帮助确认测试的执行,测试者需要回到分析模型,根据那里提供的事件序列(脚本)进行测试。可以利用黑盒测试的方法来驱动确认测试。确认测试24测试方法学检测软件中的故障并确定软件是否执行了预定要开发的功能。测试过程包括了一组测试用例的开发,每一个测试用例要求能检验应用的一个特定的元素。还需要分析用各个测试用例执行测试的结果来收集有关软件的信息。测试方法学检测软件中的故障并确定软件是否执行了预定要开发的功25按不同层次进行测试测试类中各个操作,主要测试类,这种测试是某些单元测试与组装测试的组合假定测试一个软件与测试一个类一样。这个测试者常常就是一个特定类的开发者。按不同层次进行测试测试类中各个操作,主要测试类,这种测试是某269.4.1类测试的种类随机测试划分测试基于故障的测试9.4设计测试用例9.4.1类测试的种类随机测试9.4设计测试用例27随机测试例:银行应用系统中,account(帐户)类的操作有:open,setup,deposit,withdraw,balance,summarize,creditLimit和close
限制:在所有操作中最先执行open在所有操作中最后执行close随机测试例:28则:一个account类的最小测试序列包括如下操作:open.setup.deposit.withdraw.close
但该序列中可能有许多其它行为:
open.setup.deposit.[deposit|withdraw|balance|summarize|creditLimit].withdraw.close从上述序列中可以随机地产生一系列不同的操作序列:#r1:open.setup.deposit.deposit.balance.summarize.withdraw.close#r2:open.setup.deposit.withdraw.deposit.balance.creditLimit.withdraw.close则:29划分测试(等价划分)基于状态的划分根据类操作改变状态的能力来划分类操作。对account类来说,状态操作包括deposit和withdraw,非状态操作有balance,summarize和creditLimit#r1:open.setup.deposit.deposit.withdraw.withdraw.close#r2:open.setup.deposit.summarize.creditLimit.withdraw.close划分测试(等价划分)基于状态的划分30基于属性的划分根据类操作使用的属性来划分类操作。对account类来说,操作分成三个类别:
使用balance的操作
修改balance的操作
不使用也不修改balance的操作基于属性的划分31基于功能的划分根据类操作所完成的功能来划分类操作。对account类来说:
初始化操作(open,setup)
计算操作(deposit,withdraw)
查询操作balance,summarize,creditLimit)
终止操作(close)基于功能的划分32基于故障的测试与传统的方法类似,也是首先推测软件中可能错误,然后设计出最可能发现这些错误的测试用例。例:测试SQRT(计算平方根)操作把语句if(x>=0)calculate_square_root();误写成if(x>0)calculate_square_root();基于故障的测试与传统的方法类似,也是首先推测软件中可能错误339.4.2集成测试
测试一个新类时,需要先测试在定义中所涉及的类,再考虑这些类的组装。关系“isa”“ispartof”和“refersto”建立了测试几个类时的次序之间的关联。一旦基本类测试完成,使用这些类的那些类可以接着测试,然后按层次继续测试下去。9.4.2集成测试测试一个新类时,需要先测试在定义中34多类测试--对每个客户类,使用类操作符列表来生成一系列随机测试序列,这些操作符向服务器类实例发送消息。--对所产生的每个消息,确定协作类和在服务器对象中的对应操作符--对服务器中的每个操作符(已经被来自客户对象的消息调用),确定传递的消息--对每个消息,确定下一层被调用的操作符,并把这些操作符结合进测试序列中多类测试--对每个客户类,使用类操作符列表来生成一系列35例:银行系统协作图例:银行系统协作图36对于操作序列:
Bank类对ATM的操作序列:verifyAcct.verifyPIN.[[verifyPolicy.withdrawReq]|depositReq|acctInfoREQ]对Bank类的测试用例可能是:#r3verifyAcct.verifyPIN.depositReq为考虑协作者,上述序列中需要考虑与测试用例#r3中的每个操作相关的消息对于操作序列:37
Bank需与ValidationInfo协作以执行verifyAcct和VerifyPIN,Bank还必须与Account协作以执行depositReq,因此上述协作的新测试用例是:#r4:verifyAcctBank.[validAcctValidationInfo].verfyPINBank.[validPINvalidationInfo].depositReq.[depositaccount]Bank需与ValidationInfo协作以执行v38从动态模型导出测试用例例:从动态模型导出测试用例例:39
设计出的测试用例应该覆盖所有状态,即操作序列应该使得account类实例遍历所有允许的状态转换:#s1:open.setupAccnt.deposit(initial).withdraw(final).close向该序列中加入附加的测试序列,可得到其他测试用例:#s2:open.setupAccnt.deposit(initial).deposit.balance.credit.withdraw(final).close#s3:open.setupAccnt.deposit(initial).deposit.withdraw.accntInfo.withdraw(final).close设计出的测试用例应该覆盖所有状态,即操作序列应该使得40习题:以下观念正确吗?我们拥有一套讲述如何开发软件的书籍,书中充满了标准与示例,可以帮助我们解决软件开发中遇到的任何问题我们拥有最好的开发工具、最好的计算机,一定能做出优秀的软件。如果我们落后于计划,可以增加更多的程序员来解决。既然需求分析很困难,不管三七二十一先把软件做了再说,反正软件是灵活的,随时可以修改。习题:以下观念正确吗?我们拥有一套讲述如何开发软件的书籍,书41习题:以下观念正确吗?如果软件运行较慢,是换一台更快的计算机还是设计一种更快的算法?有最好的软件工程方法,最好的编程语言吗?编程时是否应该多使用技巧?软件中的错误是否可以按严重程度分等级?习题:以下观念正确吗?如果软件运行较慢,是换一台更快的计算机42判断下列关于程序设计风格和软件测试的叙述。(1)用黑盒法测试时,测试用例是根据程序内部逻辑设计的(2)尽量用公共过程或子程序代替重复的代码段。(3)测试是为了验证软件已正确实现用户的要求。(4)有n个判定语句的连锁分支结构有2n条路径。(5)尽量采用复合的条件测试,避免嵌套的分支结构。(6)GOTO类型的语句概念简单,使用方便,在某些情况下,保留GOTO类型的语句反能使写出的程序更加简洁。(7)发现错误多的程序模块,残留在模块中的错误越少。(8)程序效率的提高主要应通过选择高效的算法来实现。判断下列关于程序设计风格和软件测试的叙述。43软件测试的目的是(A)。为了提高测试的效率,应该(B)。使用白盒测试方法时,确定测试数据应根据(C)和指定的覆盖标准。与设计测试数据无关的文档是(D)。
A.①评价软件的质量
②发现软件的错误
③找出软件中的所有错误
④证明软件是正确的
B.①随机地选取测试数据
②取一切可能的输入数据作为测试数据
③在完成编码以后制定软件的测试计划
④选择发现错误的可能性大的数据作为测试数据
C.
①程序的内部逻辑
②程序的复杂程度
③使用说明书
④程序的功能
D.
①该软件的设计人员
②程序的复杂程度
③源程序
④项目开发计划软件测试的目的是(A)。为了提高测试的效率,应该(B44判断对错题1.软件测试按照测试过程分类为黑盒、白盒测试2.在设计测试用例时,应包括合理的输入条件和不
合理的输入条件。
单元测试属于动态测试。从软件开发者的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。软件项目在进入需求分析阶段,测试人员应该开始介入其中。软件生存周期是从软件开始开发到开发结束的整个时期。7.测试人员要坚持原则,缺陷未修复完坚决不予通过。判断对错题458.详细设计的目的是为软件结构图中的每一个模块确定使用的算法和块内数据结构,并用某种选定的表达工具给出清晰的描述。9.软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。
10.测试程序仅仅按预期方式运行就行了。面向对象实现及测试第九章课件46作业:根据食堂饭卡的使用脚本,画出事件跟踪图用户插卡读卡机读出剩余金额读卡机显示剩余金额给用户和操作员操作员输入扣减金额读卡机将原金额数送给金额计算器读卡机将扣减金额数送给金额计算器计算剩余金额将剩余金额数送给读卡机读卡机将剩余金额数写入卡中显示剩余金额读卡机提示用户取卡用户取走卡读卡机显示等待状态作业:根据食堂饭卡的使用脚本,画出事件跟踪图用户插卡读卡机读47面向对象的实现主要包括两项工作:(1)写面向对象程序;(2)测试并调试面向对象程序面向对象程序的质量基本上由面向对象设计的质量决定,但程序设计语言的特点和设计风格也将影响程序的可靠性、可重用性和可维护性软件测试是保证软件可靠性的主要措施面向对象的实现主要包括两项工作:48§9.1程序设计语言9.1.1面向对象语言的优点(1)一致的表示方法(2)可重用性(3)可维护性§9.1程序设计语言9.1.1面向对象语言的优点(1)一499.1.2面向对象语言的技术特点(1)支持类与对象概念的机制(2)实现整体----部分结构的机制(3)实现一般----特殊结构的机制(4)实现属性和服务的机制(5)类型检查(6)类库(7)效率(8)持久保存对象(9)参数化类(10)开发环境9.1.2面向对象语言的技术特点(1)支持类与对象概念的机509.1.3选择面向对象语言(1)将来是否占主导地位(2)可重用性(3)类库和开发环境(4)其他因素9.1.3选择面向对象语言(1)将来是否占主导地位51§9.2程序设计风格9.2.1提高可重用性(1)提高方法的内聚(2)减小方法的规模(3)保持方法的一致性(4)把策略与实现分开(5)全面覆盖(6)尽量不使用全局信息(7)利用继承机制
调用子过程分解因子使用委托把代码封装在类中§9.2程序设计风格9.2.1提高可重用性(1)提高方法529.2.1提高可扩充性(1)封装实现策略(2)不要用一个方法遍历多条关联链(3)避免使用多分支结构(4)精心确定公有方法9.2.1提高可扩充性(1)封装实现策略539.2.1提高健壮性(1)预防用户的操作错误(2)检查参数的合法性(3)不要预先确定限制条件(4)先测试后优化9.2.1提高健壮性(1)预防用户的操作错误54组装(Composition)组装关系是一个实现级关系,它对应于应用级的聚合关系。它也叫做component(部件)或叫做ispartof(是…的一部分)。组装与消息两者都是类间的关系,在这种关系中,一个类的实例将是另一个类的实现的一部分。可以利用既存类来生成新类组装(Composition)组装关系是一个实现级关系,它对55考虑Dictionary类的实现。在Dictionary中存储item的一种数据表示是使用散列表(HashTable)。进行Dictionary类的低层设计时,要指明在Dictionary类和HashTable类之间的一个ispartof关系。在实现时,应当在Dictionary类的定义中声明这个HashTable的实例。考虑Dictionary类的实现。56继承(Inheritance)继承允许在既存类的基础上定义新的类。一个新类B继承了既存类A,则B包括了A定义的某些行为,以及它自定义的某些附加行为。有多少种面向对象程序设计语言,就有多少种不同的继承实现方式。继承(Inheritance)继承允许在既存类的基础上定义新57继承图继承图58①针对实现的继承两个类之间“针对实现”的继承关系的建立指的是使用既存类的内部表示来做为新类的内部表示的一部分。我们不推荐这种继承方式。考虑使用继承来实现一个Circle类,为了定义一个圆,需要定义一个点和一个值,做为圆的圆心和半径。因此,Point类可支持Circle类的一部分实现。把Point当做派生类。①针对实现的继承两个类之间“针对实现”的继承关系的建立指的59如果Circle类直接使用Point的数据成员x和y,将失去抽象。而且失去做为一个点的圆心的标识。针对实现的继承一般在原型开发中使用。如果Circle类直接使用Point的数据成员x和y,将失去60②针对特殊化的继承这种继承的使用适合于大多数面向对象程序设计语言所提供的关系,是针对一般化-特殊化关系的。这种继承使用isa关系。类B的一个实例是(isa)类A的一个实例。在使用中,继承将使得既存类的界面成为新类的界面。这表明新类具有它的基类的所有行为。②针对特殊化的继承这种继承的使用适合于大多数面向对象程序设61为了定义Dictionary类,应当首先查找既存的抽象,看Dictionary类会是哪个既存抽象的特殊情况。Dictionary应是一个有序表,但具有它自己特有的操作,如使用关键码进行搜索等。既存的OrderedList类可以提供Dictionary类的某些行为,但不是全部。还要确认,在OrderedList中是否有的行为在Dictionary中是不需要的。如果有,可能需要重新组织层次或者开发某些附加的抽象。为了定义Dictionary类,应当首先查找既存的抽象,看D62iskindof
(是一种…)继承这种继承允许有选择地包含既存类的属性,从而建立新的定义。一个鸟类可能有一个关于飞行的属性。一个鸵鸟派生类在模型化时可能就不选择这个属性,因为鸵鸟不会飞。鸵鸟是一种(iskindof)鸟,但具有的属性与鸟不完全相同。iskindof继承是不严格继承。iskindof(是一种…)继承这种继承允许有选择地包63类的实现一种方案是先开发一个比较小的比较简单的类,做为开发比较大的比较复杂的类的基础。即从简单到复杂的开发方案。在这种方案中,类的开发是分层的。一个类建立在一些既存的类的基础上,而这些既存的类又是建立在其它既存的类的基础上。通过诸如“isa”或“ispartof”之类的关系,利用既存代码就能着手建立新的类。类的实现一种方案是先开发一个比较小的比较简单的类,做为开发比64§9.3面向对象的测试策略§9.3面向对象的测试策略65测试计算机软件的经典策略是从“小型测试”开始,逐步过渡到“大型测试”测试顺序:单元测试->集成测试->确定测试->系统测试测试计算机软件的经典策略是从“小型测试”开始,逐步过渡到66单元测试(类测试)
在面向对象环境下,最小的可测试的单元是封装了的类或对象,而不是程序模块。面向对象软件的类测试等价于传统软件开发方法中的单元测试。但它是由类中封装的操作和和类的状态行为驱动的。完全孤立地测试类的各个操作是不行的。单元测试(类测试)67考虑一个类的层次。在基类中我们定义了一个操作X。每一个派生类都使用操作X,它是在各个类所定义的私有属性和操作的环境中使用的。因使用操作X的环境变化太大,所以必须在每一个派生类的环境下都测试操作X。在面向对象开发环境下,把操作完全孤立起来进行测试,其收效是很小的。考虑一个类的层次。在基类中我们定义了一个操作X。68集成测试因为面向对象软件没有一个层次的控制结构,所以传统的自顶向下和自底向上的组装策略意义不大。每次将一个操作组装到类中(像传统的增殖式组装那样)常常行不通,因为在构成类的各个部件之间存在各种直接的和非直接的交互。对于面向对象系统的集成测试,存在两种不同的测试策略。集成测试69基于线程测试(Thread-basedTest)
它把为响应某一系统输入或事件所需的一组类组装在一起。每一条线索将分别测试和组装。基于使用的测试(Use-basedTest)它着眼于系统结构,首先测试独立类,这些类只使用很少的服务器类。再测试那些使用了独立类的相关类。一系列测试各层相关类的活动继续下去,直到整个系统构造完成。基于线程测试(Thread-basedTest)70确认测试在进行确认测试和系统测试时,不关心类之间连接的细节。着眼于用户的要求和用户能够认可的系统输出。为了帮助确认测试的执行,测试者需要回到分析模型,根据那里提供的事件序列(脚本)进行测试。可以利用黑盒测试的方法来驱动确认测试。确认测试71测试方法学检测软件中的故障并确定软件是否执行了预定要开发的功能。测试过程包括了一组测试用例的开发,每一个测试用例要求能检验应用的一个特定的元素。还需要分析用各个测试用例执行测试的结果来收集有关软件的信息。测试方法学检测软件中的故障并确定软件是否执行了预定要开发的功72按不同层次进行测试测试类中各个操作,主要测试类,这种测试是某些单元测试与组装测试的组合假定测试一个软件与测试一个类一样。这个测试者常常就是一个特定类的开发者。按不同层次进行测试测试类中各个操作,主要测试类,这种测试是某739.4.1类测试的种类随机测试划分测试基于故障的测试9.4设计测试用例9.4.1类测试的种类随机测试9.4设计测试用例74随机测试例:银行应用系统中,account(帐户)类的操作有:open,setup,deposit,withdraw,balance,summarize,creditLimit和close
限制:在所有操作中最先执行open在所有操作中最后执行close随机测试例:75则:一个account类的最小测试序列包括如下操作:open.setup.deposit.withdraw.close
但该序列中可能有许多其它行为:
open.setup.deposit.[deposit|withdraw|balance|summarize|creditLimit].withdraw.close从上述序列中可以随机地产生一系列不同的操作序列:#r1:open.setup.deposit.deposit.balance.summarize.withdraw.close#r2:open.setup.deposit.withdraw.deposit.balance.creditLimit.withdraw.close则:76划分测试(等价划分)基于状态的划分根据类操作改变状态的能力来划分类操作。对account类来说,状态操作包括deposit和withdraw,非状态操作有balance,summarize和creditLimit#r1:open.setup.deposit.deposit.withdraw.withdraw.close#r2:open.setup.deposit.summarize.creditLimit.withdraw.close划分测试(等价划分)基于状态的划分77基于属性的划分根据类操作使用的属性来划分类操作。对account类来说,操作分成三个类别:
使用balance的操作
修改balance的操作
不使用也不修改balance的操作基于属性的划分78基于功能的划分根据类操作所完成的功能来划分类操作。对account类来说:
初始化操作(open,setup)
计算操作(deposit,withdraw)
查询操作balance,summarize,creditLimit)
终止操作(close)基于功能的划分79基于故障的测试与传统的方法类似,也是首先推测软件中可能错误,然后设计出最可能发现这些错误的测试用例。例:测试SQRT(计算平方根)操作把语句if(x>=0)calculate_square_root();误写成if(x>0)calculate_square_root();基于故障的测试与传统的方法类似,也是首先推测软件中可能错误809.4.2集成测试
测试一个新类时,需要先测试在定义中所涉及的类,再考虑这些类的组装。关系“isa”“ispartof”和“refersto”建立了测试几个类时的次序之间的关联。一旦基本类测试完成,使用这些类的那些类可以接着测试,然后按层次继续测试下去。9.4.2集成测试测试一个新类时,需要先测试在定义中81多类测试--对每个客户类,使用类操作符列表来生成一系列随机测试序列,这些操作符向服务器类实例发送消息。--对所产生的每个消息,确定协作类和在服务器对象中的对应操作符--对服务器中的每个操作符(已经被来自客户对象的消息调用),确定传递的消息--对每个消息,确定下一层被调用的操作符,并把这些操作符结合进测试序列中多类测试--对每个客户类,使用类操作符列表来生成一系列82例:银行系统协作图例:银行系统协作图83对于操作序列:
Bank类对ATM的操作序列:verifyAcct.verifyPIN.[[verifyPolicy.withdrawReq]|depositReq|acctInfoREQ]对Bank类的测试用例可能是:#r3verifyAcct.verifyPIN.depositReq为考虑协作者,上述序列中需要考虑与测试用例#r3中的每个操作相关的消息对于操作序列:84
Bank需与ValidationInfo协作以执行verifyAcct和VerifyPIN,Bank还必须与Account协作以执行depositReq,因此上述协作的新测试用例是:#r4:verifyAcctBank.[validAcctValidationInfo].verfyPINBank.[validPINvalidationInfo].depositReq.[depositaccount]Bank需与ValidationInfo协作以执行v85从动态模型导出测试用例例:从动态模型导出测试用例例:86
设计出的测试用例应该覆盖所有状态,即操作序列应该使得account类实例遍历所有允许的状态转换:#s1:open.setupAccnt.deposit(initial).withdraw(final).close向该序列中加入附加的测试序列,可得到其他测试用例:#s2:open.setupAccnt.deposit(initial).deposit.balance.credit.withdraw(final).close#s3:open.setupAccnt.deposit(initial).deposit.withdraw.accntInfo.withdraw(final).close设计出的测试用例应该覆盖所有状态,即操作序列应该使得87习
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 撕毁口头协议书影响信用
- 2026年叉车工安全教育培训试题附答案
- 2026年基本公共卫生预防接种服务培训试题及答案
- 智慧校园智能学习环境中学生自主学习行为与学校文化建设的关联研究教学研究课题报告
- 2026年甘肃省酒泉市肃北县人民检察院招聘临时聘用制书记员考试备考试题及答案解析
- 2026年吉林市红十字会系统事业单位人员招聘考试备考试题及答案详解
- 2026年晋中市畜牧系统事业单位人员招聘考试备考试题及答案详解
- 2026年阜阳市财政系统事业单位人员招聘考试备考试题及答案详解
- 2026年衡阳市信访系统事业单位人员招聘考试备考试题及答案详解
- 智能教学设备在初中道德与法治课中的应用行为预测与法治意识教育教学研究课题报告
- 公安机关录用人民警察政治考察表
- 2023年度高校哲学社会科学研究一般项目立项一览表
- 《2和5的倍数的特征》课件(省一等奖)
- 2023年度上海市教师招聘考试《中学生物》押题卷(含答案)
- 滨州科技职业学院辅导员考试题库
- 教师因两地分居调动工作申请书
- 游岳阳楼记带翻译
- GB/T 10592-2023高低温试验箱技术条件
- CB马达安装维护手册中文
- 2023年道县小升初英语考试题库及答案解析
- JJG 693-2011可燃气体检测报警器
评论
0/150
提交评论