Questions tagged «code-reviews»

该标签用于有关代码审查和代码演练的问题。有关现有有效代码的评论,请访问http://codereview.stackexchange.com

19
您如何知道您是否编写了可读且易于维护的代码?
如何知道一个人创建的代码是否易于阅读,理解和维护?当然,从作者的角度来看,该代码具有可读性和可维护性,因为从一开始,作者就对其进行了编写和编辑。但是,必须有一个客观且可量化的标准,我们的行业可以据此衡量代码。 如果在没有原始作者的专业建议的情况下对代码执行以下操作,则可以达到这些目标: 可以阅读代码并从根本上理解逻辑流程。 可以更深入地了解代码在做什么以包括输入,输出和算法。 其他开发人员可以对原始代码进行有意义的更改,例如错误修复或重构。 可以编写新代码,例如利用原始代码的类或模块。 我们如何量化或衡量代码质量,使我们知道代码的可读性,可理解性和可维护性?

22
我如何处理代码审查中关于不太可能出现的边缘情况的分歧?
我在路径覆盖小组的一家机器人初创公司工作,提交拉取请求后,我的代码得到了审查。 我的团队成员已经在团队中工作了一年多,对我的代码进行了一些注释,这些注释表明我所做的工作比我认为必要的要多得多。不,我不是一个懒惰的开发人员。我喜欢优雅的代码,它具有良好的注释,变量名,缩进并能正确处理大小写。但是,我不同意他的组织类型。 我将提供一个示例: 我花了一天的时间编写测试用例,以对我所做的过渡发现算法进行更改。他曾建议我处理一个不太可能发生的模糊案件-实际上,我不确定该案件是否有可能发生。我编写的代码已经可以在我们所有的原始测试用例和发现的一些新用例中使用。我编写的代码已经通过了每晚运行的300多次仿真。但是,处理这种晦涩的案例将花费我13个小时,最好花时间去尝试改善机器人的性能。需要明确的是,迄今为止我们一直使用的以前的算法也无法处理这种晦涩的情况,并且在生成的40k报告中,没有一次发生过这种情况。我们是一家初创公司,需要开发产品。 我以前从未进行过代码审查,而且不确定自己是否太过争论。我应该保持安静,做他的话吗?尽管我强烈不同意这是对时间的充分利用,但我还是决定保持低调并做出改变。 我尊重我的同事,并承认他是一个聪明的程序员。我只是在一点上不同意他,而且不知道如何在代码审查中处理不同意见。 我觉得我选择的答案满足了解释初级开发人员如何处理代码审查中的分歧的标准。

20
如何在代码审查中找到积极的东西?
在去年出现了一些严重的质量问题之后,我公司最近引入了代码审查。很快引入了代码审查过程,没有任何准则或任何清单。 我和另一位开发人员选择在合并到主干中之前查看对系统所做的所有更改。 我们还被选为“技术主管”。这意味着我们对代码质量负责,但我们无权执行流程中的更改,重新分配开发人员或保留项目。 从技术上讲,我们可以拒绝合并,然后将其恢复开发。实际上,这几乎总是以我们的老板要求准时交货为目的。 我们的经理是MBA,主要负责制定近期项目的时间表。在尝试过程中,他几乎不知道从业务角度来看我们的软件的功能,并且即使没有开发人员的解释,也难以理解最基本的客户需求。 目前,开发工作是在SVN的开发分支中完成的,开发人员认为准备就绪后,便将票务系统中的票证重新分配给我们的经理。然后,经理将其分配给我们。 代码审查导致我们团队内部出现一些紧张关系。尤其是一些年长的成员对更改提出了质疑(即“我们总是这样做”或“为什么该方法应有一个明智的名称,我知道它的作用?”)。 在最初的几周后,我的同事开始放任自流,以免给同事造成麻烦(她告诉我自己,在客户提交错误报告后,她知道该错误,但担心该错误开发人员会对她指出这一点感到生气)。 另一方面,我现在以指出问题的方式而闻名。 我认为我的标准不是太高。 我目前的清单是: 该代码将编译。 代码至少有一种工作方式。 该代码将适用于大多数正常情况。 该代码将适用于大多数情况。 如果插入的数据无效,则代码将引发合理的异常。 但是我完全接受提供反馈意见的方式的责任。我已经在提出可行的观点,解释了为什么应该更改某些内容,有时甚至只是询问为什么要以特定方式实现某些内容。当我认为这很糟糕时,我指出我会以另一种方式开发它。 我所缺乏的是找到能够指出“好”东西的能力。我读到有人应该把坏消息夹在好消息中。 但是我很难找到一件好事。“嘿,这一次您实际上承诺了所做的所有事情”比谦虚或乐于助人更自负。 示例代码审查 嘿乔, 我对Library \ ACME \ ExtractOrderMail类中的更改有一些疑问。 我不明白为什么您将“ TempFilesToDelete”标记为静态?此刻,对“ GetMails”的第二次调用将引发异常,因为您在其中添加了文件,但是在删除它们后再也不会删除它们。我知道该函数每次运行仅调用一次,但是将来可能会更改。您能否将其设为实例变量,然后我们可以并行使用多个对象。 ...(其他一些无效的地方) 次要点: 为什么“ GetErrorMailBody”将异常作为参数?我错过了什么?您不会抛出异常,只需将其传递并调用“ ToString”即可。这是为什么? SaveAndSend不是该方法的好名字。如果邮件处理出错,则此方法发送错误邮件。您可以将其重命名为“ SendErrorMail”或类似名称吗? 请不要只注释旧代码,请将其彻底删除。我们仍然在颠覆它。
184 code-reviews 

