CN102662807A - 一种Java卡栈性能测试应用程序及其框架的制作方法 - Google Patents
一种Java卡栈性能测试应用程序及其框架的制作方法 Download PDFInfo
- Publication number
- CN102662807A CN102662807A CN2012100645534A CN201210064553A CN102662807A CN 102662807 A CN102662807 A CN 102662807A CN 2012100645534 A CN2012100645534 A CN 2012100645534A CN 201210064553 A CN201210064553 A CN 201210064553A CN 102662807 A CN102662807 A CN 102662807A
- Authority
- CN
- China
- Prior art keywords
- java
- test
- cap file
- java card
- card stack
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明提出一种Java卡栈性能测试应用程序及其框架的制作方法通过构建java语言编写的测试用源程序;在所述java源程序的基础上,添加循环体代码,通过编译、转换得到CAP文件;在所述CAP文件中定位“59XX01”的位置,然后向前定位“A5”的位置;根据JCVM字节码指令表将测试所需的栈操作相关的二进制代码添加入所述CAP文件中“A5”和“59XX01”之间;所述XX为java源程序中循环变量在循环测试函数作用域中的定义序号,通过在字节码层面对JavaCardCAP文件进行修改,生成的特殊JavaCardApplet可用于对Java卡栈操作进行直接测试,解决了常规JavaCardApplet无法准确测试Java卡栈性能的问题,且保证了Java卡栈性能测试结果的真实性。
Description
技术领域
本发明涉及智能卡技术领域,尤其是涉及一种Java卡栈性能测试应用程序及其框架的制作方法。
背景技术
近年来,Java智能卡以其良好的平台无关性、多应用的支持、良好的安全特性、面向对象的编程环境、应用开发的简易性、应用程序动态下载等优点,已经在社会生活的各个领域得到广泛的应用,在诸多领域有着广阔的应用前景。例如,国内地方金融银行卡业务发展十分迅速,全国220家发卡机构中有192家为地方金融机构,地方金融机构发卡量达3亿张,交易量占全国总量的五分之一左右。面对如此庞大的制卡系统,针对不同业务需求,选择合适的卡商对于决策者是一个艰难的选择。Java卡的这种局势促使卡片开发者和卡片供应商越来越注重于对Java卡性能的测试。
目前,市场上在Java卡运算、存取操作、稳定性、应用功能及基本安全等非物理性能的测试方面,多数采用PC/SC规范。PC/SC体系由三个主要部件组成:操作系统、读写器(IFD)、智能卡(ICC)。在测试的具体实现上较为通用的方法是,用java编写能够体现Java卡某项性能的测试小应用程序(JavaCardApplet),经过java编译器编译生成class文件,再由JCDK的转换器转为CAP文件,接着由卡外终端通过读卡器与Java卡连接,将JavaCard Applet安装到卡上,并发送一系列APDU命令对该Applet进行系统性测试,最后以卡内测试所耗时间作为Java卡性能指标。然而,由于JCVM的封装,Java卡开发者无法直接对一张现成的卡片进行栈操作。若要测试Java卡栈性能,将会涉及JCVM字节码测试,比如在字节码级修改JavaCard Applet。
事实上,Java卡栈操作是其整体性能评估的重要指标,这就要求在Java卡性能评估中必须对其栈性能进行测试,而且是独立的精确测试。据了解,目前对JCVM字节码的可测性研究方面,还没有一种有效的标准的方法,能够准确区分一条指令用于CPU上的时间和用于栈操作的时间。
发明内容
针对上述技术缺陷,本发明提出一种Java卡栈性能测试应用程序及其框架的制作方法。
为了解决上述技术问题,本发明的技术方案如下:
一种Java卡栈性能测试应用程序的制作方法,包括如下步骤:
1)构建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卡栈操作进行直接测试,解决了常规JavaCard Applet无法准确测试Java卡栈性能的问题,且保证了Java卡栈性能测试结果的真实性。本发明提出一个制作JavaCard Applet的框架,利用该框架能方便地制作用于Java卡栈性能测试的JavaCard Applet,提高了Java卡栈性能测试的效率。在该框架中还能对栈操作指令进行多种组合,使测试具有多样性。
附图说明
图1是用于加法测试的java源程序基本结构图;
图2是循环体代码在cap文件中的定位和制作框架示意图。
具体实施方式
下面将结合附图和具体实施例对本发明做进一步的说明。
图1指出了一个以加法为基础的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字节码。可利用某些编辑软件(比如HexWorkshop)将cap文件打开查看:在图2左边部分中,椭圆内的“59 05 01”对应图1的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(如图1的saddTest()函数体中pN、a、b、c的定义序号分别为01、02、03、04,则i的定义序号为05),那么可用编辑软件提供的“查找”功能搜索“59 XX 01”,此时可看到“59 XX 01”前面为大量成规律性重复的字节码(如图2中的“1E 1F 41 301D 1F 41 31 1E 1F 41 32 1E 1F 41 30 1D 1F 41 31 1E 1F 41 32……”),可根据图右边部分中细边方框内的“..A0..A1..A2..A0..A1..A2........”较容易的进行人为主观判断。由于这些字节码来自java源程序中循环测试语句的编译和转化,呈现的规律由测试语句的反复编写方法决定。一般“59 XX 01”只有一处,如出现多个,可根据其前面是否存在大量成规律性重复的字节码来判断,如果存在则是要求确定的位置。然后由此处向前搜索“A5”可定位到“A5 XX XX”,此时,“A5 XXXX”与“59 XX 01”之间即为java源程序循环体代码在cap文件中相应部分。
基于上述循环代码在CAP文件中的定位方法,本发明提出了一个JavaCardApplet框架的制作方法,该制作框架由图2左边部分中的粗边方框内字节码、椭圆内字节码以及两者之间的所有字节码组成。其中粗边方框和椭圆之间即为java源程序中循环执行语句在CAP文件中对应的字节码,是体现Java卡某项性能测试的主要部分。将该字节码所占的区域空间作为一个制作区,置该区域的数据为全0,对应的字节码为NOP,即空操作。然后可将测试所需的栈操作相关的二进制代码(可参照JCVM字节码指令表)填充至整个制作区空间,即可生成能进行栈性能测试的cap文件。若此框架的制作区空间不足时,可在java源程序循环体内增加适当的代码(比如在Sadd.java中循环体内增加加法语句),重新编译、转换,以生成合适的模板;反之,将多余空间保持零值。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明构思的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明保护范围内。
Claims (4)
1.一种Java卡栈性能测试应用程序的制作方法,其特征在于,包括如下步骤:
1)构建java语言编写的测试用源程序;
2)在所述java源程序的基础上,添加循环体代码,通过编译、转换得到CAP文件;
3)在所述CAP文件中定位“59 XX 01”的位置,然后向前定位“A5”的位置;
4)根据JCVM字节码指令表将测试所需的栈操作相关的二进制代码添加入所述CAP文件中“A5”和“59 XX 01”之间;
所述XX为java源程序中循环变量在循环测试函数作用域中的定义序号。
2.根据权利要求1所述的一种Java卡栈性能测试应用程序的制作方法,其特征在于,当所述CAP文件中“59 XX 01”的位置多余一个时,判断位置前是否存在大量成规律性重复的字节码来实现定位。
3.根据权利要求1所述的一种Java卡栈性能测试应用程序的制作方法,其特征在于,通过在循环体内添加多条运算赋值语句使得最终产生的CAP文件具有足够的编程空间,通过采用变量交替赋值的方法,防止所述运算赋值语句被编译器优化。
4.根据权利要求1所述的一种Java卡栈性能测试应用程序的框架制作方法,其特征在于,将所述CAP文件中“A5”和“59 XX 01”之间的区域的数据置为0,然后根据JCVM字节码指令表将测试所需的栈操作相关的二进制代码替换入所述CAP文件中“A5”和“59 XX 01”之间的0值,如果遇到测试空间不足时,则通过在步骤2)中增加适当的循环体代码后重新编译、转换实现测试空间的增加;反之将多余的区域保持0值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012100645534A CN102662807A (zh) | 2012-03-13 | 2012-03-13 | 一种Java卡栈性能测试应用程序及其框架的制作方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012100645534A CN102662807A (zh) | 2012-03-13 | 2012-03-13 | 一种Java卡栈性能测试应用程序及其框架的制作方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102662807A true CN102662807A (zh) | 2012-09-12 |
Family
ID=46772304
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012100645534A Pending CN102662807A (zh) | 2012-03-13 | 2012-03-13 | 一种Java卡栈性能测试应用程序及其框架的制作方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102662807A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649009A (zh) * | 2016-11-30 | 2017-05-10 | 北京中电华大电子设计有限责任公司 | 一种java卡字节码引用访问测试方法 |
CN106845225A (zh) * | 2016-12-20 | 2017-06-13 | 北京中电华大电子设计有限责任公司 | 一种java卡帧的边界检查方法 |
CN108875376A (zh) * | 2018-05-25 | 2018-11-23 | 北京中电华大电子设计有限责任公司 | 一种智能卡平台联合攻击的精准定位方法 |
CN109308263A (zh) * | 2018-09-29 | 2019-02-05 | 北京云测信息技术有限公司 | 一种小程序测试方法、装置及设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101976211A (zh) * | 2010-09-26 | 2011-02-16 | 北京握奇数据系统有限公司 | 一种在cap文件中替换函数的方法、装置及系统 |
US8065662B1 (en) * | 2007-03-30 | 2011-11-22 | Oracle America, Inc. | Compatibility testing of an application programming interface |
-
2012
- 2012-03-13 CN CN2012100645534A patent/CN102662807A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8065662B1 (en) * | 2007-03-30 | 2011-11-22 | Oracle America, Inc. | Compatibility testing of an application programming interface |
CN101976211A (zh) * | 2010-09-26 | 2011-02-16 | 北京握奇数据系统有限公司 | 一种在cap文件中替换函数的方法、装置及系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649009A (zh) * | 2016-11-30 | 2017-05-10 | 北京中电华大电子设计有限责任公司 | 一种java卡字节码引用访问测试方法 |
CN106845225A (zh) * | 2016-12-20 | 2017-06-13 | 北京中电华大电子设计有限责任公司 | 一种java卡帧的边界检查方法 |
CN108875376A (zh) * | 2018-05-25 | 2018-11-23 | 北京中电华大电子设计有限责任公司 | 一种智能卡平台联合攻击的精准定位方法 |
CN109308263A (zh) * | 2018-09-29 | 2019-02-05 | 北京云测信息技术有限公司 | 一种小程序测试方法、装置及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Stockhammer | Wage-led versus profit-led demand: what have we learned? A Kaleckian–Minskyan view | |
CN101601012B (zh) | 具有场景支持的面向生成器图的编程框架 | |
CN101589366B (zh) | 面向生成器图的编程框架中的并行化和植入 | |
CN109445842A (zh) | 规则生成方法、装置、计算机设备和存储介质 | |
CN101617292A (zh) | 面向生成器图形的编程和执行 | |
Lake et al. | Use of factor analysis to develop OOP software complexity metrics | |
CN107133174A (zh) | 测试用例代码自动生成装置与方法 | |
CN104035873A (zh) | 测试代码生成方法及生成装置 | |
CN110287002A (zh) | 一种以太坊虚拟机缺陷检测方法及系统 | |
CN101650652B (zh) | 一种业务流程开发的方法及装置 | |
CN102799529A (zh) | 一种动态的二进制代码测试用例生成方法 | |
CN103605606B (zh) | 一种可自动转换的嵌入式软件测试用例批量执行方法 | |
CN104268074A (zh) | 一种基于dcs系统应用软件在线调试方法 | |
CN102662807A (zh) | 一种Java卡栈性能测试应用程序及其框架的制作方法 | |
CN101814052A (zh) | 一种自动化测试的方法 | |
CN108415708A (zh) | 应用程序安装包大小的处理方法、装置、设备和存储介质 | |
CN104391731A (zh) | 一种基于c#的与数据类型无关的编辑方法 | |
CN110413507A (zh) | 系统测试方法、装置、计算机设备和存储介质 | |
CN110008119A (zh) | 报表测试方法、装置、计算机设备和存储介质 | |
CN100504761C (zh) | 在不同种类的体系结构中映射调试信息的方法 | |
CN108196937A (zh) | 字符串对象的处理方法、装置、计算机设备和存储介质 | |
Zaman et al. | Energy governance in resource-poor settings: The case of Bangladesh | |
Barbie et al. | Assessing aggregate tests of efficiency for dynamic economies | |
CN103049313B (zh) | 用于浏览器的标签关闭装置和方法 | |
US7716646B2 (en) | Loading a chain of processors from an XML file |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120912 |