説明

プログラム再利用システムおよびプログラム再利用方法

【課題】 過去に開発した製品のプログラムを新規に開発する製品に流用する場合に流用できるプログラムのソースコードを自動的に抽出するプログラム再利用システムを得る。
【解決手段】 装置のプログラムのソースコードを保存するソースコード保存手段と、装置に内蔵するデバイスのデバイス情報を有するプロジェクト情報を複数記憶するプロジェクト情報記憶手段と、デバイス情報には、デバイスを特定する情報とソースコード保存手段に保存した該デバイスを制御するプログラムのソースコード情報とが含まれ、プロジェクト情報記憶手段に記憶したプロジェクト情報の中から検索対象のデバイスを特定する情報と一致するデバイス情報を検索する検索手段と、検索手段で検索した結果のデバイス情報に含まれたソースコード情報に基づき、ソースコード保存手段に保存されたソースコードを抽出する抽出手段とを備える。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、組み込みソフトウェア開発において、過去に開発した電子機器製品に内蔵する周辺装置であるデバイス(以降、単にデバイスと称す)を制御するソフトウェアを異なる製品へ再利用する場合にソフトウェア開発者を支援するシステムに関するものである。
【背景技術】
【0002】
従来のプログラム再利用システムは、異なるプラットフォーム(ハードウェアやオペレーティングシステムの構成)間でプログラムの移植を行う際に、プログラムの移植が可能かどうか、もし不可能な場合にはどのAPI(Application Program Interface)関数がネックになっているかを自動的に判定している(例えば、特許文献1参照。)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2004−246690号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
その際、過去に開発した製品を構成するデバイスと新規に開発する製品を構成するデバイスが同じであれば、そのデバイスを制御する部分のプログラムは流用が可能である。しかし、過去に開発したプログラムが多ければ多いほど流用できる可能性は大きくなるが、従来技術では該当するプログラムを抽出する作業は手動で行われていたという課題があった。
また、プログラムの移植は、API関数のみではなく、CPUからデバイスへのアクセス方法の違い、CPUに依存したアセンブリ言語の違いやオペレーティングシステム(以下OSと記す)のシステムコールの違いなども考慮して行わなければならず、従来技術ではその変更箇所を探す作業を手動で実施していたという課題もあった。
【0005】
この発明は、上記のような課題を解決するためになされたもので、第1の目的は、デバイスの種別、名称などのデバイス情報を入力することで、過去に開発した同じデバイスの制御プログラムがあれば、そのソースコードを自動的に抽出することによりプログラム開発の作業を効率的に行うことができるプログラム再利用システムを得るものである。
また、第2の目的は、CPUからデバイスへアクセスしている箇所、またはCPUに依存したアセンブリ言語が記述されている箇所、またはOSのシステムコールを行っている箇所、すなわち、ハードウェアやOSに依存するソースコードの記載箇所を移植対象となるソースコードに示すことにより、ソフトウェア開発者がプログラムの移植作業を効率的に行うことができるプログラム再利用システムを得るものである。
【課題を解決するための手段】
【0006】
この発明に係るプログラム再利用システムは、
CPUを備えた装置を動作させるソフトウェアプログラムのソースコードを複数保存するソースコード保存手段と、
装置に内蔵する周辺機能部であるデバイスのデバイス情報を有するプロジェクト情報を複数記憶するプロジェクト情報記憶手段と、
デバイス情報には、そのデバイスを特定する情報と、ソースコード保存手段に保存した該デバイスを制御するプログラムのソースコード情報と、が含まれ、
前記プロジェクト情報記憶手段に記憶したプロジェクト情報の中から、検索対象のデバイスを特定する情報と一致するデバイス情報を検索する検索手段と、
前記検索手段で検索した結果のデバイス情報に含まれたソースコード情報に基づき、前記ソースコード保存手段に保存されたソースコードを抽出する抽出手段と、
を備えたことを特徴とするものである。
【発明の効果】
【0007】
この発明のプログラム再利用システムは、デバイスの種別、名称などのデバイス情報を入力することにより、過去に開発した同じデバイスのプログラムがあれば、そのソースコードを自動的に抽出することでソフトウェア開発者がプログラム開発を効率的に行うことができるという効果がある。
【図面の簡単な説明】
【0008】
【図1】この発明の実施の形態1を示すシステムの構成図である。
【図2】この発明の実施の形態1に係る検索情報入力手段によりデバイス情報を入力する画面の例である。
【図3】この発明の実施の形態1に係るプロジェクト情報記憶手段に記憶されているプロジェクト情報の例である。
【図4】この発明の実施の形態1に係るソースコードの例である。
【図5】この発明の実施の形態1に係るソースコード検索のフローチャート図である。
【図6】この発明の実施の形態1に係るCPU情報の例である。
【図7】この発明の実施の形態1に係るOS情報の例である。
【図8】この発明の実施の形態1に係る移植対象の行を抽出するフローチャート図である。
【図9】この発明の実施の形態1に係るCPUからデバイスへアクセスしている箇所およびCPUに依存したアセンブリ言語が記述されている箇所およびOSのシステムコールを行っている箇所を移植対象となるソースコードに表示した例である。
【発明を実施するための形態】
【0009】
実施の形態1.
まず、実施の形態1のプログラム再利用システムの構成について説明する。
図1はこの発明の実施の形態1におけるプログラム再利用システムの構成図である。
図1において、この発明の実施の形態1におけるプログラム再利用システム100は、今回開発するデバイスの情報を入力する検索情報入力手段101と、1つの製品に関するソフトウェア開発を1つのプロジェクトと定義すると、過去に開発した製品毎に、使用されているCPU、OS、デバイス情報などが記録された情報をプロジェクト情報として記憶してあるプロジェクト情報記憶手段102と、過去に開発した製品のプログラムのソースコードが保存してある既存ソースコード保存手段103と、検索情報入力手段101で入力されたデバイス情報からプロジェクト情報記憶手段102に記憶されているプロジェクト情報を検索して一致するデバイス情報に対応するソースコードを既存ソースコード保存手段103から抽出する検索抽出手段104と、CPUに依存したインストラクションを示したCPU情報記憶手段105と、OSのシステムコールに関する情報を記憶したOS情報記憶手段106と、検索抽出手段104により抽出したソースコードにおいて、CPU情報記憶手段105に記憶されているCPUに依存したインストラクションが記載されたコードを抽出し、OS情報記憶手段106に記憶されているOSのシステムコールが記載されたコードを抽出するコード抽出手段107と、検索抽出手段104により抽出したソースコードおよびコード抽出手段107により抽出した依存コードを表示する表示手段108とから構成される。
【0010】
次に動作について説明する。
図2は、検索情報入力手段101によるデバイス情報入力画面200の例である。図2のように検索情報入力手段101では、デバイス情報としてUSB(Universal Serial Bus)やLAN(Local Area Network)やRS−232C等のデバイスの種類を示すデバイス種別201、そのデバイスの製造会社名を示すデバイスメーカー202、そのデバイスの製品型名を示すデバイス型名203を入力する。ここでは、理解を容易化するため具体例として、デバイス種別201を“USB”、デバイスメーカー202を“Maker−1”、デバイス型名203を“USB−1”と入力した場合について説明する。
【0011】
図3は、プロジェクト情報記憶手段102に記憶されているプロジェクト情報の例である。プロジェクト情報記憶手段102には、前述のように、過去に開発した製品に対応して複数個のプロジェクト情報300が記憶されている。プロジェクト情報300には、各プロジェクト情報を構成する情報として、過去に開発された製品で使用されていたCPUの種類を示すCPU310、OSの種類を示すOS320、後述するデバイスに関する情報を示すデバイス情報330が記録されている。
【0012】
デバイス情報330には、そのデバイスの種類を示すデバイス種別331とそのデバイスの製造会社を示すメーカー332とそのデバイスの製品型名を示す型名333とCPUがデバイスにアクセスする方式であるアクセス方式334とCPUがデバイスにアクセスする場合のアクセス先のアドレスを示すアドレス情報335とソースコード情報としてそのデバイスの制御プログラムのソースコードが既存ソースコード保存手段103に保存されているファイル名を示すソースファイル名336が記録されている。
【0013】
アクセス方式334には、メモリマップド方式とポートマップドI/O方式がある。
メモリマップド方式とは、デバイスを制御するレジスタをアドレスに配置し、CPUがメモリにアクセスするのと同様にそのアドレスに読み書きして制御する方式である。アクセス方式334に「メモリマップド」が記録されていた場合、アドレス情報335にはデバイスのレジスタが配置されたアドレスを記録する。
ポートマップドI/O方式とは、デバイスを制御するポートがアドレスに配置され、CPUからそのアドレスに読み書きして制御する方式である。アクセス方式334に「ポートマップド」が記録されていた場合、アドレス情報335にはデバイスのポートが配置されたアドレスを記録する。
【0014】
次に、図3の例により、プロジェクト情報300に記載された情報について説明する。すなわち、“プロジェクト1”における製品では、CPU310が示すCPUの種類が“CPU−1”、OS320が示すOSの種類が“OS−1”、デバイスは2種類で構成され、1つ目のデバイス情報330としてデバイス種別331が示すデバイスの種類が“USB”、メーカー332が示すデバイスの製造会社が“Maker−1”、型名333が示すデバイスの製造型名が“USB−1”、アクセス方式334が示すデバイスへのアクセス方式が“メモリマップド”(メモリマップド方式)、アドレス情報335が示すデバイスのレジスタが配置されたアドレス番地が“0x800−0x80FF”、ソースファイル名336が示すソースファイル名が“ファイル−01”である。2つ目のデバイス情報、および“プロジェクト2”についても同様である。
【0015】
図4は、既存ソースコード保存手段103に保存されているソースコードの例を示している。この例では、図3で示したソースファイル名336に示すファイル名が“ファイル−01”であり、先頭の1行目から6行目まではコメント行で、デバイス情報330と同等の情報を記載している。
7行目の#define文で、レジスタのアドレスを定義し、プログラムから“REG“でレジスタにアクセスできるようになっていることを示す。
また、11行目では、インラインアセンブラで、CPUインストラクションを使用していることを示す。
また、12行目では、OSのシステムコールを使用していることを示す。
【0016】
図6は、CPU情報記憶手段105に記憶されているCPU情報400の例である。CPU情報400には過去に開発したプロジェクトで使用したすべてのCPUに関する情報が記録されており、この例では、CPUのアセンブリ言語のインストラクションコードを示し、CPU名401と命令分類402とインストラクションコード403と命令の意味404とから構成されている。
ここでは、CPU名401が“CPU−1”の場合のインストラクションコードの一覧(インストラクションコードテーブル)を示している。
【0017】
図7は、OS情報記憶手段106に記憶されているOS情報500の例である。OS情報500には、過去に開発したプロジェクトで使用したすべてのOSについて記録されており、この例では、OSの名前であるOS名501とシステムコールの種別を示すシステムコール分類502とシステムコールであるAPI名503とシステムコールの意味504とから構成されている。
ここでは、OS名501が“OS−1”の場合のシステムコールの一覧(システムコールテーブル)を示している。
【0018】
次に、図5に示すフローチャートにより、入力されたデバイス情報に一致するデバイスの制御プログラムのソースコードを検索する検索抽出手段104の動作を説明する。
【0019】
まず、検索情報入力手段101により新規に開発する機器装置で使用するデバイスのデバイス種別201とデバイスメーカー202とデバイス型名203をデバイス情報200として入力する(S10)。
【0020】
次に、検索抽出手段104は、プロジェクト情報記憶手段102に記憶されている過去に開発した製品に対応する複数のプロジェクト情報300の中からデバイス情報330を検索する(S11)。
【0021】
次に、プロジェクト情報300の中のデバイス情報330がステップS10で入力されたデバイス情報と一致するか確認する(S12)。
【0022】
ステップS12でデバイス情報が一致した場合には、そのデバイスの制御プログラムのソースファイル名336を表示し、終了する(S13)。
【0023】
一方、ステップS12でデバイス情報が一致しなかった場合には、同じプロジェクトの中の全てのデバイスについて検索したか確認し(S14)、まだデバイス情報がある場合にはステップS11に戻り、同じプロジェクトの次のデバイス情報を検索する(S11)。
【0024】
ステップS14で1つのプロジェクトの中の全てのデバイス情報を検索しても見つからなかった場合には、全てのプロジェクト情報について検索したか確認し(S15)、まだプロジェクト情報がある場合には、ステップ11に戻り(S15でNoの場合)、次のプロジェクト情報の中のデバイス情報を検索する(S11)。
【0025】
一方、ステップS15でプロジェクト情報記憶手段102に記憶されている全てのプロジェクト情報のデバイス情報を検索しても見つからない場合には終了する(S16)。
【0026】
なお、図5の例では、プロジェクト情報記憶手段102に記憶されているプロジェクト情報からのみ所望のデバイス情報を検索する例を示したが、図4に示すようにソースコード中のコメント行でデバイス情報を記載している場合には、既存ソースコード保存手段103に保存してあるすべてのソースコード中を所望のデバイス情報の検索を行うようにしても良い。
【0027】
ソースコード中のデバイス情報を検索する場合は、図5に示すすべてのプロジェクト情報のデバイス情報を検索した後にすべてのソースコード中のデバイス情報を検索するようにしても良いし、プロジェクト情報の記録が充分でない場合は、ソースコード中のみ所望のデバイス情報を検索するようにしても良い。
【0028】
次に、図8に示すフローチャートにより、検索抽出手段104で見つかったソースコードに対して、デバイスにアクセスしているソースコード部分およびCPUの命令コードを使用しているソースコード部分およびOSのシステムコールを使用しているソースコード部分を抽出するコード抽出手段107の動作を説明する。
【0029】
まず、検索抽出手段104で見つかったソースファイル名のファイルを開き、1行読み込む(S50)。
【0030】
次に、プロジェクト情報300から検索抽出手段104で見つかったソースファイル名のファイルが属するデバイス情報330のアドレス情報335に記載されているアドレス空間、例えば図2の例では“0x8000−0x80FF”のアドレス空間の文字列が含まれているかを調べる(S51)。該当する行であればステップS52へ移行し、ステップS51で該当していなければステップS53へ移行する。
【0031】
ステップS52では、その行にデバイスに依存するコードであることを示すマークをし、次のステップS53に移行する。
【0032】
次に、検索抽出手段104で見つかったソースファイル名のファイルが属するプロジェクト情報300のCPU310によりプロジェクトで使用されたCPU(図2の例では“CPU−1”)からCPU情報記憶手段105に記憶されているインストラクションコード一覧を取得し、ステップS50で読み込んだ行に該当するインストラクションコードがあるか調べる(S53)。該当する行であればステップS54へ移行し、ステップS53で該当していなければステップS55へ移行する。
【0033】
ステップS54では、その行にCPUに依存するコードであることを示すマークをし、次のステップS55に移行する。
【0034】
次に、検索抽出手段104で見つかったソースファイル名のファイルが属するプロジェクト情報300のOS320によりプロジェクトで使用されたOS(図2の例では“OS−1”)からOS情報記憶手段106に記憶されているシステムコールであるAPI名一覧を取得し、ステップS50で読み込んだ行に該当するシステムコールがあるか調べる(S55)。該当する行であればステップS56へ移行し、ステップS51で該当していなければステップS57へ移行する。
【0035】
ステップS56では、その行にOSに依存するコードであることを示すマークをし、次のステップS57に移行する。
【0036】
ステップS57では、ソースファイルのすべての行を調べていなければステップS50へ戻り次の行を読み込む。すべての行が調べ終わっていればコード抽出手段107は終了する。
【0037】
図9は、コード抽出手段107により抽出した結果を表示手段108に表示した例である。一番左の欄から“デバイス”欄は当該行がデバイスに依存した行を示し、“CPU”欄は当該行がCPUに依存したコードである行であることを示し、“OS”欄は当該行がOSに依存した行であることを示し、“行”欄はソースコードの行番号を示し、“ソースコード”欄は当該行のソースコードを示している。
【0038】
図9の例では、7行目にデバイスのアドレス情報“0x8000−0x80FF”のアドレス空間に一致した“0x8000”があるため、“デバイス”欄に○印が表示されてデバイスに依存したコードが記載された行であることを示している。
【0039】
11行目には、“CPU−1”のCPU情報400のインストラクションコード403である“CPU1_INS_1”が使用されているため、“CPU”欄に○印が表示されてCPUに依存したコードが記載された行であることを示している。
【0040】
12行目には、“OS−1”のOS情報500のAPI名503である“OS1_API_1”が使用されているため、“OS”欄に○印が表示されてOSに依存したコードが記載された行であることを示している。
【0041】
なお、実施の形態1の図1、図9の例では、デバイスにアクセスしているソースコード部分およびCPUの命令コードを使用しているソースコード部分およびOSのシステムコールを使用しているソースコード部分を抽出する機能をコード抽出手段107によりすべてを実施しているが、それぞれ、デバイスアクセスコード抽出手段、命令コード抽出手段、システムコールコード抽出手段として、別々の構成としても良い。
【0042】
また、図9の例では、該当する行に「○」印を付けてデバイス依存またはCPU依存またはOS依存を示すマークとしたが、該当する行を異なる色で表示することでデバイス依存またはCPU依存またはOS依存を示してもよい。
【0043】
以上のように、実施の形態1では、新規に開発する装置を構成するデバイスのデバイス情報を入力することにより、過去に開発した同じデバイスの制御プログラムのソースコードを検索し表示するようにしているので、新規開発の装置を構成するデバイスの制御プログラムを過去に開発した同じデバイスの制御プログラムを流用し移植する作業を効率的に行うことができる。
【0044】
また、CPUからデバイスへのアクセス方法の違いや、CPUに依存したアセンブリ言語の違い、または、OSのシステムコールの違いを、移植するソースコード上に示すようにしているので、移植作業を行う場合に修正すべきソースコード行を一目で見つけることができるようになるため、移植作業の効率をさらに向上することができる。
【産業上の利用可能性】
【0045】
本発明の活用例として、組み込みソフトウェアシステムのデバイス制御プログラムの開発支援装置として利用することが可能である。
【符号の説明】
【0046】
100 プログラム再利用システム
101 検索情報入力手段
102 プロジェクト情報記憶手段
103 既存ソースコード保存手段
104 検索抽出手段
105 CPU情報記憶手段
106 OS情報記憶手段
107 コード抽出手段
108 表示手段
200 デバイス情報入力画面
201 デバイス種別
202 デバイスメーカー
203 デバイス型名
300 プロジェクト情報
310 CPU
320 OS
330 デバイス情報
331 デバイス種別
332 メーカー
333 型名
334 アクセス方式
335 アドレス情報
336 ソースファイル名
400 CPU情報
401 CPU名
402 命令分類
403 インストラクションコード
404 命令の意味
500 OS情報
501 OS名
502 システムコール分類
503 API名
504 システムコールの意味

