Questions tagged «code-quality»

有关编写高质量代码的最佳做法的问题。

4
拆分大型模块是否有负面影响?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我正在浏览一个github项目,发现此模块有1万多行。 在一个模块中包含这么多的代码是一种惯例吗? 在我看来,这应该分为多个模块。也许每个数据库引擎一个。 开发人员从制作这样一个巨大的模块(而不是“将其全部放在一个地方”)获得什么好处,或者将其拆分(而不是“复杂性”)有什么坏处?

4
使用方法链接构建对象的成语叫什么名字?
我经常使用一种模式,在该模式下,我使用方法链来设置一个对象,类似于Builder或Prototype模式,但没有在每个方法调用中创建新对象,而是修改了原始对象。 例: new Menu().withItem("Eggs").withItem("Hash Browns").withStyle("Diner"); 只是想知道这种模式是否有名称,以及是否将其视为反模式,因为尽管它可以更流畅地阅读,但它可能导致较长的方法链。

6
现在保持简单,还是考虑到未来编程?
我目前正在为我的公司编写一个涉及广泛的新应用程序。为了赶上最后期限,该功能已被调低了很多,以便我们可以准备好进行发布。 我的任务是在本月底之前启动并运行版本1。我正处于开发的半途,现在已经结束了。 昨天,我花了一些时间针对其中一项需求提出了一个非常不错的简便解决方案,并且对结果感到非常自豪。今天早上,第2版文档已发出,其中有一项要求将要求删除我昨天编写的代码,或者对其进行严格更改。如果我保持现状,将来将需要大量工作。现在,我可以花额外的时间使我当前的解决方案更强大,以便可以以更少的精力添加v2功能,但这会使我在需要的额外编码上有些落后。 我不知道我是否会做v2。可能是我,也可能是同事,甚至是实习生。 如果您不知所措,您是否会花点时间在将来使它变得更容易,还是在时机成熟时留下解决方案并加以解决?

6
如何鼓励采用版本控制
我最近开始在没有版本控制的团队中工作。大多数团队成员都不习惯任何版本控制。我一直在私下使用Mercury跟踪我的工作。我想鼓励其他人采用它,并且至少在开发变更时开始对他们的代码进行版本控制。任何人都可以给我一些建议,以鼓励我采用诸如Mercurial这样的分布式版本控制。任何有关如何赢得包括DVCS经理在内的人员的建议,将不胜感激。

8
您喜欢代码中的简洁性还是可读性?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 语言快捷方式通常可用于使代码更简洁。 例如,三元和空合并运算符可以减少代码量,但是可以说会损害可读性: 在C#中: Person newGuy = new Person(); if (boss == null) { newGuy.Boss = GetDefaultBoss(); } else { newGuy.Boss = boss; } 在功能上等效于: Person newGuy = new Person(); newGuy.Boss = boss ?? GetDefaultBoss(); 但显然要冗长得多。 简洁性与可读性之间的界限是什么?

