[SCRUM]代码重构和这些陨石坑的实践经验

>>[SCRUM]代码重构和这些陨石坑的实践经验

[SCRUM]代码重构和这些陨石坑的实践经验

为什么我们认为有必要从头开始重写软件?

在第一次编写系统代码时,我们的时间表十分紧迫,必须与时间赛跑,在计划时间内赶完进度。因此无论是设计讨论,还是审查会议都没花太长时间–我们没有时间浪费在这上面–只能匆匆完成一个功能、快速测试,然后赶着去做下一个。我们与别的公司共享办公空间,我还记得其他公司的软件开发都会花很长时间做设计、讨论架构,再花上数周讨论设计模型。

除了设计仓促,原本的系统写得不差,总体来说架构也不错。其中有些意大利面条式的代码,是公司之前做概念验证时留下的,因为这些代码能用,再加上工期紧张,当时我们没有去碰。但后来我们不考虑执行优化改进,却决定要从头重写代码的原因在于:

翼发云敏捷项目管理系统是一个在线的研发项目管理软件,支持多人协同开发,提供移动研发项目管理app,旨在帮助软件研发企业进行更好的研发项目管理、软件开发流程管理,该研发项目管理软件内置了敏捷开发流程和软件开发流程,结合SCRUM思想,满足各种规模的软件开发企业的研发项目管理流程的需要。

软件项目管理就用翼发云敏捷项目管理系统。

  • 旧代码是不好的,很难实现;

  • “单片java架构它不是对我们未来的发展很好的;它不能支持6000万移动用户和多站点部署的运营商;翼发云研发管理系统完整实现SCRUM敏捷开发流程

  • 我想和很酷的新技术,如Apache Cassandra,虚拟化技术,二SOA协议,等等。

SCRUM研发项目管理就选翼发云。

结果很不幸:我们说服了全公司以及董事会,实现了愿望。

代码重写

正式的开发时间是从2012年春天开始的,我们将2013年1月末设定为发布时间。由于计划太过庞大,我们需要更多的人,于是在印度聘请了顾问与几个远程开发者。但是,我们没有充分预期到维护原本系统、进行新的开发工作与理解客户需求这些并行起来的工作量。

还记得我在文章最开始说过,我们有一个真实客户么?这位客户是南美最大的移动运营商之一。在我们开发的系统投入使用后,他们开始对变更和新功能提出要求,因此我们只能继续更新原来的系统。但是,由于这个系统将会被废弃,在更新时我们总有些敷衍了事,尽可能找借口拒绝了客户许多的新功能需求。结果导致了工期拖延,没能在原定的deadline完成进度。事实上,我们的进度拖延了整整8个月。

不过我们还是先说说结果吧:当项目终于完工时,新系统看起来非常棒,满足所有需求。我们做了负载测试,结果显示新系统能很容易地支持超过1亿的用户,配置集中,查看图表的UI工具也很美观,是时候废弃旧系统,改换新系统了……

但是客户拒绝了升级的请求:原本的系统已经获得了广泛应用,他们的用户已经开始依赖旧系统了,他们完全不想冒风险。长话短说,浪费了几个月之后我们收效甚微。该项目正式宣告失败。

我们所学到的经验

  • 在大多数情况下,

    不应该重写代码,从头开始。我们重写代码的原因是错误的。即使部分代码不是很好,如果我们花一些时间阅读和理解源代码,我们可以通过重构来重构问题。我们确实关注架构的可伸缩性和性能,担心它不能支持复杂的业务逻辑,但它可以逐步修复。

  • 重写系统的用户是没有价值的。新技术和流行词对工程师团队来说似乎很酷,但如果他们不能根据客户的需要提供新的功能,那就毫无意义了。

  • 我们错过了真正的机会,当我们集中我们的努力改写代码。我们过去给客户提供了一个非常基本的“站点分析工具(Web工具)”,让他们查看图表和报表。但随着越来越多的内容,他们开始要求新的功能,如实时图表,访问级别,等等。因为我们不打算继续使用旧代码,我们没有足够的时间,我们可以拒绝新的需求,或者处理它。结果,客户停止使用该工具,他们坚持用邮件发送报告。我们有另一个机会,建立一个强大的迫切需要的分析平台。

  • 我低估了需要开发一个新的系统,同时保持一个老系统的工作量。我们预计在一个月内有3到5的需求,但结果是估计数字的三倍。

  • :我们认为:因为我们不能花上几天时间讨论合适的设计模型和实例,代码难以阅读和维护。事实上,我在大公司看到的最专业的代码比我们的代码差了两倍。所以我们在这一点上是非常错误的。

