重命名代码
这篇文章是“从旧代码到可测试代码”系列的一部分。 在本系列中,我们将讨论在为遗留代码编写测试之前进行重构的步骤,以及它们如何使我们的生活更轻松。
重命名很容易,而且通常很安全。 大多数IDE都具有该功能,并且大多数语言(我不是在谈论您,C ++)有助于安全重命名。
为什么要重命名? 它有助于使代码更易于理解。 当我们可以更好地理解代码时,我们编写的测试将更加有效。 换句话说:不要为您不了解的代码编写测试。
重命名是轻松实现的目标。
命名事物可能是编程中最难的事情。 许多代码变得复杂,因为我们将“ Manager”作为类后缀。 就像给自己权限为我们不知道放在哪里的代码腾出空间。 但是,它并不只限于一堂课。 一旦有了AccountManager
类,很快就会出现BankManager
和CustomerManager
。 对于getValidCustomer
方法来说也是如此,它实际上应该是一个void方法,但是返回成功代码。 当我们草率时,我们允许通用的,令人困惑的名称在代码中蓬勃发展。 当名称含糊不清时,各种各样的实现都会涌入。
我是否编写代码都没关系,还是有人不在这里工作了。 遗留代码始终可以改进。
我们编写测试的主要目标之一就是改善代码。 但是不费吹灰之力就可以安全地改进代码是一种好处。 风险是关键。 如果IDE可以安全地进行重命名,则我们更有可能这样做。 另一方面,如果我们需要依靠手动更改,那么我们将不会。
通常,在进行测试前重命名时,我们将更多地集中在方法名称上,或者可能在代码中使用变量。 这些通常足够小,可以挑选好名字(如果不够用,可以提取出来)。 重命名类通常比较困难,因为它们通常覆盖更多的领域(请记住,孩子们是怎么回事?)。
在测试之前,重命名是我们熟悉代码的一部分。 即使我不知道要测试什么 ,使代码可读也可以帮助我不仅了解它的功能,还帮助我测试方法。
重命名变量
如果有的话,我们通常按范围命名。 进行区分有助于理解。 如果代码中已经有约定(例如字段的m_前缀),请确保所观察的代码中遵循了约定。 如果没有约定,则开始约定。
将变量的类型与方法及其类型进行比较。 如果可以改进,请重命名。
例如:
Acct a = BankManager.getAccount();
我们可以将a重命名为account ,而我们不需要记住在我们的方法的下500行中a是什么。 如果返回值的方法似乎令人困惑,则其类型可以帮助您重命名它。
不要跳过元音! 它起初是节省屏幕空间的聪明方法,但是在元音消失之后,我们考虑了其他选择,很快我们就剩下了: acct。 不仅可读性差,而且令人讨厌。 使代码可读。
除了重命名之外,如果可以整理代码,请将声明放在类或方法的开头的一个区域中。 如果发现声明四处散布,请清理干净。
重命名方法
由于前面提到的草率,方法很难重命名,因为它们倾向于做更多的事情。 我们通常以一个简单的名字开头,然后找到该方法做更多事情的最佳位置。 我们很快有了一个大方法,一个名字让我们想起了当时的方法。
这使读者感到困惑,当然也使测试变得更加困难。 但是我们还没有。 现在,使重命名变得简单:如果该方法返回带有get前缀的内容。 如果这样做,请确保它以动词开头,例如set或make或call。
检查方法的最后几行或退出点。 通常(并非总是如此),从结构中您将看到函数的用途。 尝试使名称适合目的。 虽然可能并非总是如此,所以要小心。
不要跳过元音! 不用担心屏幕空间。 使方法名称传达其目的,并使用整个字母。
重命名课程
这些是很难重命名的,并且我通常建议不要重命名(至少要等到将它们缩小到一定大小时才这样做)。 我们只在声明或创建时看到类型,因此重命名它们不会给我们带来很多好处。
在名称中标识基类或派生类可能是有益的。 例如,在添加第三个层次结构层时,通常不会,并且以后很讨厌。 我仍然喜欢接口的前缀I ,尽管它可能使我在某些社区中丧命。 并永远记住孩子:
不要跳过元音! 也适用于类。
现在我们已经完成了重命名,现在是提取时间。 接下来。
翻译自: https://www.javacodegeeks.com/2014/10/legacy-code-to-testable-code-1-renaming.html
重命名代码