我最近读了MichaelC.Fees的书“Working effectively with legacy code”,他提到了一种测试自动重构工具安全性的方法。
我的问题是:是否有用于.net平台的安全重构工具?;这意味着只允许真正重构的工具,例如在下面的示例中不允许对temp变量进行inline variable重构,或者至少显示出我正在更改逻辑的警告。
class Program
{
private static int _x;
static void Main()
{
int temp = Test();
for (int i = 0; i < 10; ++i)
{
Console.WriteLine(temp);
}
Console.ReadKey();
}
private static int Test()
{
return ++_x;
}
}我用最新版本在重构工具Resharper和Coderush + Refactor pro上测试了这个示例,这两个版本都失败了,并且允许重构:
class Program
{
private static int _x;
static void Main()
{
for (int i = 0; i < 10; ++i)
{
Console.WriteLine(Test());
}
Console.ReadKey();
}
private static int Test()
{
return ++_x;
}
}发布于 2010-09-27 03:48:51
要真正安全地使用自动重构是非常困难的。
当我们第一次在VisualC#中引入重构时,我们问自己一个问题:我们的重构是否需要始终保持完全正确,还是应该允许它们在某些情况下出错?
所有的时间都是正确的,这将需要程序员的大量努力,这意味着我们只需要在框中进行少量的重构。它还会使重构变得更慢,因为它们会花费大量的时间进行验证。
允许他们犯错误会使他们对没有很好的自动化测试覆盖率的团队毫无用处。TDD团队有很好的测试,但这只是Visual用户基础的一部分。我们不想做的功能,我们必须告诉人们不要使用!
TDD团队很快就会发现错误,但他们也会很快学会不信任我们的重构工具。他们会犹豫使用它们,并在大部分时间内寻找其他解决方案(查找和替换而不是重命名)。
此外,作为C#团队,我们处于高保真度重构的有利位置.我们有一个独特的优势,C#语言设计人员和编译器团队就在大厅里。我们知道我们应该发挥自己的优势。
因此,我们决定减少高质量的重构,而不是很多不那么可靠的重构。今天有六个。

回顾过去,我希望我们只做了重命名、提取方法和引入局部变量。后两者在实现上几乎是一样的。三个参数重构(曾经有一个7,促进局部变量到参数,但它被削减在VS2010)是一个吨的工作,得到正确,可能是不值得的。
我的建议是使用do TDD,为您提供大量的测试,以便您可以安全地重构,无论您是使用工具还是手工完成。
发布于 2010-09-17 14:43:23
重构本身就有风险。仅仅依靠一个工具使您的代码安全是不明智的,imo。
我们使用Resharper,但不是没有综合单元测试的安全网。我不知道在这个空间中有什么更好的C#工具。
发布于 2010-09-17 14:48:44
我不同意你的“测试”显示失败。
你改变了逻辑,而不是工具。您更改了代码,使方法将被重复调用,而不是一次。
工具只是做你让他们做的事。
https://stackoverflow.com/questions/3736276
复制相似问题