(58)【調査した分野】(Int.Cl.,DB名)
ソースコードを、コンパイルスイッチの状態制御を示すコンパイルスイッチコード情報と、前記コンパイルスイッチコード情報を含まない本体コード情報とに分割する分割部と、
前記コンパイルスイッチコード情報から、前記ソースコードの行毎の前記コンパイルスイッチの状態を示す状態情報を生成する生成部と、
前記状態情報から、前記コンパイルスイッチの組み合わせを解析する解析部と、
を備える解析装置。
前記解析部は、前記本体コード情報と、前記状態情報とから、前記コンパイルスイッチの組み合わせに依存する依存情報を、前記コンパイルスイッチの組み合わせ毎に更に解析する、
請求項1に記載の解析装置。
分割部が、ソースコードを、コンパイルスイッチの状態制御を示すコンパイルスイッチコード情報と、前記コンパイルスイッチコード情報を含まない本体コード情報とに分割するステップと、
生成部が、前記コンパイルスイッチコード情報から、前記ソースコードの行毎の前記コンパイルスイッチの状態を示す状態情報を生成するステップと、
解析部が、前記状態情報から、前記コンパイルスイッチの組み合わせを解析するステップと、
を含む解析方法。
【発明を実施するための形態】
【0008】
以下に添付図面を参照して、解析装置、解析方法及びプログラムの実施形態を詳細に説明する。
【0009】
[機能構成の例]
図1は実施形態の解析装置10の機能構成の例を示す図である。実施形態の解析装置10は、分割部1、生成部2及び解析部3を備える。
【0010】
分割部1は、ソースコード101を受け付ける。ソースコード101の種類は任意でよい。ソースコード101は、例えば自動車を制御するC言語プログラムのソースコードである。
【0011】
図2は実施形態のソースコード101の例を示す図である。
図2の例は、ソースコード101がC言語である場合を示す。例えば、9行目に記述されたint型変数t_1の定義は、コンパイルスイッチTYPE_Aが指定されている場合に有効になる。TYPE_Aは、例えばソースコード101のコンパイル時に指定される。
【0012】
それぞれのコンパイルスイッチは、所定の条件を示す。所定の条件は任意でよい。所定の条件は、例えばプログラムの仕向け毎に定められる。具体的には、所定の条件は、例えばプログラムが動作する製品の種類、及び、当該製品の販売地域等である。
【0013】
図1に戻り、分割部1は、ソースコード101を受け付けると、当該ソースコード101を、コンパイルスイッチの状態制御を示すコンパイルスイッチコード情報103と、コンパイルスイッチコード情報103を含まない本体コード情報102とに分割する。
【0014】
図3は実施形態の本体コード情報102の例を示す図である。
図3の例では、ソースコード101から、#ではじまるプリプロセッサディレクティブの記述(コンパイルスイッチコード情報103)が削除されている。
【0015】
図4は実施形態のコンパイルスイッチコード情報103の例を示す図である。
図4の例では、ソースコード101から、#ではじまるプリプロセッサディレクティブ以外の記述(本体コード情報102)が削除されている。
【0016】
図1に戻り、分割部1は、本体コード情報102を生成部2に入力し、コンパイルスイッチコード情報103を解析部3に入力する。
【0017】
生成部2は、分割部1からコンパイルスイッチコード情報103を受け付けると、ソースコード101の行毎のコンパイルスイッチの状態(有効/無効)を示す状態情報を生成する。
【0018】
図5は実施形態の状態情報104の例を示す図である。
図5の例では、生成部2は、コンパイルスイッチの状態を制御するif条件及びelse条件の組み合わせ(コンパイルスイッチの組み合わせ)を計算する。例えば、生成部2は、ソースコード101の13行目〜26行目のように、入れ子になった記述等を解析することにより、コンパイルスイッチの組み合わせを、ソースコード101の行毎に特定する。そして、生成部2は、コンパイルスイッチの状態(有効/無効)をソースコード101の行毎に特定する。
【0019】
図5の例では、状態情報104は、例えば1行目から8行目には、有効なコンパイルスイッチがないことを示す。また例えば、状態情報104は、9行目及び10行目では、コンパイルスイッチTYPE_Aが有効であることを示す。また例えば、状態情報104は、11行目及び12行目には、有効なコンパイルスイッチがないことを示す。また例えば、状態情報104は、13行目では、コンパイルスイッチTYPE_Aが有効であることを示す。また例えば、状態情報104は、14行目及び15行目では、コンパイルスイッチTYPE_A及びコンパイルスイッチTYPE_Bが有効であることを示す。以下、同様に、16行目から27行目についても、状態情報104からコンパイルスイッチの状態を特定することができる。
【0020】
図1に戻り、解析部3は、分割部1から本体コード情報102を受け付け、生成部2から状態情報104を受け付ける。解析部3は、本体コード情報102と、状態情報104とを使用して、ソースコード101を解析する。
【0021】
図6は実施形態の解析結果105の例を示す図である。解析部3は、本体コード情報102と、状態情報104とを照らし合わせることにより、解析結果105を取得する。
図6の例では、解析結果105は、コンパイルスイッチの組み合わせ毎に、コンパイルスイッチの組み合わせに依存する依存情報が抽出されている。
【0022】
図6の解析結果105の例では、例えば、コンパイルスイッチTYPE_Aが有効であり、かつ、コンパイルスイッチTYPE_Bが無効の場合は、入力変数in_1〜in_3が有効になり、入力変数in_4が無効になり、出力変数out_1及びt_1が有効になり、利用関数func2が有効になり、利用関数func3及びfunc4が無効になることが示されている。
【0023】
なお、
図6の例では、コンパイルスイッチの組み合わせ(プリプロセッサの条件)が4通りである場合を例示しているが、コンパイルスイッチの種類が多いほど、コンパイルスイッチの組み合わせは複雑になる。
【0024】
図6の解析結果105の例では、依存情報として、入力変数、出力変数及び利用関数が抽出されているが、入力変数、出力変数及び利用関数以外の情報が、依存情報として抽出されてもよい。
【0025】
例えば、変数の型(例えば、int型等)が依存情報に含まれていてもよい。また例えば、変数の種類(例えば、ローカル変数又はグローバル変数等)が、依存情報に含まれていてもよい。なお、
図6の解析結果105の例では、変数の種類として、入力又は出力が示されている。また例えば、変数のコメント行に含まれる情報(例えば、変数が取り得る値の範囲、及び、当該値の説明等)が含まれていてもよい。変数が取り得る値の説明は、例えば値の単位(例えば、値が距離であればkm等)等である。
【0026】
また例えば、関数の定義(例えば、戻り値及び引数等)が、依存情報に含まれていてもよい。また例えば、関数のコメント行に含まれる情報(例えば、関数の説明等)が依存情報に含まれていてもよい。関数の説明は、例えば戻り値として取り得る値の説明、及び、引数として取り得る値の説明等である。
【0027】
また、
図6の解析結果105は、コンパイルスイッチの組み合わせ毎のテーブル形式で表されているが、解析結果105のデータ形式は、テーブル形式以外のデータ形式でもよい。
【0028】
図6の解析結果105のように、コンパイルスイッチの組み合わせ(プリプロセッサの条件)毎に、上述の依存情報の一覧が取得されることにより、ソースコード101をより容易に確認することができる。例えば、解析結果105を使用して、プリプロセッサの条件の正しさを確認することができる。また例えば、解析結果105をソースコード101のテスト工程で活用することができる。具体的には、解析結果105を、例えばコンパイルスイッチの組み合わせ毎のテスト項目(例えば、入出力に関するテスト項目等)の洗い出しに活用することができる。また例えば、解析結果105を、コンパイルスイッチの組み合わせ毎の仕様(機能)の確認に活用することができる。
【0029】
以上、説明したように、実施形態の解析装置10では、分割部1が、ソースコード101を、コンパイルスイッチの状態制御を示すコンパイルスイッチコード情報103と、コンパイルスイッチコード情報103を含まない本体コード情報102とに分割する。生成部2が、コンパイルスイッチコード情報103から、ソースコード101の行毎のコンパイルスイッチの状態を示す状態情報104を生成する。そして、解析部3が、状態情報104から、コンパイルスイッチの組み合わせを解析する。
【0030】
これにより実施形態の解析装置10によれば、条件付きコンパイルに使用される条件(コンパイルスイッチ)が複数ある場合でも、ソースコード101をより容易に解析することができる。
【0031】
[効果の説明]
次に、実施形態の解析装置10の効果について、従来の解析方法と対比させることにより、具体的に説明する。
【0032】
図7は実施形態の解析方法と、従来の解析方法との差異を説明するための図である。
図7に示すように、従来の解析方法では、仕向け毎にソースコード101を解析する必要があった。具体的には、例えばプリプロセッサの条件が4通りの場合、まず、プリプロセッサの条件毎に条件別ソースコード201a〜201dを用意する必要があった。
【0033】
図8Aは従来の条件別ソースコード201aの例を示す図である。
図8Aは、仕向けa用のソースコード101を示す。具体的には、条件別ソースコード201aは、コンパイルスイッチTYPE_Aが無効であり、かつ、コンパイルスイッチTYPE_Bが無効の場合のソースコード101を示す。
【0034】
図8Bは従来の条件別ソースコード201bの例を示す図である。
図8Bは、仕向けb用のソースコード101を示す。具体的には、条件別ソースコード201bは、コンパイルスイッチTYPE_Aが有効であり、かつ、コンパイルスイッチTYPE_Bが無効の場合のソースコード101を示す。
【0035】
図8Cは従来の条件別ソースコード201cの例を示す図である。
図8Cは、仕向けc用のソースコード101を示す。具体的には、条件別ソースコード201cは、コンパイルスイッチTYPE_Aが無効であり、かつ、コンパイルスイッチTYPE_Bが有効の場合のソースコード101を示す。
【0036】
図8Dは従来の条件別ソースコード201dの例を示す図である。
図8Dは、仕向けd用のソースコード101を示す。具体的には、条件別ソースコード201dは、コンパイルスイッチTYPE_Aが有効であり、かつ、コンパイルスイッチTYPE_Bが有効の場合のソースコード101を示す。
【0037】
図9は従来の解析方法を示す図である。
図9に示すように、従来は、条件別ソースコード201a〜201dを別々に解析することにより得られた解析結果202a〜202dを集計することにより、集計結果203(実施形態の解析結果105に相当)が得られていた。そのため、コンパイルスイッチがN種の場合、2のN乗通りの組み合わせを特定後、2のN乗通りの条件別ソースコード201のコード解析が必要だった。
【0038】
実施形態の解析装置10によれば、条件付きコンパイルに使用される条件(コンパイルスイッチ)の組み合わせが2のN乗通りである場合であっても、ソースコード101の解析は、1回で済む。そのため、実施形態の解析装置10によれば、条件付きコンパイルに使用される条件が多いほど、従来の解析方法に比べて、解析回数及び解析時間を削減することができる。
【0039】
最後に実施形態の解析装置10のハードウェア構成の例について説明する。
【0040】
[ハードウェア構成の例]
図10は実施形態の解析装置10のハードウェア構成の例を示す図である。実施形態の解析装置10は、制御装置301、主記憶装置302、補助記憶装置303、表示装置304、入力装置305及び通信装置306を備える。制御装置301、主記憶装置302、補助記憶装置303、表示装置304、入力装置305及び通信装置306は、バス310を介して接続されている。
【0041】
制御装置301は、補助記憶装置303から主記憶装置302に読み出されたプログラムを実行する。主記憶装置302は、ROM(Read Only Memory)、及び、RAM(Random Access Memory)等のメモリである。補助記憶装置303は、HDD(Hard Disk Drive)、及び、メモリカード等である。
【0042】
表示装置304は、解析装置10の状態等を表示する。表示装置304は、例えば液晶ディスプレイ等である。入力装置305は、解析装置10を操作するためのインタフェースである。入力装置305は、例えばキーボードやマウス等である。解析装置10がスマートフォン及びタブレット型端末等のスマートデバイスの場合、表示装置304及び入力装置305は、例えばタッチパネルである。通信装置306は、他の装置と通信するためのインタフェースである。
【0043】
実施形態の解析装置10で実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM、メモリカード、CD−R及びDVD(Digital Versatile Disc)等のコンピュータで読み取り可能な記憶媒体に記録されてコンピュータ・プログラム・プロダクトとして提供される。
【0044】
また実施形態の解析装置10で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また実施形態の解析装置10で実行されるプログラムをダウンロードさせずにインターネット等のネットワーク経由で提供するように構成してもよい。
【0045】
また実施形態の解析装置10のプログラムを、ROM等に予め組み込んで提供するように構成してもよい。
【0046】
実施形態の解析装置10で実行されるプログラムは、上述した
図1の解析装置10の機能ブロックのうち、プログラムによっても実現可能な機能ブロックを含むモジュール構成となっている。当該各機能ブロックは、実際のハードウェアとしては、制御装置301が記憶媒体からプログラムを読み出して実行することにより、上記各機能ブロックが主記憶装置302上にロードされる。すなわち上記各機能ブロックは主記憶装置302上に生成される。
【0047】
なお上述した
図1の各機能ブロックの一部又は全部をソフトウェアにより実現せずに、IC等のハードウェアにより実現してもよい。
【0048】
また複数のプロセッサを用いて各機能を実現する場合、各プロセッサは、各機能のうち1つを実現してもよいし、各機能のうち2以上を実現してもよい。
【0049】
また実施形態の解析装置10の動作形態は任意でよい。実施形態の解析装置10を、例えばネットワーク上のクラウドシステムとして動作させてもよい。
【0050】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。