Questions tagged «code-quality»

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

8
如何学习有效地编写Pythonic代码?
用谷歌搜索“ pythonic”会发现各种各样的解释。在维基百科页面称: Python社区中最常见的新词是pythonic,它具有与程序样式相关的广泛含义。说代码是pythonic就是说它很好地使用了Python习惯用法,它是自然的,或者显示出流利的语言。同样,要说它是pythonic的接口或语言功能,就是说它与Python惯用语配合得很好,并且它的使用与语言的其余部分很好地结合在一起。 它还讨论了术语“ unpythonic”: 相反,非Python代码的标志是它试图用Python编写C ++(或Lisp,Perl或Java)代码-也就是说,提供的是粗略的转录,而不是来自另一种语言的惯用形式的翻译。pythonicity的概念与Python的极简主义的可读性哲学紧密相关,并且避免了“有多种方法可以做到这一点”。不可读的代码或无法理解的习惯用法是难以理解的。 术语“ pythonic”是什么意思?如何学习在实践中有效地应用它?

13
我的故事点数比平均水平高4-5倍,但错误产生率却是平均水平的一半。图说它的错误多出2倍,如何处理?
因此,通常公认的是,顶级程序员可以比普通程序员产生更多/更好的代码。 人们也普遍认为,对于程序员而言,代码中的错误率相对恒定。 相反,它倾向于受到编写代码时和编写代码后使用的过程的影响。(据我了解)人类倾向于以相当恒定的速度犯错误-更好的程序员只会注意到更多的错误,并且会更快地解决它们。 请注意,以上两个断言都来自史蒂夫·麦康奈尔(Steve McConnell)的Code Complete,因此这不是不同观点的问题。 因此,我最近开始在代码中看到这一点。我可以像其他同等人(以团队估计的故事点来衡量)的代码量提高大约4-5倍,并且质量更高(基于性能指标和签入后所做的更改数量)。但是我仍然会犯错误。在进行更好的单元测试,更好地理解代码的功能以及更好地了解代码审查时的问题之间,我没有产生4-5倍的错误数。 但是我仍然产生的质量保证发现的错误是我团队中其他开发人员的两倍。您可能会想到,这会导致非技术人员进行度量标准测量时出现一些问题(请参阅:我的老板)。 我试图指出,我的错误产生率是同龄人的一半(并且修复了两倍),但是当图表显示我产生的错误数目却是两倍时,这是很难的。 那么,如何应对生产率提高会导致错误数量增加这一事实呢?

10
原型与清洁代码的早期阶段
我正在计划/开始一些个人项目,这些项目最终可能会成为我的日常工作。这让我开始思考,应该从哪个方向开始? 只是原型-编写仅能正常工作的基本代码,这可能会花费我大量时间进行优化和重构,以便于轻松扩展。 从一开始就编写干净,优化和文档化的代码,请记住,如果过了一段时间它就不具有成本效益,它将被删除。 更新:将YAGNI与sunpech和M.Sameer的答案结合起来对我来说非常有意义:)谢谢大家的帮助。

10
是否有任何理由使用“普通旧数据”类?
在旧版代码中,我偶尔会看到只不过是数据包装器的类。就像是: class Bottle { int height; int diameter; Cap capType; getters/setters, maybe a constructor } 我对OO的理解是,类是数据的结构以及对该数据进行操作的方法。这似乎排除了此类对象。对我而言,它们无非是structs一种失败的面向对象的目的。我认为这不一定是邪恶的,尽管它可能是一种代码味道。 是否存在这样的对象必要的情况?如果经常使用,是否会使设计令人怀疑?

4
git-flow和github进行代码审查
使用常规的git和github,我可以通过简单地创建我正在处理的功能分支到master分支的拉取请求来进行代码审查。我将如何使用git-flow进行代码审查?使用“ git flow功能完成”之类的工作流程,我对代码审查实际上发生在何处以及git-flow或git如何促进该审查感到困惑。

15
创意编码有什么不好的地方?[关闭]
我今晚看着鲍勃·罗斯(Bob Ross)画一些“快乐的树”,而且最近我发现让我感到压力的是什么。 这里和Stack Overflow上的社区似乎拒绝任何不完善的想法。我的目标是通过提高技能来编写受人尊敬的(因此可维护和运行)代码。但是,我富有创造力。 让我解释一下“创造性编码”的含义: 我在项目中的第一步通常是坐下来并敲击一些代码。对于更大的事情,我会在这里和那里做一些计划,但大多数情况下我只是潜入。 除非与正在项目中创建其他作品的其他人一起工作,否则我不会绘制任何类的图。即使那样,那当然也不是我要做的第一件事。我通常不从事大型项目,而且视觉效果也不是很好。 当我测试,简化,重做并将原始hack转换为可重用,逻辑且高效的东西时,我编写的第一轮代码将被重写很多次。 在此过程中,我一直在清洁。我删除未使用的代码,并注释所有不明显的内容。我不断测试。 我的流程似乎与专业开发人员社区中可以接受的基本原则背道而驰,我想理解为什么。 我知道,糟糕的代码最令人困扰的地方是有人陷入了前员工的混乱之中,并且要花费大量的时间和金钱来解决。我了解。鉴于最终结果与从头开始计划所有事情类似,因此我不了解我的流程是怎么了。(或者至少是我发现的。) 最近,我对这个问题的焦虑非常严重,以至于我停止编码,直到我知道解决所解决的特定问题的每种方法的所有知识。换句话说,我几乎完全停止了编码。 无论您对此问题有何意见,我都非常感谢您的投入。 编辑: 谢谢大家的回答。我从每个人那里学到了一些东西。你们一直都很有帮助。