19
如何查看自己的代码?[关闭]
我正在单独进行项目,必须维护自己的代码。通常,代码审阅不是由代码作者完成的,因此审阅者可以以崭新的眼光看代码-但是,我没有那么奢侈。我可以采用哪些实践来更有效地查看自己的代码?

16
如果代码审查太难了,您该怎么办?
好的,所以很多代码检查都是相当常规的。但是,有时会发生更改,这些更改会广泛影响现有的复杂,易碎的代码。在这种情况下,验证更改的安全性,缺少回归等所需的时间过长。也许甚至超过了完成开发本身所花费的时间。 在这种情况下该怎么办?合并,希望一切顺利?(不主张这样做!)最好的方法可以并且仅尝试发现任何明显的缺陷(也许这是代码审查应针对的最大问题吗?)完全合并和测试,这是比代码审查更好的替代方法吗? 这不是一个特别的问题,是否应该在代码审查中进行测试。这是一个问题,询问在上述情况下最好的选择是什么,尤其是在紧迫的截止日期,没有可用的全面单元测试套件或单元测试对零碎的代码不可行的情况下。 编辑:我给人的印象是,到目前为止,我的短语“广泛影响”已经得到了一些答案/评论,并可能认为这意味着更改涉及大量的代码行。我能理解这是一种解释,但这并不是我的意图。所谓“广泛影响”,是指例如由于代码库的互连性或连锁效应的范围而导致回归的可能性很高,而未必一定会使更改本身很大。例如,开发人员可能会找到一种方法,方法是调用一个现有的高级例程,该例程将调用级联到许多较低级别的例程,从而用一行代码修复错误。测试和验证该错误修复程序很容易。手动验证(通过代码审查)所有连锁效应的影响要困难得多。

16
在审查过程中,我该如何在技巧上建议改进其他人设计不良的代码?
我是干净代码和代码技巧的忠实拥护者,尽管我目前从事的工作不被视为重中之重。我有时会发现自己的处境是,同位人的代码充满混乱的设计,并且很少担心将来的维护,尽管它功能正常且几乎没有bug。 当您认为需要进行大量更改并且有最后期限时,您将如何在代码审查中提出改进建议?请记住,建议在截止日期之后进行改进可能意味着,随着新功能和错误修复的到来,它们将被完全取消优先级。

8
如果提交供代码检查的代码看起来太复杂了,该怎么办?
该代码很难遵循,但至少在表面测试下,它似乎(大部分)运行良好。可能到处都有小错误,但是很难通过阅读代码来判断它们是否是更深层问题或简单修复的症状。但是,即使有可能,通过代码审查手动验证总体正确性也是非常困难且耗时的。 在这种情况下最好的行动方案是什么?坚持要重做吗?部分重做?首先重构?仅修复错误并接受技术债务?对这些选项进行风险评估,然后决定吗?还有吗
115 code-reviews 



