Questions tagged «code-quality»

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

8
使用预先存在的不良做法还是与旧代码不太适合的良好做法更好?
我之所以这样想,是因为我试图为现有的3rd party软件编写扩展,而他们的数据库却被严重地非规范化。我需要使用他们现有的表并添加一堆新字段。 我可以选择以其设计风格(包含几乎所有属性都放在一个大表中)创建新表,或者一起创建一组新表,并使用诸如触发器之类的其他功能在新表和新表之间同步数据。旧桌子。 我最终选择了使用现有不良设计风格的第一种选择,但是我面临的问题是:采用预先存在的不良做法还是实施与现有代码不能很好地配合的良好做法更好?在某些情况下,我应该选择一个? 注意:到目前为止,许多答案都与缓慢重构错误代码有关,但是我无法做到这一点。该代码不是我们的,供应商经常对其进行更新。我只能在上面建立。

10
与开发人员打交道,不断忽略其工作中的极端情况
我猜想我团队中的一位开发人员有一个有趣的,相当普遍的问题。这个家伙是一个伟大的开发人员,工作迅速且富有成效,产生相当高质量的代码。好工程师 但是他有一个问题-他经常无法在代码中解决边缘情况。 我们多次和他谈过这件事,他正在努力,但我想他只是不这么认为。所以最终发生的事情是,QA会发现他的代码有很多问题,然后一次又一次地将其返回给开发人员,最终导致错过最后期限,并且团队中的每个人都不满意。 我不知道该如何对待他以及如何帮助他克服这个问题。也许有更多经验的人可以建议?

9
如何传达插入顺序在地图中的重要性?
我正在从数据库中获取一组元组,并将其放入地图中。数据库查询成本很高。 映射中的元素没有明显的自然顺序,但是插入顺序仍然很重要。对地图进行排序将是一项繁重的操作,因此鉴于查询结果已经按照我想要的方式进行了排序,因此我想避免这样做。因此,我只是将查询结果存储到中LinkedHashMap,然后从DAO方法返回地图: public LinkedHashMap<Key, Value> fetchData() 我有一种方法processData应该在地图上进行一些处理-修改一些值,添加一些新的键/值。定义为 public void processData(LinkedHashMap<Key, Value> data) {...} 但是,一些短毛猫(Sonar等)抱怨说,“数据”的类型应该是诸如“地图”之类的接口,而不是实现“ LinkedHashMap”(squid S1319)。 所以基本上说我应该有 public void processData(Map<Key, Value> data) {...} 但是我希望方法签名说映射顺序很重要 -这对算法很重要processData-这样我的方法就不会仅传递任何随机映射。 我不想使用SortedMap,因为它(来自的javadocjava.util.SortedMap)“是根据其键的自然顺序来排序的,或者是由通常在排序的地图创建时提供的Comparator来排序的。” 我的键没有自然的顺序,创建比较器不执行任何操作似乎很冗长。 而且我仍然希望它是一个地图,以利用它put来避免重复的键等。如果没有,则data可能是一个List<Map.Entry<Key, Value>>。 那么我怎么说我的方法想要一个已经排序的地图?可悲的是,没有java.util.LinkedMap接口,否则我会使用它。
24 java  code-quality  map 

4
如何在请求请求中处理TODO?
该问题是从软件质量保证和测试堆栈交换迁移而来的,因为可以在软件工程堆栈交换中回答。 去年迁移 。 当我查看请求请求中的更改时,有时会偶然发现带有“ TODO”注释的注释,该注释可能有不同的原因,在我们的情况下,主要是因为: 用于解决问题的解决方案可以改进,但需要大量的时间投入。作者选择了一种更快的解决方案,但评论说可能有更好的选择 有一个临时代码可以解决现有的错误,应尽快修复 知道TODOs通常会在代码库的整个生命周期内停留在代码库中,那么我应该如何在请求请求中对它们做出反应?我如何礼貌地避免使用它,或者如果它确实是合理的,我如何确保PR的作者在以后的晚些时候进行跟进?

