我如何帮助初级成员对重构代码的能力有信心?

时间:2008-12-24 05:39:12

标签: c# refactoring

我想看看人们认为什么是帮助初级成员获得重构代码能力的最佳方式。我发现,初级开发人员通常只是遵循现有的模式,并感觉到由于感知到的风险而厌恶打破任何东西。我试图让他们查看需求(新的和现有的)并将代码映射到域模型而不是“调整”或“弯曲”现有代码库以支持新功能。只是想看看有没有人在这里取得成功。我们目前正在考虑推出更多配对编程,TDD,代码审查等,但想检查是否还有其他成功案例...

11 个答案:

答案 0 :(得分:17)

唯一可靠的答案是单元测试恕我直言。不一定是TDD - 只是让他们为他们想要重构的现有方法/类编写测试,确保他们正在做他们正在做的事情,然后让他们像疯了一样重构,同时依靠测试来确保方法仍然有效。

单位测试允许的置信度和灵活性在这些活动中具有极大的价值。

答案 1 :(得分:4)

与高级开发人员结合编写测试的结对编程似乎是最佳情况。如果该对中更有经验的开发人员处于领先地位,那么测试将只是其中的一部分。

单独编写测试留下了改进的空间。在一对环境中编写测试是两全其美的,因此应该更快地建立信心。

答案 2 :(得分:3)

我建议您在开始大量重构之前进行单元测试,如果您有良好的代码覆盖率,只需运行测试,您就可以看到某些测试失败,重构会影响所需的程序行为。< / p>

基本上,单元测试可以让您对团队重构所需的信心。

答案 3 :(得分:1)

无论如何,你应该推动“更多配对编程,TDD,代码审查等”。你还应该确保你的程序员(无论是少年人还是习惯者)都熟练掌握基础知识。

我建议他们阅读McConnell的代码完成和Fowler的重构

答案 4 :(得分:0)

我同意 - 单元测试和结对编程。

答案 5 :(得分:0)

第一步是让他们为任何想要重构的东西编写测试,然后重构。我还认为,对于更高级的开发人员以及结对编程,代码审查有一些优点。

答案 6 :(得分:0)

我的建议是采用一个随着时间的推移会发生很大变化的系统,并让一个初级开发人员给出一个计划,说明他们想要应用的基础知识,例如:是缺少单元测试,使用什么设计模式来添加新功能,你觉得这是“好”代码,如果不是,你会对它做出什么改变?部分原因是让他们进入代码并对其感到满意,因为当开发人员不知道系统中的任何内容是什么时,他们很可能想要做出最小的改变,因为他们害怕破坏某些东西而后来会出现负面影响。如果可以有一位资深成员可以充当导师并指导初级开发人员建议的东西更好地匹配所寻求的东西,那么这可能是最重要的事情。

请注意,对于上述情况,高级成员可能必须非常熟悉,并且已经完成了如何进行初级开发人员将要进行的更改的计划,但其目的是让更多的人获得更多进入代码是我如何看待它。如果初级开发人员可以养成跳入事物的习惯并被鼓励去做,那么我可以在那里看到一些成功。关键是要了解如何纠正初级开发人员的建议,并鼓励他们在整个过程中给予更多,而不是被告知要做什么。

有些人更有可能脱颖而出并抓住机会,关键是让小组看看结果是什么,最终是一群初级开发人员都在研究高级开发人员的各种解决方案可能最初构建系统或将各种产品集成在一起,因此可以提供应该做什么的输入,但作为指导而不是父母完成工作。

另一种观察方式是从初级开发人员的角度简单地看待事物。如果他们提出建议并获得某些东西,例如赞美或更好的任务,然后这可能会让事情滚滚而来,尽管必须要小心所给予的东西,如果它变得太高,那么继续把事情搞得一团糟可能会遇到问题。

答案 7 :(得分:0)

  • 要求他们撰写或调查现有的测试用例
  • 运行这些测试用例,记录结果
  • 要求他们重构代码
  • 查看重构代码
  • 运行与先前观察相匹配的测试用例

答案 8 :(得分:0)

另外,尝试做一些编码dojo的。一对坐在投影仪上,每五分钟旋转一位开发人员。让他们谈谈他们如何重构,以及为什么。

请参阅:http://www.codingdojo.org/

答案 9 :(得分:0)

我认为这个问题并不是针对C#的,因此我建议您使用Eclipse尝试使用Java。 Eclipse拥有迄今为止我见过的最好的重构工具(尽管我从未尝试过IntelliJ IDEA或Resharper)。通过Eclipse学习重构,特别是在执行任何更改之前使用预览窗口,我已经从中受益匪浅。

答案 10 :(得分:0)

我会推荐组合书籍,工具,编码和指导。

在其他任何事情之前 - 让候选人购买或借用Martin Fowler的Refactoring并阅读它。

如果你有一个好的源代码控制系统 - 创建一个单独的分支来玩它应该是微不足道的。此外,如果练习的最终结果很有用,您可以轻松地将其合并到主干中。

接下来,选择您知道需要他们理解应用程序结构的特定任务。例如,要求他们检测系统的一部分。这提供了一个任务,在其中工作而不是一般指令(如阅读框架文档或阅读此代码)

下一部分是要求编写测试以支持此任务所涉及的功能。检查测试并鼓励编写全面的测试。使用NUnit之类的工具非常重要,或者如果您的IDE支持单元测试,请使用它。鼓励这个人提出问题并找出原因是什么。

如果您使用支持它的IDE,请在IDE中引入重构工具,并鼓励他们重构代码。使用结对编程或常规代码审查来指导此人。这些测试可用于展示单元测试如何成为良好重构工作的重要组成部分。从小处开始 - 可能会更改事物的名称或将字段提取到属性中,然后转移到更复杂的属性。

希望在练习结束时,这个人不仅要足够舒服地进行提问,调整和更改应用程序,而且还会有一些有用的功能: - )