软件工程-第8章 面向对象程序设计风格、测试

文章目录

  • 软件工程
    • 第8章 面向对象程序设计风格、测试
      • 8.1 面向对象程序设计风格
        • 面向对象实现
        • 程序设计语言
        • 程序设计风格
          • 提高可重用性
          • 提高可扩充性
          • 提高健壮性
      • 8.2 面向对象程序测试
        • 测试策略
          • 1.单元测试
          • 2.集成测试
          • 3.确认测试
        • 测试用例设计
          • 1.测试类的方法
          • 2.集成测试方法

软件工程

第8章 面向对象程序设计风格、测试

8.1 面向对象程序设计风格

面向对象实现

  • 把面向对象设计结果翻译成面向对象程序
  • 测试并调试面向对象的程序

程序设计语言

所有语言都可完成面向对象实现,但效果不同。使用非面向对象语言编写面向对象程序,则必须由程序员自己把面向对象概念映射到目标程序中。

选用面向对象语言的优点:

  • 将来能够占主导地位(产品有生命力)
  • 可重用性
  • 类库和开发环境
    • 考虑类库中提供有价值类
    • 开发环境中提供基本软件工具和类库编辑工具及浏览工具
  • 其他因素
    • 培训服务; 技术支持; 开发工具、开发平台、发行平台;
    • 对机器性能和内存需求;集成已有软件容易程度

程序设计风格

提高可重用性
  1. 提高方法的内聚
    方法只完成单个功能。涉及多个不相关功能,分解。
  2. 减小方法的规模。
    方法规模过大,分解。
  3. 保持方法的一致性
    功能相似方法有一致名字、参数特征(包括参数个数、类型和次序)、返回值类型、使用条件及出错条件等。
  4. 把策略与实现分开
    • 负责做出决策,提供变元,管理全局资源,称策略方法。
    • 负责完成具体操作,称实现方法。
    • 实现方法相对独立,可在其它系统中重用,将二者分开。
  5. 全面覆盖
    • 应针对所有组合写方法。
    • 当前应用需要:获取表中第一元素
    • 提高可重用写:获取表中最后一元素
    • 处理正常值
    • 对空值、极限值、界外值做出响应
  6. 尽量不用全局信息
    降低方法与外界耦合程度。
  7. 利用继承机制
    实现共享和提高重用程度的主要途径。

利用继承机制

  • 调用子过程:把公共代码分离出来,构成一个公用方法。
  • 分解因子:从不同类相似方法分解出不同的代码,余下作为公用方法中公共代码。把分解出的因子作为名字相同算法不同的方法,在不同类中定义。
  • 使用委托
  • 代码封装在类中:把被重用的代码封装在类中。
提高可扩充性
  1. 封装实现策略
    应把类的实现策略(包括数据结构、算法等)封装起来,对外提供公有接口。
  2. 不要用一个方法遍历多条关联链
    一个方法应只包含对象模型中有限内容。否则导致方法过分复杂,不易理解和修改扩充。
  3. 避免使用多分支语句
    • 增添新类时会修改原有的代码。
    • 合理利用多态性机制。
  4. 精心确定公有方法
    公有方法是向公众公布的接口。
提高健壮性
  1. 预防用户操作错误
    任何输入(错误),给出提示信息,再次接收用户输入。
  2. 检查参数合法性
  3. 不预先确定限制条件
    使用动态内存分配机制,创建未预先设定限制条件数据结构。
  4. 先测试后优化

8.2 面向对象程序测试

测试策略

1.单元测试

单元:封装的类和对象。

单元测试:对程序内部具体单一功能模块测试,如程序用C++实现,主要对类成员函数测试。传统的测试方法都可使用,等价类划分、边值分析、逻辑覆盖法、基本路径法。

2.集成测试

在面向对象的软件中不存在层次的控制结构,传统的自顶向下或自底向上的集成策略就没有意义了。此外,由于构成类的各个成分彼此间存在直接或间接的交互,一次集成一个操作到类中(传统的渐增式集成方法)通常是不现实的。

面向对象软件的集成测试主要有下述两种不同的策略:

  1. 基于线程的集成测试:
    把响应系统的一个输入或一个事件所需类集成起来。
  2. 基于使用的集成测试:
    先测独立类,测完后测独立类下一层类(依赖类),到测完。
3.确认测试
  • 测试用户可见动作,可识别系统输出。
  • 根据动态模型和描述系统行为的脚本设计确认测试用例。黑盒法

测试用例设计

与传统软件测试(测试用例的设计由软件的输入、处理、输出视图或单个模块的算法细节驱动)不同,面向对象测试关注于设计适当的操作序列以检查类的状态。

1.测试类的方法

测试单个类的方法主要有随机测试、划分测试和基于故障的测试等3种:

  1. 随机测试:在类的多个操作排列中,随机选择。
  2. 划分测试(类似等价类划分)
    • 基于状态的划分(根据改变类状态能力划分:改变类状态、不改变类状态)
      • 设计测试用例,以分别测试改变状态的操作和不改变状态的操作。
    • 基于属性的划分(根据类操作属性:使用该属性、修改属性、不操作该属性)
    • 基于功能的划分(根据类操作完成功能:初始化操作、计算操作、查询操作、终止操作)
    • 基于故障测试(错误推测法,如边界或输入输出为零等)
2.集成测试方法
  1. 多类测试:测试类间协作,同样可采用随机测试和划分测试。
  2. 从动态模型导出测试用例:
    • 测试用例涵盖所有状态;
    • 导出更多的测试用例以保证该类的所有行为都被适当地测试;
    • 在类的行为导致与一个或多个类协作的情况下,应该使用多个状态图去跟踪系统的行为流。

确认测试方法:

  • 和传统确认测试方法一样,OO软件的确认关注用户可见的动作和用户可识别的系统输出。
  • 为辅助确认测试的导出,应充分分析模型中的用例图的场景来提高交互需求中发现错误的可能性。

来源:江城暮

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年2月21日
下一篇 2021年2月21日

相关推荐