【特許請求の範囲】
【請求項1】
CPUを備えた装置を動作させるソフトウェアプログラムのソースコードを複数保存するソースコード保存手段と、
前記装置に内蔵する周辺機能部であるデバイスのデバイス情報を有するプロジェクト情報を複数記憶するプロジェクト情報記憶手段と、
前記デバイス情報には、前記デバイスを特定する情報と前記ソースコード保存手段に保存した前記デバイスを制御するプログラムのソースコード情報とが含まれ、
前記プロジェクト情報記憶手段に記憶したプロジェクト情報の中から、検索対象のデバイスを特定する情報と一致するデバイス情報を検索する検索手段と、
前記検索手段で検索した結果のデバイス情報に含まれたソースコード情報に基づき、前記ソースコード保存手段に保存されたソースコードを抽出する抽出手段と、
を備えたことを特徴とするプログラム再利用システム。
【請求項2】
前記プロジェクト情報記憶手段に記憶したデバイス情報には、前記デバイスにアクセスするアドレス情報がさらに含まれ、
前記検索手段により検索されたデバイス情報に含まれる前記アドレス情報を抽出し、前記抽出手段により前記抽出したソースコード中において、前記抽出したアドレス情報にアクセスしているソースコード部分を抽出するデバイスアクセスコード抽出手段と、
を備えたことを特徴とする請求項1に記載のプログラム再利用システム。
【請求項3】
前記プロジェクト情報記憶手段に記憶したプロジェクト情報には、
前記CPUの名前を示すCPU情報がさらに含まれ、
複数のCPUのCPU名と命令コードと該命令コードの動作とで構成されるインストラクションコードテーブルと、
前記検索手段により検索されたデバイス情報を有するプロジェクト情報に基づいて前記CPU名を抽出し、前記検索手段が抽出したソースコード中において、前記インストラクションコードテーブルから前記抽出したCPU名に対応する命令コードを使用しているソースコード部分を抽出する命令コード抽出手段と、
を備えたことを特徴とする請求項1または2に記載のプログラム再利用システム。
【請求項4】
前記プロジェクト情報記憶手段に記憶したプロジェクト情報には、
前記装置を構成するオペレーティングシステムを特定するOS名を含むオペレーティングシステム情報がさらに含まれ、
複数のオペレーティングシステムのOS名とオペレーティングシステムが独自に持つシステムコール名と該システムコールの動作とで構成されるシステムコールテーブルと、
前記検索手段により検索されたデバイス情報を有するプロジェクト情報に基づいて前記OS名を抽出し、前記検索手段が抽出したソースコード中において、前記システムコールテーブルから前記抽出したOS名のオペレーティングシステムが持つシステムコールを使用しているソースコード部分を抽出するシステムコールコード抽出手段と、
を備えたことを特徴とする請求項1乃至3いずれかに記載のプログラム再利用システム。
【請求項5】
請求項1に記載の前記抽出手段、請求項2に記載のデバイスアクセス抽出手段、請求項3に記載の命令コード抽出手段、及び請求項4に記載のシステムコールコード抽出手段の少なくとも一つの抽出結果を表示する表示手段と、
を備えたことを特徴とするプログラム再利用システム。
【請求項6】
CPUを備えた装置を動作させるソフトウェアプログラムのソースコードを複数保存するソースコード保存手段と、
前記装置に内蔵する周辺機能部であるデバイスのデバイス情報を有するプロジェクト情報を複数記憶するプロジェクト情報記憶手段と、備えたプログラム再利用システムに使用される方法であって、
前記デバイス情報には、前記デバイスを特定する情報と、前記ソースコード保存手段に保存した前記デバイスを制御するプログラムのソースコード情報と、が含まれ、
検索対象のデバイスを特定する情報である検索情報を入力する入力ステップと、
前記入力ステップで入力された検索情報と一致するデバイス情報を、前記プロジェクト情報記憶手段に記憶したプロジェクト情報の中から検索する検索ステップと、
前記検索ステップで検索した結果のデバイス情報に含まれたソースコード情報に基づき、前記ソースコード保存手段に保存されたソースコードを抽出する抽出ステップと、
を備えたことを特徴とするプログラム再利用方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2013−84085(P2013−84085A)
【公開日】平成25年5月9日(2013.5.9)
【国際特許分類】
【出願番号】特願2011−222710(P2011−222710)
【出願日】平成23年10月7日(2011.10.7)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】