C++ Test在自动控制软件中的应用
2015-03-07彬中国科学院长春光学精密机械与物理研究所吉林长春130033
张 彬中国科学院长春光学精密机械与物理研究所,吉林长春 130033
C++ Test在自动控制软件中的应用
张彬
中国科学院长春光学精密机械与物理研究所,吉林长春130033
摘要C++ Test作为一款优秀的软件测试工具已经成为软件测试行业工业标准,本论文讨论了C++ Test软件在自动控制算法设计上的应用,包括静态测试和动态测试。静态测试提出了自动控制算法比较实用的测试规则;动态测试以matlab产生算法正确的测试用例,并使用C++ Test动态测试与matlab产生的测试用例进行比较,从而验证自动控制算法的正确性。
关键词C++ Test;自动控制;软件
0 引言
软件测试技术是现代软件工程开发的质量保证的关键环节,自动控制软件开发具有其自身的特点,探索有效的自动控制软件测试方法具有非常重要的意义。一方面可以考察软件在出现频率较低极限条件下的行为,从而提高软件的可靠性;另一方面可以与自动控制行业公认的优秀软件算法如matlab进行比较,从而保证算法的准确和高效。
本论文建议将软件测试过程为算法验证和算法实现两个步骤:算法验证过程主要由算法设计工程师完成,以matlab为主要工具验证算法的有效性,将一个算例分成实验数据产生、计算、验证三部分。算法实现由软件工程师完成,将算法工程师给出的matlab数据通过C++实现代码产生结果数据,将这个结果数据与算法工程师提供的matlab计算结果数据进行对比。本文推荐的软件开发模型中不同角色的分工和职能,如 表1所示。
表1 本文推荐的软件开发模型
本论文在讨论C++Test静态和动态分析方法的基础上,以Kalman滤波算法为例子讨论了本文软件开发模型的应用。
1 动态测试方法
在软件生命周期的任何阶段,只要软件发生了改变就可能给软件带来问题,每当软件发生变化,就必须重新测试现有的功能,以便确定修改是否打到了预期的目的,检查修改是否损害了原有正常功能,还需要补充新的测试用例来测试新的功能,这就是软件动态测试方法。C++Test完全自动化完成软件所有步骤,它首次测试某个类时,自动保存其测试和测试参数。C++Test会自动运行完全相同的测试用例和测试参数,并告之发现的任何问题。这意味着你能够立即知道修改是否引入了任何错误。
C++动态测试首先要对待控制的仪器设备和计算机硬件环境,使用桩函数进行替代。桩函数是C++Test动态测试最重要的概念,提供被调用函数的占位,使得可以独立的进行动态测试而不依赖外部文件或函数。桩函数主要有两个用途,一是将正在测试的代码从集成环境中分离出来,二是在不影响函数行为,且需要使用替代实施的情况下进行测试。动态测试的基本步骤:
1)使用matlab产生标准的测试用例。
2)创建测试用例数据库:建议用文件形式输入数据并自动生成测试用例进行测试,如Excel, CVS等格式创建新的数据资源库。
3)创建新的测试用例,即导入期望的数据。
4)执行测试用例。
2 使用C++ Test算法测试实例
本文以kalman滤波算法为例用以说明使用C++Test的算法测试方法,完成算法工程师和软件工程师直接的接口工作,进行前期鲁邦性仿真单元测试,提供可靠的算法C++模块。
本文以自由落体条件下的仿真测试Kalman滤波算法。 首先使用matlab产生自由落体模型的运动速度和位置速度数据,加入一定的白噪声干扰,并使用maltab中标准kalman滤波算法得到输出。使用C++编写Kalman滤波算法。使用maltab的输入输出数据作为测试用例,对C++编写的滤波算法进行验证。图1中给出速度位置估计、速度位置绝对和相对误差,以及标准差的计算结果。图2是使用C++ Test进行软件动态测试的软件界面,C++ Test验证了malab标准算法与C++编写的Kalman滤波算法的一致性。
3 结论
本论文提出了一种自动控制软件算法测试的方法,首先使用matlab的算法功能验证,产生测试用例所需的输入输出数据,然后使用C++实现软件算法,并使用C++Test对matlab产生的测试用例进行软件动态测试,验证matlab标准算法与C++算法的一致性,从而达到自动控制算法验证的目的,该方法适用范围广,具有一定的指导意义。
参考文献
[1]C++ Test软件帮助文档.2006.
[2]方崇智,萧德云.过程辨识[M].北京:清华大学出版社,1998.
[3]Richar C.Dorf,Rober H.Bishop.现代控制理论[M].北京:高等教育出版社,2004.
中图分类号TP39
文献标识码A
文章编号1674-6708(2015)139-0102-01