9
增加复杂性以删除重复的代码
我有几个类都从通用基类继承。基类包含一些类型为的对象的集合T。 每个子类都需要能够从对象集合中计算插值,但是由于子类使用不同的类型,因此每个类之间的计算差异很小。 到目前为止,我已经在每个类之间复制/粘贴了我的代码,并对每个代码进行了较小的修改。但是现在我试图删除重复的代码,并在我的基类中将其替换为一种通用插值方法。但是,事实证明这非常困难,而且我所想到的所有解决方案似乎都太复杂了。 我开始认为DRY原则在这种情况下不太适用,但这听起来像是亵渎神灵。尝试删除代码重复时有多少复杂性? 编辑: 我能想到的最好的解决方案是这样的: 基类: protected T GetInterpolated(int frame) { var index = SortedFrames.BinarySearch(frame); if (index >= 0) return Data[index]; index = ~index; if (index == 0) return Data[index]; if (index >= Data.Count) return Data[Data.Count - 1]; return GetInterpolatedItem(frame, Data[index - 1], Data[index]); } protected abstract T GetInterpolatedItem(int …

7
我的“代码示例”应该是什么样?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我刚刚接受了不错的电话面试(对于CakePHP相关职位,这并不是一个特别重要的问题)。面试官似乎对我的简历和个性印象深刻。但最后,他要求我通过电子邮件将我现有工作项目中的代码示例发送给他,“以检查您是否不是秘密地可怕的程序员,哈哈!” 我不太担心我的代码不能站立自己的两只脚,但是我非常是一名中级程序员,而不是专家。有什么明显的缺陷,我应该确保我的代码示例不他们统治我出去当场陷入,万一?其次,这可能是问题最难回答的部分,代码示例中的哪些功能会如此令人印象深刻,以至于它们立即使您更倾向于程序员? 欢迎所有想法或建议!

9
我的同事是一个好人,但他的表现不及标准。我要告诉老板吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 大约三个月前,我被安排在一个项目上,该项目直到那时才由一个新雇用的开发人员进行开发,因为它落后了。公平地讲,该项目是医疗设备的接口,具有很多细微之处,并且相对复杂,因此从管理的角度来看,让一个没有公司经验的人加入该项目可能是一个错误的决定。 无论如何,一旦我开始研究它,我就意识到……好吧,它根本没有用。UI看起来不错,但是实际上并没有执行任何操作,它所做的只是做错了。再次,公平地讲,这很大程度上是由于该开发人员没有适当准备为我们的设备编写接口的事实。但是,我也很快意识到所使用的代码很脆弱,并且很难维护。 现在,我不声称自己是世界上最好的程序员。我与很多非常聪明的人一起工作,他们比我更好。开发人员但是我非常努力地编写尽可能简单且健壮的代码。我测试我的签到。如果我发现我的代码变得凌乱并且难以在早期使用,则可以对其进行更改。我与同事进行了几次交谈,以帮助他编写更好的代码。这有点棘手,因为a)他在该领域有20多年的经验,而我只有5年,b)他被聘为所谓的“ UX专家”,而其他人则将他视为经验丰富的人。 就是说,我只是看不到。他是一个非常好人,并且很理性,但是他一次又一次地检查脆弱的代码,仅在最乐观的情况下才能工作,并且十分之九的错误导致我修复了他的工作中的错误。他的代码似乎只是业余的,显然他没有他被录用时所拥有的经验水平。到现在,我花费大量的时间重构他的代码并修复他的错误使我付出了代价。我的看法有两种选择: 不执行任何操作,破坏我的屁股,以确保该产品按时推出且坚固耐用,并等待他将来失败(在初始发行后,我将不再与他合作进行此项目)。 告诉我老板他的表现。我的老板是个有理智的人,但是我只是觉得尴尬。我不喜欢抨击我的同事(因为缺乏更好的称呼),我也不知道他会怎么接受。 就是这样。我试图通过解释为什么他的实现无法正常工作或如何使他的代码更易于维护来与同事合作,以解决这个问题,但他仍然犯同样的错误。我非常想知道其他人如何处理类似的情况,尤其是目前在管理人员。预先感谢您可以提供给我的任何建议。

