一种Java卡栈性能测试应用程序及其框架的制作方法

文档序号:6366126阅读:252来源:国知局
专利名称:一种Java卡栈性能测试应用程序及其框架的制作方法
技术领域
本发明涉及智能卡技术领域,尤其是涉及ー种Java卡栈性能测试应用程序及其框架的制作方法。
背景技术
近年来,Java智能卡以其良好的平台无关性、多应用的支持、良好的安全特性、面向对象的编程环境、应用开发的简易性、应用程序动态下载等优点,已经在社会生活的各个领域得到广泛的应用,在诸多领域有着广阔的应用前景。例如,国内地方金融银行卡业务发展十分迅速,全国220家发卡机构中有192家为地方金融机构,地方金融机构发卡量达3亿张,交易量占全国总量的五分之一左右。面对如此庞大的制卡系统,针对不同业务需求,选择合适的卡商对于决策者是ー个艰难的选择。Java卡的这种局势促使卡片开发者和卡片供应商越来越注重于对Java卡性能的测试。目前,市场上在Java卡运算、存取操作、稳定性、应用功能及基本安全等非物理性能的测试方面,多数采用PC/SC规范。PC/SC体系由三个主要部件组成操作系统、读写器(IFD)、智能卡(ICC)。在测试的具体实现上较为通用的方法是,用java编写能够体现Java卡某项性能的测试小应用程序(JavaCard Applet),经过java编译器编译生成class文件,再由J⑶K的转换器转为CAP文件,接着由卡外终端通过读卡器与Java卡连接,将JavaCardApplet安装到卡上,并发送一系列APDU命令对该Applet进行系统性测试,最后以卡内测试所耗时间作为Java卡性能指标。然而,由于JCVM的封装,Java卡开发者无法直接对ー张现成的卡片进行栈操作。若要测试Java卡栈性能,将会涉及JCVM字节码测试,比如在字节码级修改 JavaCard Applet。事实上,Java卡栈操作是其整体性能评估的重要指标,这就要求在Java卡性能评估中必须对其栈性能进行测试,而且是独立的精确测试。据了解,目前对JCVM字节码的可测性研究方面,还没有一种有效的标准的方法,能够准确区分一条指令用于CPU上的时间和用于栈操作的时间。

发明内容
针对上述技术缺陷,本发明提出ー种Java卡栈性能测试应用程序及其框架的制作方法。为了解决上述技术问题,本发明的技术方案如下—种Java卡栈性能测试应用程序的制作方法,包括如下步骤I)构建java语言编写的测试用源程序;2)在所述java源程序的基础上,添加循环体代码,通过编译、转换得到CAP文件;3)在所述CAP文件中定位“59 XX 01”的位置,然后向前定位“A5”的位置;4)根据JCVM字节码指令表将测试所需的栈操作相关的ニ进制代码添加入所述CAP文件中“ A5”和“59 XX 01”之间;、
所述XX为java源程序中循环变量在循环测试函数作用域中的定义序号。进ー步的,当所述CAP文件中“ 59 XX 01”的位置多余ー个时,判断位置前是否存在大量成规律性重复的字节码来实现定位。进ー步的,通过在循环体内添加多条运算赋值语句使得最终产生的CAP文件具有足够的编程空间,通过采用变量交替赋值的方 法,防止所述运算赋值语句被编译器优化。进ー步的,将所述CAP文件中“A5”和“59 XX 01”之间的区域的数据置为0,然后根据JCVM字节码指令表将测试所需的栈操作相关的ニ进制代码替换入所述CAP文件中“A5”和“59 XX 01”之间的0值,如果遇到测试空间不足吋,则通过在步骤2)中增加适当的循环体代码后重新编译、转换实现测试空间的増加;反之将多余的区域保持0值。本发明的有益效果在于本发明在字节码层面对JavaCard CAP文件进行修改,生成的特殊JavaCard Applet可用于对Java卡栈操作进行直接测试,解决了常规JavaCardApplet无法准确测试Java卡栈性能的问题,且保证了 Java卡栈性能测试结果的真实性。本发明提出ー个制作JavaCard Applet的框架,利用该框架能方便地制作用于Java卡栈性能测试的JavaCard Applet,提高了 Java卡栈性能测试的效率。在该框架中还能对栈操作指令进行多种组合,使测试具有多祥性。


