RoX*_*oXX 5 .net c# refactoring
我最近阅读了Michael C. Feathers的书,Working effectively with legacy code并提到了一种测试自动重构工具安全性的方法.
我的问题是:.net平台有没有安全的重构工具?; 这意味着只允许实际重构的工具,例如,在以下示例中不允许inline variable对temp变量进行重构,或者至少显示我正在更改逻辑的警告.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经在重构工具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;
}
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*end 10
重构具有内在的风险.单纯依靠工具来保证代码安全是不明智的.
我们使用Resharper但不是没有综合单元测试的安全网.我不知道这个领域有更好的C#工具.
我不同意你的"测试"显示失败.
你改变了逻辑,而不是工具.您更改了代码,以便重复调用方法而不是一次.
这些工具只是做了你告诉他们要做的事情.
使用自动重构非常安全非常困难.
当我们第一次在Visual C#中引入重构时,我们问自己这个问题:我们的重构是否需要一直完全正确,或者我们应该允许它们在某些情况下犯错?
一直都是正确的需要很多程序员的努力,这意味着我们只需要在框中进行一些重构.它还会使重构变慢,因为它们会花费大量时间进行验证.
允许他们犯错将使他们对任何没有很好的自动化测试覆盖率的团队毫无用处.TDD团队有很好的测试,但这只是Visual Studio用户群的一部分.我们不想制作我们不得不告诉人们不要使用的功能!
TDD团队会很快发现错误,但他们会尽快学会不相信我们的重构工具.他们在使用它们时犹豫不决,并且在很多时候寻找其他解决方案(查找和替换而不是重命名).
此外,作为C#团队,我们处于一个很好的位置,可以进行高保真的重构.我们有一个独特的优势,C#语言设计师和编译团队就在大厅里.我们知道我们应该发挥我们的优势.
因此,我们决定减少高质量的重构,而不是大量不那么可靠的重构.今天有6个.

回顾过去,我希望我们只完成重命名,提取方法和引入局部变量.最后两个几乎是相同的,实现方式.3个参数重构(曾经是第7个,将参数提升为局部变量,但它在VS2010中被切割)是很多工作要做对,可能不值得.
我的建议是做TDD,给你一大堆测试,这样你就可以安全地重构,无论你是使用工具还是手工操作.