马丁·福勒,代码重构是(强调我的):
重构是一种规范的技术,用于重构现有的代码体,在不改变其外部行为的情况下改变其内部结构。它的核心是一系列保持小行为的变换。每个转换(称为“重构”)几乎不起作用,但是一系列的转换可以产生重要的重构。因为每次重构都很小,所以不太可能出错。在每一次小重构之后,系统也会保持完全正常工作,从而减少了系统在重组过程中严重崩溃的可能性。
在这种情况下,什么是“外部行为”?例如,如果我应用移动方法重构并将某些方法移动到其他类,它看起来就像是改变了外部行为,不是吗?
所以,我有兴趣弄清楚什么时候改变不再是重构,而是变成更多的东西。“重构”一词可能被误用为更大的变化:是否有一个不同的词来形容它?
更新。关于接口有很多有趣的答案,但是移动方法重构不会改变接口吗?
发布于 2011-08-15 06:35:22
外部只是它真正的语言意义上的界面。以一头牛为例。只要你吃一些蔬菜,得到牛奶作为回报,你就不在乎它的内脏是如何工作的。现在如果上帝改变牛的内脏,使它的血液变成蓝色的颜色,只要入口和出口点(口和奶)不改变,就可以认为是重构。
发布于 2011-08-15 22:35:54
对我来说,当测试和/或正式规范设置边界时,重构是最有效率的/最舒适的。
至于其他类型的界限--到目前为止,我运气不佳。
“用户可观察”是一个安全的赌注,如果一个人有遵守它的纪律--对我来说,这在分析现有的/创建新的测试时总是花费了很多的精力--也许是太费劲了。我不喜欢这种方法的另一件事是,盲目地遵循它可能会变得过于限制性。-这个更改是被禁止的,因为加载数据将需要3秒而不是2秒。-嗯,那么,向用户/ UX专家检查这是否相关如何?-不可能,禁止任何可观察行为的改变。安全?行!没问题!有效率吗?不怎么有意思。
我尝试过的另一个方法是保持代码逻辑(阅读时我理解它的方式)。除了最基本的(通常不是很有成效的)变化,这个总是一罐蠕虫.或者我应该说一罐虫子?我指的是回归错误。在使用意大利面条代码时,破坏一些重要的东西太容易了。
发布于 2011-08-19 08:54:05
重构书非常强大,它的信息是,只有当您有单元测试覆盖率时,才能执行重构。
因此,您可以说,只要不破坏任何单元测试,就会进行重构。当您中断测试时,您将不再进行重构。
但是:这种简单的重构(比如更改类或成员的名称)如何?他们不通过测试吗?
是的,在每一种情况下,您都需要考虑这种中断是否重要。如果您的苏特是一个公共API/SDK,那么重命名确实是一个突破性的更改。如果不是的话,可能没问题。
但是,考虑到这一点,通常情况下,测试失败并不是因为您更改了您真正关心的行为,而是因为测试是脆弱试验。
https://softwareengineering.stackexchange.com/questions/101064
复制相似问题