6
处理重构大文件的最佳方法是什么?
我目前正在做一个更大的项目,不幸的是其中有些文件的软件质量准则并不总是遵循的。这包括大文件(读取2000-4000行),这些文件显然包含多个不同的功能。 现在,我想将这些大文件重构为多个小文件。问题是,由于它们很大,因此不同分支上的多个人(包括我)正在处理这些文件。因此,我无法真正从开发和重构中分支出来,因为将这些重构与其他人的更改合并将变得很困难。 当然,我们可以要求每个人重新合并以开发,“冻结”文件(即,不再允许任何人对其进行编辑),重构然后“取消冻结”。但这也不是一件好事,因为这将要求每个人在重构完成之前基本上停止对这些文件的工作。 因此,有没有一种方法可以重构,不要求其他人停止工作(很长时间)或合并其功能分支以进行开发?

13
编写“好的代码”是什么意思?[关闭]
在这个问题中,我问一个不好的作家是否会妨碍您编写好的代码。许多答案都始于“这取决于您所指的好代码”。 看来“好代码”和“坏代码”是非常主观的。由于我有一个观点,所以可能与其他人的观点有很大不同。 那么编写“好的代码”意味着什么?什么是“好代码”?

8
反转IF语句
因此,我已经编程了几年,最近又开始更多地使用ReSharper。ReSharper经常向我建议的一件事是“反转'if'语句以减少嵌套”。 假设我有以下代码: foreach (someObject in someObjectList) { if(someObject != null) { someOtherObject = someObject.SomeProperty; } } ReSharper建议我这样做: foreach (someObject in someObjectList) { if(someObject == null) continue; someOtherObject = someObject.SomeProperty; } 看来,无论进行多少嵌套,ReSharper都会总是建议我反转IF。这个问题是我至少在某些情况下喜欢嵌套。对我来说,似乎更容易阅读和弄清某些地方的情况。并非总是如此,但有时我感到更舒适的嵌套。 我的问题是:除了个人喜好或可读性之外,还有其他减少嵌套的理由吗?是否存在性能差异或其他我可能不知道的东西?

6
首选类成员还是在内部方法之间传递参数?
假设在一个类的私有部分中有一个供多个私有方法使用的值。人们喜欢将其定义为类的成员变量还是将其作为参数传递给每个方法?为什么? 一方面,我可以看到一个论点,即减少类中的状态(即成员变量)通常是一件好事,尽管如果在类的所有方法中重复使用相同的值,那似乎是一个理想的选择。表示为类状态的候选对象,以使代码看起来更清晰(如果没有其他内容)。 编辑: 为了澄清提出的一些评论/问题,我不是在谈论常量,这与任何特定情况都没有关系,而只是与其他人谈论的一种假设。 暂时忽略OOP角度,以下是我想到的特定用例(假设通过引用传递只是为了使伪代码更整洁) int x doSomething(x) doAnotherThing(x) doYetAnotherThing(x) doSomethingElse(x) 所以我的意思是,多个功能之间存在一些共同的变量-在我看来,这是由于较小功能的链接所致。在OOP系统中,如果这些都是类的所有方法(例如,由于通过从大型方法中提取方法进行重构而导致的结果),则该变量可以全部传递给它们,也可以是类成员。