7
避免过于复杂的方法-循环复杂性
不确定如何使用这种方法来降低环复杂性。声纳报告为13,而预期为10。我敢肯定,保持这种方法不会造成任何危害,不过,这只是挑战我如何遵循Sonar的法则。任何想法将不胜感激。 public static long parseTimeValue(String sValue) { if (sValue == null) { return 0; } try { long millis; if (sValue.endsWith("S")) { millis = new ExtractSecond(sValue).invoke(); } else if (sValue.endsWith("ms")) { millis = new ExtractMillisecond(sValue).invoke(); } else if (sValue.endsWith("s")) { millis = new ExtractInSecond(sValue).invoke(); } else if (sValue.endsWith("m")) { millis …


7
单元测试中的代码质量?
在编写单元测试时,是否值得花费额外的时间使代码具有良好的质量和可读性? 在编写测试时,我经常会违反Demeter定律,以加快编写速度并避免使用太多变量。从技术上讲,单元测试不能直接重用-它们严格地与代码绑定,因此我看不出有什么理由要花很多时间在它们上面;他们只需要功能。

2
什么时候在Groovy中使用def?
我现在在Groovy中开发了一段时间,我想知道应该多久使用一次动态投射def?我的一位同事认为我们应该一直使用它,因为它以某种我不了解的方式对Groovy有所帮助。 当前,当声明方法的返回类型和参数时,我想刻意指出应该放入和吐出哪些对象(出于代码可读性,我来自Java背景对我来说很有意义)示例: String doSomething(String something){ //code } // vs def doSomething(def somthing){ //code } // vs def doSomething(somthing){ // code } 所以我想我的问题是,仅是何时使用的偏好,def还是一直使用它的真正优势?(我添加了最后一个示例,因为我认为它适合作为Groovy的可行选项的问题)

6
我应该如何测试我的测试代码?
大多数软件开发人员都同意的几件事之一是,除非您对其进行测试,否则您不应依赖于代码才能正常工作。如果您不对其进行测试,则可能包含隐藏的错误,这些错误只会导致您日后要做更多的工作。 我知道如何测试我的普通代码,但是我应该如何测试我的测试代码,以确保它们可以有效地发现并报告出现的错误?我个人非常愚蠢,无法编写本应通过的错误测试用例,因此一开始就破坏了我编写测试的目的。幸运的是,我及时发现并修复了错误,但是根据测试的口头禅,如果没有一套自己的测试来确保它能够正常工作,似乎没有一套完整的测试套件。 在我看来,执行此操作的最佳方法是确保错误代码的测试失败。*如果我花2分钟的时间交替向代码中添加错误并确保失败,那么我应该有一个可以接受的信心,即测试“工作”。这使我想到第二个问题:有什么好的方法可以引入bug以确保它们被测试用例捕获?我是否应该随机注释掉语句,if-else否定条件来确保运行错误的分支,并更改带有副作用的代码的执行顺序等,直到我满意我的测试将抓住大多数常见的错误?专业开发人员如何验证他们的测试确实按照他们的预期去做?他们只是假设测试有效,还是花时间测试它们?如果是这样,他们如何测试测试? 我并不是在建议人们花太多时间测试他们的测试,然后再测试他们的测试,以至于他们从来没有真正编写过真正的代码,但是我做的愚蠢的事情让我觉得我可以从中受益进行“元测试”,并且对实现此目标的最佳方法感到好奇。:D *我可以检查在测试“无错误”代码时测试是否通过,但是使用代码作为测试规范似乎倒退了……

8
组织未注释的脏代码?
我想问你一些关于脏代码的问题。有些初学者在中等项目上编码。该代码是一个非常大的泥泞球。他们不是高级程序员。他们只知道如何稍微使用一下Java键盘。他们只是在主类中编写了12,000行代码,但是6000行属于NetBeans本身。 我的工作是分析代码并提出维护代码的好方法。我的想法是取消该项目,并使用OOP方法启动一个新项目。最近,我从该站点和其他站点收集了有关该问题的一些注释和想法。 现在,我有以下问题: 我们应该修复代码并将其更改为OOP吗?我们现在正在调试它。 该代码没有注释,没有文档,没有特定的编程风格,等等。更改它确实非常昂贵且耗时。我们能对此做什么? 我如何教会他们遵循所有规则(注释,OOP,良好的代码质量等)? 代码错误且容易出错。我们能做什么?测试?我们几乎写了两到三份A4纸进行校正,但似乎无止境。 我必须说我对他们是陌生的。我想我也违反了为项目添加新成员的规则。你认为我必须离开他们吗?

3
办公室官僚机构如何影响代码质量[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我对办公室官僚机构对最终代码质量结果有直接影响的故事感兴趣。 例如,一个朋友刚刚告诉我,在他以前的工作场所中,版本控制系统是如此庞大,以至于不允许程序员在未征得VCS许可的情况下创建新的“模块”(源树中的根目录)。结果是程序员不愿意经过额外的官僚主义步骤,并且没有适当地对其服务进行组件化,他们最终将不相关的功能堆放在了现有模块之上,即使这些功能只是与模块的当前定义或模块名称远程相关是过去的方式。(更不用说重命名模块了……) 我对办公室,运营或任何其他官僚机构的类似故事感兴趣,这些故事最终可能无意间影响了软件质量

14
在处理遗留代码时,如何克服自己的编码偏见?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 作为程序员,我们经常以我们的技能感到无比自豪,并对什么是“好”代码和“坏”代码持有非常强烈的意见。 在职业生涯中的任何时候,我们可能都会遗留下一些遗留系统,并以为“我的天哪,这段代码很烂!” 因为尽管它可能是功能完善,可维护的代码,但它不符合我们对好的代码的看法。 当您试图掌握其他程序员的工作时,如何做好心理准备?

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.