编写可维护的代码

时间:2008-10-02 14:59:45

标签: maintenance

编写可维护代码(语言无关)的最重要因素是什么?

37 个答案:

答案 0 :(得分:60)

写给其他人阅读。这意味着良好的名称,良好的评论和简单的陈述的组合。

曾几何时,记忆力很少,周期时间很慢。鼓励程序员编写复杂的单行代码,完成许多工作。今天记忆力充沛,周期时间很快。您应该编写5行简单代码,而不是他们无法理解的一行代码。

好的评论不一定很长,但必须有所帮助。

也一致。不要在代码中更改样式。例如,不要将命名样式从一个部分更改为下一个部分。

答案 1 :(得分:30)

关注点分离(每种方法都做一件事) - 这会停止Spaghetti代码。

编辑:(回应Ash的评论) 可维护性的关键是能够快速找出代码正在做什么以及如何进行更改以完成任务。

将代码分离出来,以便每个任务都由专用的方法处理,这使得这很容易。

例如,如果我想改变肘部弯曲机器人软件的方式,那么使用名为BendElbow的方法可以轻松地进行更改。

答案 2 :(得分:27)

自动单元测试。

如果您已经通过自动化测试覆盖它,您可以通过重构缓慢更改代码的设计,该自动化测试会告诉您何时破坏现有功能。自动化测试使更改代码的风险降低。

答案 3 :(得分:12)

良好的抽象

答案 4 :(得分:10)

单位测试结果。如果您从get get中对代码进行单元测试,那么您将拥有一个可以运行的测试套件,以便在您进行更改时验证代码的有效性。

此外,当您使用单元测试编写代码时,方法往往更小,因为它们更容易测试。同样,它应该鼓励您将方法用于单个任务 - 再次,因为它更容易测试。

答案 5 :(得分:9)

良好的前期设计。没有什么可以挽救糟糕的设计。

答案 6 :(得分:8)

在发布后的一年或两年内,为您刚刚编写的软件提供一级或二级支持。

相信我,我一直在那里。我可能必须在几年内保持或增强自己的代码的“恐惧”始终是提高可维护性的重要动力。

答案 7 :(得分:6)

有一种倾向,即编写代码,认为计算机就是您的受众。

严格来说,这是真的,因为代码必须工作。但是如果你考虑到你的人类观众,只要这种心态有助于产生更易读的代码。

如果您担心这会产生慢代码,请记住,大多数程序几乎所有时间都在非常小的代码中。开始编写可读性,然后使用分析器确定要优化的正确部分。

答案 8 :(得分:6)

好的方法名称

答案 9 :(得分:5)

不要做any of this stuff!感谢Roedy Green的笑声。

答案 10 :(得分:5)

阅读代码完成 - 它涵盖了从变量命名到真正重要的内容的所有内容,并且所有是必需的。没有一件事。

我的方法目前归结为编写代码来完成需要完成的工作(不是代码可能需要做的每一项未来工作),使用信息性变量名称和最小变量范围并尝试确保我的代码需要尽可能少的补充文件。有时这会使我的变量和方法名称比以前更冗长(我的调试输出在使用时非常全面)但是它们更容易理解。

可维护性通常也是在其他方面坚实实践的结果 - 如果您以干燥的方式编写代码,那么问题就更容易找到,如果您有一套强大的测试,那么您可以看看是否维护变化会打破任何事情。

最终这是一个试图深思熟虑并为未来写作的问题 - 代码只写一次,之后就是所有的维护......

答案 11 :(得分:5)

如上所述,没有“单一最重要的因素”,它是几个因素的组合。

现在,大多数规则都可以压缩成:“编写代码以便以后阅读” 或者用一个有趣而又好的建议来解释:“把你的代码写成好像必须由一个杀人的疯子来维护,知道你住在哪里。”......

答案 12 :(得分:3)

我认为没有一个因素可以关注。如果有,我认为它必须是良好的判断。即使记录良好,如果开发人员在设计阶段使用不良判断,也难以维护易于阅读的代码。无论文档和单元测试有多好,生产应用程序的糟糕设计几乎都无法解决。

您还可以查看“不可维护代码指南”等内容,了解不该做的事情。信息丰富,有趣!

http://mindprod.com/jgloss/unmain.html

我实际上曾在那些“标准化”那里提到的一些事情的公司工作过。你会认为大多数东西只是常识,但你可能会感到惊讶。

答案 13 :(得分:3)

编程就是表现;你永远不应该忘记你的观众是谁。 “代码就好像最终维护你的代码的人是一个知道你住在哪里的暴力精神病患者。”

答案 14 :(得分:3)

  • 记录你做出的假设 - 两天后你会把这些假设视为理所当然,但是下一个维护你的代码的人不一定会做出相同的假设,并且会想知道为什么你做了什么你没有...

  • 人员的代码 - 计算机将执行您告诉的任何操作;代码,所以人类可以理解你的代码 - 谁知道它可能是你从现在开始的6个月!

答案 15 :(得分:3)

我想说最重要的因素是DRY。 glenatron在其他因素中提到了答案,但我认为这是最重要的因素。

