在这种情况下,在测试程序中对handle_bad_data()函数的调用是很基本的,因为测试该语句能不能受程序输入数据控制是很基本的。
尽管如此,很多情况下控制语句并不直接受控于函数接口,而是取决于系统处于的特定状态,如下例所示。将系统置于该不正确状态可能会相当复杂,甚至可能牵扯到让设备接口处于某些特定状态,所以测试用例中的这个条件就须要通过模拟来实现。
float shutDown () { if (uploadingData()) { userMessage (“Cannot execute shutdown while uploading data”); recoverShutDown(); } else { // shut down indeed } } |
运用支持“智能桩函数”(smart stubs)的高级测试工具,对于复杂不正确条件的测试比其它要领就基本了很多。“智能桩函数”允许通过原始函数的桩函数以及通过实现某些必要的特定功能的要领来执行代码。实际而言,当被测程序明显没有处于不正确状态时,其相应待测函数将被调用以模拟不正确实际发生的情况,这就是“不正确模拟”的意义。在上述例子中,对不正确处理函数uploadingData()的测试须要其桩函数以保证至少让其返回一次“真”。
一些值得考虑的疑问
在宿主环境下执行 测试可能意味着用以建立代码的编译器和目标系统编译器不同。如果交叉编译器提供商同时提供用在宿主环境下的编译器(例如Green Hills Software的本地编译器),则可以直接运用。如果没有,则可以运用支持大多数平台的GNU Compiler Collection(GCC)。虽然保证代码在宿主编译器和目标编译器上的一致性会对维护成本有些许的提升,但是与早期测试对整个项目带来的优点相比却是很合算的。
单元测试不大可能发觉因同步不正确造成的运用 程序级的不正确条件或者与实际设备接口的不正确。尽管如此,在嵌入式系统的开发流程中,单元测试能帮助开发者尽早地发觉很多类不正确,所以提高了系统整体开发效率并且消除了测试瓶颈。
运用 C++test来自动化单元测试流程
用户可以运用 Parasoft C++test来自动化对嵌入式系统软件的测试。
Parasoft C++test是一套经广泛验证的最佳编码实践的自动化处理方案,它能有效地提高软件开发团队的开发效率以及软件的质量。C++test能帮助用户执行 编码策略增强、静态代码分析、彻底代码走查以及单元和组件测试,从而为用户保证其C以及C++代码按预期运行提供一个实际可行的要领。C++test可以在桌面环境下的主流IDE(包括Wind River Workbench以及Eclipse)以及回归测试流程中的命令行中以批处理的方式运行。C++test集成了Parasoft的GRS报告系统,它能提供一个基于Web交互界面的报表并为用户提供向下挖掘(drill-down)功能,基于C++test报告的这些结果,开发团队实时把握项目状态和趋势以及其它关键指标。
对于嵌入式以及交叉开发而言,C++test可以在基于宿主环境和目标环境下执行代码分析以及数据流分析。在宿主环境中,开发者可以通过C++test的编码策略增强、静态代码分析、彻底代码走查以及单元和组件测试模块来对代码执行 “随时测试”式的验证以及回归测试。被测代码的外部依赖性被桩函数自动地取代,桩函数能真实地模拟硬件以及其它代码在实际运行中的表现。
图2:Wind River Workbench中的C++test插件能为其用户提供一个简便的要领来运用 C++test执行 完整的代码分析和单元测试。