是不是供销遗留系统重建实战 下载呢

在 大会上 Wouter Lagerweij谈到了如何重建一个遺留系统而不是重构它,来帮助团队采取敏捷实践比如测试驱动开发,自动化测试持续交付。他的谈话基于他的博客文章

InfoQ采访了 Lagerweij关於是什么让重构如此困难,重建软件的风险是否比重构小以及持续交付如何配合软件的重建。InfoQ同时请教了他关于重建和重构的建议

InfoQ:您能解释一下是什么使得重构这么困难吗?

Lagerweij:只要你去做重构是一项相当简单的实践。同样的例子是单元测试只要你坚持为代码编写測试用例,或者清理代码中的设计问题一小步一小步的,这并不困难

可是你越是把这些丢在一边,捡起来的时候就越困难这就是为什么每个人都一直说“技术债务”。可是实际上它通常不是指 Ward Cunningham所创造的技术债务(参见 )

软件行业并不是唯一发生这些事情的地方。只昰询问一些活跃在医疗保健行业的专业医师了解到外科医生坚持在手术前洗手能降低一半的手术并发症,但是即使有积极的宣传和结构囮的清单它依然很难被遵守。

所以由于一些团队推迟重构,我们有一些混乱或者说“遗留代码库”。由于这些团队几乎总是没有足夠的重构经验(否则他们已经这样做了)他们无疑不能完成修复这些混乱代码的工作。

此时这些团队认识到他们应该为他们的“债务”莋些事情他们不得不接受一个系统,在其中努力学习用以提升自己系统的技能!当小的改动在系统的不同部位导致不可预知的结果时昰对重构中积极的学习经历不利的。而且任何开发人员都知道为封闭的紧耦合的系统添加单元测试是一个困难和不愉快的经历。

我想我偠说的是如果你等到遇到这些麻烦才开始学习这些技能,很可能你将不会成功的应用它们也就是说,在掌握它们之前你更可能会先放弃它们。

InfoQ:在您看来重建软件比重构的风险更小您能解释一下吗?

Lagerweij:说实话,如果你的团队成员知道如何去改进一个遗留系统重构始終是更好的选择。它的风险更小并且比任何类型的重写的开销要少。

但是不幸的是这些技能仍然非常稀少如果团队中的成员之前没有莋过这类工作,之后你的所有工作都会慢于预期你会在开发团队和公司中增加挫败感。

有一些组织发现自己陷入了困境他们简直没有專业人员来解决他们的技术问题。他们不能构造有竞争力的新功能甚至找到几个有经验的人也很难,常常是“太小太迟”的情况。

这種情况下重写是更有吸引力的

InfoQ:您能给出一些例子来展示团队如何来重建软件以及做持续交付吗?是什么让它们成为一个好的组合

Lagerweij:偅写的一个好处是你能重新开始。这意味着这次你能确保你这样做是正确的当然,大多数时候你不能。就像我之前说的处理这些事凊最好的方式,例如测试和重构就是持续不断的做。但是如果你之前从来没有做好过它怎么会突然就能工作?

我在谈话中说过的我們已经在我当前工作的团队试过。我们使用测试驱动开发(也叫做行为驱动开发)我们会保持代码的整洁,确保始终有100%的单元测试覆盖率他们不再害怕他们的遗留系统,他们知道他们能够做到这一点

我们也同意,确保我们不会受到放松控制的诱惑我们从第一天起就莋到完全的持续部署。这意味着开发者每次推送代码到 GitHub中时它会自动构建,测试并部署一直到生产这使得我们任何时候都能极好的关紸在保持高质量上。你不能推迟那些测试因为推送未测试的代码会破坏构建,使得整个团队等着你但是你也不想跳过测试(或者写一個未检查的单元测试只是为了糊弄覆盖率),因为你实际上可能破坏生产你自己,很明显

还有一些简单的心理作用,没有人真正关心什么让测试覆盖率从2.1%到2.0%但是当它从100%掉到99.9%时,整个团队会要求一个解释

你仍然需要经历一个学习过程。重新开始并不会让你突然做的更恏它只是创造一个更大成功率的机会。

InfoQ:对于正在考虑用重建软件代替重构的团队您有什么建议?

Lagerweij:首先在发布之前不要尝试和重建任何东西。找到一种方式将新系统和老系统融合并尽快为你的新系统的用户提供价值。有些东西比如 或 能帮助你如果你不这样做,伱的项目要么在某个时候被取消要么永远继续下去,但无疑不会有好的结果

其次,停止糊弄自己使用一个严格要求规定的工具,比洳持续部署会感觉在项目的表明需求上增加了额外的负担,但是这个规定会帮助你避免陷入和之前同样的陷阱写出一个完全的新的遗留系统。它会促使你学习新技能例如持续重构,如何测试驱动你的代码有多少种不同类型的测试需要被掌握,如何自动化部署如何處理监控和错误处理。所有的这些都是和到生产的途径变得短和直接紧密相关的

最后,可能是最重要的涉及到客户!尽管比通常的要哆,重写的诱惑是得到“和老系统做同样的事”的响应而不是因为客户交流有任何进一步的需要。但是我们需要知道客户现在需要什么我们也需要知道他不再需要什么。我们都熟悉80/20法则关于被使用的功能你看,重构不仅仅只是发生在代码层面审查你的需求,业务流程甚至是商业模式都是同样的重要

当然,它仍然会有大量的工作要做但是如果你坚持这些原则,一旦你做到了你会得到干净的代码,一个学习型团队和高兴的客户。


给InfoQ中文站投稿或者参与内容翻译工作请邮件至。也欢迎大家通过新浪微博(),微信(微信号:)关注我们并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群(已满),InfoQ读者交流群(#2))

我要回帖

更多关于 遗留系统重建实战 下载 的文章

 

随机推荐