答案 16 :(得分:2)

一致性。

答案 17 :(得分:2)

好评。

答案 18 :(得分:2)

在我看来,编写可维护代码的基本原则是你的代码应该很容易理解。这并不像听起来那么容易,你必须使用这里提到的所有其他技术来做到这一点。它需要一定程度的同理心,因为您必须了解其他开发人员如何看待您的代码,以及它与您看到的方式有何不同。掌握这一点的一个好方法是回过头来看看你几年前写的一些代码。

现在,我认为从理论上讲,编写非常容易理解的代码并完成其预期的任务,但也很难以任何方式进行修改。我从来没有见过这样的代码。

答案 19 :(得分:2)

毫无疑问,编写的代码旨在供其他人阅读。这包括避免高尔夫,神秘的语法和有意义的变量名称。如果代码足够干净,你可以完全避免写任何评论,IMO。 \

[采用内置OO语言而不是加入的语言也有帮助]

答案 20 :(得分:2)

持续重构

答案 21 :(得分:2)

充足的空白。 - 高密度代码很难理解。如果你有超过6行没有空白行,那么该群可能不是一个有凝聚力的想法/想法/操作。

好的变量名称 - 解释性但简洁。巨大的变量名称和小变量名称一样糟糕。

答案 22 :(得分:1)

我已经投了Matt的回答“Good Abstraction”,但我想补充一些东西。

记录它是关于解释事物的全部内容。我赞成Doxygen和其他自动文档工具,但API中粗略的函数列表总比没有好。

如果您希望将代码设置为可维护的,请将您的解决方案描述为适当的抽象级别,并将该级别升级到代码,以便明确它的作用。

答案 23 :(得分:1)

当人们在代码增长时修剪和塑造代码时,我更喜欢它。你经常会发现一个体面的建筑原始脊柱,上面挂着巨大的诡异。

答案 24 :(得分:1)

小而明确定义的函数和类。

很容易习惯其他人的各种编码惯例,但如果一切都在一个巨大的类或功能中,我的脑袋就会爆炸。

答案 25 :(得分:1)

已经很长一段时间了,但我有一个答案:不要过度评论。这可能听起来很傻,但解释简单事情的太多评论可能会让代码变得混乱出。好的评论可以创造奇迹,但毫无意义的评论却恰恰相反。

答案 26 :(得分:1)

对我来说,编写可测试代码(checkout Google测试博客)是更好的可维护代码

答案 27 :(得分:0)

寻找一位好导师。这个人不一定必须是比你更好的编码器,但他们应该能够建议其他正确编写代码的策略。一个好的导师将提出以前给出这个主题的许多答案。它们可以是第二组眼睛,让你知道你的缺点在哪里,同时保持一种鼓舞人心,乐观的语调。他们也会灵活,不断磨练自己的技能。这样,当下一个大范例出现时,你将能够更好地将谷壳与小麦分开。当面向对象编程和源代码控制被下一个重大事件(很难想象,我知道)取代时,这将是非常宝贵的。

答案 28 :(得分:0)

一贯适用的强有力,明智的惯例。关于从何处开始编制索引的惯例,以及将事情留在哪里的最终状态。

这使得 更容易理解代码,因为所有代码的行为都会更简单。

这至少是我的一个重要提示。

答案 29 :(得分:0)

纯函数使得更容易推理代码。确保正确传达副作用。 (即,当你没有返回'结果'时,通常会产生副作用。即无效功能。)

答案 30 :(得分:0)

我想编写可维护代码超越了代码。我认为最好是了解需求是什么(并以某种方式记录,包括功能和非功能),然后像新员工一样介绍如何转变为代码。

如果有人知道为什么代码会像那样,那么更容易让它变得更好和/或扩展它。

对于更多技术性事物(例如算法),它抽象地解释(目标,原则),然后评论代码和/或模式实现的关键部分。

我还做的一件事是在我的应用程序中创建迷你实验室,工具箱和代码模板,以便人们知道做一件事或扩展另一件所需的“标准”代码(导致一些复制/粘贴但是有助于生产更多更好的产品。)

答案 31 :(得分:0)

我会和其他一些人一起去,抽象。当你理解一些软件模式时,它也会有所帮助,GOF是一个很好的起点。

答案 32 :(得分:0)

一致的编码风格。诸如方法和变量命名约定,注释的样式和格式,甚至模块/文件命名。

答案 33 :(得分:0)

拥有良好的文档。这包括自我记录的代码(分区,描述性命名和清晰),良好的注释,对代码的(最近)最终版本准确的详细设计文档,以及源代码管理中的描述性更改注释。 / p>

如果你问两个,第二个肯定是单元测试。这两者之间的选择很难。

答案 34 :(得分:0)

好评。好的注释通过陈述代码的预期目的来帮助抽象,坏的注释只是重述代码的作用。评论实际上可以采用精心设计和命名的单元测试的形式。

答案 35 :(得分:0)

好评可以使最差的意大利面条代码10x更容易维护。

答案 36 :(得分:-1)

文档。