软件测试面向对象软件开发的敏捷过程[2]

发表于:2009-11-13来源:作者:点击数: 标签:软件测试软件开发面向对象
软件测试面向对象软件开发的 敏捷 过程[2] 软件测试开发工具 关键字:面向对象 敏捷过程 面向对象软件设计的原则 : 一、总体原则 : 1. 针对于接口(抽象)编程,而不要针对于实现(具体)编程。 举例来说:操作系统是对逻辑计算机的抽象,通过操作系统的抽象我

软件测试面向对象软件开发的敏捷过程[2]  软件测试开发工具

关键字:面向对象 敏捷过程

  面向对象软件设计的原则 :

  一、总体原则 :

  1. 针对于接口(抽象)编程,而不要针对于实现(具体)编程。

  举例来说:操作系统是对逻辑计算机的抽象,通过操作系统的抽象我们不需要考虑具体使用的硬件配置,可以在较高的层次上进行更高生产力的应用。再如:汇编语言对机器的 0 , 1 代码进行了抽象,大大加快了开发效率,后来使用的高级语言和第四代语言模型驱动抽象的级别更高,生产力也更高。再如: java 和 .net 实现于一个抽象的软件虚拟机,进一步使开发出来的组件可以跨平台和操作系统。通过抽象出数据访问层(持久化层),可以使业务逻辑和具体的数据库访问代码分离,更换数据库提供商对已有的组件没有影响。具体实现可以参照 hibernate 实现和 dao (数据访问对象)模式。

  优势:

  1 )降低程序各个部分之间的耦合性,使程序模块互换成为可能。调用的客户端无需知道具体使用的对象类型,只要对象有客户希望的接口就可以使用,对象具体是如何实现这些接口的,客户并不需要考虑。

  2 )简化了程序各个部分的单元测试,将需要测试的程序模块中通过重构提炼出抽象的接口,然后编制和接口一致的 Mock 类,测试就会变得很容易。如果应用了测试优先的方法,从简化客户端调用的角度,还可以经过抽象改善软件模块的设计。

  3 )模块的部署升级由于模块之间的耦合度降低变得更加容易。

  相关的设计模式有创建型模式中的工厂模式,结构型模式中的代理模式和组合模式等。

  2. 对象组合优于类继承。

  面向对象为软件开发引入了三大工具:继承,多态和重载。继承使得程序员可以快速的通过扩展子类来增加功能,但是由于继承是在编译时确定的,因此增加的功能较多时,继承不够灵活,还有可能出现“子类爆炸”的局面(为了完成新添功能,不得不在继承体系中添入大量的之间只有细微差别的子类,掌握使用扩展都会变得非常困难)。而通过对象的组合,可以动态透明的添加功能。相关设计模式有装饰模式和代理模式等。

  3. 分离变化。

  前面说过需求是在不断变化的,不同的变化可能是仓库安全库存的计算方法,可能是报表和数据的展现形式,通过把这些不同的变化识别并分离出来不同的对象委托,简化了客户端的调用和升级。相关的设计模式有命令模式,观察者模式,策略模式,状态模式,模版方法模式等。

  二、具体原则:

  1. 单一职责原则 srp ( single responsibility principle )

  一个模块的功能应该尽可能的内聚。如果一个类发生了变化,引起变化的原因应该有且只有一个。每一个类承担的职责都是一个变化的轴线,需求变化时,会体现为类的职责的变化。如果一个类承担的职责过多,就等于把这些职责耦合在了一起,一个职责的变化会影响这个类完成其他职责的能力,会出现前面所说的软件的臭味之一脆弱性。相关的设计模式有

  2. 开放封闭原则 ocp ( open closed principle )

  一个模块应该对功能的扩展开放,支持新的行为,对自身的更改封闭。每次对模块的修改都可能会引入新的错误和新的依赖。因此扩展新功能时,已经编好的模块源码和二进制代码都是不应该修改的。相关的设计模式有适配器模式,桥接模式,访问者模式等。

  3. Liskov 替换原则 lsp ( liskov subtitle principle )

  子类型必须可以替换掉他的基类型。一个基类的多个子类型之间要完成动态的替换,各个子类型必须都可以被他们的基类型替换,这样他们之间动态替换后,客户端调用的代码就不需要冗赘的 switch 类型判断代码。如果 子类型无法替换基类型,将会导致在派生类对象作为基类对象进行传值时的错误。这样多态机制处于瘫痪状态了。相关设计模式为组合

原文转自:http://www.ltesting.net