软件重构过程中的思维转换: 遗留代码如何变废为宝

        “我开始收到各式各样的邮件,人们都表示‘天呐!我也是这样!’。”她说,“我开始去传播这条信息,告诉大家重新建构遗留代码这件事其实非常有价值,凭此来吸引合适的人。”                          —— Andrea Goulet



        “上述这句话意思是说你的代码库可以反映出你的整个对话架构。”Goulet这样说道,“如果你想要去修改你的遗留代码,那你同样要去解决代码运行的问题。两者缺一不可。这是很多人都会忽略的一点。”

        Goulet和她的团队始处理一个遗存项目的方法跟考古学家的方法有点相似。他们首先要寻找一些遗留下来的工件,这些工件可以让他们了解到过去开发者的思考方式。所有的这些工件组合在一起后便能提供新的决策。

        那么最重要的工件是什么呢是有条理的、能揭露开发者意图的、整洁的代码。比方说,如果你用“foo”或是“bar”这些普通的名词来命名一个变量,那么六个月之后你再回头看,你将丝毫想不起来这个变量代表的是什么。

        如果这个代码难以理解,那么一个有用的工件就是源代码控制系统。这是因为它可以提供该代码的变化历史并且为开发者提供编写代码的机会。

        自动化测试也可以提供逻辑依据。“其实,那么多人认可Michael Feathers关于遗留代码的定义是有原因的。”Goulet解释道,“测试组件在理解开发者意图时非常有用”

        这里能得到的经验很简单:如果你不想被自己的遗留代码困住,那就多关注一些有助于他人在未来更容易理解该代码的细节。编写及执行单元、接受、审批并且进行集成测试。解释说明你的代码执行命令。这能在未来让其他人以及你自己更好地理解你当时的想法。

        不过,不管你采取何种措施,遗留代码的问题都会不可避免得出现。原因显而易见。

        在初创公司发展早期,公司必须要推出一些功能。开发者为此也承担了很大压力,测试也有可能半途而废。       Corgibytes团队遇到了很多数年来一直懒得进行测试的公司。

        当然,在你开发一个样品时,强迫你去进行测试也有些说不通。但当你开发出产品并拥有了客户的时候,你就需要投资时间和精力在产品的维护和改善上了。“很多人都会说我们根本无需担心维护相关的事宜,功能才最重要。”Goulet这样说道,“如果你是这么想的,那你永远无法具有竞争力。”

        事实上,热力学第二定律也适用于代码:在所有过程中,熵的增加是不可逆的。熵是作为度量一个热力学系统无序状态的量度单位。这意味着你必须要解决技术债务带来的混乱状态。而遗留代码不过是随着时间累积而成的债务之一。

        技术债务往往能反映出运营问题。

        很多首席技术官都能意识到这个问题,但他们很难说服同事去相信花钱修复这些已存在的技术债务是值得的。这有些像是原路返回,却最终得不到任何新的成果。除非技术债务开始严重损害公司每天的运行效率,否则很多公司是不会想去解决技术债务的。不过拖到这时候才去解决,所花费的成本就非常高昂了。


        忘记技术债务,专注于构建技术财富

        如果你可以将你的技术债务转化为累积技术财富的机会,那你让首席执行官、投资者以及其他股东接受你提案的可能性会大很多。

        “我们不能再将技术债务当做是一个不好的名词。当你处于产品设计和开发早期阶段时,技术债务将起到很大帮助作用。当你解决了部分债务时,你能带给自己动力。举个例子,当你在家中安装一些新窗户时,你确实花了很多钱,但你却可以每个月节省下一百美元的电费。代码亦是如此。不过解决技术债务并非是体现在效率上,而是会随着时间的流逝为你带来生产率。”Goulet说。

        一旦你的团队不再富有成效,你必须要确认是什么技术债务在阻止他们的前进。

        如果你可以改变自己的观点,专注于技术财富的创造,你最终可以获得剩余的产能。这些产能可以被拿去修补更多的技术债务以及遗留代码,从而形成一种良性循环。

        别再将自己的软件当做是一个产品,将其想做是你未来会长期居住的一间房子。

        Goulet表示这是一个非常重要的思维模式转变。这能让你摆脱短浅的思维方式,转而去专注于软件的维护。

        这就像是房子一样,关于房子的现代化改造通常以两种形式发生:外表上的小变化(“我买了一个新地毯!”)以及昂贵但却能在未来有所回 的大投资(“我们要去更换管道系统”)。这两种形式的变化你都需要去考虑,目的是让你的产品和团队更加顺畅得运行和工作。

        她还在招募过程中采用了持续交付的做法,她为此类开发者提供了很多细节信息以及明确的指示。一段时间过后,她还进一步改进了申请流程,从而可以更早地发现一些出色的候选人。比方说,她的申请指南是这样的:“首席执行官将会浏览你的简历,所以请确保你的求职信是写给首席执行官的。”但并未注明首席执行官的性别。而那些所有以“尊敬的先生”或是“某先生”开头的求职信都会被直接删除。

        “我这样做是因为很多人都假定软件公司的首席执行官一定是位男性。对此,我感到很烦恼。”Goulet这样说道,“所以有一天,我想到把这个作为指示放在 站上,然后观察有多少申请者能够注意到这一点。令我惊讶的是,这个细节不但剔除掉了一些不太严谨的候选人,还突显出了很多擅长处理遗留代码的人才。”

        修改者并非是以细节为导向做事,他们不过是必须要去关注细节。

        在我们这一行,人们盛行推崇编写代码的人,以至于所有人都希望他们也可以完成维护工作。这是一个错误的想法。最好的代码调整者从来都不是最好的代码编写者。

        当Goulet招募到了一些出色的代码调整者时,她知道该如何让他们获得成功。

        下面是一些能让此类开发者保持愉悦且高效的方法:

  • 给予他们足够的自主权。分配项目给他们时候,你可以解释问题是什么,但是千万别去强行规定他们应该怎么解决。

  • 如果他们要求对自己的电脑和工具进行升级时,请答应他们的要求。他们知道自己需要什么才能最大程度上提高自己的工作效率。

  • 帮助他们减少语境的问题。在完成某个项目之前,他们喜欢专注做好一件事。


        稳定期并不是一个负面的词汇

        大多数初创企业不会去回顾自己的发展阶段,还有一些公司甚至认为公司的发展应当是永无止境的。事实情况却不一定要如此。稳定期意味着你现在拥有可以去创建技术财富的人力和方法,你可以调动所有资源去处理一些需要优先解决的问题。

        这还意味着你需要分配更多的企业预算到产品的维护以及更新上。“你不能将产品的维护当做是另一个项目。”Goulet这样说道,“它必须要扎根在你的企业文化中——这一点非常重要,它将在未来帮助公司取得更大的成功。”

        最终,通过上述这些措施构建而成的技术财富将会为你的团队带来一批全新的开发者:这是一群有时间和资源来探索新领域、客户群以及机遇的侦察兵。当你可以去开发新的市场并且基于自己已完成的产品不断取得成功时,这时你的公司才真正处于一个繁荣发展的状态。


声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年8月12日
下一篇 2016年8月13日

相关推荐