[发明专利]一种驱动程序的代码覆盖率测量方法及装置有效
申请号: | 201510093730.5 | 申请日: | 2015-03-02 |
公开(公告)号: | CN104699605B | 公开(公告)日: | 2017-11-17 |
发明(设计)人: | 胡事民;白家驹;刘虎球 | 申请(专利权)人: | 清华大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京路浩知识产权代理有限公司11002 | 代理人: | 李相雨 |
地址: | 100084 北京市海*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 驱动程序 代码 覆盖率 测量方法 装置 | ||
技术领域
本发明涉及软件测试技术领域,特别涉及一种驱动程序的代码覆盖率测量方法及装置。
背景技术
驱动程序是操作系统内核的重要组成部分,是计算机系统与外围硬件通信的桥梁。但是由于设备运行的偶发故障,以及驱动开发者使用内核接口不当等问题,驱动程序中往往存在大量的安全隐患。例如Linux操作系统中驱动程序引发的错误占已报告错误的50%左右。同时很多无效或者低效的指令操作会降低驱动程序的实际性能。因此,驱动程序需要进行完善的调试和测试,来找到代码中的安全和性能缺陷。
在对驱动程序进行调试和测试过程中,很重要的一项指标是程序的代码覆盖率。该项指标可以准确定量地衡量驱动测试过程的有效性,帮助测试人员更好地掌握驱动程序的运行情况。但是,常用的程序代码覆盖率测量方法是基于插装技术实现的,而Linux驱动程序往往使用GCC编译器进行编译链接,该编译器很难支持代码插装。此外,驱动程序用来进行系统与设备的交互,对性能要求较高,因此代码覆盖率测量方法的使用不应带来太大的性能开销。同时,常用的人工注入代码的方法虽然能很好地记录运行时信息,但是工作量很大。
发明内容
为降低代码覆盖率测量的工作量及性能开销,本发明提供了一种驱动程序的代码覆盖率测量方法,所述方法包括:
S1:对待测试驱动程序的源代码进行编译,以获得中间代码,对所述中间代码中的各基本块添加标号,并对所述中间代码中的各基本块插装传递函数;
S2:对插装传递函数后的中间代码进行编译,生成可加载的目标文件;
S3:对所述目标文件进行加载,以运行所述待测试驱动程序;通过所述传递函数获取当前运行的基本块的标号,将获取的标号记录到日志文件中;
S4:根据所述日志文件中基本块的标号确定所述待测试驱动程序的代码覆盖率。
其中,步骤S1具体包括:
S101:修改所述待测试驱动程序的Makefile文件,对待测试驱动程序的源代码进行编译,以获得中间代码;
S102:对所述中间代码中的各基本块按顺序添加标号,记录各基本块的指令数目,并在各基本块的开始处插装传递函数;
S103:对所述中间代码进行扫描,以获得所述待测试驱动程序的指令总数。
其中,步骤S2具体包括:
S201:对所述插装传递函数后的中间代码进行编译,以生成汇编文件;
S202:对所述汇编文件进行编译,以生成可加载的目标文件。
其中,步骤S3具体包括:
S301:对所述目标文件进行加载,以运行所述待测试驱动程序;通过所述传递函数获取当前运行的基本块的标号,将所述获取的标号存储至内存缓冲区;
S302:当所述内存缓冲区存满时,将所述内存缓冲区中的标号记录到日志文件中。
其中,步骤S4具体包括:
S401:去除所述日志文件中重复的标号;
S402:根据所述日志文件中剩余的标号以及对应基本块的指令数目计算所述待测试驱动程序中运行过的指令总数;
S403:基于所述待测试驱动程序中运行过的指令总数以及所述待测试驱动程序的指令总数计算所述待测试驱动程序的代码覆盖率。
本发明还公开了一种驱动程序的代码覆盖率测量装置,所述装置包括:
标识器,用于对待测试驱动程序的源代码进行编译,以获得中间代码,对所述中间代码中的各基本块添加标号,并对所述中间代码中的各基本块插装传递函数,对插装传递函数后的中间代码进行编译,生成可加载的目标文件;
记录器,用于对所述目标文件进行加载,以运行所述待测试驱动程序,通过所述传递函数获取当前运行的基本块的标号,将获取的标号记录到日志文件中;
分析器,用于根据所述日志文件中基本块的标号确定所述待测试驱动程序的代码覆盖率。
其中,所述标识器进一步用于修改所述待测试驱动程序的Makefile文件,对待测试驱动程序的源代码进行编译,以获得中间代码;对所述中间代码中的各基本块按顺序添加标号,记录各基本块的指令数目,并在各基本块的开始处插装传递函数;对所述中间代码进行扫描,以获得所述待测试驱动程序的指令总数。
其中,所述标识器进一步用于对所述插装传递函数后的中间代码进行编译,以生成汇编文件;对所述汇编文件进行编译,以生成可加载的目标文件。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于清华大学,未经清华大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510093730.5/2.html,转载请声明来源钻瓜专利网。