[发明专利]检测软件代码复杂度的方法在审
申请号: | 201410470193.7 | 申请日: | 2014-09-15 |
公开(公告)号: | CN104239055A | 公开(公告)日: | 2014-12-24 |
发明(设计)人: | 田雨农;刘欣;苍柏 | 申请(专利权)人: | 大连楼兰科技股份有限公司 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 大连智高专利事务所(特殊普通合伙) 21235 | 代理人: | 李猛 |
地址: | 116025 辽宁省大连*** | 国省代码: | 辽宁;21 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 检测 软件 代码 复杂度 方法 | ||
技术领域
本发明涉及计算机领域,尤其涉及一种检测软件代码复杂度的方法。
背景技术
目前,目前在软件开发过程几乎都采用高级程序语言进行代码编写,而像C,C++,JAVA等高级序言无法实现对时间和空间的精准控制,所以调试阶段对代码的时间复杂度和空间复杂度没有一种行之有效的方法进行测定。
例如,在一种应用场景中,要求一段代码执行时间尽可能的短,目前只能尽量的在循环中使用do-while循环语句,避免使用for语句。但是使用do-while语句能将这段代码的时间缩短到多少,这种情况下会损失多少空间,则很难判断。
有鉴于上述的缺陷,本设计人,积极加以研究创新,以期创设一种检测软件代码复杂度的方法,使其更具有产业上的利用价值。
发明内容
为解决上述技术问题,本发明的目的是提供一种能够检测软件代码复杂度的方法。
本发明的检测软件代码复杂度的方法,包括:
从软件系统中提取需要测定复杂度的指定的代码段,将所述指定的代码段编辑成子函数,放入新的软件工程中,编译生成可执行文件,其中,所述复杂度包括时间复杂度或者空间复杂度;
利用得到的可执行文件进行逆向分析,对指定代码的可执行文件进行反汇编,获得所述软件系统的指定代码段复杂度。
进一步的,所述子函数具体为一个16位无符号的返回值和没有输入的函数。
进一步的,所述将所述指定的代码段编辑成子函数,放入新的软件工程 中,编译生成可执行文件具体为:新建一个支持微软基础类库MFC的工程,将所述指定的代码拷贝到所述支持MFC的工程中,编译后生成可执行程序。
进一步的,所述利用得到的可执行文件进行逆向分析,对指定代码的可执行文件进行反汇编,获得所述软件系统的指定代码段复杂度,具体包括:
将所述可执行文件导入到第三方软件中,将所述可执行文件进行反汇编,获得汇编代码,从所有的函数代码中查找获得一个没有调用操作系统接口函数的子函数,分析获得所述子函数的复杂度。
借由上述方案,本发明至少具有以下优点:
本发明通过逆向分析的技术确定特定代码段的时间复杂度和空间复杂度,使用这种技术可以直接面向编译器生成的最终代码进行分析,去除了编译器的优化功能对代码的影响,另外直接面向汇编语言分析,可以非常精确的分析这段代码的时间复杂度和空间复杂度。这种分析方法比面向高级程序语言分析具有精确性的优点,可以得出精确的数值,用来给客户或者程序开发者参考。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
图1为本发明检测软件代码复杂度的方法流程图;
图2为本发明实施例的待分析代码写入子函数后C++指令;
图3为本发明实施例的生成的可执行二进制文件;
图4为本发明实施例的可执行二进制文件导入IDAPRO之后弹出的界面;
图5为本发明实施例的调用操作系统接口函数的代码;
图6为本发明实施例的待分析的代码编译生成的机器码经反汇编之后生成的汇编代码;
图7为本发明实施例的汇编代码的图形结构图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。 以下实施例用于说明本发明,但不用来限制本发明的范围。
参见图1所示,一种检测软件代码复杂度的方法,包括:
步骤101:从整个软件系统中提取需要测定复杂度的代码段,编辑成子函数,放入新的软件系统中,编译生成可执行文件,这样做的目的是为了逆向分析中更加容易的找到指定的代码,其中复杂度包括时间复杂度或空间复杂度。
如图2所示有一段代码,分析一下这段代码的时间复杂度和空间复杂度。首先将这段代码编辑成子函数,如图2,子函数有一个16位无符号的返回值,没有输入,子函数名称为jiaoyan()。观察一下这段代码,有两个32字节的表格,一个8次的循环。之后选择一个编译器,本例使用的编译器是VC++6.0,新建了一个支持MFC的工程,将代码拷贝到工程中,编译连接之后生成后缀名为exe的可执行程序。如图3所示,生成的文件名为t123456.exe,是一个20K的文件。这个文件中的代码已经从C++语言变成了机器码,以便运行时电脑CPU解析执行。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于大连楼兰科技股份有限公司,未经大连楼兰科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410470193.7/2.html,转载请声明来源钻瓜专利网。