首先,我想说我不是在寻找代码,我是在寻找算法。
我正在编写复杂实时软件系统的顶级测试。它运行所有软件组件(约 20 个进程,约 100 个线程),设置假数据源(rtsp 视频源)并将准备好的数据(视频文件)提供给系统,记录系统响应(事件),然后停止系统准备好的测试数据已发送。
由于测试数据始终相同,我希望测试的系统能够在正确的时间(从测试开始)提供正确的响应(事件)。
然后,我将生成的响应(事件)与预期事件(手动准备)进行比较,我希望这些事件都在那里,可能会有一些小的时间差异,我会限制一些给定的时间差异,比如说 5 秒time-tolerance
。
假设测试的系统应该在 1500 秒长的视频中检测动物,我观看了它并记下了 5 种动物以及它们出现在视频中的时间:
at 10s - a sparrow
at 20s - a cat
at 50s - a rabbit
at 100s - an owl
at 1000s - a bear
基于此,我会编写expected_events集合:
expected_events = [
Event(10, 'sparrow'),
Event(20, 'cat'),
Event(50, 'rabbit'),
Event(100, 'owl')
Event(1000, 'bear')
]
我希望能够知道真实检测到的事件(这将受到处理器负载、磁盘使用、网络使用 atd 的影响,因为这是真实计算机上的多进程系统)与这些事件的匹配程度expected_eevents。
假设测试的系统返回:
detected_events = [
Event(10.1, 'sparrow'),
Event(19.5, 'cat'),
Event(50.2, 'rabbit'),
Event(99.3, 'owl')
Event(1000.2, 'bear')
]
我认为这是正确的,与预期事件 100% 匹配,所有事件都存在,时间差异如下time-tolerance:
matches = [
{'name': 'sparrow', 'detected': 10.1, 'expected': 10, 'time-diff': 0.1},
{'name': 'cat', 'detected': 19.5, 'expected': 20, 'time-diff': 0.5},
{'name': 'rabbit', 'detected': 50.2, 'expected': 50, 'time-diff': 0.2},
{'name': 'owl', 'detected': 99.3, 'expected': 100, 'time-diff': 0.7},
{'name': 'bear', 'detected': 1000.2, 'expected': 1000, 'time-diff': 0.2},
]
如果测试的系统返回:
detected_events = [
Event(10.1, 'sparrow'),
Event(50.2, 'rabbit'),
Event(99.3, 'owl')
Event(1010.5, 'bear')
]
我认为这是失败的,因为:
它没有检测到猫
熊被发现晚了 10.5 秒
因此,只有 5 个中的 3 个真正匹配,结果应该是 60% 匹配
因此,我需要一种评估方法,detected_events
以便expected_events
能够评估被测试系统的工作效果。
由于匹配事件类型对于解决问题至关重要,并且可以单独匹配每个事件类型,因此我将进行以下简单说明:
所有事件都是相同的 - 即只有事件的时间很重要,因此事件将仅由时间戳表示
时间戳将使其int
更易于阅读
正如你们许多人在评论中指出的那样,除了忽略具有时间差 > 的匹配之外,实际上我没有评估最终匹配的指标time-tolerance
。这使得它变得有点困难,但我认为它很直观 - 我知道什么时候应该发生什么,我将其与实际事件进行比较,我会尝试尽可能地匹配它们以确保:
匹配尽可能多的预期事件
每个detected_event
匹配expected_event
必须在给定的时间容限内同时发生。
所以我会考虑“正确”匹配(有 5 秒的时间容差):
慕斯王
慕仙森
相关分类