当您需要重写代码时

Joel Spolsky强烈反对重写代码,他建议大家都不要这样做。不过我不是特别认同:有时候逐步优化与重构非常困难,唯一读懂代码的方式就是重写。此外软件开发人员喜欢编写代码,创造新东西–阅读别人写的代码,尝试理解他们的代码与“思维抽象”会很无聊。不过,优秀的程序员也是优秀的维护者。

如果你想要重写代码,一定要出于正确的理由,并有着合适的计划。比如:

  • 有时很长一段时间后,当新版本发布时,旧的代码仍然需要保持。维护两个版本的代码需要大量的工作。在开始重写之前,请根据项目的规模评估所需的时间和资源。

  • 想想其他失去的机会和比较任务的优先级。

  • 重写大系统比小系统更大的风险,考虑是否可以改写。同时,我们实现了以下工作:切换到新的数据库,使用“SOA”结构和替换二进制协议,实际上,这些变化可以一步一步地进行。

  • 认为开发商的偏见。当开发人员想要学习新的或新的语言时,他们想用这个重写一些代码。但我并不反对。它也是良好的环境和文化的象征,但它应该与风险和机遇相比较。

Michael Meadows对何时有需要进行“大型”重写有着很好的看法:

技术上

  • 组件具有高度耦合,不能修改一个单独组件。重新设计单个组件会导致一系列的更改,这些更改不仅影响相邻组件,甚至间接影响所有组件。

  • 技术堆栈太复杂,和未来状态设计需要改变很多基础设施。为此,必须进行完全重写,在这种情况下逐步重新设计并没有优势。

  • 一个组件的

    将重新设计,在任何情况下,导致组件重写,没有一个地方是在现有的设计中加入新的特性。在这种情况下,渐进式再设计没有优势。

政策上

  • 赞助商都无法理解,逐步设计需要长期投资的项目。不可避免的是,大多数公司对继续把预算花在逐步的重新设计上并不感兴趣。这种现象在完全重写代码时也很难避免,但赞助商更愿意继续投资,因为他们不想使用半成品的新系统和部分过时的旧系统。

  • 系统的用户更习惯使用“原始界面”:在这种情况下,政策不允许对系统重要组成部分的修改。但是如果从头开始重写,问题就会被绕过。用户也会坚持使用“相同的界面”,但这次你有更多的理由反击。记住:逐步重新设计的总成本总是高于完全重写代码,但总体上对企业的影响较小。在我看来,如果重写足够,公司拥有超优秀的开发人员,那就从它开始吧。

放弃正在开发的项目很危险:浪费大量的时间和金钱重复实现已有功能,同时还会放弃实现新功能的机会,有可能激怒客户并导致工作计划推迟。如果你正在重写代码,那是你的权力,不过请确保这么做的理由正确,同时了解风险也做了相关计划。

原文链接:http://www.colotu.com/html/gcs/49.html

文章从互联网整理而来,旨在传播SCRUM、研发项目管理、敏捷开发管理工具的知识与应用,帮助软件开发企业真正了解SCRUM的价值和意义,如果本文侵犯了您的权益或者您需要具体了解更多国内做研发项目管理系统的公司翼发云敏捷项目管理系统的相关信息,欢迎和我们联络:

【网址】www.effapp.com

2018-04-28T03:14:59+08:002018-04-28 03:14:59|Categories: scrum项目管理|