TDD

单元测试的目的

  • 提高外部质量
  • 提高内部质量
  • 提高开发效率
  • 提高个人开发技能

TDD三部曲

  1. 写一个不通过的测试

    验证测试代码本身确实能够捕获错误

  2. 写实现代码,使其刚好通过测试

    保证每一个代码逻辑都是测试驱动的,从而达到前面的测试覆盖率

  3. 通过重构去除坏味道,如重复、魔数、命名不准确、代码复杂等

    持续改进代码质量

单元测试的原则

F:fast 单元测试应该快速完成,一个产品的全部单元测试在几分钟内

I:independent,测试用例相互不依赖,即不需要固定的顺序执行

R:repeatable 被测系统不变,单元测试执行多少次都一样

S:self-validating ,需包含足够多的断言进行自我验证

T:timely 测试先行,单元测试和实现代码一起及时完成并提交

单元测试的代码结构、命名方法

最佳实践

  1. 全量运行

    运行所有单元测试,至少保证代码提交前全量运行并通过单元测试

  2. 快速循环

    单元测试有多个小循环(分钟级)

  3. 三角法

    一个测试点 + 两个测试案例

  4. 测试文档化

    清晰的测试方法命名,说明测试覆盖的逻辑点

通过TDD进行重构

重构要点

code smell

重构注意事项

  • ​ 自动化测试的保障下进行重构
  • ​ 通过多个小步骤逐步重构

改变接口时注意事项

  • ​ 是否需要兼容旧接口,如果是,旧接口调用新接口保持一致性
  • ​ 将旧接口声明为Deprecated,要求其他程序逐步迁移至新接口
  • ​ 在合适时机彻底删除旧接口

面向对象设计要点

  • 单一职责原则——SRP
  • 开闭原则——OCP
  • 里式替换原则——LSP
  • 依赖倒置原则——DIP
  • 接口隔离原则——ISP
  • 迪米特原则——LOD

1、单一职责原则
定义:
一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。
单一职责原则是实现高内聚、低耦合的指导方针,是最简单却最难运用的原则,需要设计人员发现类的不同职责并将其分离

2、开闭原则
定义:
软件实体应当对扩展开放,对修改关闭。
指软件实体应尽量在不修改原有代码的情况下进行扩展。

3、里氏替换原则
定义:
所有引用基类的地方必须能透明地使用其子类的对象。
里氏替换原则表明,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立。
在运用里氏替换原则时,应该将父类设计为抽象类或者接口,让子类继承父类或实现父类接口,并实现在父类中声明的方法。

4、依赖倒转原则
定义:
高层模块不应该依赖底层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
依赖倒转原则要求:要针对接口编程,不要针对实现编程。

5、接口隔离原则
定义:
客户端不应该依赖那些它不需要的接口。
在使用接口隔离原则的时候,需要注意控制接口的粒度,接口不能太小,如果太小会导致系统中接口泛滥,不利于维护;接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来不方便。

6、迪米特法则-又称最少知识原则
定义:
每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。

设计模式

23种

开闭原则

函数重构原则

短小 10行内

单一职责

具有描述性的名称

参数尽可能少

尽量避免重复

函数重构方法

提炼函数 extract method

内联函数 inline method

内联临时变量 inline Temp

以查询取代临时变量

引入解释性变量

分解临时变量

移除对参数的赋值

以函数对象取代函数

替换算法

函数重构面临问题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值