9
在什么时候对代码进行“建设性”批评会变得毫无用处?
我最近开始是一名初级开发人员。作为团队中经验最少的人之一,我也是一名女性,在男性主导的环境中工作时会遇到各种挑战。我最近遇到了麻烦,因为我觉得自己的工作受到了太多不必要的学问批评。让我给你举一个最近发生的事的例子。 团队负责人太忙了,无法推动我开设的某些分支机构,因此他直到周末才加入他们。我检查了我的邮件,但实际上并没有做任何工作的意思,发现我的两个分支已根据变量名被拒绝,使错误消息更具描述性,并将一些值移至配置文件。 我不认为在此基础上拒绝我的分支是没有用的。周末有很多人在工作,我从未说过我会工作。实际上,有些人可能因为我没有时间进行更改并重新提交而被阻止。我们正在开发一个对时间非常敏感的项目,在我看来,完全基于对客户透明的事物完全拒绝代码是没有帮助的。我可能是错的,但似乎我有时间时应在补丁类型提交中处理这类事情。 现在,我可以看到在某些环境中这是正常的。但是,批评似乎分布不均,这就是导致我遇到下一个问题的原因。这些问题中大多数的基础是由于我处于别人编写的代码库中并且试图做到微创的事实。我在模仿文件中其他地方使用的变量名。当我这样说时,我直言不讳地告诉我:“不要模仿别人,做对的事。” 这也许是我本该被告知的最没有用的东西。如果已经签入的代码是不可接受的,那么我该如何判断对与错呢?如果混淆的基础来自底层代码,我认为不是 在这种情况下,我感到非常单调和沮丧。我对遵循预期的标准有了更好的了解,例如,当我将一段代码重构为以前缺少的ADD错误检查时,我感到沮丧,我只是被告知我没有使错误足够详细(并且在此基础上分支被拒绝)。如果我从未添加过该怎么办?如果它是如此错误,它是如何进入代码的呢?这就是为什么我这么单调的原因:我经常遇到这个现有的有问题的代码,以至于我要么模仿要么重构。当我模仿它时,这是“错误的”,并且如果我重构它,我会因为没有做足够的事情而受到指责(如果我一直走下去,引入错误,等等)。再说一次,如果这是一个问题,我不明白任何代码如何进入代码库, 无论如何,我该如何处理?请记住,我在最上面说的是我是女人,并且我确定这些人在查看其他人的代码时通常不必担心礼节,但是老实说这对我不起作用,这使我的工作效率降低。我担心如果我和经理谈这件事,他会认为我无法处理环境等。

4
排序类方法定义的最人性化方式?
在任何给定的类定义中,我都看到了以各种方式排序的方法定义:按字母顺序排列,基于最常用用法的按时间顺序排列,按可见性分组的按字母顺序排列,按顺序将getter和setter组合在一起的按字母顺序排列的等等,当我开始编写新类时,我倾向于只输入所有内容,然后在写完整个课程后重新排序。关于这一点,我有三个问题: 顺序重要吗? 是否有“最佳”订单? 我猜没有,所以不同订购策略的优缺点是什么?

19
当其他人构建了一个过于复杂的解决方案时,您在代码审查中怎么说?[关闭]
前几天,我审查了团队中某人写的代码。该解决方案不能完全发挥功能,而且设计过于复杂-意味着存储了不必要的信息,构建了不必要的功能,并且基本上,该代码具有很多不必要的复杂性,例如镀金,并且它试图解决不存在的问题。 在这种情况下,我问“为什么要这样做?” 答案是另一个人喜欢那样做。 然后,我问这些功能中的任何一项是否属于项目规范,或者它们是否对最终用户有用,或者是否有任何额外的数据会呈现给最终用户。 答案是不。 因此,我建议他删除所有不必要的复杂性。我通常得到的答案是“已经完成了”。 我的观点是,它没有完成,有错误,没有满足用户的要求,并且维护成本会比我建议的简单方法高。 一个等效的场景是: 同事花费了8个小时的手工重构代码,而这本可以在10秒内在Resharper中自动完成。自然,我不信任手工重构,因为它质量可疑且未经充分测试。 同样,我得到的答复是“已经完成了”。 对这种态度有什么适当的回应?

9
编码时如何通过分析克服瘫痪?
当我开始一个新项目时,我经常会立即开始考虑实现的细节。“我要在哪里放置DataBaseHandler?我应该如何使用它?要使用它的类应该从某些Abstract超类中扩展。发送请求和解析数据的方法?” 我最终停滞了很长时间,因为我想为可扩展性和可重用性编写代码。但是我觉得几乎不可能过去思考如何实现完美。 然后,如果我只想说“拧紧它,就完成它!”,我很快就会碰壁,因为我的代码没有组织好,混合了抽象级别,等等。 您有什么技术/方法来启动一个新项目,同时建立一个可以很好地扩展的逻辑/模块化结构? - -编辑- - 好吧,这已经是很难接受答案的问题类型了,但是希望获得更多反馈,看看是否有共识。TDD听起来真的很酷,坦率地说,我一直在意欲加快使用JUnit等的速度。与此同时,TDD的拥护者如何看待这一事实,即与TDD有关的合理点解决了我的问题?特别的问题是,TDD似乎并没有真正解决设计问题。当然,我同意TDD将帮助我定义我想做什么,然后我可以逐步研究如何做,但是有许多不同的总体设计模式/结构可以全部通过单元测试。就是这样:它测试单个UNITS。我想我有点困惑...我不知道。也许我' 谢谢!

12
“足够”多少代码覆盖率?
在我们的工作中,我们开始努力提高代码覆盖率,这让我开始思考...。多少代码覆盖率足够? 什么时候达到代码覆盖率递减的地步?良好的覆盖范围与不足之间的最佳结合点是什么?它是否因您正在制作的项目类型(例如WPF,WCF,Mobile,ASP.NET)而不同(这些是我们正在编写的C#类)。

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.