图I是用于加法测试的java源程序基本结构图;图2是循环体代码在cap文件中的定位和制作框架示意图。
具体实施例方式下面将结合附图和具体实施例对本发明做进ー步的说明。图I指出了ー个以加法为基础的java源程序Sadd. java的基本结构,Sadd是ー个继承于Applet的JavaCard小应用程序子类,函数process ()负责处理APDU命令,当收到的命令类型为INS_SADD_TEST时,调用函数saddTest (),执行循环体代码的测试。该程序经过编译、转换后生成一个名为Sadd. cap的文件,本发明主要是对循环体代码在cap文件中的对应内容进行字节码指令修改,为了保证修改cap文件时不破坏文件的ニ进制结构,必须获得足够的编程空间。因此,在循环体内添加多条运算赋值语句(在本实施例中采用添加多条加法赋值语句进行说明)以致最终产生的cap文件具有足够的编程空间,同时为了防止这些java语句被编译器优化,采用3个变量交替赋值的方法使得每一条语句都依赖于它的前一句,将21至23行语句重复N遍,可得到3*N行java代码,然后对这个java进行编译转换,生成Sadd. cap。图2示意了 Sadd. java的基本结构的循环体代码在cap文件中的形式。ー个JavaCard CAP文件是ー个java源程序经过编译、转换而成的ニ进制流文件,内容为java源程序中java语句对应的JCVM字节码。可利用某些编辑软件(比如Hex Workshop)将cap文件打开查看在图2左边部分中,椭圆内的“59 05 01”对应图I的java源程序循环体代码for语句中的“i++” ;椭圆与粗边方框之间的所有字节码,对应java源程序中“a =(short) (b+c) ;b = (short) (a+c) ;c = (short) (b+c); ”三条语句反复编写而成的循环体代码;粗边方框内的“ A5 01 99”对应for语句中的if条件判断语句。当打开ー个CAP文件时,首先定位到“i++”对应的位置若java源程序中变量i的在循环测试函数作用域中的定义序号为XX(如图I的saddTest ()函数体中pN、a、b、c的定义序号分别为01、02、03、04,则i的定义序号为05),那么可用编辑软件提供的“查找”功能捜索“59 XX 01”,此时可看到“59 XX 01”前面为大量成规律性重复的字节码(如图2中的“IE IF 41 301D IF 41
31 IE IF 41 32 IE IF 41 30 ID IF 41 31 IE IF 41 32......”),可根据图右边部分中细
边方框内的“..AO. .Al. .A2. .AO. .Al. .A2........”较容易的进行人为主观判断。由于这
些字节码来自java源程序中循环测试语句的编译和转化,呈现的规律由测试语句的反复编写方法決定。一般“ 59 XX 01”只有ー处,如出现多个,可根据其前面是否存在大量成规律性重复的字节码来判断,如果存在则是要求确定的位置。然后由此处向前捜索“A5”可定位到“A5 XX XX”,此时,“A5 XXXX”与“59 XX 01”之间即为java源程序循环体代码在cap文件中相应部分。基于上述循环代码在CAP文件中的定位方法,本发明提出了ー个JavaCardApplet框架的制作方法,该制作框架由图2左边部分中的粗边方框内字节码、椭圆内字节码以及两者之间的所有字节码组成。其中粗边方框和椭圆之间即为java源程序中循环执行语句在CAP文件中对应的字节码,是体现Java卡某项性能测试的主要部分。将该字节码所占的区域空间作为ー个制作区,置该区域的数据为全0,对应的字节码为N0P,即空操作。然后可将测试所需的栈操作相关的ニ进制代码(可參照JCVM字节码指令表)填充至整个制作区空间,即可生成能进行栈性能测试的cap文件。若此框架的制作区空间不足时,可在java源程序循环体内增加适当的代码(比如在Sadd. java中循环体内增加加法语句),重新编译、转换,以生成合适的模板;反之,将多余空间保持零值。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明构思的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明保护范围内。
权利要求
1.ー种Java卡栈性能测试应用程序的制作方法,其特征在于,包括如下步骤 1)构建java语言编写的测试用源程序; 2)在所述java源程序的基础上,添加循环体代码,通过编译、转换得到CAP文件; 3)在所述CAP文件中定位“59 XX 01”的位置,然后向前定位“ A5”的位置; 4)根据JCVM字节码指令表将测试所需的栈操作相关的ニ进制代码添加入所述CAP文件中“ A5”和“59 XX 01”之间; 所述XX为java源程序中循环变量在循环测试函数作用域中的定义序号。
2.根据权利要求I所述的ー种Java卡栈性能测试应用程序的制作方法,其特征在干,当所述CAP文件中“59 XX 01”的位置多余ー个时,判断位置前是否存在大量成规律性重复的字节码来实现定位。
3.根据权利要求I所述的ー种Java卡栈性能测试应用程序的制作方法,其特征在干,通过在循环体内添加多条运算赋值语句使得最终产生的CAP文件具有足够的编程空间,通过采用变量交替赋值的方法,防止所述运算赋值语句被编译器优化。
4.根据权利要求I所述的ー种Java卡栈性能测试应用程序的框架制作方法,其特征在干,将所述CAP文件中“A5”和“59 XX 01”之间的区域的数据置为0,然后根据JCVM字节码指令表将测试所需的栈操作相关的ニ进制代码替换入所述CAP文件中“ A5”和“59 XX 01”之间的O值,如果遇到测试空间不足吋,则通过在步骤2)中增加适当的循环体代码后重新编译、转换实现测试空间的増加;反之将多余的区域保持O值。
全文摘要
本发明提出一种Java卡栈性能测试应用程序及其框架的制作方法通过构建java语言编写的测试用源程序;在所述java源程序的基础上,添加循环体代码,通过编译、转换得到CAP文件;在所述CAP文件中定位“59XX01”的位置,然后向前定位“A5”的位置;根据JCVM字节码指令表将测试所需的栈操作相关的二进制代码添加入所述CAP文件中“A5”和“59XX01”之间;所述XX为java源程序中循环变量在循环测试函数作用域中的定义序号,通过在字节码层面对JavaCardCAP文件进行修改,生成的特殊JavaCardApplet可用于对Java卡栈操作进行直接测试,解决了常规JavaCardApplet无法准确测试Java卡栈性能的问题,且保证了Java卡栈性能测试结果的真实性。
文档编号G06F11/22GK102662807SQ20121006455
公开日2012年9月12日 申请日期2012年3月13日 优先权日2012年3月13日
发明者张凌飞, 李莹, 殷中科 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1