16
您使用什么简单的技术来提高性能?
我说的是我们编写简单例程的方式,目的是在不使您的代码更难阅读的情况下提高性能,例如,这是我们学习到的典型方法: for(int i = 0; i < collection.length(); i++ ){ // stuff here } 但是,我通常在a foreach不适用的情况下执行此操作: for(int i = 0, j = collection.length(); i < j; i++ ){ // stuff here } 我认为这是一种更好的方法,因为它只会调用length一次该方法……我的女友说这虽然很神秘。您还可以在自己的开发中使用其他任何简单的技巧吗?

7
保持我的类和方法尽可能小?
几天前,我正在与一名软件工程博士候选人交谈,在某个时候她对我说: 保持类和方法尽可能的小 我想知道这是否总是一个好习惯。 我的意思是,举个例子,只上两副服装值得吗?例如,在某些方法中,我需要使用成对的整数。我应该写一个“ PairOfIntgers”类吗? 这种思维方式可以将代码“破坏”太多吗?


9
init()方法有代码味道吗?
声明init()类型的方法是否有目的? 我不是问我们是否应该优先init()于构造函数,或者如何避免声明init()。 我问的是在声明方法(查看它的普遍性)后是否有任何理论依据,init()或者它是否是一种代码味道,应避免使用。 这个init()习语很普遍,但是我还没有看到任何真正的好处。 我说的是鼓励通过方法初始化的类型: class Demo { public void init() { //... } } 什么时候可以在生产代码中使用它? 我觉得这可能是代码的味道,因为它表明构造函数未完全初始化对象,从而导致部分创建了对象。如果未设置状态,则该对象不应存在。 从企业应用的意义上讲,这使我相信它可能是某种用于加速生产的技术的一部分。这是我可以想到的惯用法,这是唯一合乎逻辑的原因,但我不确定是否会有这样的习惯。

9
断言代码太多了吗?
我真的爱上了单元测试和TDD-我被测试感染了。 但是,单元测试通常用于公共方法。有时候,尽管我确实也必须在私有方法中测试一些假设-断言,因为其中一些是“危险的”,并且重构无济于事。(我知道,测试框架允许测试私有方法)。 因此,我的习惯是私有方法的第一行和最后一行都是断言。 但是,我注意到我倾向于“肯定”地在公共方法(以及私有方法)中使用断言。因为公共方法假设是由单元测试框架从外部进行测试的,所以这可能是“测试重复”吗? 有人会认为太多的断言是代码的味道吗?


7
抽象是否必须降低代码的可读性?
最近与我合作的一名优秀开发人员告诉我,他在实现我们继承的某些代码中的功能时遇到了一些困难;他说,问题在于该代码难以遵循。由此,我对产品进行了更深入的了解,并意识到查看代码路径有多么困难。 它使用了许多接口和抽象层,以致于很难理解事物的开始和结束位置。这让我开始思考过去的项目的时间(在我很清楚干净的代码原理之前),发现在项目中走来走去非常困难,这主要是因为我的代码导航工具总是使我进入一个界面。找到具体的实现或某些插件类型体系结构中的连接位置将花费大量的额外精力。 我知道有些开发人员正是出于这个原因严格拒绝依赖注入容器。它极大地混淆了软件的路径,以致代码导航的难度成倍增加。 我的问题是:当框架或模式引入如此多的开销时,是否值得?这是模式实施不当的征兆吗? 我想开发人员应该从更大的角度看待抽象带给项目的东西,以帮助他们度过沮丧。通常,尽管如此,很难使他们看到大局。我知道我未能通过TDD出售IOC和DI的需求。对于那些开发人员而言,使用这些工具只会严重限制代码的可读性。

7
您如何根据经验指标判断软件的好坏?
目前,我被要求看一个项目,该项目在五个月前完成了核心开发,但是仍然存在大量缺陷。对于大约每10个已修复的缺陷而言,所发生的事情是,我们提出至少4个缺陷,在某些情况下会提出8个缺陷。 我相信供应商的编码实践很差,并且对此达成了普遍共识。但是,我想知道软件是否存在结构性问题?缺陷密度是一种有用的措施,但是如果核心软件编写不当,则更多的是卖方正在做的所有事情都在转移问题。 在基础架构中,如果某些东西构建得不好,则可以更明确地定义,除了LOC缺陷之外,您还可以对软件使用哪些度量? 该产品已进入缺陷修复阶段4个月,但仍未解决足够的关键缺陷。我们不会注入新功能,而只是解决回归问题。 这表明开发质量问题尚未解决。但是,如果产品本身存在根本缺陷,那就是另一个问题。考虑到核心代码库编写得不好并且文档有限,所有外部开发人员正在做的事情正在将问题从A转移到B。一旦内部开发团队接手我,我担心他们将不得不从根本上重写代码以将其替换为B。使它起作用。 因此,当您接受第三方提供的产品并要求其提供支持时,您将使用什么接受标准来定义标准? 除了让我们的首席开发人员对每个版本的代码进行同行评审之外,还不确定还能做什么?

11
为什么使用System.out.println()这么糟糕?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 当然,对错误消息或警告使用日志记录框架非常有用。但是有时候如果我想在短时间内尝试一些新的东西,我会使用System.out.println()。 使用System.out.println()进行快速测试真的很糟糕吗?

7
静态代码分析的真正好处是什么?
诸如pc-lint或QAC之类的工具可用于在代码库上执行静态代码分析。 以我的经验,静态分析通常会产生大量的噪音,例如,警告不是真正的错误,但却以某种方式违反给定规则集中的规则之一。关闭某些规则(无论是完善规则集还是通过代码中的特殊注释)可能都是一个麻烦的过程。 静态代码分析的真正好处是什么?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.