11
在代码审查中,审查者是否应始终提出解决方案?[关闭]
在检查代码时,我通常会尝试就如何解决问题提出具体建议。但是由于人们可以花费有限的时间进行审阅,因此这种方法并不总是能很好地工作。在这些情况下,如果开发人员自己提出解决方案,我会发现效率更高。 今天,我回顾了一些代码,发现一个类显然设计得不好。它具有许多仅分配给某些对象的可选属性,而对其他对象则留空。解决此问题的标准方法是拆分类并使用继承。但是,在这种特定情况下,这种解决方案似乎使事情变得过于复杂。我本人并未参与此软件的开发,也不熟悉所有模块。因此,我没有足够的知识来做出特定的决定。 我多次经历的另一个典型案例是,我发现一个明显毫无意义甚至误导的函数,类或变量名,但我自己却无法提出好名。 因此,通常来说,作为审阅者,可以说“此代码存在缺陷是因为...,是否有所不同”,还是您必须提出一种特定的解决方案?

7
如何拒绝您认为不必要的代码审查?
我被要求查看一些代码来解决我认为不存在的问题。 这个比我更高级的修复程序坚持认为自己的修复程序是必要的,但对我而言,它似乎不过是C ++诡辩。我们的部署过程的一部分是代码审查,作为一名小公司的第二高级工程师,我希望审查变更。 我相信审稿人对代码更改的责任与原始编码员一样,并且我不愿意对此更改负责。您将如何拒绝此评论?

21
如果有人告诉您您的代码一团糟,您将如何反应?
我是一个很好的程序员,或者我以前就这么想过。我一直喜欢编程。我想学习很多有关编程的知识,以使我成为一名更好的程序员。我学习了1年的编程知识,现在我从事程序员工作将近2年。简而言之,我有将近3年的编程经验。 我们的团队由5位程序员组成,其中我们4位是新手,其中1位具有3年以上的经验。我们已经为一个程序工作了将近一年,没有人审查过我的代码,并且给了我一个可以使用的页面。我们从未进行过代码审查,而且我们都是新手,所以我们不知道干净的代码是什么样。我认为程序员可以自己学习? 我们在没有进行全面测试的情况下将程序部署到了程序中。现在已经很严格了,在对代码进行更改之前,我们需要首先获得批准和代码审查。有人第一次审查我的代码,他说这是一团糟。 我感到很难过和受伤。我真的很喜欢编程,让他们说这样的话真的很伤害我。我真的很想提高自己。但似乎我不是电影中的天才程序员。您能给我建议如何做得更好吗?您是否曾经遇到过批评您的代码的事情并且感到非常受伤?你在那些事件上做什么?

20
减少代码中的行数有多重要?
我是从事J2SE(核心Java)的软件开发人员。 通常在我们的代码审查期间,我们被要求减少代码中的行数。 这并不是删除多余的代码,而是遵循一种专注于用更少的代码行来完成相同事情的样式,而我相信即使要增加行数,代码也要清晰。 您认为正确的做事方式是什么? 如果LOC(代码行)很小,它将如何影响代码?如果LOC是一个较大的数字,它将如何影响代码? 网站上的示例:“ javaranch”- public static void happyBirthday(int age) { if ((age == 16) || (age == 21) || ((age > 21) && (((age % 10) == 0) || ((age % 25) == 0)))) { System.out.println("Super special party, this year!"); } else { System.out.println("One year older. Again."); …

4
代码审查的目的是什么
我正在尝试以代码审查的价值出售我的组织。我曾在几个地方工作过。我已经看到它们用来确定样式选择和功能决策,并且我所看到的只是用于确保没有危险实现的直觉检查。我的直觉是,最有效的目的是在这两种选择之间。 那么,代码审查的目的是什么?

19
在提交代码之前或之后进行检查,哪个更好?
传统上,我们在提交之前进行代码审查,而今天我和我的同事争论,后者喜欢在提交之后进行代码审查。 首先,这是一些背景 我们有一些经验丰富的开发人员,我们也有几乎零编程经验的新员工。 我们希望执行快速且简短的迭代以发布我们的产品。 所有团队成员都位于同一地点。 我学过的提交前代码审查的优势: 指导新员工 在开发周期的早期尝试防止错误,故障,不良设计 向他人学习 有人退出时的知识备份 但是我也有一些不好的经历: 效率低下,有些更改可能需要几天的时间才能进行审核 速度和质量很难兼顾,特别是对于新手 一位团队成员感到不信任 至于提交后的审查,我对此一无所知,但我最担心的是由于缺乏审查而失去控制的风险。有什么意见吗? 更新: 我们正在将Perforce用于VCS 我们在相同的分支(trunk或bug修复分支)中进行编码和提交 为了提高效率,我们尝试将代码分成小的更改。我们还尝试了一些实时对话框审查,但并不是每个人都遵循规则。但是,这是另一个问题。

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.