我已经实现了FIFO信号量,但现在我需要一种方法来测试/证明它们工作正常。一个简单的测试就是创建一些线程,试图等待一个信号量,然后用一个数字打印一条消息,如果这些数字是为了它应该是FIFO,但这不足以证明它,因为该命令可能有偶然发生。因此,我需要一个更好的测试方法。
如果必要的锁定或条件变量也可以使用。
谢谢FIFO信号量测试
1
A
回答
-2
因为该命令可能偶然发生。
您可以运行测试几次,例如, 10,并测试每次订单是否正确。这将确保它不会偶然发生。
P.S.在单元测试的多个线程通常避免
4
你描述你的一句“但这还不够好证明这一点,因为这顺序可以通过机会出现”什么是某种已知的两难困境。
1)即使您有规格,也不能确保规格符合您的意图。为了说明这一点,我将以"the limit of correctness"为例。让我们考虑一个分解函数是一种规范:
计算A和B,如A * B = C
但是这还不够,你可以有一个返回A=1
和B=C
的实现。添加A,B != 1
仍可导致A=-1
和B=-C
,因此唯一正确的规范必须指定A,B>1
。这只是为了说明编写符合真实意图的规格有多复杂。
2)即使有证明算法,仍然不意味着实现在实践中是正确的。 Donald Knuth的this quote可以很好地说明这一点:
小心上述代码中的错误;我 只有证明它是正确的,没有试过 它。
3)测试只能揭示存在的bug,而不是他们的缺席。这句话可以追溯到Dijkstra:
测试可以用来显示 存在错误,但从未展现 他们的缺席。
结论:你注定了,你永远不会100%确定你的代码是正确的!但东西并没有那么糟糕。对代码有高的信心通常就足够了。例如,如果使用多个线程对您来说仍然不够,您可以决定使用模糊测试,以便更多地随机化测试执行。如果你的测试总是通过,那么你可以非常确信你的代码是好的。
相关问题
- 1. 用信号量保证FIFO?
- 2. Javascript信号量/测试和设置/锁?
- 3. 信号量从未在单元测试信号(dispatch_get_main_que()从来没有运行?)
- 4. 测量信号的峰值检测
- 5. 如何测试Erlang互斥信号量与多个Pid?
- 6. 在Java中测试简单的信号量使用
- 7. PyQt&unittest - 测试信号和插槽
- 8. 谷歌测试/模拟与Qt信号
- 9. 信号处理单元测试?
- 10. 不支持瓶测试信号错误
- 11. 测试信号灯如何工作
- 12. 如何测试PyQt/PySide信号?
- 13. 如何用声卡测量5V信号
- 14. Atmega测量的信号频率如何?
- 15. Google Nearby Connection API:测量信号强度
- 16. 调试信号
- 17. JVM卡住试图获取信号量
- 18. 尝试等待信号量时出错
- 19. 信息测试
- 20. Ruby信号量?
- 21. 创建双向通信fifo
- 22. C - 多信号叉与信号量
- 23. Linux信号量:自旋锁或信号?
- 24. 试图在我的测试中激活Django信号
- 25. 重置信号量
- 26. 实现信号量
- 27. 再入信号量
- 28. 信号量计数
- 29. 可调信号量
- 30. pthread_cond_wait与信号量
“单元测试中通常会避免多个线程” - ???如果您正在测试的代码(例如信号量)只能用多个线程进行测试,则不适用。 – jlstrecker 2011-07-06 18:08:59
用正确的输出运行几次并不能保证它是正确的。 – Eric 2014-01-21 14:26:32