【问题标题】:C++ unit testing for multiple cpu architectures多 cpu 架构的 C++ 单元测试
【发布时间】:2020-05-06 21:22:44
【问题描述】:

我们使用 C++ 为 ARM 和 x86 架构开发应用程序。当然,我们针对这两种架构集成测试我们的应用程序,但现在我们仅在 x86 上对我们的应用程序进行单元测试。这是一个可能的错误源吗?为所有支持的架构运行单元测试是否正常?

【问题讨论】:

    标签: c++ unit-testing x86 arm


    【解决方案1】:

    理论上,只要您的代码仅使用 C++ 并且您没有未定义的行为,那么代码在所有兼容平台上的行为都应该相同。这就是标准应该做的。

    实际上,很少有代码是完全包含的(您可能会使用在不同平台上表现不同的库或驱动程序)或者完全没有未定义的行为(即 int 溢出是未定义的行为,它可以随平台而变化,指针大小可以随着平台的变化,我认为有一个标志可以为所有未定义的行为发出警告或错误)。即使这样,由于这些差异,您可能会得到稍微不同的数据结构布局,并且您可能会发现一些内存或性能问题。

    这取决于您的代码以及您对所有平台的关心程度。如果它在两个平台上都能完美运行是关键任务,那么您应该在两个平台上运行测试。 如果您基本上没有依赖和未定义的行为,那么一个平台可能就足够了。

    您也可以尝试一种设置,对您拥有的东西进行单元测试,但不时(比如每天或每周)在另一个平台上运行测试以确保一切正常。

    【讨论】:

    • 关于 ARM 的一个有趣事实是标准 ABI 使用 char = unsigned char,与使用 char = signed char 的 x86 ABI 不同。这可以在 ARM 上创建 UB,而 x86 上的代码没有,或者至少改变表达式的含义。
    猜你喜欢
    • 2010-09-10
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多