版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第12章 面向对象的实现第12章 面向对象实现12.1 程序设计言语12.2 程序设计风格12.3 测试战略12.4 设计测试用例12.5 小结2 面向对象实现与面向过程的一样应包括:编码,测试。面向对象的分析和设计共同的模型使它们难于分开。面向对象编程(OOP)需求OOP言语OOLOOL具有本人的特点和风格。面向对象程序中的封装、承继和多态等机制,给测试带来新特点,添加了测试和调试的难度。3 面向对象的设计适宜用OOL来实现, 实际上也可以用非OOL实现但不可取。 假设用非OOL编写面向对象程序,那么程序员必需本人实现OOL编译程序自动提供的面向对象的概念和机制:类,承继,封装。12.1 程
2、序设计言语 12.1.1 面向对象言语OOL的优点41. 一致的表示方法面向对象开发基于不随时间变化的、一致的表示方法OO模型:OOA,OOD,OOP。2. 可重用性软件开发组织可重用OOA, OOD和OOP结果。3. 可维护性坚持文档与源程序完全一致几乎不能够。OOL的可读性(对象名等) =可维护性。51. 支持类与对象概念的机制:内存管理 允许用户动态创建对象意味着系统必需处置内存管理问题。有两种管理内存的方法:1)言语的运转机制自动管理内存,即自动回收“渣滓的机制;(必需采用先进的渣滓搜集算法)2)由程序员编写释放内存的代码。(例如: 程序员定义析构函数(destructor)。每当一个
3、对象超出范围或被显式删除时,就自动调用析构函数。这种机制使得程序员可以方便地构造和唤醒释放内存的操作)612.1.2 面向对象言语的技术特点2. 实现整体-部分(即聚集)构造的机制两种实现关联方法: 指针和独立的关联对象 大多数现有的面向对象言语并不显式支持独立的关联对象,在这种情况下,运用指针是最容易的实现关联的方法。73. 实现普通-特殊(即泛化)构造的机制实现承继 + 处理名字冲突。名字冲突指的是承继多个基类能够出现的重名问题。某些言语回绝接受有名字冲突的程序,另一些言语提供理处理冲突的协议。程序员应该尽力防止出现名字冲突。84. 实现属性和效力的机制属性的机制: 支持实例衔接;属性的可
4、见性控制;对属性值的约束。效力的机制: 支持音讯衔接(即表达对象交互关系) ;控制效力可见性;动态联编。95. 类型检查强/弱类型: 语法规定变量/属性分类的严厉性。强类型优点: 一是在编译时能发现程序错误,二是添加了优化的能够性。强类型有助于提高软件的可靠性和运转效率.强类型宜用于开发软件产品,弱类型适于快速开发原型。106. 类库类库:编译/开发环境提供的重用类构件。类库包含实现通用数据构造(例如,动态数组、表、队列、栈、树等等)的类,GUI用户界面类。7. 效率面向对象言语的主要缺陷是效率低: 解释型言语, 动态联编.类库中提供的算法和数据构造更高效.差别可以忽略,利大于弊。118. 耐
5、久保管对象不依赖于程序执行的生命期而长时间保管数据对象的两个缘由: (1) 实如今不同时运转程序间传送数据(2) 恢复被中断了的程序的运转理想情况下,应该使程序设计言语语法与对象存储管理语法实现无缝集成。129. 参数化类类的数据(属性)类型可以由参数给定。一个类可以对不同的数据类型施以同样的操作。如对整数和实数排序。Eiffel 和C+言语提供了参数化类/类模板。10. 开发环境软件工具或开发环境对软件消费率有很大影响。一个言语可有不同的编译程序。CASE工具与言语的兼容性。13选择面向对象言语应思索的要素:1. 未来能否占主导位置言语的生命力及稳定性:维护的思索。2. 可重用性影响重用的要
6、素:封装,承继,多态。3. 类库和开发环境言语、开发环境和类库这3个要素共同决议可重用性。类库能否提供有价值的类?开发环境能否提供运用方便的类库编辑和阅读工具。12.1.3 选择面向对象言语144. 其他要素 在选择编程言语时,应该思索的其他要素还有: 对用户学习面向对象分析、设计和编码技术所能提供的培训效力; 在运用这个面向对象言语期间能提供的技术支持;能提供应开发人员运用的开发工具、开发平台、发行平台; 对机器性能和内存的需求; 集成已有软件的容易程度(调用其它言语的模块)。15为顺应面向对象方法所特有的概念(例如,承继性)而必需遵照的一些新准那么。12.2 程序设计风格16两种代码重用:
7、两种代码重用: 1) 本工程内的代码重用,本工程内的代码重用,2) 重用重用旧旧/外工程的代码。外工程的代码。 1) 内部重用内部重用:利用承继机制共享一样或类似的部分利用承继机制共享一样或类似的部分12.2.1 提高可重用性提高可重用性两种代码重用: 1) 本工程内的代码重用,2) 重用旧/外工程的代码。 1) 内部重用:利用承继机制共享一样或类似的部分12.2.1 提高可重用性17实现两类重用的程序设计准那么:1. 提高方法的内聚一个方法(即效力)只完成单个功能, 否那么把它分解成几个更小的方法。2. 减小方法的规模把规模过大的方法(代码长度超越一页纸),分解成几个更小的方法。3. 坚持方
8、法的一致性功能类似的方法应该有一致的名字、参数特征(包括参数个数、类型和次序)、前往值类型、运用条件及出错条件等。184. 把战略与实现分开两种不同类型的方法:战略与实现。战略方法(拼积木)调用实现方法(积木)来完成义务(实现图案)。战略方法通常严密依赖于详细运用。实现方法针对详细数据完成特定处置,用于实现复杂的算法。相对独立于运用,因此,较能够被重用。195. 全面覆盖方法的实现不仅满足当前运用而且应该思索其它运用的潜在需求。此外,方法对空值、极限值及界外值等异常情况也应该可以作出有意义的呼应。6. 尽量不运用全局信息应该尽量降低方法与外界的耦合程度,不运用全局信息,如类变量。207. 利用
9、承继机制承继是实现共享和提高重用的主要途径。(1) 调用子过程:把公共的代码分别出来,构成一个被其他方法调用的公用方法, 并在基类中定义它。(2) 分解因子。从不同类的类似方法中分解出不同的“因子(即不同的代码),把余下的代码作为公用方法中的公共代码,把分解出的因子作为名字一样(多态性机制)算法不同的方法,放在不同类中定义,并被这个公用方法调用,如下图。21(3) 运用委托。仅当确实存在普通-特殊关系时,运用承继才是恰当的,否那么,可以利用委托机制。(4) 把代码封装在类中。与承继无关把被重用的代码封装在类中比较平安和修正。22提高可重用性的准那么,也能提高程序的可扩展性。此外,以下准那么也有
10、助于提高可扩展性: 1. 封装实现战略把类的实现战略(包括描画属性的数据构造、修正属性的算法等)封装起来,将提高今后修正数据构造或算法的自在度。12.2.2 提高可扩展性232. 不要用一个方法遍历多条关联链一个方法应该只包含对象模型中的有限内容, 除非内容与方法无关。否那么将导致方法过分复杂,既不易了解,也不易修正扩展。3. 防止运用多分支语句可以利用DO_CASE语句测试对象的内部形状,而不要用来根据对象类型选择应有的行为(强耦合),否那么在增添新类时将不得不修正原有的代码。应该利用多态性机制,根据对象当前类型,自动决议应有的行为。244. 精心确定公有方法公有方法是向公众公布的接口。对这
11、类方法的修正往往会涉及许多其他类。为提高稳定性,可修正性,降低维护本钱,必需精心选择和定义公有方法。删除、添加或修正私有方法所涉及的面要窄得多,因此代价也比较低。25 既应该思索效率,也应该思索强壮性。需求在强壮性与效率之间做出适当的折衷。为提高强壮性应该遵守以下几条准那么:1. 预防用户的操作错误 软件系统必需具有处置用户操作错误的才干。任何一个接纳用户输入数据的方法,对其接纳到的数据都必需进展检查,发现了错误,应该给出恰当的提示信息,并预备再次接纳用户的输入。12.2.3 提高强壮性262. 检查参数的合法性 对公有方法,尤其应该着重检查其参数的合法性,由于调用公有方法时能够违反参数的约束
12、条件。3. 不要随便限定数据容量 在设计阶段,很难准确地预测出运用系统中数据构造的最大容量需求。假设有必要和能够,应该运用动态内存分配机制。274. 先测试后优化 测试程序的性能以确定能否为提高效率而进展优化。 假照实现某个操作的算法有许多种,那么应该综合思索内存需求、速度及实现的简易程度等要素,经合理折衷选定适当的算法。28 测试面向对象软件的战略与与面向过程的战略根本一样,但也有许多新特点。12.3 测试战略29最小的可测试单元是单个封装起来的类和对象。测试一个类就是测试它的对象子集(不可穷尽).测试对象主要是测试它的操作.不能孤立地测试单个操作:同一个操作在不同形状下行为不同.同一个操作
13、在不同类中有不同的实现(多态性).有必要在每个子类的语境中测试操作比面向过程更复杂12.3.1 面向对象的单元测试30集成=组装有关联的类不存在层次的控制构造(隐含在类中)传统的自顶向下/自底向上的集成战略无意义。12.3.2 面向对象的集成测试31面向对象软件的集成测试的两种战略:1 基于线程的测试thread based testing): 把呼应系统的一个输入或一个事件所需求的那些类(线程)集成起来。2 基于运用的测试use based testing): 首先测试独立类(几乎不运用其它类的类),再测试运用独立类的下一个层次的类称为依赖类。据此依赖关系继续下去,直至把整个软件系统构造完为
14、止。集群测试cluster testing:用精心设计的测试用例检查一群相互协作的类经过研讨对象模型可以确定协作类,以发现不同的类之间的协作错误。32和传统确实认测试一样,面向对象软件确实认测试也集中检查用户可见的动作和用户可识别的输出。从动态模型和描画系统行为的脚本可导出确认测试用例,以发现用户交互需求能够错误的情景。黑盒测试方法也可用于设计上述确认测试用例。12.3.3 面向对象确实认测试33 与传统软件测试不同,面向对象测试关注设计适当的操作序列以检查类的形状。1传统方法的可用性 白盒测试:用于类级别的测试。测试类中封装的操作,检查类的形状以确定能否存在错误。 黑盒测试:用于集成测试、确
15、认测试。12.4 设计测试用例34 着重测试单个类和类中封装的方法主要有:随着重测试单个类和类中封装的方法主要有:随机测试、划分测试和基于缺点的测试等机测试、划分测试和基于缺点的测试等3种。种。12.4.1 测试类单元的方法测试类单元的方法1. 随机测试随机选取测试类操作序列以测试该类对象不同的生命历史问题的性质隐含了一些限制例:银行运用系统的account(账户类有以下操作: open(翻开,setup(建立,deposit(存款,withdraw(取款,balance(余额,summarize(清单,creditLimit(透支限额和close(封锁。限制:必需在其他操作前翻开账户,完成了
16、全部操作之后才干(/必需)封锁账户。35一个account类实例的最小(正常)行为历史包含以下操作: opensetupdeposit.withdrawclose能够发生许多其他行为: Opensetupdeposit deposit|withdraw|balance|summarize|creditLimitn.withdrawclose从上列序列可以随机地产生一系列不同的操作序列: #r1:opensetupdepositdepositbalancesummarize.withdrawclose#r2:opensetupdepositcreditLimitwithdrawclose也要思索
17、异常用户或编程)序列:opensetup.withdrawclosesetupdeposit.withdrawclose362. 划分测试划分测试partition testing可以减少测试用例的数量。3种划分:形状,属性,功能。1 基于形状的划分根据类操作能否改动类形状来划分。思索account类,形状操作包括deposit和withdraw,而非形状操作有balance, summarize和creditLimit。然后为每个类别设计测试序列。用例应覆盖各类操作的每一操作。372 基于属性的划分根据类操作运用的属性来划分。对于account类来说,可运用属性balance(余额=形状)
18、把操作划分成3个类别: 运用balance的操作;修正balance的操作;不运用也不修正balance的操作。用重要属性形状而非每个属性来划分。383 基于功能的划分根据类操作所完成的功能来划分。例如,可以把account类中的操作分类为初始化操作open,setup,计算操作deposit, withdraw,查询操作balance, summarize,creditLimit和终止操作close。393. 基于缺点的测试 Fault based testing与传统的错误推测法类似,首先推测软件中能够有的错误,然后设计出最能够发现这些错误的测试用例。它的效率依托测试人员的阅历和直觉。它与
19、面向对象的方法无关。40 集成测试用例主要针对类间协作进展测试。 测试类间协作可运用基于运用的测试战略, 找出相互依赖的类. 然后设计用例触发类间的各种交互序列. 测试类协作可以运用随机测试方法和划分测试方法,以及基于情景/脚本的测试和行为测试来完成。UML的协作图能协助我们找出相互依赖的类和交互序列.12.4.2 集成测试方法41图12.3 银行系统的类-协作图42箭头线上的标注:协作而调用的操作1. 多类测试生成多个类的测试用例步骤:1) 对每个客户/UI类,为其生成一系列测试序列来覆盖一切操作。2) 对这些操作所生成的每个音讯,确定接纳音讯的协作类/效力器对象中的对应操作。3把每个2的操
20、作,结合进测试序列中。对每个产生音讯的操作,继续243例,储户存款,操作序列: ATM:cardInserted.password.depositBank: verifyAcctverifyPINdepositReqValidationInfo : validAcct validPINAccount: deposit#r4:verifyAcctBankvalidAcctValidationInfoverifyPINBankvalidPINvalidationInfodepositReqdepositaccount44多个类的划分测试方法类似于单个类。另一种划分测试方法,根据与特定类的接口来划分
21、类操作。Bank类接纳来自ATM类和Cashier类的音讯,可以把Bank类中的方法划分效果劳于ATM和Cashier的两类来测试它们。452. 从动态模型导出测试用例类的形状图可以协助我们导出测试该类及与其协作的那些类的动态行为的测试用例。46设计出的测试用例至少应该覆盖一切形状: #s1:opensetupAccntdeposit(initial)withdraw(final)close导出更多测试用例,以保证一切行为都被测试:#s2:opensetupAccntdeposit(initial)depositbalancecreditwithdraw(final)close#s3:open
22、setupAccntdeposit(initial)depositwithdrawaccntInfowithdraw(final)close在多个类协作的情况下,应该运用多个形状图。47面向对象设计原那么上不依赖于特定的实现环境,但实现结果和本钱却取决于实现环境。 支持面向对象设计范式的程序文语、开发环境及类库,对于面向对象的实现非常重要。具有方便的开发环境和丰富的类库的面向对象程序设计言语,是实现面向对象设计的最正确选择。良好的程序设计风格对于面向对象实现来说同样重要。传统的程序设计风格准那么依然成立,面向对象方法还有一些新准那么。12.5 小结48面向对象测试的战略和技术与传统测试有所不同
23、,对象类成为测试的焦点。测试类时运用的方法主要有随机测试、划分测试和基于缺点的测试。每种方法都测试类中封装的操作。每种操作要在不同的对象形状由对象的属性值表示下测试。可以采用基于线程或基于运用的战略完成集成测试。从动态模型导出的测试用例,可以测试指定的类及其协作者。面向对象系统确实认测试可以用传统的黑盒方法完成。情景/脚本为系统确认测试提供了用例。49Test Tools CASE tool index - Quite a comprehensive list of CASE Tools Old site: cs.queensu.ca/Software-Engineering/toolcat.
24、html 400 categories; 10% for test List of Test related tools50LOGISCOPE LOGISCOPE: Software Quality, Testing, Maintenance and Reverse-Engineering telelogic/products/logiscope/overview.cfm VERILOG IBM Rational Performance Tester 和 HP Mercury LoadRunner 的比较 ibm/developerworks/cn/rational/r-cn-rftloadr
25、unner/ 51Mercury Interactive Mercury With Mercury Quality Center, you can: Standardize and manage the entire quality process. Make quality decisions based on business risks and priorities. Reduce application deployment risk. Improve application quality and reliability. Manage application change impact through manual and automated functional testing. Track quality assets and progress across releases and test cycles. Warehouse critical application quality project data. Test service-oriented architecture services for both functionality and performance. Ensure support for all enviro
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光明的守护者灯具
- 《快餐厅设计》课件
- 2024年一年级品生下册《种养一棵花》教案2 山东版
- 2024学年九年级英语上册 Unit 4 Stories and poems Lesson 24 Writing a Poem教学设计(新版)冀教版
- 2024-2025学年八年级物理下册 第九章 机械和功 四 功率教案 (新版)北师大版
- 2023六年级数学上册 一 小手艺展示-分数乘法信息窗3 求一个数的几分之几是多少说课稿 青岛版六三制
- 2023七年级道德与法治上册 第三单元 师长情谊 第六课 师生之间第2框 师生交往说课稿 新人教版
- 动词锤炼 课件
- 自己拟的入股合同(2篇)
- 获奖课件 英语
- 心理放松训练
- 客户需求及层次
- 海绵城市完整
- 力敏传感器教学课件
- 强奸罪起诉状
- 2024年广东佛山市三水区淼城建设投资有限公司招聘笔试参考题库附带答案详解
- 《排球运动》PPT课件(部级优课)
- 高速公路绿化设计案例课件
- 《高速公路收费员培训》专业知识点课件
- 工作汇报流程图
- 初中美术九年级上册 第8课 最亲近的家具
评论
0/150
提交评论