C标准库处于测试阶段时C编译器验证套件为何还能调用其功能?
若C标准库本身处于被测状态、可能存在缺陷进而导致验证套件本身失效,C编译器验证套件为何还能使用C标准库的各类功能?例如验证套件本身可能调用
memset、fopen等函数,但这些函数恰恰属于被测对象、有可能存在bug,这一逻辑令人困惑。
这个困惑核心是混淆了验证套件自身的运行依赖和测试用例的被测依赖,两类完全隔离的编译运行环境解决了标准库被测可能导致验证失效的问题:
这类C编译器验证套件在设计时就会引入两套完全独立的编译器环境:
- 参考编译器:用来编译构建验证套件本身,它配套的C标准库是已经经过多轮验证、被确认无功能性缺陷的可信版本。验证套件运行过程中调用的
memset、fopen等标准库函数,全部来自这套可信的参考标准库,和被测对象完全隔离,不会调用到存在bug的被测版本标准库,自然不会出现验证套件本身因被测库缺陷失效的问题。 - IUT(Implementation Under Test,被测实现)编译器:仅用来编译每一条独立的测试用例代码,测试用例执行过程中调用的标准库才是需要被校验的被测版本,这部分的运行返回值、执行状态等数据,都会被已经在可信环境下正常运行的验证套件捕获、校验,最终输出被测实现是否符合C标准的判断结果。
内容的提问来源于stack exchange,提问作者pmor
相关产品推荐
相关产品推荐

