问题 学术界的代码审查


我是机械工程博士生,没有广泛的计算机科学背景。我们编写代码作为我们研究的一部分,但它通常是高级的(例如,Matlab),而且通常是临时的。

这听起来像学术界的代码评论对于(a)来自其他人的学习技巧,以及(b)发现代码中的不足之处将是有价值的。 (有时候我认为发表的论文很可怕,其中的理论在代码中被实例化,除了作者以外没有人看过!)学者们是否应该与同行进行强制性的代码审查? (有没有人见过这样的事情?)

更重要的是,在这种情况下进行有效的代码审查需要多长时间?当特定资源总是非常稀缺时,似乎很难证明额外的时间。


附录:有几个人问过“出版物”是否构成了充分的评论。在我的领域根本没有。该 结果 是重要的部分,所以如果你用难以理解的代码编写你的算法和/或数据分析,这些代码在经过数小时的处理后吐出一个图形,那与干净,可共享,快速的代码没什么不同。

您可能会编写有问题的代码来生成外观结果 关于 是的,但从来不知道那里有一个错误!

但我认为将出版物与用于在手稿中产生结果的代码一起以电子方式分发是一个好主意。问题是,时间:每个人的代码都是丑陋且不可维护的(为了概括;毕竟我们是工程师,而不是程序员),因此清理它以供发布需要太长时间。代码评论可能会对这种情况有所帮助。


10351
2017-09-22 11:38


起源

我一直认为,如果您的研究依赖于程序操纵的数据,那么在您的研究被视为同行评审之前,数据和程序都需要进行审核。这根本不是这样的吗? - Will


答案:


在学术界花了一点时间后,我注意到很多代码都是用来完成工作的代码。

代码通常由一个人一起攻击以测试正在测试的任何假设。行业代码是在小型团队中生成的,而可维护性是一个重要因素。

除非审阅者熟悉代码库,并且代码量非常小(几千行?)代码审查要么非常耗时,要么不会非常严格。

我花了一天的代码审查了一个同事写过的5000行程序,是的,我发现了很多问题,但我会说我不愿意经常这样做。根据我的经验,代码审查最适合评估功能项而不是整个应用程序。

老实说,如果正确完成代码审查对学术界来说是一个福音,那么找到有足够时间审查代码的人的机会在学术界很少,因为每个人都试图尽快完成自己的项目。从本质上讲,学术界的环境并不真正有利于代码审查。

让本科实习生去做是愚蠢的,理想情况下,代码审查应由具有更多软件开发经验的人进行,而不是普通的本科生。因此,除非本科生非常有天赋,否则他们不太可能从他们的代码审查中获得太多好处。


6
2017-09-22 11:46





我的建议是有1个或2个会话,看看团队/同行如何处理它。 “有效”的答案是它基本上取决于人。

我一直在许多评论中,人们审查的实际上并没有花时间坐下来跟踪代码。很多时候,人们只会简单地掩盖来源并记下拼写错误和'需要评论'这类'缺陷'。虽然拥有这些信息很好,但它并没有真正帮助您在上面列出的a,b原因。

请注意,我也一直在评论非常有成效。

我的最后建议是一次审查一小部分代码。发送完整项目的评论不会产生您期望的结果。大多数人在查看大量代码时会感到厌倦,并开始浏览以完成所有操作。

在我的最新职位上,最有效的是即兴代码审查。所以,如果我有一段代码我刚刚完成,我会先调用另一个开发人员来查看我们的源代码控制分支中的任何内容。没有什么正式的,只是快速查看,以便其他人知道代码决定了什么。


2
2017-09-22 11:56





代码审查的时间长度取决于:

  • 代码长度
  • 代码的复杂性
  • 审稿人的技巧

所以很难准确量化需要多长时间。我知道我工作的一些人可以查看~400loc / h,但有几个项目已经将最大loc / h速率限制在200,因为他们觉得速度越快就会降低代码审查的质量。

此外,代码审查最常针对编码标准进行,因为审查是为了确保其符合标准。代码审查不是重新设计代码的地方,因此如果您缺乏编码标准,那么代码审查很难实现。


1
2017-09-22 12:44





假设您的评论小组知道您正在编写的语言并理解您正在使用的数学/公式,通常不需要太长时间。有关于每小时要审查的代码行数以及其他此类统计数据等已发布的研究和引用,但是审查执行大量数学运算的代码需要更长时间才能完成数学密集程度较低的代码,尤其是如果您将自己的功能滚动到X或Y.

当我在学校的时候,我们没有进行代码审查(除非我们被难倒!然后才发现错误),但是看看更多代码肯定会很好。

在进行代码审查时,我的团队通常会提前几天向审阅者提供代码(取决于代码量 - 并将其分解为逻辑上组合在一起的块,如果有很多代码的话并让审稿人检查出来。然后我们会见了一个小时左右,然后仔细研究一下这些发现。有很多方法可以做到这一点,但这对我们来说效果相当不错。

我想有点让我感到惊讶的是,已经没有这样的东西了。


1
2017-09-22 13:08





我认为有一个非常大的区别:学者和软件开发人员以非常不同的方式一起工作。

代码审查通常作为具有共同议程的团队的一部分完成。如果申请销售,我们会获得报酬。他们理解所有代码并且代码尽可能好,这符合每个人的利益。

学术界有一个非常不同的议程 - 我相信你至少知道一个博士生,他们的研究经常被老年人挫败,因为它与20年前的论文相矛盾(大多数人似乎都做了很多)。

作为学生,您可能需要仔细选择您审核的对象,并且他们不会自动对改进您的代码感兴趣。

代码评审不会(经常)修复错误,或者真正验证代码。他们只是分享对它的理解并提供反馈。

如果您的代码有效,但是效率低下是一个问题吗?如果它是一个噩梦要维护,那么记录不充分且不可行的事情是否确实有效?

在某种程度上,我认为特殊代码可以成为工作的正确工具,如果这项工作不是专业的软件开发。我在Matlab(在我的数学学位期间)做过的事情,我现在不会想做,但我现在写的代码是由我的团队共享并经常重新访问,我写的代码因为我没有看过毕业。


1
2017-09-22 11:50





第一次编写更好的代码,只是为了让您在几个月后更容易重新访问代码。与志同道合的科学家和工程师合作,他们相信编写优秀的代码。以您的代码为荣,并记住我们摆脱机器代码和发明高级语言的原因之一是更好地与其他人沟通。如果其他人无法理解您的方法,那就没有多大帮助,特别是在学术界,其他研究人员的结果可重复性如此重要。


1
2017-09-23 20:23





研究论文在出版前是否都经过同行评审?而研究本身,是不是有某种形式的导师? (不知道正确的用语,我不是学术界......)

那么为什么不包括代码审查呢?同行评审研究论文也应该是代码审查。 (事实上​​,很少有人知道如何进行有效的代码审查,但这是一个不同的问题......)


为了澄清,我假设同行评审(在发布之前?)将验证所有假设,确认结论,验证数据痕迹等。
验证数据跟踪的一部分(以及因此来自该数据的结论的有效性)必须检查处理或生成该数据的程序。因此代码审查是必要的......


1
2017-09-22 12:31