专栏首页Java学习网如何编写可靠的代码

如何编写可靠的代码

介绍 当你得到一个小older-my但你妻子说我不是老愤世嫉俗者。这是为什么许多老男人不要说(或写)那么多:我们知道没有人注意。当你获得AARP另一个问题是,你相信你知道什么是真理,其他的都是废话。 本着这一精神,我可以这篇文章题为“结对编程是输家,”“为什么你的代码很烂,”或“经理是白痴,”但我确信琼斯先生不会打印。我可以告诉你的是,我能写的就是我所相信的,不是你想听到的或者是受欢迎的。很多人想听或相信什么是错的。 978年我写了第一行代码。可能有人会说我在1988年第一次得到这样做,我没有做其他。,阅读数百万行代码之后,我可以告诉你的是,大多数是可怕的,可怕的,可怕的,痛苦的。这是为什么和如何解决这个问题。 固体是隐含在标题,所以让我们免除缩略词正确。如果你只知道每个字母缩略词和词指,毫无帮助。S.O.L.I.D.是单一责任协议,开放闭合,Liskov替换原则,控制反转,不要重复自己。如果你接受我,你需要知道一点关于芭芭拉Liskov得到,因为我不会问你关于依赖注入(IoC)。 如果不了解Liskov可能影响他们写的代码示例中,可能有问题什么正方形继承rectangle-then知道Liskov L是无用的。 如果你想写“固体”代码,你必须探索和调查罩下面。什么意思不重复自己呢?一个责任是什么样子?什么是代码反转?国际奥委会可以轻松完成Ninject或统一,但什么是国际奥委会和它解决的问题告诉你为什么以及何时使用IoC或依赖注入。更重要的是,理解告诉你当你可以打破规则。例如,法律DeMeter-or自然告诉母亲不要写这样的代码object1.property2.method3链(),但是这正是流畅代码的样子。 规则1:调查和探索事物的含义和起源。写代码不是使用助记设备卖给谁想成为一个gazillionaire获胜。 规则2:规则是用来被打破的。 代码结构 代码有一些结构。就像你不会有一个单片函数,称之为软件不会有一个类在一个项目在一个单一的文件。代码有一个明显的结构。结构是解决方案,而不是行代码。代码的结构将决定和,更重要的是,这代码应该是什么。结构促进了很多手和可测试性。 得到一个好的结构,你需要一个伟大的设计师或建筑师。程序员不是设计师或建筑师。写代码和描述结构是两个不同的工作需要不同类型的培训。使用OO代码不一样的生产OO代码。任何傻瓜都可以使用一个框架的代码,最不能产生一个框架。 规则3:你的代码需要结构,这意味着你的项目需要一个建筑师。 我见过每个人都认为自己建筑师一般都是傲慢的,想要得到尽可能多的高管们在每一个组织。好的架构师的每一分钱都是值得的,叫人傲慢就是骂人。得到一个伟大的建筑师或习惯于失败。 单元测试 测试驱动开发不是银弹。编写测试失败是浪费时间。为什么失败时您可以编写代码,编写代码不失败或几乎是对吗?重要的是,你写单元测试几乎在同一时间你写代码测试。更重要的是,你写的代码覆盖率,为每一行代码或测试和大部分的排列。有工具可以衡量你的代码覆盖率。 编写单元测试覆盖率是很重要的,因为你必须测试所有的代码或者你将有更多的bug和行没有测试可能会有严重的错误。单元测试代码覆盖率不保证,但它消除了事物应该跟踪bias-testing工作——自动化测试可以运行成千上万次。 此外,您将需要这些测试,因为代码不是神圣不可侵犯的;它是改变。代码覆盖率,你可以改变你的代码不受惩罚和编写固体代码需要写,重写,编辑、代码重构,重组,改变。 规则4:编写单元测试代码覆盖率。 规则5:警惕任何尖锐的经理认为你将只编写一次代码;这些人都是危险的。 规则6:那些认为手工测试是一个好主意也是危险的。 每次你Refactor-see重构以后你代码或修复一个缺陷,运行所有测试。每天运行你的测试。保持您的测试,不断为代码覆盖工作。我争取90%到95%的最低标准。 结对编程 结对编程是刑事实践。首先,大多数程序员不写代码不断在八个或更多小时的一天。支付两人,只有一个人写的代码行镀金莉莉;这是一个镀金马桶。 如果你有一个很致命的问题,得到一个第二组的眼睛。对程序的惯例是浪费时间和金钱。没有优秀的程序员正在产生一个键盘,你不想无用的程序员一起工作。 规则7:如果标准操作程序是对程序,聘请更好的程序员。 代码评审 代码评审是浪费时间和金钱。项目是一个机会的人他们的观点,这都是坏的和错误的。不参加。不参加,看在上帝的份上,不写一个编码标准文档。 这是你的编码标准:选择最好的程序员你和告诉每个人写自己的代码,是区别人的代码。(除非那个人使用缩写,突显出,不能重构或不能使用的设计模式,和一���所知的指标(见后面这些主题)。) 规则8:避免正式代码审查;他们是浪费时间。 非正式地你的高级技术人员应该密切关注每个人的代码一般课程实践,使小建议和私下修正。公共羞愧和耻辱不是很好。指导私人达到更好的结果。 规则9:人需要大量的指导不能在关键路径上。 你怎么知道如果个体贡献的代码有问题?你有标准和工具,测量每个人的工作产品,这将是下一个。 是有原则的 你不需要集团认为代码审查,因为你有标准。这些标准包括一个人,一个键盘,单元测试代码覆盖率,和指导人,但根据关键路径上的专业人士,他们知道他们的工作。 你的标准也必须包括伟大的度量标准,重构,设计模式,4 cs,童子军的行为,没有代码重复,避免代码味道,用词不缩写,避免那些躺在Ted克鲁兹评论。 规则10:建立标准定义质量和坚持下去。 评论的谎言 不要把时间花在写评论。评论的谎言。评论没有编译。评论不测试。没有评论,审查过程和确保他们没有任何价值或准确。 与小谎而不是丑陋的代码,编写高质量的重构代码与整个单词,好名字。例如,如果你有一个像是命名合理的方法,只有一个责任和良好的指标,评论是多余的。 规则11:评论撒谎和浪费时间。 阐述排除特定类型的作者评论评论像积木一样,这是一个由责任或注释工具提供的功能是不必要的。评论的谎言。如果你发现自己写的评论,你需要一个更好的名字,更好的度量标准,您将获得更好的度量重构和运行单元测试,直到你的指标是符合你的标准。而不是写评论。 4 cs质量 代码已经坚持4 cs质量。代码必须衔接、连贯、收敛和一致的。凝聚力是指代码一起工作得很好。你可以使用适配器等模式,但如果你的代码是所有映射和包装,你可能已经可怜的凝聚力。(良好的凝聚力感觉就像乐高玩具。)连贯指的是代码是有意义的。代码看起来是由醉酒猴子永远不会是固体。收敛收敛在一个实例的代码的代码每问题。你可以检查代码冗余消除非收敛(发散)代码。不同代码的代码相同的隐喻表现出不同的行为。一致的代码风格类似的代码;它是代码看起来起源于一个non-schizophrenic蜂群思维。 规则12:坚实的代码是有凝聚力,收敛,连贯和一致的。 好消息是,语无伦次,凝聚力差的不一致,不同代码会有糟糕的指标和闻起来像爱泼斯坦的橱柜(坏)。 指标 你不需要代码审查,因为指标。你不需要因为你有标准编码标准文档指定上限指标。指标测量。代码的度量包括行代码,圈复杂度,维护复杂性和计算复杂度。 行代码意味着更少的代码行。我的标准与少于10行代码的方法,最好是一行。虽然有实例构造函数,可能几行代码,通常长函数表明,单一责任原则(SRP)被侵犯。因为我们写的代码,是基于我们的价值观,我们不会违反SRP没有一个很好的理由。 说句题外话,人们常常反驳说,小功能意味着更多的功能,一个是交易行代码为多个功能。真实的。但是,函数是可组合性的最小单位,没有复制,可以重用。十个小函数可以很容易地理解和re-orchestrated解决其他问题。大,老了,臭长函数只能做一件事:品种bug。 圈复杂度(CC)是意大利面因素或通过路径数量的方法。每条路径进行测试,所以低圈数字更好。1是我的偏好的CC的上限5。5的圈复杂度意味着你需要至少5单元测试这个方法。5并不是目标;如果目标之一。五是mental-flagellation开始的地方。 维护的复杂性是拥有系统的总成本可能是共同应用于一个类。再一次,你想要一个低维护的复杂性。我的价值取向的上限是100,但超过50,我担心。 计算复杂度是衡量大0符号。把所有你的方法接近O(1)或O(log n)。O(1)和O(log n)是非常简单的,防弹的行为。如果你必须允许O(n log n),但从O(n ^ 2)O(n ^ k)和O(n)。 规则13:采用标准代码和标准衡量,衡量,衡量。 你不能得到良好的指标没有重构和设计模式。你不能使用设计模式和重构代码(或者至少不应该,你神风特攻队!)没有单元测试。这就是为什么所有这些元素是必要的;它们为彼此平衡的功能。 重构 重构是提高设计不改变行为。重构是非常具体的,你需要这本书。在重构之前,你需要单元测试。你重构几乎一切不满足您的度量标准或代码味道。 规则14:重构。 从不让尖端经理告诉你如果不是破不修复它。代码不符合客观度量标准坏了,而你的经理不知道,反正是不会理解的。 通过单元测试,您可以重构需要。是无所畏惧的。然而,你必须遵循的步骤定义的重构或使用工具,然后重构后运行单元测试。如果你犯了错误,撤销源代码控制的变化。(是的,认为自己特别敏锐的如果你需要推断源控制的最后一条语句)。 模式和反模式 你需要一本书GoF关于设计模式的书和一本好书反模式。你还会知道你如何使用(错误地)金锤或火炉管(反模式)或正确状态(模式)如果你不知道这些是什么。(如果你不知道模式和反模式,你不是架构师)。 规则15:老板叫人建筑师并不是为了省钱。便宜的说你有一个建筑师比雇佣但只有在开始。 当评估代码,寻找��繁和密集的设计模式。坚实的代码总是看起来像一个设计模式的关系。 抽查 还有其他元素我想当我想到干净代码。如果我看代码和皱纹我的鼻子,因为它的气味,和我有一个好鼻子。 你可以问一系列的问题在评估代码。这是童子军所写的代码吗?童子军的人把事情比他们发现他们。Anti-boy童子军不更改代码,因为他们不想被指责为破坏,或者是补丁garbagy程序员,出租汽车司机代码来“解决”一个bug和炸毁你的指标。这是乱丢垃圾。(添加注释解释出租汽车司机,garbagy代码也乱扔垃圾。)。 你也可以运行工具,寻找代码重复。有很多程序员认为复制粘贴编程是好的。它不是。从这些人或让他们远离你的代码。 有时,你可以举起一个打印页面,看看它的轮廓。如果它看起来像一架x翼fighter-nested ifs或者fors-then圈复杂度度量是坏的。 规则16:运行代码味道或创建它们的人。 你还需要运行分析和调优工具,因为他们将帮助指出问题实际存在而不是追逐预感。记住,QA不是你的测试团队。与单元测试覆盖率,你会提供更少的错误。最后,练习,练习,再练习。这个过程被称为髓鞘形成,你需要退出你的大脑的髓磷脂固体编写代码。 关于固体代码的更多信息,请参见“测试固体代码." 总结 我当然没有发明所有的这些想法。我不聪明,但我是一个收藏家的知识。业内一些最好的想法自40年代以来写这些东西。如果你想快速的捷径和伟大的读,涵盖了很多材料,阅读由Bob大叔干净代码。 什么是可靠的代码是主观的。错了。指标,设计模式,单元测试覆盖率,重构是客观的。代码展示本文中定义的特点是坚固的代码。如果有人跟你说在这一点上,翻转笨蛋(或咬另笨蛋),告诉他们把垃圾从你的办公室,当你昂首阔步穿过办公室像一个代码的纯爷们告诉杰克逊给你。 无论你做什么,一旦你坚实的代码突击队,不要让书呆子促进你管理。你会讨厌它。

