健壮性与正确性竞赛[关闭]


17

在“ 需求质量”段落中阅读“代码完成2”,我发现:

是否在竞争属性之间(例如,稳健性和正确性之间)规定了可接受的折衷?

(以上是检查复选框质量的一个大复选框)

因此,我在网络,学术书籍等中找到了很多关于稳健性和正确性的定义。

例如:

在“面向对象的软件构造,第二版,Bertrand Meyer,Prentice-Hall,1997”一书中:

  • 正确性:系统在其规格,设计和实施中没有[缺陷]的程度。
  • 鲁棒性:在无效输入或压力环境条件下,系统继续运行的程度。

尽管如此,尚不清楚这两个原因为何以及在哪些情况下可能发生冲突。

我的问题是:为什么这两个属性在竞争中


11
不同的书籍对这些术语有不同的定义。(通常,为普通程序员编写的书没有使用与学术出版物相同的定义。)也许您可以看看这本书如何定义它们。(有时这些术语在书中使用时没有任何定义。)
rwong

除了“优雅地处理各种意外输入”(除了功能要求的输入)外,我不知道“健壮”的任何定义。
卡兹(Kaz)

我已编辑我的问题,力求尽可能清楚,以便可以重新打开它。
得胜

Answers:


36

在许多情况下,这两个可能会发生冲突。例如,坚固性可能涉及重载下的弹性。如果可以比精确(正确)响应更快地计算出对请求的近似(即不正确)响应,那么重要的是要知道系统是应该传递近似结果,还是完全无法传递结果。


17

正如您所说,这两个只是示例。实际上,此类所有非功能性需求都可能相互冲突。在“ Building Evolutionary Architectures”一书中,有一张大约有一百个这样的“ -ilities”表(它们通常也被称为)。

对于软件架构师来说,考虑其中任意两个之间的潜在冲突是一种练习。您可以基本上确定其中哪些对您的项目很重要,然后跟踪这些冲突。

回到精确的示例,并查看robustnessWikipedia中术语的定义:

在计算机科学中,健壮性是计算机系统在执行过程中应对错误[1] [2]并应对错误输入的能力。

从定义中可以看出,健壮性涉及错误。另一方面,您要具有正确性,这基本上意味着没有错误。

为了使冲突更加明显,让我们考虑一个简单的输入字段。根据正确性要求,最容易拒绝用户的任何错误输入。但是,鲁棒性要求您能够使用此输入,这可能并不完全正确。

将其带到您的书中:现在可以接受的权衡是什么?假设您编写了一个科学应用程序,用户可以在其中输入电压量(包括幅度)。因此正确的输入应该是“ 10 kV”或“ 200 mV”。可接受的权衡取舍包括允许输入“ 10kV”,“ 10kVolt”,甚至只是“ 10”,并且为了正确起见,将它们映射到有效电压值。请注意,这仍然是一个折衷,而不是“两全其美”的事情。考虑大写还是小写:“ 10 kV”和“ 10 KV”可能很好,但“ 10 mV”和“ 10 MV”可能不行。由于您不确定现在是毫还是兆,因此正确性变得可疑,


5

一个实际的例子是XHTML vs. HTML

  • 浏览器(在严格模式下)拒绝具有语法错误的XHTML。这样可以确保不向用户显示不正确的结果,并有助于发现错误。
  • 浏览器会尝试继续解析HTML代码,即使该代码有非常明显的问题。即使内容有些混乱,这通常也使用户可以查看页面。

因此,XHTML的目标是正确性,而HTML的目标是健壮性。目前,HTML似乎更受欢迎,但是双方都有很好的论据。

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.