电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

软件工程 第3版 教学课件 PPT 作者 张海藩 倪宁 第9章

98页
  • 卖家[上传人]:E****
  • 文档编号:89449475
  • 上传时间:2019-05-25
  • 文档格式:PPT
  • 文档大小:472KB
  • / 98 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、第9章 面向对象实现,面向对象实现主要包括两项工作:第一项工作是把面向对象设计结果,翻译成用某种程序设计语言书写的面向对象程序;第二项工作是测试并调试面向对象的程序。,面向对象程序的质量基本上由面向对象设计的质量决定,但是,所采用的程序设计语言的特点和程序设计风格也将对程序的可靠性、可重用性和可维护性产生深远的影响。,目前,软件测试仍然是保证软件可靠性的主要措施,对于面向对象的软件来说,情况也是如此。面向对象测试的目标,也是用尽可能低的测试成本和尽可能少的测试方案,发现尽可能多的错误。,但是,面向对象程序中特有的封装、继承和多态等机制,也给面向对象测试带来一些新特点,增加了测试和调试的难度。我们必须通过实践,努力探索适合于面向对象软件的更好的测试方法。,9.1 程序设计语言,9.1.1 面向对象语言的优点 选择编程语言的关键因素,是语言的一致的表达能力、可重用性及可维护性。从面向对象观点看来,能够更完整、更准确地表达问题域语义的面向对象语言的语法是非常重要的,因为这会带来下述几个重要优点。,1. 一致的表示方法 2. 可重用性 3. 可维护性,9.1.2 面向对象语言的技术特点 一般说

      2、来,纯面向对象语言着重支持面向对象方法研究和快速原型的实现,而混合型面向对象语言的目标则是提高运行速度和使传统程序员容易接受面向对象思想。,成熟的面向对象语文通常都提供丰富的类库和强有力的开发环境。 下面介绍在选择面向对象语言时应该着重考察的一些技术特点。,1. 支持类与对象概念的机制 2. 实现整体部分结构的机制 3. 实现一般特殊结构的机制 4. 实现属性和服务的机制,5. 类型检查 6. 类库 7. 效率 8. 持久保存对象 9. 参数化类 10. 开发环境,9.1.3 选择面向对象语言 开发人员在选择面向对象语言时,还应该着重考虑以下一些实际因素。,1. 将来能否占主导地位 2. 可重用性 3. 类库和开发环境 4. 其他因素,9.2 程序设计风格,良好的程序设计风格对面向对象实现来说尤其重要,不仅能明显减少维护或扩充的开销,而且有助于在新项目中重用已有的程序代码。,良好的面向对象程序设计风格,既包括传统的程序设计风格准则,也包括为适应面向对象方法所特有的概念(例如,继承性)而必须遵循的一些新准则。,9.2.1 提高可重用性 面向对象方法的一个主要目标,就是提高软件的可重用性。

      3、软件重用有多个层次,在编码阶段主要考虑代码重用的问题。,一般说来,代码重用有两种:一种是本项目内的代码重用,另一种是新项目重用旧项目的代码。内部重用主要是找出设计中相同或相似的部分,然后利用继承机制共享它们。,为做到外部重用(即一个项目重用另一项目的代码),必须有长远眼光,需要反复考虑精心设计。虽然为实现外部重用所需要考虑的面,比为实现内部重用而需要考虑的面更广,但是,有助于实现这两类重用的程序设计准则却是相同的。下面讲述主要的准则。,1. 提高方法的内聚 2. 减小方法的规模 3. 保持方法的一致性 4. 把策略与实现分开,为提高可重用性,在编程时不要把策略和实现放在同一个方法中,应该把算法的核心部分放在一个单独的具体实现方法中。为此需要从策略方法中提取出具体参数,作为调用实现方法的变元。,5.全面覆盖 6.尽量不使用全局信息 7.利用继承机制,在面向对象程序中,使用继承机制是实现共享和提高重用程度的主要途径。,(1) 调用子过程 (2) 分解因子 (3) 使用委托 (4) 把代码封装在类中,图9.1 通过调用公用方法实现代码重用,图9.2 通过因子分解实现代码重用,9.2.2 提高

      4、可扩充性 上一小节所述的提高可重用性的准则,也能提高程序的可扩充性。此外,下列的面向对象程序设计准则也有助于提高可扩充性。,1. 封装实现策略 2. 不要用一个方法遍历多条关联链 3. 避免使用多分支语句 4. 精心确定公有方法,9.2.3 提高健壮性 程序员在编写实现方法的代码时,既应该考虑效率,也应该考虑健壮性。通常需要在健壮性与效率之间做出适当的折衷。必须认识到,对于任何一个实用软件来说,健壮性都是不可忽略的质量指标。为提高健壮性应该遵守以下几条准则。,1. 预防用户的操作错误 2. 检查参数的合法性 3. 不要预先确定限制条件 4. 先测试后优化,9.3 测试策略,测试计算机软件的经典策略是,从“小型测试”开始,逐步过渡到“大型测试”,用软件测试的专业术语来说,就是从单元测试开始,逐步进入集成测试,最后进行确认测试和系统测试。,对于传统的软件系统来说,单元测试集中测试最小的可编译的程序单元(过程模块),一旦把这些单元都测试完之后,就把它们集成到程序结构中去,与此同时应该进行一系列的回归测试,以发现模块接口错误和新单元加入到程序中所带来的副作用,,最后,把系统作为一个整体来测试,

      5、以发现软件需求中的错误。测试面向对象软件的策略,与上述策略基本相同,但也有许多新特点。,9.3.1 面向对象的单元测试 最小的可测试单元是封装起来的类和对象。一个类可以包含一组不同的操作,而一个特定的操作也可能存在于一组不同的类中。因此,对于面向对象的软件来说,单元测试的含义发生了很大变化。,不能再孤立地测试单个操作,而应该把操作作为类的一部分来测试。,9.3.2 面向对象的集成测试 面向对象软件的集成测试有两种不同的策略。是基于线程的测试(thread-based testing),这种策略把响应系统的一个输入或一个事件所需要的一组类集成起来。分别集成并测试每个线程,同时应用回归测试以保证没有产生副作用。,是基于使用的测试(use-based testing),这种方法首先测试几乎不使用服务器类的那些类(称为独立类),把独立类都测试完之后,接下来测试使用独立类的下一个层次的类(称为依赖类)。对依赖类的测试一个层次一个层次地持续进行下去,直至把整个软件系统构造完为止。,集群测试(cluster testing)是面向对象软件集成测试的一个步骤。在这个测试步骤中,用精心设计的测试用例检查

      6、一群相互协作的类(通过研究对象模型可以确定协作类),这些测试用例力图发现协作错误。,9.3.3 面向对象的确认测试 在确认测试或系统测试层次,不再考虑类之间相互连接的细节。和传统的确认测试一样,面向对象软件的确认测试也集中检查用户可见的动作和用户可识别的输出。,为了导出确认测试用例,测试人员应该认真研究动态模型和描述系统行为的脚本,以确定最可能发现用户交互需求错误的情景。,当然,传统的黑盒测试方法(见本书第5章)也可用于设计确认测试用例,但是,对于面向对象的软件来说,主要还是根据动态模型和描述系统行为的脚本来设计确认测试用例。,为了导出确认测试用例,测试人员应该认真研究动态模型和描述系统行为的脚本,以确定最可能发现用户交互需求错误的情景。,当然,传统的黑盒测试方法(见本书第5章)也可用于设计确认测试用例,但是,对于面向对象的软件来说,主要还是根据动态模型和描述系统行为的脚本来设计确认测试用例。,9.4 设计测试用例,9.4.1 测试类的方法 前面已经讲过,软件测试从“小型”测试开始,逐步过渡到“大型”测试。对面向对象的软件来说,小型测试着重测试单个类和类中封装的方法。,测试单个类的方法

      7、主要有,随机测试、划分测试和基于故障的测试等三种。,1. 随机测试 下面通过银行应用系统的例子,简要地说明这种测试方法。该系统的account(账户)类有下列操作:open(打开),setup(建立),deposit(存款),withdraw(取款),balance(余额),summarize(清单),creditLimit(透支限额)和close(关闭)。,上列每个操作都可以应用于account类的实例,但是,该系统的性质也对操作的应用施加了一些限制,例如,必须在应用其他操作之前先打开账户,在完成了全部操作之后才能关闭账户。,即使有这些限制,可做的操作也有许多种排列方法。一个account类实例的最小行为历史包括下列操作:,opensetupdepositwithdrawclose 这就是对account类的最小测试序列。但是,在下面的序列中可能发生许多其他行为: opensetupdepositdeposit withdrewbalancesummarize creditLimitnwithdrawclose,从上列序列可以随机地产生一系列不同的操作序列,例如: #r1:opens

      8、etupdepositdepositbalancesummarizewithdrawclose,测试用例#r2:opensetupdepositwithdrawdepositbalancecreditLimitwithdrawclose 执行上述这些及另外一些随机产生的测试用例,可以测试类实例的不同生存历史。,2. 划分测试 与测试传统软件时采用等价划分方法类似,采用划分测试(partition testing)方法可以减少测试类时所需要的测试用例的数量。,首先,把输入和输出分类,然后设计测试用例以测试划分出的每个类别。下面介绍划分类别的方法。,(1) 基于状态的划分 这种方法根据类操作改变类状态的能力来划分类操作。让我们再一次考虑account类,状态操作包括deposit和withdraw,而非状态操作有balance,summarize和creditLimit。,设计测试用例,以分别测试改变状态的操作和不改变状态的操作。例如,用这种方法可以设计出如下的测试用例: 测试用例#p1:opensetupdepositdepositwithdrawwithdrawclose,测试用例#p

      9、2:opensetupdepositsummarizecreditLimitwithdrawclose 测试用例#P1改变状态,而测试用例#P2测试不改变状态的操作(在最小测试序列中的操作除外)。,(2) 基于属性的划分 这种方法根据类操作使用的属性来划分类操作。对于account类来说,可以使用属性balance来定义划分,从而把操作划分成三个类别:, 使用balance的操作; 修改balance的操作; 不使用也不修改balance的操作。 然后,为每个类别设计测试序列。,3. 基于故障的测试 基于故障的测试(fault_based testing)与传统的错误推测法类似,也是首先推测软件中可能有的错误,然后设计出最可能发现这些错误的测试用例。,例如,软件工程师经常在问题的边界处犯错误,因此,在测试SQRT(计算平方根)操作(该操作在输入为负数时返回出错信息)时,应该着重检查边界情况:一个接近零的负数和零本身。其中“零本身”用于检查程序员是否犯了如下错误:,把语句if(x0)calculate-square-root(); 误写成if(x0)calculate-square-root();,为了推测出软件中可能有的错误,应该仔细研究分析模型和设计模型,而且在很大程度上要依靠测试人员的经验和直觉。,如果推测得比较准确,则使用基于故障的测试方法能够用相当低的工作量发现大量错误;反之,如果推测不准,则这种方法的效果并不比随机测试技术的效果好。,9.4.2 集成测试方法 开始集成面向对象系统以后,测试用例的设计变得更加复杂。在这个测试阶段,必须对类间协作进行测试。,为了举例说明设计类间测试用例的方法,我们扩充9.4.1小节引入的银行系统的例子,使它包含图9.3所示的类和协作。,图中箭头方向代表消息的传递方向,箭头线上的标注给出了作为由消息所蕴含的协作的结果而调用的操作。,图9.3 银行系统的类

      《软件工程 第3版 教学课件 PPT 作者 张海藩 倪宁 第9章》由会员E****分享,可在线阅读,更多相关《软件工程 第3版 教学课件 PPT 作者 张海藩 倪宁 第9章》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.