本文分享自微信公众号 - Java学习网(javalearns),作者:javalearns

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-08-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为什么开源可以提高程序员的编程技能?

    为什么开源可以提高程序员的编程技能? 我已经写了很多年的软件。最近我意识到,我越涉及(致力于,结合于等)开源技术,我写出来的代码就更好。这不由地让我疑惑起来:难...

    用户1289394
  • 优秀的代码是反复修改后创造出来的

    优秀的代码是反复修改后创造出来的  近些年来,越来越多的人开始转向敏捷开发,而且这些敏捷开发的技术已不再新鲜,大多都是在80和90年代设计形成的。但是,最近几年...

    用户1289394
  • 论编程的最后期限

    普通编程与专业编程之间有很多差别,而最为显著的就是截止日期。 截止日期 / 最后期限   当你给自己写程序的时候,只要你愿意,就可以用很多(或者很少)的时间来...

    用户1289394
  • 告别狗屎代码,请记住这 11 条编码秘诀!

    我已经写了20年代码了,在此期间曾与17个团队共事过,使用不同的语言做过数百个项目。

    Java技术栈
  • 为什么优秀的程序员也是优秀的设计师

    为什么优秀的程序员也是优秀的设计师 在高科技行业中,我听过很多伟大的开发人员声称对设计一无所知。他们将设计当作是一个神秘的世界,一个编程世界之外的世界。他们觉得...

    用户1289394
  • 淘宝重磅开源代码质量检测工具!

    来源:github.com/ice-lab/iceworks/tree/master/

    开发者技术前线
  • 万物代码化:从低代码、云开发到云研发

    我也是从我的所做、所见、所听中,构建了整个的模型,并非从未来穿越到现在,所以其中的一些设想,可能并非如此准确。

    Phodal
  • 微软发布代码智能新基准数据集CodeXGLUE,多角度衡量模型优劣

    编者按:代码智能(code intelligence)目的是让计算机具备理解和生成代码的能力,并利用编程语言知识和上下文进行推理,支持代码检索、补全、翻译、纠错...

    AI科技大本营
  • 斐波那契数列是一个递归计算

  • 优秀的代码是反复修改后创造出来的

    优秀的代码是反复修改后创造出来的  近些年来,越来越多的人开始转向敏捷开发,而且这些敏捷开发的技术已不再新鲜,大多都是在80和90年代设计形成的。但是,最近几年...

    用户1289394

扫码关注云+社区

领取腾讯云代金券