java - 如何衡量稳健性?

标签 java software-quality robustness

我正在写一篇关于衡量产品质量的论文。本例中的产品是一个网站。我已经确定了几个质量属性和测量技术。

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

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

有没有人有使用此类工具的经验?

最后但同样重要的是,也许还有其他方法可以确定稳健性,如果您对此有任何想法,我会洗耳恭听。

非常感谢。

最佳答案

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

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

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

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

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

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

关于java - 如何衡量稳健性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2354379/

相关文章:

java - 安卓 : How to ask permission to wireless?

java - SonarQube 通过质量门进行技术债务管理

java - 您如何评价以下 java 解决方案或者您将如何解决它?

haskell - 没有错误的健壮的haskell

java - ARCore 应用中的黑白视频流背景

java - Hibernate DB2 ROW_NUMBER() 错误

java - 提高自定义比较器代码质量

robustness - 稳健性的最佳实践

language-agnostic - 您如何管理应用程序的外部依赖项?

java - Firebird 提交在 Java 应用程序中不起作用