Unit testing 我怎样才能说测试(软件)是正确的?
我正在与一家生产硬件/固件的大公司进行技术面试 对于他们的一款产品,他们成立了一个团队来测试固件,因为固件是不可升级的——你不想运送3000万个你知道的有缺陷的设备 所以他们的客户给了他们规范,固件团队开发了固件,最后这个团队在C、CANoe和一些开发板的帮助下开始测试它 例如,他们将固件闪存到电路板中,然后验证电路板固件的行为是否与规范一致。例如,必须返回特定消息,或者必须在Y之后执行X,等等。。。。通常的单元测试都是测试内容 这些单元测试或集成测试实际上是用C编写的软件本身,因此可能存在错误,例如C内存泄漏或误报 例如,这是一个错误的测试:Unit testing 我怎样才能说测试(软件)是正确的?,unit-testing,testing,qa,Unit Testing,Testing,Qa,我正在与一家生产硬件/固件的大公司进行技术面试 对于他们的一款产品,他们成立了一个团队来测试固件,因为固件是不可升级的——你不想运送3000万个你知道的有缺陷的设备 所以他们的客户给了他们规范,固件团队开发了固件,最后这个团队在C、CANoe和一些开发板的帮助下开始测试它 例如,他们将固件闪存到电路板中,然后验证电路板固件的行为是否与规范一致。例如,必须返回特定消息,或者必须在Y之后执行X,等等。。。。通常的单元测试都是测试内容 这些单元测试或集成测试实际上是用C编写的软件本身,因此可能存在错误
public bool TestEngineOffAfterTime(int timeToWait) {
return true;
}
它在形式上是正确的,编译过,但它是错误的
我得到的问题是:你如何判断测试是正确的
我离开了面试,但不知道答案
社区能帮忙吗?
我自己找不到答案。测试团队
要捕获此类错误,您需要多种质量保证技术,例如:
找到对领域知识有很好理解的优秀测试人员
关注细节的测试人员
基本业务逻辑的自动化测试
集成测试
代码更改后的回归测试。
基于风险的测试
验收测试
性能、压力和负载测试
安装和配置测试
安全测试
API测试和单元测试
适航性试验
安装鉴定测试
分贝测试
网络服务
网络兼容性
突变试验
集成测试
可访问性测试
...
开发团队:
开发人员的最佳实践是设置
同行代码审查,
代码覆盖率和
代码分析工具
...
确保此类错误不会转移到生产中
这些自动化工具包括:
:同行和经验丰富的开发人员之间的代码审查。
:查找代码中的错误和漏洞。
:查找java程序中的错误。
...
这听起来像一个诡计问题或所谓的开放式问题 我想说,一般来说,没有办法100%确保测试在现实的开发环境中是正确的。你只能减少这些误报的机会。您可以进行参数测试并生成大量测试用例,以探索测试中例程的输入空间。您需要有良好的测试实践来减少测试中的人为错误。您需要有良好的开发实践以及提到的块X
然而,我不认为有一种方法可以确保测试在形式上是正确的。是的,您可以使用形式验证来确保算法有效。要确保一段代码正常工作,这要困难得多。显然,由于测试是一个程序,它不能从黑盒测试的角度来决定,甚至不可能决定一个具有有限输入和输出空间的例程。如果例程不是无状态的呢 当测试在新代码更改后尽快检测到问题时,您可以判断测试是否正确。如果您更改了此特定测试检查的源代码部分中的任何内容,但失败了,这是一个伟大的测试。如果您正在对代码库进行更改并在之后运行此测试,则表明一切正常-这是一个不正确的测试。是的,谢谢,但我的问题是在开发团队之后提出的。在所有这些工具之后,测试团队开始发挥作用。这些工具也不能解决根本问题:软件是否做了它应该做的事情?不。是的,这是一个开放式的问题,但不是我所说的技巧性问题——这是一个很好的机会来讨论测试应该如何透明地审查,如何与特定的要求联系起来,甚至可能提到TDD和突变测试——后者可以帮助识别冗余或无效的测试。???这不是不合身,如果你看的话,它非常精确。我描述了问题,并准确地描述了问题。它与软件测试有关。这是一个半正确的答案。在大多数情况下,单元测试和集成测试应该测试行为,而不是实现,以便在不更改测试的情况下进行重构