其他分享
首页 > 其他分享> > 驯服烂代码

驯服烂代码

作者:互联网

 

驯服烂代码

何为烂代码

遗留代码
大泥球
烂代码一般表现在下面几个方面
烂代码应该具有下面3点特性

简而言之,烂代码就是反馈迟缓的代码。这里的反馈包括了了解代码的行为、验证代码、和在这些代码之上修改bug或新增功能等方面。

分而治之-釜底抽薪

对生成代码所做的重构无非是用新代码替换旧代码。替换的方法可以分为两种

“釜底抽薪”的方法适用于简单的重构。“抛砖引玉”的方法适用于复杂一些的重构。

分而治之-抛砖引玉

对于看起来复杂的系统,可以使用“抛砖引玉”的方法来进行

使用“抛砖引玉”的重构方法时,若原有代码出现在if条件中,则其可以与功能等价的意图代码做逻辑“或”运算而出现在同一个if条件中,这样就不会在代码运行时影响原有的功能。

分而测之-编写Stub及提取接口

如何解决被测系统(System Under Test,SUT)所依赖的组件(Depended-On Component,DOC)在测试中难以控制的问题
Stub和Mock

分而测之-编写Mock及子类化并复写方法

真正的单元测试

单元测试运行的快。运行得不快的不是单元测试。一个需要耗时0.1秒才能执行完的单元测试已算是一个慢的单元测试了。

有些测试容易跟单元测试混淆起来。比如

单元测试要测的仅仅是SUT里面的软件行为,并不是测试SUT于诸如数据库、网络和文件系统这些DOC之间是否能够正常交互。可以先找到DOC的接口,然后让SUT针对这个接口编程,并且编写一个运行起来经济快捷的Test Double来实现这个接口,并注入SUT中,让SUT把这个Test Double当成那个接口来使用。这样能够依赖于DOC的集成测试,转换为依赖于实现接口的Test Double的单元测试了。

驯服烂代码的步骤:LePpTr

要了解一段烂代码,也不仅要听其言,即要看代码本身、文档及注释来理解代码的意图,更要观其行,即用运行测试代码的方式来验证代码是否言行一致。

驯服烂代码的步骤如下
  1. 听其言,维护TODO列表、编写用户意图测试和意图代码。TODO列表就是意图列表。程序员可以手机并审查所有当前和今后要做的诸如用户意图测试、bug修复和diamante“腐臭”治理的任务、形成一个用意图来表达的TODO列表。然后根据当时的情况,或者选择一个条件已经具备且有信心完成的用户意图TODO作为下一步要开发的任务,把它标记为working-on,根据用户意图做出合理的分析和设计,根据设计意图编写用户意图测试或意图代码。可以把每条TODO都以代码注释的方式写到代码相关的位置,并且用IDE的TODO管理界面加以管理。对于完成的TODO,就可以从列表中删除。
  2. 观其行,以修复编译错误和测试运行错误为指引编写恰好够用的生产代码,直至测试运行通过。首先以上一步所编写的意图代码的红色编译错误为指引,当信心弱时可以编写尽量少的生产代码(即可以写空类或空方法),当信心强时可以写自认为合理的生产代码,来让测试代码和生产代码编译通过。然后运行测试,当发现测试运行中的诸如空指针这样的测试运行错误后,以这些错误为指引,同样当信心弱时编写少量生产代码,当信心强时编写自认为合理的代码,让测试运行。
  3. 守其道,全面重构TODO列表、测试代码和生产代码。首先“嗅一嗅”上一步令测试运行通过的生产代码中,是否有“腐臭”味道。如果有,进行下小步重构生产代码,消除“腐臭”。然后根据诸如面向对象的SOLID原则、已知的或更新后的产品特性和设计模式这些软件的“道”的层面的概念,来审查所有的测试代码和生产代码,来找出不合理的测试、代码“腐臭”、被遗漏的User Story或刚刚从测试工程师手上接到的bug报告等,并以TODO的形式记录下来,补充到“听其言”步骤中的TODO列表中,来进入下一个迭代。
全面重构的定义
驯服烂代码的IePpTr方法是TDD开发方法的一种实现

Total Refactoring 全面重构,是为了适应软件开发过程中软件外在行为会主键发生变化的情况,而对传统重构概念所做的扩展。这种扩展强调在遵从软件开发的“道”的前提下,对记录未完成任何的TODO列表、测试代码和生产代码进行修改、以改进代码内部的结构的过程。

 

标签:驯服,代码,测试运行,接口,SUT,测试,编写
来源: https://www.cnblogs.com/will-xz/p/14342357.html