单元测试实时/并发软件[重复]

2024-06-23

可能的重复:
我应该如何对线程代码进行单元测试? https://stackoverflow.com/questions/12159/how-should-i-unit-test-threaded-code

经典的单元测试基本上只是将 x 输入并期望 y 输出,然后使该过程自动化。所以它对于测试任何东西都有好处不涉及时间。但是,我遇到的大多数重要错误都与时间有关。线程会损坏彼此的数据,或导致死锁。不确定性行为的发生——百万分之一。硬东西。

对于多线程并发系统的“单元测试”部分,有什么有用的东西吗?此类测试如何进行?是否有必要长时间运行此类测试的主题并以某种巧妙的方式改变环境,以对其正常工作充满信心?


我现在所做的大部分工作都涉及多线程和/或分布式系统。大多数错误涉及“happens-before”类型错误,其中开发人员assumes(错误地)事件 A 总是在事件 B 之前发生。但是程序每运行 1000000 次,事件 B 首先发生,这会导致不可预测的行为。

此外,实际上没有任何好的工具可以检测时序问题,甚至是由竞争条件引起的数据损坏。 Valgrind 工具包中的 Helgrind 和 drd 等工具非常适合简单的程序,但它们在诊断大型复杂系统时并不是很有用。一方面,他们经常报告误报(尤其是 Helgrind)。另一方面,在 Helgrind/drd 下运行时实际上很难检测到某些错误,因为在 Helgrind 下运行的程序运行速度几乎慢了 1000 倍,而且您通常需要运行一个程序相当长的时间才能甚至复制竞争条件。此外,由于在 Helgrind 下运行完全改变了程序的时间,它可能会变成不可能的重现某个时序问题。这就是微妙的时间问题;它们几乎是海森堡式的,因为改变程序来检测时序问题可能会掩盖原始问题。

可悲的事实是,人类仍然没有做好充分的准备来应对复杂的并发软件。不幸的是,没有简单的方法对其进行单元测试。特别是对于分布式系统,您应该使用以下方式仔细规划您的程序帮助您确定程序中事件的必要顺序。但最终,您无法真正摆脱使用随机变化的输入进行强力单元测试。它还有助于在单元测试期间改变线程上下文切换的频率,例如运行另一个后台进程,该进程只占用 CPU 周期。此外,如果您有权访问集群,则可以并行运行多个单元测试,这可以更快地检测错误并节省大量时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单元测试实时/并发软件[重复] 的相关文章

  • Java 多态性中的字段如何工作? [复制]

    这个问题在这里已经有答案了 我正在读书面试问题 http javabypatel blogspot in 2016 04 java interview questions html关于java 发现了很好的例子 但感到困惑 因为没有很好 更
  • 为什么 (Oracle) JVM 对内存使用有固定上限 (-Xmx)?

    本着提问的精神Java 为什么存在 MaxPermSize https stackoverflow com questions 3356005 java why does maxpermsize exist 我想问一下为什么Oracle J
  • 测试从 ComboBox 派生的自定义控件

    我创建了一个从 ComboBox 派生的控件 并希望对其行为进行单元测试 但是 它在我的单元测试中的行为似乎与实际应用程序中的行为不同 在实际应用程序中 Combobox DataSource 属性和 Items 同步 换句话说 当我更改
  • ASP.NET 中的 thread.sleep

    我正在为我的网站模拟彗星实时馈送协议 因此在我的控制器中我添加 while nothing new before timeout Thread Sleep 1000 但我注意到添加此功能后整个网站变慢了 调试后我得出结论 当我打电话时Thr
  • UWP - 绑定枚举差异

    我遇到了一个非常有趣的问题 假设 UWP 应用中有以下 XAML 页面内容
  • 如何让 PCRE 与 C++ 一起使用?

    这是一个新手问题 但我希望我能尽可能清楚地表达我的问题 我正在尝试用 C 进行模式匹配 我已经从以下位置下载了 PCRE 的 Win32 版本here http gnuwin32 sourceforge net packages pcre
  • 嘲笑会员用户

    我目前正在开发一个 asp net mvc 2 应用程序 它使用默认的 SqlMembershipProvider 进行身份验证 我已经实现了一个控制器方法 通过调用读取当前用户的 ProviderUserKeyMembership Get
  • 将 Tango 3D 点投影到屏幕 Google Project Tango

    Project Tango 提供了点云 如何获取点云中 3D 点的像素位置 以米为单位 我尝试使用投影矩阵 但得到的值非常小 0 5 1 3 等 而不是 1234 324 以像素为单位 我包含我尝试过的代码 Get the current
  • 实体框架中的导航属性是什么

    我是实体框架的新手 当Visual Studio创建模型图时我们主要可以看到Entities Propertie和Navigation Properties这两个东西 那么这些Navigation Properties是什么 如何使用它们
  • 如何在 Windows 8.1 上打开多个 Visual Studio 窗口? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我使用的是 Windows 7 我能够启动多个 Visual Studio 并同时工作 现在我有 Windows 8 1 操作系统 每当我
  • 合并大文件的最佳方法是什么?

    我必须合并数千个大文件 每个大约 200MB 我想知道合并这些文件的最佳方法是什么 行将有条件地复制到合并文件中 可以使用 File AppendAllLines 或使用 Stream CopyTo 吗 使用 File AppendAllL
  • 从java类文件获取apache webcontents文件夹的绝对路径[重复]

    这个问题在这里已经有答案了 需要在动态 Web 应用程序内获取 java 类文件中的绝对路径 实际上我需要获取 apache webapps 文件夹的路径 部署 webapps 的位置 e g apache root webapps my
  • Java中有没有办法随机获取HashMap的值?

    Java中有没有办法随机获取HashMap的值 这有效 Random generator new Random Object values myHashMap values toArray Object randomValue values
  • Task.Delay 到底是如何工作的?

    他们说 Task Delay 是一个异步 Thread Sleep 为了测试这一点 我写了下面的代码 我希望立即打印 One 然后 3 秒后将打印结果变量 15 2 秒后 将打印 Two 但似乎并非如此 一 不会立即打印 3 秒后打印 On
  • 使用反射检测属性的访问修饰符类型

    我编写了一些代码来使用反射查看属性 我已经使用反射从类中检索了属性列表 但是我需要查明该财产是公共的还是受保护的 例如 public string Name get set protected int Age get set Propert
  • allure2 侦听器在控制台中输出步骤

    我正在使用 Allure2 和 TestNG 我想编写自己的侦听器 在控制台输出中打印 Steps 我在 allure 中看到了 StepLifecycleListener 接口 但我无法在 TestNg 中实现此侦听器 有什么指点吗 Ov
  • GridLayout 中的 JLabel

    如何添加JLabel出于GridLayout 我有一个 8x8 网格布局 Container content getContentPane content setLayout new GridLayout 8 8 2 2 for int f
  • 如何处理JFreeChart中的SpiderWebPlot?

    发现 JFreeChart 我在使用时遇到了问题蜘蛛网情节 http www jfree org jfreechart api javadoc org jfree chart plot SpiderWebPlot html 这就是我今天所拥
  • 有关 Endian 性和 .Net 的详细信息?

    我有几个关于字节顺序的问题 这些问题足够相关 我保证将它们作为一个问题提出 1 字节顺序是由 Net还是由硬件决定的 2 如果是由硬件决定的 我怎样才能在C 中找出硬件的字节序 3 字节序是否影响二进制交互 例如 OR AND OR 或移位
  • java中的“main”可以返回字符串吗?

    java中的public static void main String args 是否有可能返回String代替void 如果是 怎么办 public static String main String args 代替 public st

随机推荐