面向对象实现-第二节:程序设计风格和测试策略

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象实现-第二节:程序设计风格和测试策略相关的知识,希望对你有一定的参考价值。

文章目录

一:程序设计风格

(1)概念

A:良好的程序设计风格的重要性

  • 能明显减少维护或扩充的开销
  • 有助于在新项目中重用已有的程序代码

B:良好的面向对象程序设计风格内容

  • 传统的程序设计风格准则
  • 为适应面向对象方法所特有的概念而必须遵循的一些新准则

(2)提高可重用性

A:代码重用

  • 内部重用:即本项目内的代码重用,主要是找出设计中相同或相似的部分,然后利用继承机制共享它们
  • 外部重用:即新项目重用旧项目的代码,需要有长远眼光,反复考虑,精心设计

B:主要准则

①:提高方法的内聚

一个方法应该只完成单个功能。如果某个方法涉及两个或多个不相关的功能,则应该把它分解成几个更小的方法

②:减小方法的规模

③:保持方法的一致性

保持方法的一致性,有助于实现代码重用,功能相似的方法应该有一致的名字、参数特征、返回值类型、使用条件及出错条件等

④:把策略与实现分开

  • 策略方法:策略方法应该检查系统运行状态,并处理出错情况,它们并不直接完成计算或实现复杂的算法。其紧密依赖于具体应用
  • 实现方法:实现方法仅仅针对具体数据完成特定处理,用于实现复杂的算法。在执行过程中发现错误,它们只返回执行状态而不对错误采取行动。其相对独立于具体应用

⑤:全面覆盖

  • 输入条件的各种组合都可能出现,应针对所有组合写出方法
  • 一个方法对空值、极限值及界外值等异常情况也应能够做出有意义的响应

⑥:尽量不使用全局信息

⑦:利用继承机制

  • 调用子过程:把公共的代码分离出来,构成一个被其他方法调用的公用方法。可以在基类中定义这个公用方法,供派生类中的方法调用
  • 分解因子:提高相似类代码可重用性的一个有效途径,是从不同类的相似方法中分解出不同的代码,把余下的代码作为公用方法中的公共代码,把分解出的因子作为名字相同算法不同的方法,放在不同类中定义,并被这个公用方法调用
  • 使用委托:继承关系的存在意味着子类“即是”父类,因此,父类的所有方法和属性都应该适用于子类,仅当确实存在一般一特殊关系时,使用继承才是恰当的,当逻辑上不存在一-般一特殊关系时,为重用已有的代码,可以利用委托机制
  • 把代码封装在类中:重用通过其他方法编写的、解决同一类应用问题的程序代码的一个比较安全的途径是把被重用的代码封装在类中

(3)提高可扩充性

主要准则有:

  • 封装实现策略:应该把类的实现策略封装起来,对外只提供公有的接口,否则将降低今后修改数据结构或算法的自由度
  • 不要用一个方法遍历多条关联链:一个方法应该只包含对象模型中的有限内容。违反这条准则将导致方法过分复杂,既不易理解,也不易修改扩充
  • 避免使用多分支语句:可以利用DO_CASE语句测试对象的内部状态,而不要用来根据对象类型选择应有的行为,否则在增添新类时将不得不修改原有的代码
  • 精心确定公有方法

(4)提高健壮性

主要准则有:

  • 预防用户的错误操作
  • 检查参数的合法性
  • 不要预先确定限制条件
  • 先测试后优化

二:测试策略

(1)经典的测试策略

测试软件的经典策略是,从“小型测试”开始,逐步过渡到“大型测试”。用软件测试的专业术语描述,可以分为以下三步:

  • 单元测试
  • 集成测试
  • 确认测试、系统测试

(2)面向对象测试策略

A:面向对象的单元测试

最小的可测试单元是封装起来的类和对象。测试面向对象软件时,不能再孤立地测试单个操作,而应该把操作作为类的一部分来测试。在测试面向对象的软件时,传统的单元测试方法是不适用的,不能再在“真空”中(即孤立地)测试单个操作

B:面向对象的集成测试

①:策略

  • 基于线程的测试:把响应系统的一个输入或一个事件所需要的那些类集成起来。分别集成并测试每个线程,同时应用回归测试以保证没有产生副作用
  • 基于使用的测试:不使用服务器类的独立类,把独立类都测试完之后,再测试使用独立类的下一个层次的类(称为依赖类)。对依赖类的测试一层一层次地测试,直至把整个软件系统构造完为止

②:集群测试

集群测试是面向对象软件集成测试的一个步骤。在这个测试步骤中,用精心设计的测试用例检查一群相互协作的类,这些测试用例力图发现协作错误

C:面向对象的确认测试

在确认测试或系统测试层次,不再考虑类之间相互连接的细节。面向对象软件的确认测试也集中检查用户可见的动作和用户可识别的输出。为了导出确认测试用例,测试人员应该认真研究动态模型和描述系统行为的脚本,以确定最可能发现用户交互需求错误的情景

三:设计测试用例

(1)测试类的方法

A:随机测试

B:划分测试

①:优点

采用划分测试方法可以减少测试类时所需要的测试用例的数量

②:流程

  • 把输入和输出分类
  • 设计测试用例以测试划分出的每个类别

③:方法

  • 基于状态的划分:根据类操作改变类状态的能力来划分类操作
  • 基于属性的划分:根据类操作使用的属性来划分类操作
  • 基于功能的划分:根据类操作所完成的功能来划分类操作

C:基于故障的测试

(2)集成测试方法

A:多类测试

①:随机测试

  • 对每个客户类,使用类操作符列表来生成一系列随机测试序列
  • 对所生成的每个消息,确定协作类和在服务器对象中的对应操作符
  • 对服务器对象中的每个操作符,确定传递的消息
  • 对每个消息,确定下一层被调用的操作符,并把这些操作符结合进测试序列中

②:划分测试

  • 应该扩充测试序列以包括那些通过发送给协作类的消息而被调用的操作
  • 根据与特定类的接口来划分类操作

B:从动态模型导出测试用例

类的状态图可以帮助人们导出测试该类的动态行为的测试用例。通过导出大量的测试用例,保证该类的所有行为都被适当地测试了。在类的行为导致与一个或多个类协作的情况下,应该使用多个状态图去跟踪系统的行为

以上是关于面向对象实现-第二节:程序设计风格和测试策略的主要内容,如果未能解决你的问题,请参考以下文章

python面向对象程序设计(类成员)第二节

面向对象设计-第二节:启发规则和软件重用

第二节:面向对象

:函数极限连续:第二节:极限

面向对象方法学-第二节:面向对象的概念

面向对象分析-第二节:面向对象分析之建立对象模型