我怎么说测试(软件)是正确的?

时间:2018-06-20 08:10:56

标签: unit-testing testing qa

我正在与一家制造硬件/固件的大公司进行技术面试。

对于他们的一种产品,他们成立了一个测试固件的团队,因为该固件无法升级(您不希望运送已知的3000万个错误设备)。

因此,他们的客户给了他们“规格”,固件团队开发了固件,最后,这个团队在C#,CANoe和一些开发板的帮助下开始对其进行测试。

因此,例如,他们将固件闪存到板中,然后验证板(固件)的行为是否符合规范(例如,它必须返回特定的消息,或者必须在Y之后执行X,等等。通常的单元测试内容。

这些“单元测试”或“集成测试”实际上是软件本身(用C#编写),因此可能会出现BUGS(例如C内存泄漏)或“误报”。 / p>

例如,这是一个错误的测试:

public bool TestEngineOffAfterTime(int timeToWait) {
  return true;
}

从形式上来说是正确的,可以编译,但这是错误的。

我遇到的问题是:您如何告诉测试是正确的?

我离开了面试,但不知道答案。

社区可以帮忙吗? 我自己找不到答案。

3 个答案:

答案 0 :(得分:2)

这听起来像是一个技巧问题或所谓的“开放式”问题。

我要说的是,通常没有办法100%保证在现实的开发环境中测试是正确的。您只能减少那些误报的机会。您可以进行参数测试并生成大量测试用例,以探索被测例程的输入空间。您需要有良好的测试实践,以减少测试中的人为错误。您还需要具有良好的开发实践(如Block X所述)

但是,我认为没有办法“确保”测试形式正确。是的,您可以使用形式验证来确保算法有效。为了确保一段代码正常工作,要难得多。显然,由于test是程序,因此无法确定“ undecidable problem”。从黑匣子测试的角度来看,甚至不可能确定输入和输出空间有限的例程。 (如果例程不是无状态的,怎么办?)

答案 1 :(得分:0)

测试团队 要捕获此类错误,您需要多种质量保证技术,例如:

  • 寻找对领域知识有很好理解的优秀测试人员
  • 关注细节的测试人员
  • 自动测试基本业务逻辑
  • 集成测试
  • 代码更改后的回归测试。
  • 基于风险的测试
  • 验收测试
  • 性能,压力和负载测试
  • 安装和配置测试
  • 安全测试
  • API测试和单元测试
  • 可导航性测试
  • 安装资格测试
  • 数据库测试
  • 网络服务
  • 网络兼容性
  • 突变测试
  • 集成测试
  • 可访问性测试
  • ...

开发团队: 开发人员的最佳做法是设置

  • 对等代码审查
  • 代码覆盖范围
  • 代码分析工具
  • ...

以确保此类错误不会转移到生产环境。

这类工具的自动化工具包括:

  1. Gerrit:同行和更多经验丰富的开发人员之间的代码审查。
  2. SonarQube:在代码中查找错误和漏洞。
  3. Maven findbugs:在Java程序中查找错误。
  4. ...

答案 2 :(得分:0)

在新代码更改后尽快检测到问题时,您可以说该测试是正确的。如果您在源代码部分中更改了此特定测试所检查的任何内容,但都失败了,那将是一个很好的测试。如果您要更改代码库并随后运行此测试,则表明一切正常,这是一个不好的测试(不正确)。