当前位置: 首页 > 面试题库 >

单元测试实时/并发软件

董鸣
2023-03-14
问题内容

经典的单元测试基本上只是将x放入并期望y放入,并使该过程自动化。因此,这对于测试 不涉及时间的
任何事物都是有益的。但是,然后,我遇到的大多数不重要的错误都与计时有关。线程破坏彼此的数据,或导致死锁。不确定性行为的发生率高达百万分之一。辛苦的东西。

对于多线程并发系统的“单元测试”部分,有什么有用的东西吗?这样的测试如何工作?是否有必要长时间运行这种测试的主题并以某种巧妙的方式改变环境,以合理地确信它可以正常工作?


问题答案:

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

此外,实际上并没有任何好的工具可以检测时序问题,甚至可以检测出由于竞争状况而导致的数据损坏。Valgrind工具箱中的Helgrind和drd之类的工具非常适合琐碎的程序,但在诊断大型复杂系统中不是很有用。一方面,他们非常频繁地报告误报(尤其是海格朗德)。另一方面,仅在Helgrind下运行的程序运行速度慢了将近1000倍,并且实际上经常需要运行相当长的时间才能
重现 竞争条件,因此在Helgrind / drd下运行时实际上很难检测到某些错误。此外,由于在Helgrind下运行会完全改变程序的时间,因此可能
无法实现 重现某个定时问题。这就是定时问题的问题。从某种意义上说,它们几乎是海森堡式的,因为更改程序以检测时序问题可能会掩盖原始问题。

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



 类似资料:
  • Android Studio 1.1 添加了单元测试支持,详细请看 Unit testing support。本章的其余部分描述的是 “instrumentation tests”。利用 Instrumentation 测试框架可以构建独立的测试 APK 并运行在真实设备(或模拟器)中进行测试。

  • 英文原文:http://emberjs.com/guides/testing/unit/ 单元测试用于测试代码的一个小片段,确保其功能正常。与集成测试不同,单元测试被限定在一个范围内,并且不需要Ember应用运行。 全局 vs 模块 过去如果没有作为一个全局变量加载整个Ember应用,要对应用进行测试非常困难。通过使用模块(CommonJS,AMD等)来编写应用,可以只加载被测试的部分,而不用将其

  • 问题内容: 我刚开始使用来自PHP背景的PHPUnit测试进行测试。 在PHP中,非常讲道,您需要100%的覆盖率。在Go中,我所读到的关于测试的大多数内容似乎很少,没有诸如挑衅之类的东西。 例如我的小程序: 现在在我的示例中,我会遇到覆盖问题,因为在单元测试中根本没有覆盖main()(应该怎么办?) 而且两个log.Fatal()都没有涉及。 我的问题是我该如何准确地编写测试?我是否以一种不太严

  • 单元测试涉及测试软件应用程序的每个单元或单个组件。这是第一级软件测试。单元测试的目的是验证单元组件的性能。 单元是软件系统的单个可测试部分,并在应用程序软件的开发阶段进行测试。 此测试旨在测试隔离代码的正确性。单元组件是应用程序的单独功能或代码。白盒测试方法用于单元测试,通常由开发人员完成。 在测试级别层次结构中,单元测试是在集成和其他剩余测试级别之前完成的第一级测试。它使用模块进行测试,减少了等

  • 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如 C 语言中单元指一个函数,Java 里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进

  • 我们从 Hello World 项目入手,增加单元测试功能。 我们新家了一个名为hello-world-test的 Gradle 项目。 环境 Gradle 3.4.1 Spring Boot 1.5.2.RELEASE Thymeleaf 3.0.3.RELEASE Thymeleaf Layout Dialect 2.2.0 Spring Security Test 4.2.2.RELEASE