可重复(Repeatable):测试应该可以在任何环境下可重复,可运行,因为测试独立于环境外部资源。

  自足验证(Self-Validation):测试应该有通过失败的标示,从每一个测试上能得到一处代码逻辑的通过失败。每个测试都有对同一件事物的一种行为的断言,也之断言一件事,从而能够很好的错误定位,避免高技巧性的测试。

  及时(Timely):测试应该是及时编写的,TDD要求测试必须在实现代码之前,提前以使用者的角度定义使用接口方式。如果你是在编码后补测试,你的测试覆盖很可能不够,而且容易定式于实现的逻辑写测试,很多时候对于较低层次的测试也不是那么容易写的。一个设计良好的代码必须也是可测试的。
  八:类

  面向对象的相似行为的抽象,函数代码块的组织形式,在面向对象中我们的软件系统是由众多的类和类之间的交互协作完成了。面向对象特征:封装,继承,多态度,委派。一个设计良好的类该是具有良好的封装,站在使用者的调度考虑那些是使用接口,那些是内部细节;这是面向对象主要的特征,但是有时会与测试冲突,可以适当的放开并于于测试调用。继承和多态在面向对象中可以实现重用,但我更倾向于继承不是为了重用,而是隔离变化;大量的滥用继承不干净的继承体系将会导致庞大的继承体系,继承体系中众多职责重复在各个同级派生类,理想的继承应该是满足里氏替换原则(LSP:每个父类出现的地方都应该可以被派生类所替换,并且能正确的工作);面oo第二原则组合优先。而委派则是一个类把部分功能委派给其他类来完成,体现类之间的协作,类似组合。

  类第一原则应是是小并足够的小。但与函数不同的是函数以代码行数统计,而类以权责统计。

  单一原则(SRP),体现了类只应该做一件事,并且做好它,这样变化修改的理由只有他所做的事。良好的软件设计中系统是由一组大量的短小的类和他们之间功能协作完成的,而不是几个上帝类。

  内聚:高内聚低耦合:提出与结构化编程,内聚表述模块内部功能不同操作逻辑之间的距离,如果一个类的每个变量都被每个方法所使用为大的内聚;耦合描述模块之间的依赖程度;高内聚低耦合以简单的方式表述是功能完备(高内聚)对象之间是通过稳定的接口(低耦合)交互的。

  依赖倒置(DIP):描述组件之间高层组件不应该依赖于底层组件。依赖倒置是指实现和接口倒置,采用自顶向下的方式关注所需的底层组件接口,而不是其实现。DI模式很好的是应用IOC(控制反转)框架,构造方式分为分构造注入,函数注入,属性注入;.net平台流行的IOC框架有Unity,Castle windsor,Ninject,Autofac等框架支持,

  九:并发编程

  并发是一种时间(When)和目的(What)的解耦,提供应用程序的吞吐量,提高cpu利用率;但是并发编码不是那么容易,再加上临界资源竞争死锁。在并发编程的时候我们必须尽量遵守一些原则:

  并发已经足够复杂,我们更需要代码分离,分离线程相关代码和非线程相关代码,单一权责,尽可能降低其复杂度。

  限制临街资源的作用域,为临界资源加锁是防止并发的策略,但是必须正确的加锁,如果形成等待环,导致死锁。

  利用数据副本(值对象或者克隆)在线程之间传递数据,避免线程之前操作的并发影响;线程独立,使其在自己的环境中运行,不能其他线程共享数据。

  对于临界资源加锁应尽量保持加锁范围尽可能的小。