我正在与一家制造硬件/固件的大公司进行技术面试。
对于他们的一种产品,他们成立了一个测试固件的团队,因为该固件无法升级(您不希望运送已知的3000万个错误设备)。
因此,他们的客户给了他们“规格”,固件团队开发了固件,最后,这个团队在C#,CANoe和一些开发板的帮助下开始对其进行测试。
因此,例如,他们将固件闪存到板中,然后验证板(固件)的行为是否符合规范(例如,它必须返回特定的消息,或者必须在Y之后执行X,等等。通常的单元测试内容。
这些“单元测试”或“集成测试”实际上是软件本身(用C#编写),因此可能会出现BUGS(例如C内存泄漏)或“误报”。 / p>
例如,这是一个错误的测试:
public bool TestEngineOffAfterTime(int timeToWait) {
return true;
}
从形式上来说是正确的,可以编译,但这是错误的。
我遇到的问题是:您如何告诉测试是正确的?
我离开了面试,但不知道答案。
社区可以帮忙吗? 我自己找不到答案。
答案 0 :(得分:2)
这听起来像是一个技巧问题或所谓的“开放式”问题。
我要说的是,通常没有办法100%保证在现实的开发环境中测试是正确的。您只能减少那些误报的机会。您可以进行参数测试并生成大量测试用例,以探索被测例程的输入空间。您需要有良好的测试实践,以减少测试中的人为错误。您还需要具有良好的开发实践(如Block X所述)
但是,我认为没有办法“确保”测试形式正确。是的,您可以使用形式验证来确保算法有效。为了确保一段代码正常工作,要难得多。显然,由于test是程序,因此无法确定“ undecidable problem”。从黑匣子测试的角度来看,甚至不可能确定输入和输出空间有限的例程。 (如果例程不是无状态的,怎么办?)
答案 1 :(得分:0)
测试团队 要捕获此类错误,您需要多种质量保证技术,例如:
开发团队: 开发人员的最佳做法是设置
以确保此类错误不会转移到生产环境。
这类工具的自动化工具包括:
答案 2 :(得分:0)
在新代码更改后尽快检测到问题时,您可以说该测试是正确的。如果您在源代码部分中更改了此特定测试所检查的任何内容,但都失败了,那将是一个很好的测试。如果您要更改代码库并随后运行此测试,则表明一切正常,这是一个不好的测试(不正确)。