CN110709814A - 程序代码生成装置和程序代码生成程序 - Google Patents
程序代码生成装置和程序代码生成程序 Download PDFInfo
- Publication number
- CN110709814A CN110709814A CN201780091246.6A CN201780091246A CN110709814A CN 110709814 A CN110709814 A CN 110709814A CN 201780091246 A CN201780091246 A CN 201780091246A CN 110709814 A CN110709814 A CN 110709814A
- Authority
- CN
- China
- Prior art keywords
- branch
- program
- program code
- branch destination
- order
- 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.)
- Withdrawn
Links
- 238000010586 diagram Methods 0.000 claims abstract description 34
- 238000000034 method Methods 0.000 claims description 76
- 230000008569 process Effects 0.000 claims description 41
- 230000001174 ascending effect Effects 0.000 claims description 2
- 238000006243 chemical reaction Methods 0.000 description 32
- 230000006399 behavior Effects 0.000 description 26
- 230000006870 function Effects 0.000 description 18
- 238000002347 injection Methods 0.000 description 14
- 239000007924 injection Substances 0.000 description 14
- 230000009471 action Effects 0.000 description 11
- 230000000694 effects Effects 0.000 description 10
- 230000002411 adverse Effects 0.000 description 4
- 230000009466 transformation Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
Abstract
分支要素确定部(110)根据示出多个程序要素和程序要素间的关系的模型图,确定分支的程序要素即分支要素。组确定部(120)根据所述模型图,按照所述分支要素的每个分支目的地确定构成分支目的地的一连串程序要素即分支目的地组。顺序决定部(130)决定各分支目的地组在所述程序代码中的排列顺序。代码生成部(140)根据所述模型图生成程序代码。程序代码按照各分支目的地组的排列顺序包含与各分支目的地组对应的代码。
Description
技术领域
本发明涉及用于自动生成程序代码的技术。
背景技术
存在根据事前生成的程序规格自动生成源代码这样的程序代码的方法。
例如,存在根据示出程序规格的模型图生成程序代码的方法。模型图由多个块和连接块之间的连接线构成。在各块中定义处理步骤的要素。具体而言,在各块中定义汇总的数据处理。在模型图中记述有从程序取得输入值到程序输出输出值为止的处理步骤、或从程序接收事件到程序完成与事件对应的处理为止的处理步骤。此外,在模型图中还记述有控制构造。
专利文献1公开有根据模型图生成程序代码的技术。
在专利文献1公开的技术中,在模型图的各块中事前设定值,在生成程序代码时,开发者选择在代码生成中重视的特性(代码尺寸或速度等),从相同的模型图输出特性不同的程序代码。
在专利文献2和专利文献3中公开有如下技术:将模型图与不适当的框图的图案进行比较,在模型图与不适当的模型图的图案一致的情况下,通知模型图不适当。
现有技术文献
专利文献
专利文献1:日本特开2006-301989号公报
专利文献2:日本特开2011-13887号公报
专利文献3:日本特开2016-57715号公报
发明内容
发明要解决的课题
存在针对硬件的攻击即故障注入攻击。
故障注入攻击是对硬件施加物理刺激等而产生意图的故障的攻击。通过故障注入攻击,能够进行躲避通过软件实现的安全对策的攻击。具体而言,通过故障注入攻击跳过程序命令。由此,程序的控制流程被变更,因此躲避安全对策。
根本地讲,仅安装软件无法防止故障注入攻击。
但是,需要即使控制流程被变更也不会陷入最差的事态。
另一方面,专利文献1、专利文献2和专利文献3中的任何文献公开的技术都没有考虑模型图所示的控制流程。因此,可认为通过这些技术生成的程序代码容易受到故障注入攻击。
本发明的目的在于,使得能够生成不容易受到故障注入攻击的程序代码。
用于解决课题的手段
本发明的程序代码生成装置具有:分支要素确定部,其根据示出多个程序要素和程序要素间的关系的模型图,确定分支的程序要素即分支要素;组确定部,其根据所述模型图,按照所述分支要素的每个分支目的地确定构成分支目的地的一连串程序要素即分支目的地组;以及顺序决定部,其决定各分支目的地组在程序代码中的排列顺序。
发明效果
根据本发明,能够决定各分支目的地组在程序代码中的排列顺序。因此,能够生成按照所决定的排列顺序包含与各分支目的地组对应的代码的程序代码。因此,能够生成不容易受到故障注入攻击的程序代码。
附图说明
图1是实施方式1中的程序代码生成装置100的结构图。
图2是实施方式1中的程序代码生成方法的流程图。
图3是示出实施方式1中的模型图200的具体例的图。
图4是示出实施方式1中的分支要素规则210的具体例的图。
图5是实施方式1中的分支目的地组的确定(S120)的流程图。
图6是实施方式1中的顺序决定处理(S140)的流程图。
图7是实施方式1中的代码生成处理(S150)的流程图。
图8是实施方式1中的代码转换规则220的结构图。
图9是示出实施方式1中的一般转换规则221的具体例的图。
图10是示出实施方式1中的块转换规则222的具体例的图。
图11是示出实施方式1中的行为转换规则223的具体例的图。
图12是示出实施方式1中的头文件230的具体例的图。
图13是示出实施方式1中的源文件240的具体例的图。
图14是实施方式1中的程序代码生成装置100的硬件结构图。
具体实施方式
在实施方式和附图中,对相同要素和对应要素标注相同标号。标注相同标号的要素的说明适当省略或简化。图中的箭头主要示出数据流或处理流。
实施方式1
根据图1~图13对自动生成程序代码的方式进行说明。
***结构的说明***
根据图1对程序代码生成装置100的结构进行说明。
程序代码生成装置100是具有处理器901、存储器902、辅助存储装置903、输入输出接口904这样的硬件的计算机。这些硬件经由信号线而相互连接。
处理器901是进行运算处理的IC(Integrated Circuit:集成电路),对其他硬件进行控制。例如,处理器901是CPU(Central Processing Unit:中央处理单元)、DSP(DigitalSignal Processor:数字信号处理器)或GPU(Graphics Processing Unit:图形处理单元)。
存储器902是易失性的存储装置。存储器902也被称作主存储装置或主存储器。例如,存储器902是RAM(Random Access Memory:随机存取存储器)。存储器902中存储的数据根据需要保存在辅助存储装置903中。
辅助存储装置903是非易失性的存储装置。例如,辅助存储装置903是ROM(ReadOnly Memory:只读存储器)、HDD(Hard Disk Drive:硬盘驱动器)或闪存。辅助存储装置903中存储的数据根据需要载入存储器902。
输入输出接口904是连接输入装置和输出装置的端口。例如,输入输出接口904是USB端子,输入装置是键盘和鼠标,输出装置是显示器。USB是Universal Serial Bus(通用串行总线)的简称。
程序代码生成装置100具有分支要素确定部110、组确定部120、顺序决定部130和代码生成部140这样的软件要素。软件要素是通过软件实现的要素。
在辅助存储装置903中存储有用于使计算机作为分支要素确定部110、组确定部120、顺序决定部130和代码生成部140发挥功能的程序代码生成程序。程序代码生成程序载入存储器902,由处理器901执行。
进而,在辅助存储装置903中存储有OS(Operating System:操作系统)。OS的至少一部分载入存储器902,由处理器901执行。
即,处理器901一边执行OS一边执行程序代码生成程序。
执行程序代码生成程序而得到的数据存储在存储器902、辅助存储装置903、处理器901内的寄存器或处理器901内的高速缓冲存储器这样的存储装置中。
辅助存储装置903作为存储数据的存储部191发挥功能。但是,其他存储装置也可以代替辅助存储装置903或与辅助存储装置903一起作为存储部191发挥功能。
输入输出接口904作为受理数据的输入的受理部192发挥功能。进而,输入输出接口904作为输出数据的输出部193发挥功能。
程序代码生成装置100也可以具有代替处理器901的多个处理器。多个处理器分担处理器901的作用。
程序代码生成程序能够以计算机能读取的方式存储在磁盘、光盘或闪存等非易失性的存储介质中。非易失性的存储介质是非暂时性的有形介质。
***动作的说明***
程序代码生成装置100的动作相当于程序代码生成方法。此外,程序代码生成方法的步骤相当于程序代码生成程序的步骤。
根据图2对程序代码生成方法进行说明。
在步骤S110中,受理部192受理模型图200。然后,存储部191将所受理的模型图200存储在存储部191中。
具体而言,利用者对程序代码生成装置100输入模型图200,受理部192受理输入到程序代码生成装置100的模型图200。然后,存储部191存储所受理的模型图200。
模型图200是示出执行程序的规格的数据,示出多个程序要素和程序要素间的关系。
程序要素是输入输出数据、控制和处理等构成执行程序的要素。
图3中示出模型图200的具体例。
模型图200包含多个处理块(B0~B8)、多个数据块(D1~D4)和多个引脚(P1~P6)。进而,模型图200包含将处理块、数据块和引脚相互连接起来的连接线。
处理块是示出数据处理或控制处理的程序要素。
数据块是示出输入输出数据的程序要素。
引脚是示出输入输出数据的属性的程序要素。
连接线是示出程序要素间的关系的有向线。在图3中,使用箭头作为连接线,箭头的方向示出步骤或数据流。
对各程序要素设定ID(Identifier:标识符)和名称。在程序代码生成方法的处理中使用ID。向利用者提示名称。对程序要素标注的标号(B0~B8、D1~D4和P1~P6)相当于程序要素的ID。
对处理块(B0~B8)设定类别、内容、属性信息和注释等内部数据。
处理块的类别标识数据处理或控制处理的种类。
例如存在开始、结束、行为调用、有效和决策等类别。
在处理块的类别中,开始意味着步骤的开始,结束意味着步骤的结束。
行为调用意味着行为的调用。行为是预定的处理,通过一个以上的命令来实现。具体而言,行为相当于函数。
有效意味着执行数据处理。
决策意味着执行控制处理。
处理块B0的类别是开始。即,处理块B0示出步骤的开始。
处理块B0的属性信息示出从处理块B0开始的步骤是函数的步骤。
进而,处理块B0的属性信息示出“函数”、返回值的类型“int”和自变量“int argc,char*argv[]”。“函数”意味着从处理块B0开始的步骤是函数的步骤。
处理块B1的类别是有效。即,处理块B1示出数据处理。处理块B1的内容示出具体的数据处理。
处理块B2的类别是行为调用。处理块B2的内容示出行为的名称“AuthUser”。即,处理块B2示出AuthUser这样的行为的调用。
处理块B3的类别是决策。处理块B3的内容示出分支条件“result==1”和2个分支目的地“B5”“B4”。即,处理块B3示出分支控制。满足分支条件“result==1”的情况下的分支目的地是处理块B5,不满足分支条件“result==1”的情况下的分支目的地是处理块B4。
处理块B4的类别是有效。即,处理块B4示出数据处理。处理块B4的内容示出具体的数据处理。
处理块B5的类别是有效。即,处理块B5示出数据处理。处理块B5的内容示出具体的数据处理。
处理块B6的类别是行为调用。处理块B6的内容示出行为的名称“ExecProgram”。即,处理块B6示出ExecProgram这样的行为的调用。
处理块B6的属性信息示出重要属性“重要处理”。即,处理块B6是重要的处理块。重要的处理块是示出重要处理的程序要素。
处理块B7的类别是结束。即,处理块B7示出步骤的结束。
处理块B7的属性信息示出返回值“1”。
处理块B8的类别是结束。即,处理块B8示出步骤的结束。
处理块B8的属性信息示出返回值“0”。
对数据块(D1~D4)设定数据名即变量名。
数据块D1示出从处理块B1输出且输入到处理块B2的数据“user_id”。
数据块D2示出从处理块B1输出且输入到处理块B2的数据“password”。
数据块D3示出从处理块B2输出的数据“result”。
数据块D4示出输入到处理块B6的数据“backup.exe”。
根据需要对引脚(P1~P6)设定数据属性。在图3中,“arg”意味着自变量,“ret”意味着返回值。
引脚P3示出数据“user_id”是针对行为“AuthUser”的第1自变量。
引脚P4示出数据“password”是针对行为“AuthUser”的第2自变量。
引脚P5示出数据“result”是来自行为“AuthUser”的返回值。
引脚P6示出数据“backup.exe”是针对行为“ExecProgram”的第1自变量。
模型图200以能够表现层级构造的数据形式进行记述。
例如,模型图200以XML或JSON等数据形式进行记述。XML是Extensible MarkupLanguage的简称。JSON是JavaScript Object Notation的简称。JavaScript是注册商标。
返回图2,对步骤S120进行说明。
在步骤S120中,分支要素确定部110根据模型图200确定分支要素。
分支要素是分支的程序要素。分支的程序要素是示出分支控制的程序要素。例如,分支要素是相当于C语言中的if语句和else语句的程序要素。
具体而言,分支要素确定部110根据各程序要素的类别确定分支要素。
分支要素确定部110使用分支要素规则210以确定分支要素。分支要素规则210是指定分支要素的类别的规则,预先存储在存储部191中。
分支要素确定部110判定为属于由分支要素规则210指定的类别的程序要素是分支要素。
图4中示出分支要素规则210的具体例。
分支要素规则210具有处理类别和规则值各自的栏。各个栏相互对应。
处理类别的栏示出处理类别。处理类别是处理块的类别。
规则值的栏示出处理类别是否是分支类别。分支类别是符合分支要素的处理块的类别。规则值“1”意味着处理类别是分支类别,规则值“0”意味着处理类别不是分支类别。
在图4中,分支类别是“决策”。
因此,分支要素确定部110判定为设定有类别“决策”的处理块是分支要素。
有时在属于“有效”或“行为调用”的处理块中进行分支处理。该情况下,需要分析程序以解释属于“有效”的处理块的记述。此外,需要从属于“行为调用”的处理块调用的行为的模型图。在实施方式中,省略分析程序和行为的模型图的说明。
分支要素规则210也可以通过自然语言和编程语言中的任意语言记述。
返回图2,继续说明步骤S120。
组确定部120根据模型图200,按照分支要素的每个分支目的地确定分支目的地组。分支目的地组是构成分支目的地的一连串程序要素。
根据图5对分支目的地组的确定(S120)进行说明。
在步骤S121中,分支要素确定部110从模型图200中选择一个未选择的处理块。
具体而言,分支要素确定部110从开始的处理块到结束的处理块追溯连接线,并且一个一个地选择处理块。
在步骤S122中,分支要素确定部110判定选择出的处理块是否是分支要素。
具体而言,分支要素确定部110如下所述进行动作。
首先,分支要素确定部110从选择出的处理块取得类别。
接着,分支要素确定部110从分支要素规则210选择与所取得的类别相同的处理类别。
接着,分支要素确定部110从分支要素规则210取得与选择出的处理类别对应的规则值。
然后,分支要素确定部110判定所取得的规则值是否是1。
在所取得的规则值是1的情况下,选择出的处理块是分支要素。
在选择出的处理块是分支要素的情况下,处理进入步骤S123。
在选择出的处理块不是分支要素的情况下,处理进入步骤S124。
在步骤S123中,组确定部120按照分支要素的每个分支目的地确定分支目的地组。
具体而言,组确定部120按照分支要素的每个分支目的地从分支目的地追溯连接线,并且确定一连串程序要素。
在图3的模型图200中,分支要素是处理块B3。
处理块B3的分支目的地是处理块B5和处理块B4。
从处理块B5追溯连接线而得到的一连串程序要素是处理块B5、处理块B6和处理块B8。因此,组确定部120确定处理块B5、处理块B6和处理块B8的组作为第1分支目的地组。
从处理块B4追溯连接线而得到的一连串程序要素是处理块B4和处理块B7。因此,组确定部120确定处理块B4和处理块B7的组作为第2分支目的地组。
返回图5,继续说明步骤S123。
组确定部120生成分支信息,存储部191存储分支信息。
分支信息是确定分支要素和各分支目的地组的信息。具体而言,确定分支要素的信息是分支要素的ID,确定分支目的地组的信息是构成分支目的地组的各程序要素的ID。
接着,对步骤S124进行说明。
在步骤S124中,分支要素确定部110判定是否存在未选择的处理块。
在存在未选择的处理块的情况下,处理进入步骤S121。
在不存在未选择的处理块的情况下,分支目的地组的确定(S120)结束。
通过分支目的地组的确定(S120),按照每个分支要素生成分支信息,各分支信息存储在存储部191中。
返回图2,从步骤S130起继续说明。
在步骤S130中,顺序决定部130判定是否根据模型图200确定了分支目的地组。
具体而言,顺序决定部130判定是否至少一个分支信息存储在存储部191中。在至少一个分支信息存储在存储部191中的情况下,顺序决定部130判定为根据模型图200确定了分支目的地组。
在根据模型图200确定了分支目的地组的情况下,处理进入步骤S140。
在未根据模型图200确定分支目的地组的情况下,处理进入步骤S150。
在步骤S140中,顺序决定部130决定各分支目的地组在程序代码中的排列顺序。
具体而言,顺序决定部130根据各分支目的地组是否包含具有重要属性的程序要素判定各分支目的地组的重要等级。然后,顺序决定部130根据各分支目的地组的重要等级决定各分支目的地组的排列顺序。
此外,顺序决定部130在所决定的排列顺序与由分支要素确定的排列顺序不同的情况下,以与所决定的排列顺序一致的方式变更分支要素。
根据图6对顺序决定处理(S140)的步骤进行说明。
在步骤S141中,顺序决定部130选择一个未选择的分支信息。
对在步骤S141中选择出的分支信息执行步骤S142~步骤S148的处理。
在步骤S142中,顺序决定部130从选择出的分支信息中选择一个未选择的分支目的地组。
对在步骤S142中选择出的分支目的地组执行步骤S143和步骤S144。
在步骤S143中,顺序决定部130判定选择出的分支目的地组的重要等级。
具体而言,顺序决定部130如下所述判定分支目的地组的重要等级。
顺序决定部130判定重要要素是否包含在分支目的地组中。重要要素是设定有重要属性的程序要素。
在重要要素包含在分支目的地组中的情况下,顺序决定部130对分支目的地组的要素数进行计数。分支目的地组的要素数是分支目的地组中包含的程序要素的数量。具体而言,分支目的地组的要素数是分支目的地组中包含的处理块的数量。分支目的地组的要素数被用作分支目的地组的重要等级。在图3中,处理块B5、处理块B6和处理块B8构成第1分支目的地组。第1分支目的地组包含设定有重要属性“重要处理”的处理块B6,包含3个处理块。因此,第1分支目的地组的重要等级是“3”。
在重要要素未包含在分支目的地组中的情况下,顺序决定部130设分支目的地组的重要等级为最低等级。具体而言,顺序决定部130设分支目的地组的重要等级为“0”。在图3中,处理块B4和处理块B7构成第2分支目的地组。第2分支目的地组不包含设定有重要属性“重要处理”的处理块。因此,第2分支目的地组的重要等级为“0”。
在步骤S144中,顺序决定部130判定是否存在未选择的分支目的地组。
在存在未选择的分支目的地组的情况下,处理进入步骤S142。
在不存在未选择的分支目的地组的情况下,处理进入步骤S145。
在步骤S145中,顺序决定部130对各分支目的地组的重要等级进行相互比较,由此判定各分支目的地组的重要等级是否不同。
但是,顺序决定部130将不包含重要要素的分支目的地组排除。即,顺序决定部130将包含重要要素的各分支目的地组作为对象进行比较和判定。
在各分支目的地组的重要等级不同的情况下即不存在具有相同重要等级的2个以上的分支目的地组的情况下,处理进入步骤S146。
在各分支目的地组的重要等级没有不同的情况下即存在具有相同重要等级的2个以上的分支目的地组的情况下,处理进入步骤S148。
在步骤S146中,顺序决定部130根据各分支目的地组的重要等级决定各分支目的地组的排列顺序。
具体而言,顺序决定部130按照重要等级的升序决定排列顺序。例如,在第1分支目的地组的重要等级为“3”且第2分支目的地组的重要等级为“0”的情况下,这些分支目的地组的排列顺序是“第2分支目的地组→第1分支目的地组”的顺序。
然后,顺序决定部130将各分支目的地组的排列顺序登记在分支信息中。
在步骤S147中,顺序决定部130在所决定的排列顺序与由分支要素确定的排列顺序不同的情况下,以与所决定的排列顺序一致的方式变更分支要素。
具体而言,顺序决定部130如下所述进行动作。
首先,顺序决定部130根据分支要素的内容所示的分支条件和2个以上的分支目的地,判定各分支目的地的排列顺序。
接着,顺序决定部130将各分支目的地的排列顺序与分支目的地组的排列顺序进行比较。
在各分支目的地的排列顺序与分支目的地组的排列顺序不同的情况下,顺序决定部130对分支要素的内容所示的分支条件进行变更。
在图3的模型图200中,分支要素是处理块B3。处理块B3的分支条件是“result==1”,满足分支条件的情况下的分支目的地是处理块B5,不满足分支条件的情况下的分支目的地是处理块B4。该情况下,分支目的地的排列顺序是“B5→B4”。在希望将该排列顺序变更成“B4→B5”的情况下,顺序决定部130将分支条件“result==1”变更成“result!=1”。
在步骤S148中,顺序决定部130生成错误消息,输出部193将错误消息显示在显示器上。
在针对一个分支要素存在具有相同重要等级的2个以上的分支目的地组的情况下,无法按照适当的顺序排列各分支目的地组。因此,显示错误消息。
在步骤S147之后,顺序决定处理(S140)结束。进而,不进行顺序决定处理(S140)之后的处理。即,不生成程序代码。
在步骤S149中,顺序决定部130判定是否存在未选择的分支信息。
在存在未选择的分支信息的情况下,处理进入步骤S141。
在不存在未选择的分支信息的情况下,顺序决定处理(S140)结束。
返回图2,对步骤S150进行说明。
在步骤S150中,代码生成部140根据模型图200生成程序代码。
程序代码按照各分支目的地组的排列顺序包含与各分支目的地组对应的代码。
根据图7对代码生成处理(S150)进行说明。
在步骤S151中,代码生成部140从存储部191读入模型图200、代码转换规则220和分支信息。
代码转换规则220是用于将模型图200转换成程序代码的规则,预先存储在存储部191中。
根据图8对代码转换规则220的结构进行说明。
代码转换规则220包含一般转换规则221、块转换规则222和行为转换规则223。
一般转换规则221是与模型图200的表现无关的一般的转换规则。
块转换规则222是与模型图200的表现有关的转换规则。
行为转换规则223是与对应于行为的函数有关的转换规则。
图9中示出一般转换规则221的具体例。
一般转换规则221具有项目和转换规则各自的栏。各个栏相互对应。
项目的栏指定程序要素。
转换规则的栏指定程序要素的名称。
例如,一般转换规则221指定使用模型图的文件名(扩展符除外)作为函数名。
图10中示出块转换规则222的具体例。
块转换规则222具有类别和转换规则各自的栏。各个栏相互对应。
类别的栏指定处理块的类别。
转换规则的栏指定记述与处理块对应的代码的方法。
例如,块转换规则222指定在具有类别“决策”的处理块中将内容所示的分支条件作为条件语句。具体而言,分支条件的记述成为if语句或while语句中设定的条件语句。
图11中示出行为转换规则223的具体例。
行为转换规则223具有名称、头、返回值和自变量各自的栏。各个栏相互对应。
名称的栏示出行为的名称。
头的栏指定定义与行为对应的函数的头。
返回值的栏指定与行为对应的函数的返回值。
自变量的栏指定与行为对应的函数的自变量。
一般转换规则221、块转换规则222和行为转换规则223的内容也可以通过自然语言和编程语言中的任意语言进行记述。
返回图7,对步骤S152进行说明。
在步骤S152中,代码生成部140根据模型图200、代码转换规则220和分支信息生成程序代码。程序代码使用编程语言进行记述。存储部191存储程序代码。
具体而言,代码生成部140如下所述进行动作。
首先,代码生成部140按照一般转换规则221(参照图9)生成头文件和源文件。头文件名是对模型图200的文件名(扩展符除外)附加扩展符“.h”而得到的名称。源文件名是对模型图200的文件名(扩展符除外)附加扩展符“.c”而得到的名称。在模型图200的文件名是“ExecBackup.mdl”的情况下,头文件名是“ExecBackup.h”,源文件名是“ExecBackup.c”。此外,源文件中记述的函数的名称是“ExecBackup”。
接着,代码生成部140在头文件中记述原型声明等。
然后,代码生成部140根据模型图200,在源文件中记述程序代码。此外,代码生成部140根据需要参照块转换规则222、行为转换规则223和分支信息。
图12中示出头文件230的具体例。
在头文件230中记述有程序代码231。
程序代码231是用于关于与模型图200对应的函数定义原型声明等的代码。程序代码231通过C语言进行记述。
图13中示出源文件240的具体例。
在源文件240中记述有程序代码241。
程序代码241是与模型图200对应的函数的代码。程序代码241通过C语言进行记述。
由虚线包围的部分是与分支要素和各分支目的地组对应的代码。模型图200(参照图3)中的分支条件“result==1”被变更成条件语句“result!=1”。然后,在与第2分支目的地组(B4和B7)对应的代码之后记述有针对第1分支目的地组(B5、B6和B8)的代码。
***实施方式1的效果***
程序代码生成装置100根据模型图200确定分支目的地组,以在确定的分支目的地组中更加重要的分支目的地组位于后方的方式生成程序代码。因此,生成不容易受到跳过与控制构造有关的命令的故障注入攻击导致的不良影响的程序代码。
因此,能够削减用于调查程序代码是否容易受到故障注入攻击导致的不良影响的劳力和时间。此外,能够削减用于对容易受到故障注入攻击导致的不良影响的部位进行修正的劳力和时间。
实施方式2
不是按照重要等级从低到高的顺序决定各分支目的地组的排列顺序,而是按照规定的顺序规则决定各分支目的地组的排列顺序,关于这种方式,主要对与实施方式1不同之处进行说明。
***结构的说明***
程序代码生成装置100的结构与实施方式1中的结构(参照图1)相同。
***动作的说明***
程序代码生成方法中的处理流程与实施方式1中的处理流程(参照图2)相同。
但是,在步骤S140中决定各分支目的地组的排列顺序的方法与实施方式1中的方法不同。
根据图6对顺序决定处理(S140)进行说明。
顺序决定处理(S140)的流程如在实施方式1中说明的那样。
但是,在步骤S146中决定各分支目的地组的排列顺序的方法与实施方式1中的方法不同。
在步骤S146中,顺序决定部130按照顺序规则决定各分支目的地组的排列顺序。顺序规则示出重要等级和顺序的关系。
根据程序的开发环境或程序的执行环境而存在多个顺序规则,多个顺序规则预先存储在存储部191中。
例如,按照编译程序的每个种类而存在顺序规则。该情况下,顺序决定部130选择与利用者指定的编译程序对应的顺序规则,按照选择出的顺序规则决定各分支目的地组的排列顺序。
例如,按照体系结构的每个种类而存在顺序规则。该情况下,顺序决定部130选择与利用者指定的体系结构对应的顺序规则,按照选择出的顺序规则决定各分支目的地组的排列顺序。
***实施方式2的效果***
程序代码生成装置100根据程序的开发环境或程序的执行环境,适当地决定各分支目的地组的排列顺序。
因此,生成不容易受到跳过与控制构造有关的命令的故障注入攻击导致的不良影响的程序代码。
因此,能够削减用于调查程序代码是否容易受到故障注入攻击导致的不良影响的劳力和时间。此外,能够削减用于对容易受到故障注入攻击导致的不良影响的部位进行修正的劳力和时间。
实施方式3
不是根据有无重要要素来判定各分支目的地组的重要等级,而是根据各分支目的地组中的程序要素的结构判定各分支目的地组的重要等级,关于这种方式,主要对与实施方式1不同之处进行说明。
***结构的说明***
程序代码生成装置100的结构与实施方式1中的结构(参照图1)相同。
***动作的说明***
程序代码生成方法中的处理流程与实施方式1中的处理流程(参照图2)相同。
但是,在步骤S140中决定各分支目的地组的排列顺序的方法与实施方式1中的方法不同。
根据图6对顺序决定处理(S140)进行说明。
顺序决定处理(S140)的流程如在实施方式1中说明的那样。
但是,在步骤S143中判定各分支目的地组的重要等级的方法与实施方式1中的方法不同。
在步骤S143中,顺序决定部130根据分支目的地组中的程序要素的结构判定分支目的地组的重要等级。
例如,顺序决定部130根据分支目的地组中包含的程序要素的数量判定分支目的地组的重要等级。程序要素的数量越多,则重要等级越高。
例如,顺序决定部130根据分支目的地组中包含的各程序要素判定结构的复杂度,根据结构的复杂度判定分支目的地组的重要等级。复杂度越高,则重要等级越高。
***实施方式3的效果***
模型图200的生成者不需要从模型图200中包含的程序要素中选择重要要素并对重要要素设定重要属性。
因此,能够削减用于生成模型图200的劳力和时间。
实施方式4
关于根据各分支目的地组中的各程序要素的内容判定各分支目的地组的重要等级的方式,主要对与实施方式1不同之处进行说明。
***结构的说明***
程序代码生成装置100的结构与实施方式1中的结构(参照图1)相同。
***动作的说明***
程序代码生成方法中的处理流程与实施方式1中的处理流程(参照图2)相同。
但是,在步骤S140中决定各分支目的地组的排列顺序的方法与实施方式1中的方法不同。
根据图6对顺序决定处理(S140)进行说明。
顺序决定处理(S140)的流程如在实施方式1中说明的那样。
但是,在步骤S143中判定各分支目的地组的重要等级的方法与实施方式1中的方法不同。
在步骤S143中,顺序决定部130根据分支目的地组中的各程序要素的内容判定分支目的地组的重要等级。
具体而言,确定重要要素的重要信息预先存储在存储部191中。然后,顺序决定部130根据由重要信息确定的重要要素是否包含在分支目的地组中,判定分支目的地组的重要等级。判定包含重要要素的分支目的地组的重要等级和不包含重要要素的分支目的地组的重要等级的方法与实施方式1中的方法相同。
在重要信息是“ExecProgram”的情况下,在图3的模型图200中,重要要素是处理块B6。因此,第1分支目的地组(B5、B6、B8)包含重要要素。另一方面,第2分支目的地组(B4、B7)不包含重要要素。
***实施方式4的效果***
模型图200的生成者不需要从模型图200中包含的程序要素中选择重要要素并对重要要素设定重要属性。
因此,能够削减用于生成模型图200的劳力和时间。
实施方式5
关于使利用者得知在模型图200中排列顺序被变更的部位的方式,主要对与实施方式1不同之处进行说明。
***结构的说明***
程序代码生成装置100的结构与实施方式1中的结构(参照图1)相同。
***动作的说明***
程序代码生成方法中的处理流程与实施方式1中的处理流程(参照图2)相同。
但是,在步骤S140中,使利用者得知在模型图200中排列顺序被变更的部位。
根据图6对顺序决定处理(S140)进行说明。
顺序决定处理(S140)的流程如在实施方式1中说明的那样。
但是,在步骤S147中,使利用者得知在模型图200中排列顺序被变更的部位。
在步骤S147中,顺序决定部130在所决定的排列顺序与由分支要素确定的排列顺序不同的情况下,以与所决定的排列顺序一致的方式变更分支要素。变更分支要素的方法如在实施方式1中说明的那样。
进而,在所决定的排列顺序与由分支要素确定的排列顺序不同的情况下,顺序决定部130将模型图200变更成强调分支要素的状态。然后,输出部193以强调分支要素的状态将模型图200显示在显示器上。
***实施方式5的效果***
利用者能够得知排列顺序被变更的部位而不用调查程序代码。
***实施方式的补充***
根据图14对程序代码生成装置100的硬件结构进行说明。
程序代码生成装置100具有处理电路990。
处理电路990是实现分支要素确定部110、组确定部120、顺序决定部130和代码生成部140的硬件。
处理电路990可以是专用硬件,也可以是执行存储器902中存储的程序的处理器901。
在处理电路990是专用硬件的情况下,处理电路990例如是单一电路、复合电路、程序化的处理器、并行程序化的处理器、ASIC、FPGA或它们的组合。
ASIC是Application Specific Integrated Circuit(面向特定用途的集成电路)的简称,FPGA是Field Programmable Gate Array(现场可编程门阵列)的简称。
程序代码生成装置100也可以具有代替处理电路990的多个处理电路。多个处理电路分担处理电路990的作用。
关于程序代码生成装置100的功能,也可以一部分由专用硬件实现,其余部分由软件或固件实现。
这样,处理电路990能够通过硬件、软件、固件或它们的组合来实现。
实施方式只是优选方式的例示,并不意图限制本发明的技术范围。实施方式可以部分地实施,也可以与其他方式组合实施。使用流程图等说明的步骤也可以适当变更。
标号说明
100:程序代码生成装置;110:分支要素确定部;120:组确定部;130:顺序决定部;140:代码生成部;191:存储部;192:受理部;193:输出部;200:模型图;210:分支要素规则;220:代码转换规则;221:一般转换规则;222:块转换规则;223:行为转换规则;230:头文件;231:程序代码;240:源文件;901:处理器;902:存储器;903:辅助存储装置;904:输入输出接口;990:处理电路。
Claims (12)
1.一种程序代码生成装置,其用于生成程序代码,所述程序代码生成装置具有:
分支要素确定部,其根据示出多个程序要素和程序要素间的关系的模型图,确定分支的程序要素即分支要素;
组确定部,其根据所述模型图,按照所述分支要素的每个分支目的地确定构成分支目的地的一连串程序要素即分支目的地组;以及
顺序决定部,其决定各分支目的地组在所述程序代码中的排列顺序。
2.根据权利要求1所述的程序代码生成装置,其中,
所述分支要素确定部根据各程序要素的类别确定所述分支要素。
3.根据权利要求2所述的程序代码生成装置,其中,
所述分支要素确定部使用指定所述分支要素的类别的分支要素规则,判定为属于由所述分支要素规则指定的类别的程序要素是所述分支要素。
4.根据权利要求1所述的程序代码生成装置,其中,
所述顺序决定部根据各分支目的地组是否包含具有重要属性的程序要素判定各分支目的地组的重要等级,根据各分支目的地组的重要等级决定各分支目的地组的所述排列顺序。
5.根据权利要求1所述的程序代码生成装置,其中,
所述顺序决定部根据各分支目的地组中的程序要素的结构判定各分支目的地组的重要等级,根据各分支目的地组的重要等级决定各分支目的地组的所述排列顺序。
6.根据权利要求1所述的程序代码生成装置,其中,
所述顺序决定部根据各分支目的地组中的各程序要素的内容判定各分支目的地组的重要等级,根据各分支目的地组的重要等级决定各分支目的地组的所述排列顺序。
7.根据权利要求4~6中的任意一项所述的程序代码生成装置,其中,
所述顺序决定部按照重要等级的升序决定所述排列顺序。
8.根据权利要求4~6中的任意一项所述的程序代码生成装置,其中,
所述顺序决定部按照指定重要等级与顺序的关系的顺序规则决定所述排列顺序。
9.根据权利要求4~8中的任意一项所述的程序代码生成装置,其中,
所述顺序决定部在所决定的所述排列顺序与由所述分支要素确定的排列顺序不同的情况下,以与所决定的所述排列顺序一致的方式变更所述分支要素。
10.根据权利要求1~9中的任意一项所述的程序代码生成装置,其中,
所述程序代码生成装置具有代码生成部,该代码生成部根据所述模型图生成所述程序代码,
所述程序代码按照各分支目的地组的所述排列顺序包含与各分支目的地组对应的代码。
11.根据权利要求1~10中的任意一项所述的程序代码生成装置,其中,
所述程序代码生成装置具有输出部,该输出部在所决定的所述排列顺序与由所述分支要素确定的排列顺序不同的情况下,以强调所述分支要素的状态显示所述模型图。
12.一种程序代码生成程序,其用于生成程序代码,所述程序代码生成程序用于使计算机执行以下处理:
分支要素确定处理,根据示出多个程序要素和程序要素间的关系的模型图,确定分支的程序要素即分支要素;
组确定处理,根据所述模型图,按照所述分支要素的每个分支目的地确定构成分支目的地的一连串程序要素即分支目的地组;以及
顺序决定处理,决定各分支目的地组在所述程序代码中的排列顺序。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2017/020664 WO2018220836A1 (ja) | 2017-06-02 | 2017-06-02 | プログラムコード生成装置およびプログラムコード生成プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110709814A true CN110709814A (zh) | 2020-01-17 |
Family
ID=64456183
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780091246.6A Withdrawn CN110709814A (zh) | 2017-06-02 | 2017-06-02 | 程序代码生成装置和程序代码生成程序 |
Country Status (6)
Country | Link |
---|---|
US (1) | US11137988B2 (zh) |
EP (1) | EP3640796A4 (zh) |
JP (1) | JP6602511B2 (zh) |
CN (1) | CN110709814A (zh) |
TW (1) | TWI658409B (zh) |
WO (1) | WO2018220836A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11675571B1 (en) * | 2021-12-28 | 2023-06-13 | Nb Ventures, Inc. | Restructuring enterprise application |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ATE141423T1 (de) * | 1988-09-20 | 1996-08-15 | Digital Equipment Corp | Anordnung zur teilung eines generischen kodes für ein digitales datenverarbeitungssystem |
US5187788A (en) * | 1989-05-01 | 1993-02-16 | The United States Of America As Represented By The Secretary Of The Air Force | Graphics system for automatic computer code generation |
JP3049561B2 (ja) * | 1990-05-21 | 2000-06-05 | 東洋通信機株式会社 | プロダクションシステムとプロダクションシステムの変換装置 |
JPH04326124A (ja) * | 1991-04-25 | 1992-11-16 | Casio Comput Co Ltd | フローチャート生成装置 |
JPH06314203A (ja) * | 1993-04-28 | 1994-11-08 | Fujitsu Ltd | コンパイラの最適化方法および装置 |
JP3254877B2 (ja) * | 1994-02-16 | 2002-02-12 | 松下電器産業株式会社 | 処理配置装置および方法 |
US6996799B1 (en) * | 2000-08-08 | 2006-02-07 | Mobilygen Corporation | Automatic code generation for integrated circuit design |
US7275079B2 (en) * | 2000-08-08 | 2007-09-25 | International Business Machines Corporation | Common application metamodel including C/C++ metamodel |
WO2002044835A2 (en) * | 2000-11-28 | 2002-06-06 | Gingerich Gregory L | A method and system for software and hardware multiplicity |
US7093238B2 (en) * | 2001-07-27 | 2006-08-15 | Accordsqa, Inc. | Automated software testing and validation system |
US7444622B2 (en) * | 2003-08-27 | 2008-10-28 | Microsoft Corporation | Access driven filtering |
JP4874440B2 (ja) | 2004-06-29 | 2012-02-15 | 株式会社デンソー | 状態とイベントの組にアクションを割り当てた対応情報に基づいてプログラムを生成するプログラム生成プログラム、プログラム生成装置、およびプログラム生成方法、ならびに、これらによって生成されるプログラム |
JP2006301989A (ja) | 2005-04-21 | 2006-11-02 | Fuji Electric Holdings Co Ltd | 計算機言語によるプログラムをブロック図から自動生成する方法と装置とプログラム |
CN1908892A (zh) | 2005-08-01 | 2007-02-07 | 王彤 | 测试用例设计方法和系统 |
JP2009009537A (ja) * | 2006-09-11 | 2009-01-15 | Renesas Technology Corp | プログラム作成方法及び情報処理装置ならびにマイコン |
JP2008064262A (ja) | 2006-09-11 | 2008-03-21 | Nissan Diesel Motor Co Ltd | 変速機の同期装置 |
JP2008140288A (ja) | 2006-12-05 | 2008-06-19 | Nomura Research Institute Ltd | プログラム実行システム |
CN102099781A (zh) * | 2009-05-19 | 2011-06-15 | 松下电器产业株式会社 | 分支预测装置、其分支预测方法、编译器、其编译方法及分支预测程序记录介质 |
JP2011013887A (ja) | 2009-07-01 | 2011-01-20 | Fuji Electric Systems Co Ltd | ソフトウェア開発支援装置 |
US20110088011A1 (en) * | 2009-10-14 | 2011-04-14 | Vermeg Sarl | Automated Enterprise Software Development |
CN102053825A (zh) * | 2009-10-30 | 2011-05-11 | 国际商业机器公司 | 用于处理软件设计冲突的方法和系统 |
US8943487B2 (en) | 2011-01-20 | 2015-01-27 | Fujitsu Limited | Optimizing libraries for validating C++ programs using symbolic execution |
CN103377411A (zh) * | 2012-04-27 | 2013-10-30 | 国际商业机器公司 | 用于生成wbs模型数据的方法和系统 |
US9588956B2 (en) | 2013-07-12 | 2017-03-07 | Ab Initio Technology Llc | Parser generation |
CN103425584B (zh) * | 2013-08-27 | 2016-01-13 | 上海复深蓝信息技术有限公司 | 基于Java字节码的大型应用回归测试信息处理方法 |
WO2015087409A1 (ja) * | 2013-12-11 | 2015-06-18 | 株式会社日立製作所 | ソースコード生成装置、ソースコード証明装置、ソースコード生成方法、およびソースコード生成プログラム |
JP2016057715A (ja) | 2014-09-05 | 2016-04-21 | 富士電機株式会社 | 図形式プログラム解析装置 |
-
2017
- 2017-06-02 JP JP2019521912A patent/JP6602511B2/ja not_active Expired - Fee Related
- 2017-06-02 US US16/500,483 patent/US11137988B2/en active Active
- 2017-06-02 WO PCT/JP2017/020664 patent/WO2018220836A1/ja unknown
- 2017-06-02 CN CN201780091246.6A patent/CN110709814A/zh not_active Withdrawn
- 2017-06-02 EP EP17911723.9A patent/EP3640796A4/en not_active Ceased
- 2017-07-12 TW TW106123305A patent/TWI658409B/zh not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
TW201903603A (zh) | 2019-01-16 |
JPWO2018220836A1 (ja) | 2019-11-07 |
US11137988B2 (en) | 2021-10-05 |
EP3640796A4 (en) | 2020-06-03 |
US20210109723A1 (en) | 2021-04-15 |
WO2018220836A1 (ja) | 2018-12-06 |
EP3640796A1 (en) | 2020-04-22 |
JP6602511B2 (ja) | 2019-11-06 |
TWI658409B (zh) | 2019-05-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102608500B1 (ko) | 블록체인 컴파일러 | |
US20170235661A1 (en) | Integration of Software Systems via Incremental Verification | |
US20070266378A1 (en) | Source code generation method, apparatus, and program | |
US20200225921A1 (en) | Lookup table optimization for programming languages that target synchronous digital circuits | |
CN110569628B (zh) | 一种代码的混淆方法以及装置、计算机设备、存储介质 | |
CN104536812B (zh) | 一种基于LabVIEW的动态链接库的调用方法 | |
US20170300305A1 (en) | Executable guidance experiences based on implicitly generated guidance models | |
JP5176478B2 (ja) | データフロー解析装置、データフロー解析方法およびデータフロー解析プログラム | |
CN108197020A (zh) | 插件校验方法、电子设备及计算机存储介质 | |
Niemetz et al. | Towards satisfiability modulo parametric bit-vectors | |
JP6567212B2 (ja) | 等価性検証装置および等価性検証プログラム | |
US20110099439A1 (en) | Automatic diverse software generation for use in high integrity systems | |
CN110709814A (zh) | 程序代码生成装置和程序代码生成程序 | |
Luckow et al. | Symbolic pathfinder v7 | |
CN111126012B (zh) | 定制生成表达式方法及装置 | |
US10776255B1 (en) | Automatic verification of optimization of high level constructs using test vectors | |
WO2016189721A1 (ja) | ソースコード評価装置及びソースコード評価方法及びソースコード評価プログラム | |
CN111488558A (zh) | 脚本保护方法、装置、计算机可读存储介质和计算机设备 | |
KR101731629B1 (ko) | Circus로부터 go 코드를 자동으로 생성하는 방법 및 장치 | |
An et al. | A Validation Methodology for OCaml-to-PVS Translation | |
US20230086862A1 (en) | Program generation apparatus, program generation method and program | |
Fehmel et al. | Automatic State Space Analysis for Modeling Untrusted Embedded Device Drivers | |
Roio | The Zencode Whitepaper | |
Milanesi et al. | Printing on the Terminal | |
CN114003492A (zh) | 需求测试一体化生成方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20200117 |
|
WW01 | Invention patent application withdrawn after publication |