【发布时间】:2015-08-27 07:30:30
【问题描述】:
Java Card 小程序中的一个典型错误是使用持久内存来存储本应在 RAM 中的临时变量。
这些错误会减慢小程序并导致一些严重的问题(例如Symptoms of EEPROM damage)。
单元测试很难发现这些错误。单元测试将小程序作为黑盒访问,它们所能做的就是检查给定输入的输出。当然,它们可以测量时间并报告异常缓慢的命令,但覆盖持久内存中的单个字节所花费的时间几乎与覆盖 RAM 中的单个字节所花费的时间相同。
有什么方法可以消除这些错误(除了在编码时要小心)?我能否以某种方式检测 EEPROM 更改以及在处理特定 APDU 时完成了多少?
当然,一个好的模拟器可以完成这项工作。但是,JCardSim (www.jcardsim.org) 和 NXP JCOP 工具似乎都无法报告 EEPROM 使用统计数据。
您知道任何其他可能对我有帮助的工具或测试技术吗?
【问题讨论】:
-
在模拟器中看到这将是一个有趣的功能。也就是说,我到现在都没见过。不过,我看不到所有竞争对手都在做什么 :)
-
@MaartenBodewes 我认为问题在于所有模拟器都将 Java Card 小程序用作普通 Java 对象,并带有替换的 Java Card 包(异常、JCSystem 等)。这就是为什么他们根本不关心 RAM/EEPROM,因为 Java 不知道这个问题。
-
这不是真的,我遇到的大多数模拟器实际上都实现了 Java Card 系统,包括 Java Card VM(除了它们通常使用不同的硬件采用层和可能不同的加密库)。 JCOP 当然不能在 Java RE 上运行。请注意,在涉及瞬态字节数组等方面,在 Java 中实现 Java Card 是很棘手的。
-
@MaartenBodewes 静态源代码分析呢?你听说过类似的 Java Card 吗?
-
我没听说过,但我确实有自己的独特想法:)
标签: unit-testing debugging simulation smartcard javacard