6

我正在写一篇关于测量产品质量的论文。在这种情况下,产品是一个网站。我已经确定了几种质量属性和测量技术。

一种质量属性是“稳健性”。我想以某种方式测量,但我找不到任何有用的信息如何以客观的方式做到这一点。

是否有任何静态或动态指标可以衡量稳健性?即,像单元测试覆盖率一样,有没有办法测量这样的稳健性?如果是这样,是否有任何(免费)工具可以做这样的事情?

有没有人对这种工具有任何经验?

最后但并非最不重要的一点是,如果您对此有任何想法,也许还有其他方法可以确定稳健性。

提前非常感谢。

4

5 回答 5

13

嗯,简短的回答是“不”。稳健可能意味着很多事情,但我能想到的最佳定义是“在任何情况下都表现正确”。如果您将错误的 HTTP 标头发送到强大的 Web 服务器,它不应该崩溃。它应该返回完全正确的错误类型,并且应该在某处记录事件,也许以可配置的方式。如果一个强大的 Web 服务器运行很长时间,它的内存占用应该保持不变。

使系统健壮的很多原因是它对边缘情况的处理。好的单元测试是其中的一部分,但很可能不会对系统存在的任何问题进行单元测试(如果已知这些问题,开发人员可能会修复它们,然后才添加测试) .

不幸的是,几乎不可能测量任意程序的健壮性,因为要做到这一点,您需要知道该程序应该做什么。如果您有一个规范,您可以编写大量测试,然后针对任何客户端运行它们作为测试。例如,查看 Acid2 浏览器测试。它以简单、可重复的方式仔细测量任何给定的 Web 浏览器与标准的符合程度。这几乎是你所能得到的,并且人们已经指出了这种方法的许多缺陷(例如,一个程序是否经常崩溃但根据规范做的额外事情更健壮?)

但是,您可以使用各种检查作为对系统健康状况的粗略数字估计。单元测试覆盖率是一个非常标准的覆盖率,它的兄弟、分支覆盖率、函数覆盖率、语句覆盖率等也是如此。另一个不错的选择是像 FindBugs 这样的“lint”程序。这些可以表明潜在的问题。开源项目通常根据提交或发布的频率和最近的频率来判断。如果一个项目有 bug 系统,你可以衡量已经修复了多少 bug 和百分比。如果您正在测量程序的特定实例,尤其是具有大量活动的程序,MTBF(平均故障间隔时间)是一个很好的稳健性度量(参见Philip 的回答

然而,这些测量并不能真正告诉你程序有多健壮。它们只是猜测它的方法。如果很容易判断一个程序是否健壮,我们可能只是让编译器检查它。

祝你的论文好运!我希望你想出一些很酷的新测量方法!

于 2010-03-01T07:44:10.713 回答
4

您可以将平均故障间隔时间作为稳健性度量。问题在于它是一个难以测量的理论量,尤其是在您将产品部署到具有实际负载的实际情况之前。造成这种情况的部分原因是测试通常不涵盖现实世界的可伸缩性问题。

于 2010-03-01T08:09:08.030 回答
2

在我们的 Fuzzing 书(Takanen、DeMott、Miller 撰写)中,我们有几章专门介绍负面测试中的指标和覆盖率(鲁棒性、可靠性、语法测试、模糊测试,同一事物的许多名称)。我还尝试在这里总结我们公司白皮书中最重要的方面:

http://www.codenomicon.com/products/coverage.shtml

从那里摘录:


覆盖率可以看作是精度和准确度这两个特征的总和。精度与协议覆盖率有关。测试的精度取决于测试覆盖不同协议消息、消息结构、标签和数据定义的程度。另一方面,准确性衡量测试在不同协议区域内发现错误的准确性。因此,精度可以看作是异常覆盖的一种形式。然而,精确度和准确度是相当抽象的术语,因此,我们需要查看更具体的指标来评估覆盖率。

第一个覆盖分析方面与攻击面有关。测试需求分析总是从识别需要测试的接口开始。不同接口的数量以及它们在各个层中实现的协议设置了对模糊器的要求。每个协议、文件格式或 API 都可能需要自己的模糊器类型,具体取决于安全要求。

第二个覆盖度量与模糊器支持的规范有关。这种类型的度量很容易与基于模型的模糊器一起使用,因为该工具的基础是由用于创建模糊器的规范形成的,因此它们很容易列出。基于模型的模糊器应该涵盖整个规范。然而,基于突变的模糊器不一定完全覆盖规范,因为实现或包含规范中的一个消息交换样本并不能保证覆盖整个规范。通常,当基于突变的模糊器声称支持规范时,这意味着它可以与实现规范的测试目标互操作。

特别是关于协议模糊测试,第三个最关键的指标是所选模糊测试方法的状态级别。完全随机的模糊器通常只会测试复杂有状态协议中的第一条消息。您使用的模糊测试方法对状态的感知能力越强,模糊测试就越能深入复杂的协议交换。对于 Fuzzing 工具来说,状态性是一个难以定义的要求,因为它更多地是定义所用协议模型质量的指标,因此只能通过运行测试来验证。


我希望这可以帮到你。我们还研究了其他指标,例如查看代码覆盖率和其他或多或少无用的数据。;) 度量是论文的一个很好的主题。如果您有兴趣访问我们对该主题的广泛研究,请发送电子邮件至 ari.takanen@codenomicon.com。

于 2010-03-02T06:16:29.923 回答
1

健壮性是非常主观的,但您可以看看FingBugsCoberturaHudson,如果它们正确组合在一起,随着时间的推移,您会对软件的健壮性产生安全感。

于 2010-03-01T07:34:17.193 回答
0

您可以将平均故障间隔时间作为稳健性度量。

“MTBF”的问题在于它通常以正流量来衡量,而故障通常发生在意外情况下。它没有给出任何稳健性或可靠性的指示。无论一个网站在实验室环境中是否一直在线,如果它有弱点,它仍然会在互联网上被黑客入侵。

于 2010-03-02T06:20:30.570 回答