首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实现科学模型的软件是否需要单元测试?

实现科学模型的软件是否需要单元测试?
EN

Software Engineering用户
提问于 2020-08-05 17:09:42
回答 8查看 5.2K关注 0票数 27

我在一个领域工作,很多代码都是编写出来的,但几乎没有经过测试。这是因为我们是试图用代码解决问题的最重要的科学家。我们仅有的几门编码课程,重点是基础知识,很多人毕业后从未听说过git、单元测试和干净代码。许多人在他们的PhD中甚至没有听说过.

也许现在更好了,但在10-5年前,我们没有任何涵盖这些领域的必修课。

通常情况下,软件用数值方法求解微分方程。在许多情况下,有许多反馈的政策制定和评价。

想想天气预报,化学反应,大气模型等等。

那么现在我的问题是,你会相信一个复杂软件的结果吗?这个软件拥有数百或数千个功能,而没有一个单元测试?如果有测试,那么它们是相当高的水平,比如检查结果是否与相同的输入相同,或者非常简单的情况下的结果是否符合解析解。

即使你知道这个方程的数值解是合理的,根据几年前的出版物,你会相信这个模型来做预测吗?如果它能造成数十亿人的生命损失,你会相信吗?

另外,这些模型通常是用相同的简化输入来比较的。

EN

回答 8

Software Engineering用户

回答已采纳

发布于 2020-08-06 14:18:22

我想谈几个方面。

我在一个领域工作,很多代码都是编写出来的,但几乎没有经过测试。这是因为我们是试图用代码解决问题的最重要的科学家。

我认为这在科学中很常见。我认为这部分是由于缺乏课程或动力。

我认为主要原因是许多科学代码更多的是原型开发而不是应用程序开发。其中很多都被用于一些分析和抛弃。它很小,所以你可以手工测试。

单元测试的主要好处之一是用于长期维护和重构。如果您的代码不会被长期维护,并且您也不会重构它,那么减少单元测试的优先级是合理的。

但是该软件的一部分被大量重用(不幸的是,通常事先并不清楚)。然后..。

如果它能造成数十亿人的生命损失,你会相信吗?

至此,我们已经离开了“原型开发”,进入了应用程序开发。我假设代码由多个人维护很长时间。如果它继续增长,它很可能会被重新分解。很可能很久以前就不可能手工测试所有的东西了,因为大多数更改都是手工完成的。

当然,如果可能造成的损害更大,风险承受能力就会低得多。

由于所有这些,单元测试变得更有价值了。我认为,在这一点上遵循更好的软件工程原则(如单元测试)是有好处的,而且在此之前的一段时间内也是如此。

通常情况下,软件用数值方法求解微分方程。在许多情况下,有许多反馈的政策制定和评价。

我认为更重要的质量是规模(生命周期、协作、变化频率、复杂性……),而不是是否有科学的模型。

但我要说的是,这样的事情实际上很容易自动测试(不管你是否还会称它为“单元”测试)。没有要模拟的UI或外部依赖项。

越多的例子和边缘案例被覆盖,人们就越相信它。它可能需要一些科学的洞察如何‘行为良好’的模型,并了解风险,知道多少是足够的。

通常,用相同的简化输入来比较这些模型。

这实际上会给我一点自信。我认为这是一种很好的验证和bug检测方法。

这对本地化问题没有多大帮助--你甚至可能不知道哪一种模型是错误的,更不用说它有什么问题了。单元测试可能会对此有所帮助。

票数 32
EN

Software Engineering用户

发布于 2020-08-05 18:11:30

这是你可以科学检验的东西。你不需要依赖互联网上的争论。编写单元测试,看看它们是否捕获了您的手动测试没有的错误。看看它们是否减少了查找错误的时间。

直到2000年初,在软件开发中,单元测试还不是很常见,因此,任何一个已经做了超过15-20年的测试的人都会记得没有它会是什么样子的。作为其中之一,我可以告诉您,如果没有单元测试,我不会信任软件,除非您每次更改时都会花费数周的时间检查bug。

票数 11
EN

Software Engineering用户

发布于 2020-08-19 09:55:43

越来越多的人认为研究软件应该看到一些标准化的测试。花时间编写高质量的科学软件的问题之一是,在一种以论文为货币的文化中,它得到了认可。为了每个人的利益,软件工程研究会正试图改变这种状况。

上个世纪,您的安全网依赖于经过非常好测试的库,例如用于Fortran的NAG库和用于严肃计算的数值累进(Fortran/Pascal/C)。还有一个博士后/研究生,他的工作就是得到正确的号码。:)

票数 5
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/414493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档