如何选择代码测试工具

                                                                     一、如何建立属于自己的代码测试框架                   


       如何在代码走查中选择合适的自动化工具,一直困扰着嵌入式软件工程师。在嵌入式软件中涉及大量的对齐、大小端以及临界资源保护等等,再加上实时性要求等,目前市面上可选的代码测试工具少之又少。目前适合嵌入式C代码静态测试的工具在国内能使用到的收费的有TESTBED、QAC、PCLINT,这些都支持MISRA98和MISRA04,但MISRA的规则是灵动的,不同的项目和平台的侧重也不一样,并不完全适用,这个时候就涉及到规则定制了。收费的工具在规则定制上肯定会遇到瓶颈(虽然都开放第三方的可定制的规则和协议),因为工具兼顾通用性,工具的生产商是不会单独为某个项目特征去更改分析器,就算同意修改,也需要担负高昂的设计成本。


        这样我们需要一个开源的分析工具,可以针对公司的代码规范和项目特点进行规则定制(首先规范要对比MISRA标准,是可行的,验证有效的,且规范的条款之间是互补而不是互斥的),这样在代码编写阶段(编码规范检查)和代码走查阶段(一旦项目代码达到一定量级,比如使用了OS\GUI\网络协议栈等等,且公司追逐硬件成本,需要经常移植更换平台,对代码编写人员的要求很高),可以利用定制的工具,帮助开发人员快速定位BUG,并且协助项目管理人员在代码模块提交时进行规范验证和管理。


        目前开源的C分析工具使用比较多的有Cppcheck、Splint、Valgrind,其中Cppcheck、Splint属于静态测试工具(只做语义分析,不运行),Valgrind是动态测试工具(编译且运行代码),cppcheck和Valgrind的侧重点是内存和资源泄漏,而splint较两种工具来说比较全面,这样对后期的规则定制可以少走点弯路,有一定的平台和基础可以搭建属于自己的测试架构。如果公司愿意投入,可以结合splint和valgrind打造一个静态和动态兼顾的测试架构,能覆盖到管理流程的所有阶段,因为valgrind支持覆盖率分析统计,这个是评价单元测试的有效手段。这个看似说起来容易,动起来难,因为splint是维吉尼亚大学和麻省理工联合制作的,而valgrind也是获得了第二届Google-O'Reilly开源代码奖的优秀产品,他们的定制都需要有丰富的C语言基础(都是C做的且都是百万级的代码量),且对主流的linux下的开源词法分析器有一定的了解,好了,大家止步了。


        在这里,笔者告诉大家,一切看起来难的东西都是纸老虎(老毛的名言)。为什么这么说,要知道,这些工具使用的词法分析器也是别人做的,他们也是借用了大量的素材,搭建了这个开源的测试框架,但不可否认他们对代码测试做出的贡献。但我们不应该害怕。后面作者会操刀分解splint和定制优化内存溢出分析实例来帮助读者了解这个工具。当然,文章内容为了通俗易懂且仅代表个人观点,难免会触怒工具的作者,在这里深表歉意。开源之路慢慢,需要大家的无私奉献。欢迎大家拍砖,今天写到这里。收工。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章