(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-15
(45)【発行日】2024-04-23
(54)【発明の名称】ソフトウェア開発装置およびソフトウェア開発プログラム
(51)【国際特許分類】
G06F 8/41 20180101AFI20240416BHJP
G05B 19/042 20060101ALI20240416BHJP
【FI】
G06F8/41 170
G05B19/042
(21)【出願番号】P 2019103138
(22)【出願日】2019-05-31
【審査請求日】2022-05-24
(73)【特許権者】
【識別番号】514318600
【氏名又は名称】コネクトフリー株式会社
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】帝都 久利寿
【審査官】金沢 史明
(56)【参考文献】
【文献】特開2006-285582(JP,A)
【文献】特開2013-140513(JP,A)
【文献】特開2007-122631(JP,A)
【文献】米国特許出願公開第2016/0147511(US,A1)
【文献】米国特許出願公開第2017/0315903(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/44
G06F 8/30, 8/41, 8/75
G05B 19/042
(57)【特許請求の範囲】
【請求項1】
ソフトウェア開発装置であって、
ソースコードに含まれる制約の内容を指定する制約コードを抽出する処理と、
前記ソースコードのうち前記制約コードにより指定される制約が適用される範囲である第1のスコープを決定する処理と、
前記ソースコードのうち前記第1のスコープに関連付けられた範囲である第2のスコープを決定する処理と、
前記第1のスコープに適用される制約と前記第2のスコープに適用される制約とを
決定する処理と、
前記第1のスコープおよび前記第2のスコープのソースコードが前記
決定される制約に適合するか否かを評価する処理とを実行し、
前記
決定される制約は、オブジェクトコードが実行時に利用するリソースに対する制限あるいは規則、前記オブジェクトコードの実行状態に対する制限あるいは規則、前記オブジェクトコードの実行手順に対する制限あるいは規則、ならびに、前記ソースコードに含まれる命令に対する制限あるいは規則のうち、いずれか1つを含む、ソフトウェア開発装置。
【請求項2】
前記ソースコードから前記オブジェクトコードを生成する処理を実行する、請求項1に記載のソフトウェア開発装置。
【請求項3】
前記ソースコードが前記制約に適合していないと評価すると、前記オブジェクトコードの生成を中止する、請求項2に記載のソフトウェア開発装置。
【請求項4】
前記第1のスコープのソースコードが呼び出し命令を含む場合に、当該呼び出し命令により呼び出される命令に対応する範囲が前記第2のスコープとして決定される、請求項1~3のいずれか1項に記載のソフトウェア開発装置。
【請求項5】
ソフトウェア開発プログラムであって、前記ソフトウェア開発プログラムはコンピュータに、
ソースコードに含まれる制約を指定する制約コードを抽出するステップと、
前記ソースコードのうち前記制約コードにより指定される制約が適用される範囲である第1のスコープを決定するステップと、
前記ソースコードのうち前記第1のスコープに関連付けられた範囲である第2のスコープを決定するステップと、
前記第1のスコープに適用される制約と前記第2のスコープに適用される制約とを
決定するステップとを実行させ、
前記第1のスコープおよび前記第2のスコープのソースコードが前記
決定される制約に適合するか否かを評価する処理とを実行し、
前記
決定される制約は、オブジェクトコードが実行時に利用するリソースに対する制限あるいは規則、前記オブジェクトコードの実行状態に対する制限あるいは規則、前記オブジェクトコードの実行手順に対する制限あるいは規則、ならびに、前記ソースコードに含まれる命令に対する制限あるいは規則のうち、いずれか1つを含む、ソフトウェア開発プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ソフトウェア開発装置およびソフトウェア開発プログラムに関する。
【背景技術】
【0002】
近年の情報通信技術(Information and Communication Technology:ICT)の進歩は目覚ましく、インターネットなどのネットワークに接続されるデバイスは、従来のパーソナルコンピュータやスマートフォンといった情報処理装置に限らず、様々なモノ(things)に広がっている。このような技術トレンドは、「IoT(Internet of Things;モノのインターネット)」と称され、様々な技術およびサービスが提案および実用化されつつある。将来的には、地球上の数十億人と数百億または数兆のデバイスとが同時につながる世界が想定されている。このようなネットワーク化された世界を実現するためには、よりシンプル、より安全、より自由につながることができるソリューションを提供する必要がある。
【0003】
IoTで利用されるデバイス(「エッジデバイス」とも称される。)のインテリジェント化に伴って、様々な種類のプログラムの作成が必要となっている。一方で、対象となるデバイスで利用可能なリソースは、パーソナルコンピュータなどに比較して制限されたものとなることが多い。
【0004】
利用可能なリソースを考慮してプログラムを作成する方法の一例として、特開2004-038956号公報は、様々なコンピューティングデバイスで利用可能なコンピューティングリソースを発見し示すための、またこうしたリソースをソフトウェアアプリケーションによってアドレス指定可能なサービスとして露出するためのシステムを開示する。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
エッジデバイスで実行されるプログラムを作成するにあたっては、利用可能なリソースおよびセキュリティの観点から様々な点を考慮する必要がある。しかしながら、上記特許文献1は、対象のコンピューティングデバイスで利用可能なコンピューティングリソースを考慮してプログラムを作成することに着目するにすぎず、プログラムの作成にあたって、様々な点を考慮しなければならないといった課題に対するソリューションを提供するものではない。
【課題を解決するための手段】
【0007】
本開示のある形態に従えば、ソースコードからオブジェクトコードを生成するソフトウェア開発装置が提供される。ソフトウェア開発装置は、ソースコードに設定される制約を抽出し、当該抽出した制約の適用範囲において、当該ソースコードが当該制約に適合しているか否かを評価する評価手段と、制約に適合するようにオブジェクトコードを生成する生成手段とを含む。
【0008】
生成手段は、制約の適用範囲において、ソースコードが制約に適合していないと評価されると、オブジェクトコードの生成を中止するようにしてもよい。
【0009】
生成手段は、制約の適用範囲において、ソースコードが制約に適合しているか否かを評価できない場合に、ソースコードに対応するオブジェクトコードに加えて、当該オブジェクトコードの実行中に、当該制約に適合しているか否かを評価するための別のオブジェクトコードを生成するようにしてもよい。
【0010】
制約は、オブジェクトコードが実行時に利用するリソースに対する制限あるいは規則、オブジェクトコードの実行状態に対する制限あるいは規則、オブジェクトコードの実行手順に対する制限あるいは規則、ならびに、ソースコードに含まれる命令に対する制限あるいは規則のうち、いずれか1つを含んでいてもよい。
【0011】
評価手段は、制約の適用範囲に呼び出し命令が含まれる場合に、当該呼び出し命令により呼び出される命令についても、制約に適合しているか否かを評価するようにしてもよい。
【0012】
本開示の別の形態に従えば、ソースコードからオブジェクトコードを生成するソフトウェア開発プログラムが提供される。ソフトウェア開発プログラムはコンピュータに、ソースコードに設定される制約を抽出し、当該抽出した制約の適用範囲において、当該ソースコードが当該制約に適合しているか否かを評価するステップと、制約に適合するようにオブジェクトコードを生成するステップとを実行させる。
【発明の効果】
【0013】
本開示によれば、エッジデバイスなどで実行されるプログラムに対して、様々な制約を自在に設定できる環境を提供できる。
【図面の簡単な説明】
【0014】
【
図1】本実施の形態に従うIoTシステムの全体構成の一例を示す模式図である。
【
図2】本実施の形態に従うソフトウェア開発装置のハードウェア構成例を示す模式図である。
【
図3】本実施の形態に従うコントローラのハードウェア構成例を示す模式図である。
【
図4】本実施の形態に従うソフトウェア開発装置において設定可能な制約について説明するための図である。
【
図5】本実施の形態に従うソフトウェア開発装置において設定可能な制約のスコープについて説明するための図である。
【
図6】本実施の形態に従うソフトウェア開発装置において設定可能な制約の適合を実行時に判断しなければならない場合について説明するための図である。
【
図7】本実施の形態に従うソフトウェア開発装置が提供する機能構成を示すブロック図である。
【
図8】本実施の形態に従うソフトウェア開発装置における呼び出しに対する制約への適合を実現する方法を説明するための図である。
【
図9】本実施の形態に従うソフトウェア開発装置におけるソースコードからオブジェクトコードを生成する処理手順を示すフローチャートである。
【
図10】本実施の形態に従うソフトウェア開発装置が提供するユーザインターフェイス画面の一例を示す図である。
【発明を実施するための形態】
【0015】
本開示に係る実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
【0016】
以下の説明においては、典型例として、本実施の形態に従うソフトウェア開発装置100をIoTシステムに適用した場合について説明するが、本開示はIoTシステムに限らず任意のシステムおよびコントローラに適用可能である。
【0017】
<A.IoTシステム1>
まず、本実施の形態に従うソフトウェア開発装置100およびエッジデバイス2を含むIoTシステム1の全体構成について説明する。
【0018】
図1は、本実施の形態に従うIoTシステム1の全体構成の一例を示す模式図である。
図1を参照して、IoTシステム1においては、典型的には、ソフトウェア開発装置100においてエッジデバイス2で実行されるプログラム(オブジェクトコード)が生成される。生成されたプログラムは、ソフトウェア開発装置100からエッジデバイス2に含まれるコントローラ200へ転送される。
【0019】
ソフトウェア開発装置100には、統合開発環境(IDE:Integrated Development Environment)が提供されており、ユーザは統合開発環境上で任意のプログラムを作成できる。すなわち、ソフトウェア開発装置100は、ユーザが任意に作成するソースコードからオブジェクトコードを生成する。
【0020】
エッジデバイス2としては、どのようなデバイスであってもよいが、典型的には、工場設備、家庭内の各種装置、社会インフラ設備、車両などの移動体、任意の携帯デバイスなどが想定される。後述するように、コントローラ200は、プロセッサを有しており、ソフトウェア開発装置100からのプログラムを実行可能になっている。
【0021】
IoTシステム1における処理手順の一例について説明する。まず、ユーザがソフトウェア開発装置100を用いてソースコードを作成する((1)ソースコード作成)。そして、作成されたソースコードは、ソフトウェア開発装置100においてコンパイルされ、オブジェクトコードが生成される((2)オブジェクトコード生成)。生成されたオブジェクトコードは、エッジデバイス2のコントローラ200へ転送される((3)オブジェクトコード転送)。転送されたオブジェクトコードは、コントローラ200で実行される((4)オブジェクトコード実行)。
【0022】
このような手順によって、ソフトウェア開発装置100において開発された任意のプログラムをコントローラ200において実行させることができる。
【0023】
後述するように、本実施の形態に従うソフトウェア開発装置100は、コントローラ200で実行されるプログラムに対して、様々な制約を自在に設定できる環境を提供する。典型的には、プログラムが実行されるコントローラ200が有しているリソース、エッジデバイス2の種類および用途、実行されるプログラムの重要性および確保すべきセキュリティなどに応じて、プログラムに対して様々な制約を任意に設定できる。このような制約の設定によって、限られたリソースを利用したアプリケーションの実現や、アプリケーションの意図しない挙動の防止などを実現できる。
【0024】
<B.ハードウェア構成例>
次に、本実施の形態に従うIoTシステム1に含まれるデバイスのハードウェア構成例について説明する。
【0025】
(b1:ソフトウェア開発装置100)
ソフトウェア開発装置100は、典型的には汎用コンピュータで実現される。
【0026】
図2は、本実施の形態に従うソフトウェア開発装置100のハードウェア構成例を示す模式図である。
図2を参照して、ソフトウェア開発装置100は、主たるコンポーネントとして、プロセッサ102と、メインメモリ104と、入力部106と、ディスプレイ108と、ハードディスク110と、通信インターフェイス122とを含む。これらのコンポーネントは、内部バス120を介して接続されている。
【0027】
プロセッサ102は、例えば、CPU(Central Processing Unit)やGPU(Graphics Processing Unit)などで構成される。複数のプロセッサ102が配置されてもよいし、複数のコアを有するプロセッサ102を採用してもよい。
【0028】
メインメモリ104は、DRAM(Dynamic Random Access Memory)やSRAM(Static Random Access Memory)などの揮発性記憶装置で構成される。ハードディスク110は、プロセッサ102で実行される各種プログラムや各種データを保持する。なお、ハードディスク110に代えて、SSD(Solid State Drive)やフラッシュメモリなどの不揮発性記憶装置を採用してもよい。ハードディスク110に格納されたプログラムのうち、指定されたプログラムがメインメモリ104上に展開され、プロセッサ102は、メインメモリ104上に展開されたプログラムに含まれるコンピュータ可読命令(computer-readable instructions)を順次実行することで、後述するような各種機能を実現する。
【0029】
典型的には、ハードディスク110には、ユーザが任意に作成するソースコード112と、統合開発環境を実現するためのソフトウェア開発プログラム114と、ソースコード112から生成されるオブジェクトコード116とが格納される。ソフトウェア開発プログラム114は、ユーザが任意に作成するソースコード112からオブジェクトコード116を生成するものであり、プログラムの開発環境を提供するモジュールを含む。
【0030】
入力部106は、ソフトウェア開発装置100を操作するユーザの入力操作を受け付ける。入力部106は、例えば、キーボード、マウス、表示デバイス上に配置されたタッチパネル、ソフトウェア開発装置100の筐体に配置された操作ボタンなどであってもよい。
【0031】
ディスプレイ108は、プロセッサ102での処理結果などを表示する。ディスプレイ108は、例えば、LCD(Liquid Crystal Display)や有機EL(Electro-Luminescence)ディスプレイなどであってもよい。
【0032】
通信インターフェイス122は、コントローラ200とのデータ交換を担当する。通信インターフェイス122は、例えば、USB(Universal Serial Bus)ポート、IEEE1394などのシリアルポート、レガシーなパラレルポートといった有線接続端子を含む。あるいは、通信インターフェイス122は、イーサネット(登録商標)ポートを含んでいてもよい。
【0033】
なお、ソフトウェア開発装置100の全部または一部は、コンピュータ可読命令に相当する回路が組み込まれたASIC(Application Specific Integrated Circuit)などのハードワイヤード回路を用いて実現してもよい。さらにあるいは、FPGA(field-programmable gate array)上にコンピュータ可読命令に相当する回路を用いて実現してもよい。また、プロセッサ102およびメインメモリ、ASIC、FPGAなどを適宜組み合わせて実現してもよい。
【0034】
ソフトウェア開発装置100は、コンピュータ可読命令を含むソフトウェア開発プログラム114を格納する非一過性(non-transitory)のメディアから、当該格納しているプログラムなどを読み出すためのコンポーネントをさらに有していてもよい。メディアは、例えば、DVD(Digital Versatile Disc)などの光学メディア、USBメモリなどの半導体メディアなどであってもよい。
【0035】
なお、ソフトウェア開発プログラム114は、メディアを介してソフトウェア開発装置100にインストールされるだけではなく、ネットワーク上の配信サーバから提供されるようにしてもよい。
【0036】
(b2:コントローラ200)
コントローラ200は、汎用コンピュータを用いて実現してもよいし、処理を実現するために必要なコンポーネントを含む半導体基板を用いて実現してもよい。
【0037】
図3は、本実施の形態に従うコントローラ200のハードウェア構成例を示す模式図である。
図3を参照して、コントローラ200は、主たるコンポーネントとして、演算処理部210と、無線通信モジュール212と、USBコントローラ214と、通信コントローラ216と、1または複数のパッド220と電気的に接続されたIOドライバ218とを含む。
【0038】
演算処理部210は、プログラムを実行する演算部であり、主たるコンポーネントとして、プロセッサ202と、メインメモリ204と、フラッシュメモリ206とを含む。プロセッサ202は、例えば、CPUやGPUなどで構成される。複数のプロセッサ202が配置されてもよいし、複数のコアを有するプロセッサ202を採用してもよい。メインメモリ204は、DRAMやSRAMなどの揮発性記憶装置で構成される。フラッシュメモリ206は、プロセッサ202で実行されるプログラムや必要なデータを保持する不揮発性記憶装置である。フラッシュメモリ206に格納されたプログラムのうち、指定されたプログラムがメインメモリ204上に展開されて、プロセッサ202により実行されることで、各種機能が実現される。
【0039】
無線通信モジュール212は、他の任意のデバイスとの間の無線によるデータ交換を担当する。無線通信モジュール212は、デバイス、ルータ、移動体基地局などと無線通信するための処理回路およびアンテナなどを含んでもよい。無線通信モジュール212が対応する無線通信は、例えば、Wi-Fi(登録商標)、Bluetooth(登録商標)、ZigBee(登録商標)、LPWA(Low Power Wide Area)、GSM(登録商標)、W-CDMA、CDMA200、LTE(Long Term Evolution)、第5世代移動通信システム(5G)のいずれであってもよい。
【0040】
USBコントローラ214は、ソフトウェア開発装置100とのデータ交換を担当する。通信コントローラ216は、他の任意のデバイスとの間の有線によるデータ交換を担当する。通信コントローラ216は、例えば、シリアル通信、パラレル通信、GPIO(General-purpose input/output)などの公知のデータ交換方式に対応するようにしてもよい。
【0041】
IOドライバ218は、パッド220を介して電気的に接続された任意のデバイスとの間の電気信号の遣り取りを担当する。IOドライバ218は、演算処理部210からの指令に従って電気信号を出力する。また、IOドライバ218は、パッド220を介して与えられる電気信号を検知し、その検知結果を演算処理部210へ出力する。より具体的には、IOドライバ218は、信号生成回路、信号検知回路、バッファ回路などで構成される。
【0042】
コントローラ200は、図示しないバッテリからの電力により駆動されてもよい。
<C.制約>
次に、本実施の形態に従うソフトウェア開発装置100において設定可能な制約について説明する。
【0043】
本明細書において、「制約」は、ソースコード112から生成されるオブジェクトコード116(アセンブラコード)の実行において遵守すべき規則を包含する。「制約」としては、オブジェクトコード116が実行時に利用するリソースに対する制限あるいは規則、オブジェクトコード116の実行状態に対する制限あるいは規則、オブジェクトコード116の実行手順に対する制限あるいは規則、ならびに、ソースコード112に含まれる命令に対する制限あるいは規則などを含み得る。
【0044】
図4は、本実施の形態に従うソフトウェア開発装置100において設定可能な制約について説明するための図である。
図4(A)に示すソースコード112は、予め定義されたファンクションfn1()により決定される出力値を指定されたアドレスに書き込むためのコード例である。
【0045】
より具体的には、ソースコード112は、出力値変数の定義1121と、出力値変数の定義1121とを含む。ファンクションfn1()の戻り値が出力値OutValueにセットされる(命令1123)。そして、出力値OutValueの値がアドレス「0x1000」に書き込まれる(命令1124)。
【0046】
図4(A)に示すソースコード112に対して、制約コード1125を追加することで、制約を設定できる。
図4(B)に示すソースコード112においては、アクセス可能なメモリ範囲を指定するための制約コード1125が追加されている。例えば、「$allowedAddressRange = 0x0000 ... 0x0FFF」は、「0x0000」~「0x0FFF」のアドレスに対してのみアクセスが可能であることを意味する。
【0047】
このような制約が設定された場合において、出力値OutValueの値をアドレス「0x1000」に書き込むための命令1124は、制約に適合しないことになる。すなわち、命令1124は実行不可となる。
【0048】
図4(B)に示すような制約コード1125は、例えば、コントローラ200において、「0x0000」~「0x0FFF」のメモリ範囲はノンセキュア領域として設定されており、「0x1000」~「0x1FFF」のメモリ範囲はセキュア領域として設定されているような場合に有効である。
【0049】
制約に適合しない命令の実行を禁止する典型的な手法として、(1)ソースコード112からオブジェクトコード116を生成する過程において判断する方法、および、(2)オブジェクトコード116の生成時に判断する方法が想定される。(1)の方法については、プリプロセッサ、コンパイラ、オプティマイザなどのオブジェクトコード116を生成するための機能が制約への適合を評価する。一方、(2)の方法については、ソースコード112から生成されるオブジェクトコード116に加えて、制約への適合を評価するためのオブジェクトコード(以下、「適合評価用オブジェクトコード」とも称す。)を生成するようにしてもよい。適合評価用オブジェクトコード118は、オブジェクトコード116の一部に組み込まれてもよいし、オブジェクトコード116とは独立して存在してもよい。このような実装例の詳細については後述する。
【0050】
次に、本実施の形態に従う制約の適用範囲(以下、「スコープ」とも称す。)について説明する。
【0051】
図4(B)に示すように、基本的には、制約コード1125の記述に引き続く部分に対して、制約コード1125に規定された制約が適用される。すなわち、制約コード1125の記述に引き続く部分が制約のスコープとなる。この制約のスコープの終了位置は、任意に設定できるが、基本的には、制約コード1125を含むカッコの範囲内を制約のスコープとすることができる。
【0052】
また、プロシージャやファンクションが呼び出された場合には、それらの呼び出されたプロシージャやファンクションについても制約のスコープとしてもよい。
【0053】
図5は、本実施の形態に従うソフトウェア開発装置100において設定可能な制約のスコープについて説明するための図である。
図5に示すように、ファンクションfn1()を呼び出して、ファンクションfn1()の戻り値を出力値OutValueにセットするという命令1123については、呼び出されるファンクションfn1()の部分ソースコード1126についても制約のスコープに含まれるようにしてもよい。
【0054】
このように、ソフトウェア開発装置100は、制約のスコープに呼び出し命令が含まれる場合に、当該呼び出し命令により呼び出される命令(プロシージャやファンクション)についても、制約に適合しているか否かを評価する。このような制約のスコープを順次継承することで、呼び出されるプロシージャやファンクションを規定するソースコードについても制約への適合を評価することで、制約を確実に遵守できる。
【0055】
図6は、本実施の形態に従うソフトウェア開発装置100において設定可能な制約の適合を実行時に判断しなければならない場合について説明するための図である。
図6(A)には、
図4(B)に示すソースコード112と同様のソースコード112を示す。
図6(A)に示すソースコード112においては、出力値OutValueの値を書き込むアドレスが「0x1000」に固定されており(命令1124)、ソースコード112を語句解析および構文解析することで、制約に適合していないと評価できる。
【0056】
これに対して、
図6(B)に示すソースコード112は、出力値OutValueの値を書き込むアドレスは出力アドレス初期値IniPtrを用いて決定されるので、書き込むアドレスをソースコード112の解析だけでは一意に決定できない。
【0057】
より具体的には、
図6(B)に示すソースコード112においては、出力アドレス初期値変数の定義1127に加えて、出力アドレス初期値IniPtrを決定する処理1128が規定されている。そして、出力アドレスOutAddrsは、出力アドレス初期値IniPtrに「0F00」を加算して決定することを規定する出力アドレスを決定する命令1129がソースコード112に規定されている。そして、出力値OutValueの値が出力アドレスOutAddrsにより示されるアドレスに書き込まれる(命令1130)。
【0058】
図6(B)に示されるソースコード112においては、出力アドレスOutAddrsの値は、出力アドレス初期値IniPtrの値に依存することになり、対応するオブジェクトコード116が実行される時点で、動的に決定されることになる。
【0059】
本実施の形態に従うソフトウェア開発装置100は、対応するオブジェクトコード116の実行中においても、制約への適合を評価できる仕組みを提供する(詳細については後述する)。
【0060】
<D.制約の種類>
本実施の形態に従う制約としては、以下のような種類のものを採用してもよい。
【0061】
【0062】
【0063】
上述したような制約は、典型的には、オブジェクトコード116が実行時に利用するリソースに対する制限あるいは規則、オブジェクトコード116の実行状態に対する制限あるいは規則、オブジェクトコード116の実行手順に対する制限あるいは規則、ならびに、ソースコード112に含まれる命令に対する制限あるいは規則などを含み得る。
【0064】
なお、上表に示す制約コードのすべてを実装する必要はなく、要求される仕様に応じてその一部のみを実装するようにしてもよい。また、上表に示す制約コード以外の制約コードを採用してもよい。
【0065】
<E.制約への適合を評価する仕組み>
次に、本実施の形態に従うソフトウェア開発装置100が制約への適合を評価する仕組みの一例について説明する。
【0066】
図7は、本実施の形態に従うソフトウェア開発装置100が提供する機能構成を示すブロック図である。
図7に示す各機能は、典型的には、ソフトウェア開発装置100のプロセッサ102がソフトウェア開発プログラム114を実行することで実現される。
【0067】
図7を参照して、ソフトウェア開発プログラム114は、ソースコード112の入力を受けて、オブジェクトコード116(アセンブラコード)を生成する。より具体的には、ソフトウェア開発プログラム114は、プリプロセッサ1141と、コンパイラ1142と、オプティマイザ1143と、コードジェネレータ1144とを含む。
【0068】
プリプロセッサ1141は、ソースコード112に対する語句解析および構文解析を実行するとともに、コンパイラ1142、オプティマイザ1143およびコードジェネレータ1144の挙動を制御する。
【0069】
コンパイラ1142は、ソースコード112に対する語句解析および構文解析の結果に基づいて、オブジェクトコードに生成する。オプティマイザ1143は、生成されたオブジェクトコードを最適化する。コードジェネレータ1144は、オプティマイザ1143による最適化の結果に基づいて、最終的なオブジェクトコード116を出力する。
【0070】
上述した制約への適合を評価するにあたって、プリプロセッサ1141、コンパイラ1142およびオプティマイザ1143は、ソースコード112に規定された制約を抽出するとともに、抽出した制約への適合を評価する(ステップS1)。なお、設定された制約の内容に応じて、オプティマイザ1143がオブジェクトコードを修正するようにしてもよい。このように、ソフトウェア開発装置100は、ソースコード112に設定される制約を抽出し、当該抽出した制約のスコープにおいて、当該ソースコード112が当該制約に適合しているか否かを評価する。
【0071】
コードジェネレータ1144は、抽出した制約への適合をオブジェクトコード116の実行時でなければ評価できない場合に、制約への適合を評価するためのアセンブラコードである適合評価用オブジェクトコード118を生成する(ステップS2)。
【0072】
このように、ソフトウェア開発装置100は、制約に適合するようにオブジェクトコード116を生成する。
【0073】
図8は、本実施の形態に従うソフトウェア開発装置100における呼び出しに対する制約への適合を実現する方法を説明するための図である。
図8に示す処理は、ソフトウェア開発プログラム114により提供されてもよいし、オブジェクトコード116の実行時に適合評価用オブジェクトコード118により提供されてもよい。
【0074】
図8を参照して、呼び出し元のプロシージャに設定された制約スコープ(以下、「親スコープ」とも称す。)を示すデータセット150が生成される。親スコープのデータセット150は、変数、制約、プロシージャなどの情報を含む。親スコープのデータセット150に対応付けて、管理オブジェクト152も生成される。
【0075】
呼び出し先のプロシージャに継承されるべき制約スコープ(以下、「子スコープ」とも称す。)を示すデータセット154は、親スコープのデータセット150に関連付けられる。子スコープのデータセット154に対応付けて、管理オブジェクト156も生成される。
【0076】
例えば、プロシージャやファンクションが呼び出されると、親スコープのデータセット150に関連付けられる管理オブジェクト152が参照される(ステップS11)。そして、親スコープのデータセット150に基づいて子スコープのデータセット154が生成される(ステップS12)。子スコープのデータセット154から管理オブジェクト152への参照(ステップS13)に応答して、管理オブジェクト152から管理オブジェクト156が生成される(ステップS14)。生成された管理オブジェクト156は、子スコープのデータセット154と関連付けられる(ステップS15)。
【0077】
このような一連の処理が繰り返されることで、プロシージャやファンクションが呼び出しに応じて、設定された制約のスコープが継承される。
【0078】
<F.処理手順>
次に、本実施の形態に従うソフトウェア開発装置100におけるソースコードからオブジェクトコードを生成する処理手順について説明する。
【0079】
図9は、本実施の形態に従うソフトウェア開発装置100におけるソースコードからオブジェクトコードを生成する処理手順を示すフローチャートである。
図9に示す各ステップは、典型的には、プロセッサ102がソフトウェア開発プログラム114を実行することで実現される。
【0080】
図9を参照して、ソフトウェア開発装置100は、入力されたソースコード112に対して語句解析および構文解析を実行する(ステップS100)。ソフトウェア開発装置100は、解析結果に基づいて、制約が設定されているか否かを判断する(ステップS102)。すなわち、ソフトウェア開発装置100は、ソースコード112に設定される制約を抽出し、当該抽出した制約のスコープにおいて、ソースコード112が当該制約に適合しているか否かを評価する。ここで、制約が設定されていなければ(ステップS102においてNO)、途中のステップがスキップされて、ステップS118以下の処理が実行される。
【0081】
制約が設定されていれば(ステップS102においてYES)、ソフトウェア開発装置100は、設定されている制約のうち1つを選択し(ステップS104)、選択された制約のスコープに含まれるソースコードが当該制約に適合するか否かを判断する(ステップS106)。
【0082】
選択された制約のスコープに含まれるソースコードのうち当該制約に適合しない部分があれば(ステップS106においてNO)、ソフトウェア開発装置100は、制約に適合しない旨のメッセージを出力し(ステップS108)、オブジェクトコード116を生成する処理を中断する(ステップS110)。そして、処理は終了する。このように、ソフトウェア開発装置100は、制約のスコープにおいてソースコード112が当該制約に適合していないと評価されると、オブジェクトコード116の生成を中止する。
【0083】
図10は、本実施の形態に従うソフトウェア開発装置100が提供するユーザインターフェイス画面の一例を示す図である。
図10を参照して、ユーザインターフェイス画面300は、ソースコードを作成するための編集領域302と、編集領域302において作成されたソースコードのコンパイルを開始するためのコンパイルボタン304と、エラーメッセージを表示するためのメッセージ表示領域306とを含む。制約に適合しない旨のメッセージは、メッセージ表示領域306に表示されてもよい。
【0084】
再度
図9を参照して、選択された制約のスコープに含まれるソースコードが当該制約に適合するか否かを判断できなければ(ステップS106において「不明」)、ソフトウェア開発装置100は、ソースコードが当該制約に適合するか否かを判断できない部分をマークする(ステップS112)。そして、処理はステップS114へ進む。
【0085】
選択された制約のスコープに含まれるすべてのソースコードが当該制約に適合していれば(ステップS106においてYES)、ソフトウェア開発装置100は、設定されているすべての制約についての評価が完了したか否かを判断する(ステップS114)。設定されている制約のうち評価が完了していないものが残っていれば(ステップS114においてNO)、ソフトウェア開発装置100は、未評価の制約のうち1つを選択し(ステップS116)、ステップS106以下の処理を実行する。
【0086】
設定されているすべての制約についての評価が完了していれば(ステップS114においてYES)、ソフトウェア開発装置100は、オブジェクトコード116を生成する(ステップS118)。
【0087】
続いて、ソフトウェア開発装置100は、ソースコードが当該制約に適合するか否かを判断できない部分がマークされているか否かを判断する(ステップS120)。すなわち、上述のステップS112においていずれかの部分がマークされているか否かが判断される。
【0088】
ソースコードが当該制約に適合するか否かを判断できない部分がマークされていなければ(ステップS120においてNO)、ステップS122の処理はスキップされる。これに対して、ソースコードが当該制約に適合するか否かを判断できない部分がマークされていれば(ステップS120においてYES)、ソフトウェア開発装置100は、マークされた部分が実行時において設定された制約に適合するか否かを判断するための適合評価用オブジェクトコード118を生成する(ステップS122)。このように、ソフトウェア開発装置100は、制約のスコープにおいて、ソースコード112が制約に適合しているか否かを評価できない場合に、ソースコード112に対応するオブジェクトコード116に加えて、オブジェクトコード116の実行中に、当該制約に適合しているか否かを評価するための別のオブジェクトコード(適合評価用オブジェクトコード118)を生成する。
【0089】
最終的に、ソフトウェア開発装置100は、生成したオブジェクトコードを出力する(ステップS124)。すなわち、ソフトウェア開発装置100は、ソースコード112に含まれる制約に適合するようにオブジェクトコードを生成する。そして、処理は終了する。
【0090】
<G.変形例>
上述の説明においては、説明の便宜上、1つの制約を設定する場合について例示したが、これに限らず複数の制約を重ねて設定することもできる。また、複数の制約をそれぞれのスコープを互いに一部重複させて設定することもできる。
【0091】
また、上述の説明においては、ソースコード112に制約コードを埋め込む構成例について例示したが、これに限らず、ソースコード112とは別に制約を規定する定義ファイルを用意にしてもよい。この場合には、定義ファイルには、制約のスコープとなるプロシージャ名やファンクション名を特定する情報と、適用される制約の内容とを関連付けて含めるようにしてもよい。
【0092】
このように、制約の設定方法については、任意の方法を採用できる。
<H.利点>
本実施の形態に従うソフトウェア開発装置100によれば、エッジデバイスなどで実行されるプログラムに対して、様々な制約を自在に設定できる環境を提供できる。これによって、利用可能なリソースおよびセキュリティの観点から様々な点を考慮した上で、エッジデバイスで実行されるプログラムを作成できる。
【0093】
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。本発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0094】
1 IoTシステム、2 エッジデバイス、100 ソフトウェア開発装置、102,202 プロセッサ、104,204 メインメモリ、106 入力部、108 ディスプレイ、110 ハードディスク、112 ソースコード、114 ソフトウェア開発プログラム、116 オブジェクトコード、118 適合評価用オブジェクトコード、120 内部バス、122 通信インターフェイス、150,154 データセット、152,156 管理オブジェクト、200 コントローラ、206 フラッシュメモリ、210 演算処理部、212 無線通信モジュール、214 USBコントローラ、216 通信コントローラ、218 ドライバ、220 パッド、300 ユーザインターフェイス画面、302 編集領域、304 コンパイルボタン、306 メッセージ表示領域、1121,1127 定義、1123,1124,1129,1130 命令、1125 制約コード、1126 部分ソースコード、1128 処理、1141 プリプロセッサ、1142 コンパイラ、1143 オプティマイザ、1144 コードジェネレータ。