(57)【要約】【課題】条件付きコンパイル（コンパイルスイッチ）を多く含んだソースコードを高速に解析する手段を提供する。【解決手段】実施形態の解析装置は、ソースコードを、コンパイルスイッチの状態制御を示すコンパイルスイッチコード情報と、前記コンパイルスイッチコード情報を含まない本体コード情報とに分割する分割部と、前記コンパイルスイッチコード情報から、前記ソースコードの行毎の前記コンパイルスイッチの状態を示す状態情報を生成する生成部と、前記状態情報から、前記コンパイルスイッチの組み合わせを解析する解析部と、を備える。【選択図】図１
2019185593.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードを、コンパイルスイッチの状態制御を示すコンパイルスイッチコード情報と、前記コンパイルスイッチコード情報を含まない本体コード情報とに分割する分割部と、
前記コンパイルスイッチコード情報から、前記ソースコードの行毎の前記コンパイルスイッチの状態を示す状態情報を生成する生成部と、
前記状態情報から、前記コンパイルスイッチの組み合わせを解析する解析部と、
を備える解析装置。
【請求項２】
前記解析部は、前記本体コード情報と、前記状態情報とから、前記コンパイルスイッチの組み合わせに依存する依存情報を、前記コンパイルスイッチの組み合わせ毎に更に解析する、
請求項１に記載の解析装置。
【請求項３】
前記依存情報は、前記ソースコードに含まれる変数が有効であるか否かを、前記コンパイルスイッチの組み合わせ毎に示す変数情報を含む、
請求項２に記載の解析装置。
【請求項４】
前記変数情報は、前記変数の型、前記変数の種類、及び、前記変数のコメント行に含まれる情報のうち、少なくとも１つを更に含む、
請求項３に記載の解析装置。
【請求項５】
前記依存情報は、前記ソースコードに含まれる関数が有効であるか否かを、前記コンパイルスイッチの組み合わせ毎に示す関数情報を含む、
請求項２乃至４のいずれか１項に記載の解析装置。
【請求項６】
前記関数情報は、前記関数の定義、及び、前記関数のコメント行に含まれる情報の少なくとも一方を更に含む、
請求項５に記載の解析装置。
【請求項７】
分割部が、ソースコードを、コンパイルスイッチの状態制御を示すコンパイルスイッチコード情報と、前記コンパイルスイッチコード情報を含まない本体コード情報とに分割するステップと、
生成部が、前記コンパイルスイッチコード情報から、前記ソースコードの行毎の前記コンパイルスイッチの状態を示す状態情報を生成するステップと、
解析部が、前記状態情報から、前記コンパイルスイッチの組み合わせを解析するステップと、
を含む解析方法。
【請求項８】
コンピュータを、
ソースコードを、コンパイルスイッチの状態制御を示すコンパイルスイッチコード情報と、前記コンパイルスイッチコード情報を含まない本体コード情報とに分割する分割部と、
前記コンパイルスイッチコード情報から、前記ソースコードの行毎の前記コンパイルスイッチの状態を示す状態情報を生成する生成部と、
前記状態情報から、前記コンパイルスイッチの組み合わせを解析する解析部、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は解析装置、解析方法及びプログラムに関する。
【背景技術】
【０００２】
Ｃ言語等のコンピュータプログラムのソースコードでは、プリプロセッサ命令を使用した条件付きコンパイル（コンパイルスイッチ）のための記述が、従来から利用されている。所定の条件を示すコンパイルスイッチを利用することによって、コンピュータプログラムの動作を変更することができる。
【０００３】
条件付きコンパイル（コンパイルスイッチ）のための記述とは、Ｃ言語のコンピュータプログラムのソースコードにおいては、＃ではじまるプリプロセッサディレクティブの中で、＃ｉｆｄｅｆ、＃ｉｆｎｄｅｆ、＃ｅｎｄｉｆ、＃ｉｆ、＃ｅｌｉｆ、＃ｅｌｓｅから始まる文を意味する。その他の、＃ｉｎｃｌｕｄｅ、＃ｄｅｆｉｎｅ、＃ｕｎｄｅｆなどから始まるプリプロセッサディレクティブは除く。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４８２７４１８号公報
【特許文献２】特開２０００−１４８５０８号公報
【特許文献３】特開平５−３４１９７６号公報
【特許文献４】特開平１１−０７３３０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の技術では、条件付きコンパイルに使用される条件が多いほど、ソースコードを解析することが難しかった。例えば、ソースコードを解析する際には、条件の組み合わせを考慮する必要があるため、条件付きコンパイルに使用される条件が多いほど、解析回数及び解析時間を要していた。
【課題を解決するための手段】
【０００６】
実施形態の解析装置は、ソースコードを、コンパイルスイッチの状態制御を示すコンパイルスイッチコード情報と、前記コンパイルスイッチコード情報を含まない本体コード情報とに分割する分割部と、前記コンパイルスイッチコード情報から、前記ソースコードの行毎の前記コンパイルスイッチの状態を示す状態情報を生成する生成部と、前記状態情報から、前記コンパイルスイッチの組み合わせを解析する解析部と、を備える。
【図面の簡単な説明】
【０００７】
【図１】図１は実施形態の解析装置の機能構成の例を示す図である。
【図２】図２は実施形態のソースコードの例を示す図である。
【図３】図３は実施形態の本体コード情報の例を示す図である。
【図４】図４は実施形態のコンパイルスイッチコード情報の例を示す図である。
【図５】図５は実施形態の状態情報の例を示す図である。
【図６】図６は実施形態の解析結果の例を示す図である。
【図７】図７は実施形態の解析方法と、従来の解析方法との差異を説明するための図である。
【図８Ａ】図８Ａは従来の条件別ソースコードの例を示す図である。
【図８Ｂ】図８Ｂは従来の条件別ソースコードの例を示す図である。
【図８Ｃ】図８Ｃは従来の条件別ソースコードの例を示す図である。
【図８Ｄ】図８Ｄは従来の条件別ソースコードの例を示す図である。
【図９】図９は従来の解析方法を示す図である。
【図１０】図１０は実施形態の解析装置のハードウェア構成の例を示す図である。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照して、解析装置、解析方法及びプログラムの実施形態を詳細に説明する。
【０００９】
［機能構成の例］
図１は実施形態の解析装置１０の機能構成の例を示す図である。実施形態の解析装置１０は、分割部１、生成部２及び解析部３を備える。
【００１０】
分割部１は、ソースコード１０１を受け付ける。ソースコード１０１の種類は任意でよい。ソースコード１０１は、例えば自動車を制御するＣ言語プログラムのソースコードである。
【００１１】
図２は実施形態のソースコード１０１の例を示す図である。図２の例は、ソースコード１０１がＣ言語である場合を示す。例えば、９行目に記述されたｉｎｔ型変数ｔ＿１の定義は、コンパイルスイッチＴＹＰＥ＿Ａが指定されている場合に有効になる。ＴＹＰＥ＿Ａは、例えばソースコード１０１のコンパイル時に指定される。
【００１２】
それぞれのコンパイルスイッチは、所定の条件を示す。所定の条件は任意でよい。所定の条件は、例えばプログラムの仕向け毎に定められる。具体的には、所定の条件は、例えばプログラムが動作する製品の種類、及び、当該製品の販売地域等である。
【００１３】
図１に戻り、分割部１は、ソースコード１０１を受け付けると、当該ソースコード１０１を、コンパイルスイッチの状態制御を示すコンパイルスイッチコード情報１０３と、コンパイルスイッチコード情報１０３を含まない本体コード情報１０２とに分割する。
【００１４】
図３は実施形態の本体コード情報１０２の例を示す図である。図３の例では、ソースコード１０１から、＃ではじまるプリプロセッサディレクティブの記述（コンパイルスイッチコード情報１０３）が削除されている。
【００１５】
図４は実施形態のコンパイルスイッチコード情報１０３の例を示す図である。図４の例では、ソースコード１０１から、＃ではじまるプリプロセッサディレクティブ以外の記述（本体コード情報１０２）が削除されている。
【００１６】
図１に戻り、分割部１は、本体コード情報１０２を生成部２に入力し、コンパイルスイッチコード情報１０３を解析部３に入力する。
【００１７】
生成部２は、分割部１からコンパイルスイッチコード情報１０３を受け付けると、ソースコード１０１の行毎のコンパイルスイッチの状態（有効／無効）を示す状態情報を生成する。
【００１８】
図５は実施形態の状態情報１０４の例を示す図である。図５の例では、生成部２は、コンパイルスイッチの状態を制御するｉｆ条件及びｅｌｓｅ条件の組み合わせ（コンパイルスイッチの組み合わせ）を計算する。例えば、生成部２は、ソースコード１０１の１３行目〜２６行目のように、入れ子になった記述等を解析することにより、コンパイルスイッチの組み合わせを、ソースコード１０１の行毎に特定する。そして、生成部２は、コンパイルスイッチの状態（有効／無効）をソースコード１０１の行毎に特定する。
【００１９】
図５の例では、状態情報１０４は、例えば１行目から８行目には、有効なコンパイルスイッチがないことを示す。また例えば、状態情報１０４は、９行目及び１０行目では、コンパイルスイッチＴＹＰＥ＿Ａが有効であることを示す。また例えば、状態情報１０４は、１１行目及び１２行目には、有効なコンパイルスイッチがないことを示す。また例えば、状態情報１０４は、１３行目では、コンパイルスイッチＴＹＰＥ＿Ａが有効であることを示す。また例えば、状態情報１０４は、１４行目及び１５行目では、コンパイルスイッチＴＹＰＥ＿Ａ及びコンパイルスイッチＴＹＰＥ＿Ｂが有効であることを示す。以下、同様に、１６行目から２７行目についても、状態情報１０４からコンパイルスイッチの状態を特定することができる。
【００２０】
図１に戻り、解析部３は、分割部１から本体コード情報１０２を受け付け、生成部２から状態情報１０４を受け付ける。解析部３は、本体コード情報１０２と、状態情報１０４とを使用して、ソースコード１０１を解析する。
【００２１】
図６は実施形態の解析結果１０５の例を示す図である。解析部３は、本体コード情報１０２と、状態情報１０４とを照らし合わせることにより、解析結果１０５を取得する。図６の例では、解析結果１０５は、コンパイルスイッチの組み合わせ毎に、コンパイルスイッチの組み合わせに依存する依存情報が抽出されている。
【００２２】
図６の解析結果１０５の例では、例えば、コンパイルスイッチＴＹＰＥ＿Ａが有効であり、かつ、コンパイルスイッチＴＹＰＥ＿Ｂが無効の場合は、入力変数ｉｎ＿１〜ｉｎ＿３が有効になり、入力変数ｉｎ＿４が無効になり、出力変数ｏｕｔ＿１及びｔ＿１が有効になり、利用関数ｆｕｎｃ２が有効になり、利用関数ｆｕｎｃ３及びｆｕｎｃ４が無効になることが示されている。
【００２３】
なお、図６の例では、コンパイルスイッチの組み合わせ（プリプロセッサの条件）が４通りである場合を例示しているが、コンパイルスイッチの種類が多いほど、コンパイルスイッチの組み合わせは複雑になる。
【００２４】
図６の解析結果１０５の例では、依存情報として、入力変数、出力変数及び利用関数が抽出されているが、入力変数、出力変数及び利用関数以外の情報が、依存情報として抽出されてもよい。
【００２５】
例えば、変数の型（例えば、ｉｎｔ型等）が依存情報に含まれていてもよい。また例えば、変数の種類（例えば、ローカル変数又はグローバル変数等）が、依存情報に含まれていてもよい。なお、図６の解析結果１０５の例では、変数の種類として、入力又は出力が示されている。また例えば、変数のコメント行に含まれる情報（例えば、変数が取り得る値の範囲、及び、当該値の説明等）が含まれていてもよい。変数が取り得る値の説明は、例えば値の単位（例えば、値が距離であればｋｍ等）等である。
【００２６】
また例えば、関数の定義（例えば、戻り値及び引数等）が、依存情報に含まれていてもよい。また例えば、関数のコメント行に含まれる情報（例えば、関数の説明等）が依存情報に含まれていてもよい。関数の説明は、例えば戻り値として取り得る値の説明、及び、引数として取り得る値の説明等である。
【００２７】
また、図６の解析結果１０５は、コンパイルスイッチの組み合わせ毎のテーブル形式で表されているが、解析結果１０５のデータ形式は、テーブル形式以外のデータ形式でもよい。
【００２８】
図６の解析結果１０５のように、コンパイルスイッチの組み合わせ（プリプロセッサの条件）毎に、上述の依存情報の一覧が取得されることにより、ソースコード１０１をより容易に確認することができる。例えば、解析結果１０５を使用して、プリプロセッサの条件の正しさを確認することができる。また例えば、解析結果１０５をソースコード１０１のテスト工程で活用することができる。具体的には、解析結果１０５を、例えばコンパイルスイッチの組み合わせ毎のテスト項目（例えば、入出力に関するテスト項目等）の洗い出しに活用することができる。また例えば、解析結果１０５を、コンパイルスイッチの組み合わせ毎の仕様（機能）の確認に活用することができる。
【００２９】
以上、説明したように、実施形態の解析装置１０では、分割部１が、ソースコード１０１を、コンパイルスイッチの状態制御を示すコンパイルスイッチコード情報１０３と、コンパイルスイッチコード情報１０３を含まない本体コード情報１０２とに分割する。生成部２が、コンパイルスイッチコード情報１０３から、ソースコード１０１の行毎のコンパイルスイッチの状態を示す状態情報１０４を生成する。そして、解析部３が、状態情報１０４から、コンパイルスイッチの組み合わせを解析する。
【００３０】
これにより実施形態の解析装置１０によれば、条件付きコンパイルに使用される条件（コンパイルスイッチ）が複数ある場合でも、ソースコード１０１をより容易に解析することができる。
【００３１】
［効果の説明］
次に、実施形態の解析装置１０の効果について、従来の解析方法と対比させることにより、具体的に説明する。
【００３２】
図７は実施形態の解析方法と、従来の解析方法との差異を説明するための図である。図７に示すように、従来の解析方法では、仕向け毎にソースコード１０１を解析する必要があった。具体的には、例えばプリプロセッサの条件が４通りの場合、まず、プリプロセッサの条件毎に条件別ソースコード２０１ａ〜２０１ｄを用意する必要があった。
【００３３】
図８Ａは従来の条件別ソースコード２０１ａの例を示す図である。図８Ａは、仕向けａ用のソースコード１０１を示す。具体的には、条件別ソースコード２０１ａは、コンパイルスイッチＴＹＰＥ＿Ａが無効であり、かつ、コンパイルスイッチＴＹＰＥ＿Ｂが無効の場合のソースコード１０１を示す。
【００３４】
図８Ｂは従来の条件別ソースコード２０１ｂの例を示す図である。図８Ｂは、仕向けｂ用のソースコード１０１を示す。具体的には、条件別ソースコード２０１ｂは、コンパイルスイッチＴＹＰＥ＿Ａが有効であり、かつ、コンパイルスイッチＴＹＰＥ＿Ｂが無効の場合のソースコード１０１を示す。
【００３５】
図８Ｃは従来の条件別ソースコード２０１ｃの例を示す図である。図８Ｃは、仕向けｃ用のソースコード１０１を示す。具体的には、条件別ソースコード２０１ｃは、コンパイルスイッチＴＹＰＥ＿Ａが無効であり、かつ、コンパイルスイッチＴＹＰＥ＿Ｂが有効の場合のソースコード１０１を示す。
【００３６】
図８Ｄは従来の条件別ソースコード２０１ｄの例を示す図である。図８Ｄは、仕向けｄ用のソースコード１０１を示す。具体的には、条件別ソースコード２０１ｄは、コンパイルスイッチＴＹＰＥ＿Ａが有効であり、かつ、コンパイルスイッチＴＹＰＥ＿Ｂが有効の場合のソースコード１０１を示す。
【００３７】
図９は従来の解析方法を示す図である。図９に示すように、従来は、条件別ソースコード２０１ａ〜２０１ｄを別々に解析することにより得られた解析結果２０２ａ〜２０２ｄを集計することにより、集計結果２０３（実施形態の解析結果１０５に相当）が得られていた。そのため、コンパイルスイッチがＮ種の場合、２のＮ乗通りの組み合わせを特定後、２のＮ乗通りの条件別ソースコード２０１のコード解析が必要だった。
【００３８】
実施形態の解析装置１０によれば、条件付きコンパイルに使用される条件（コンパイルスイッチ）の組み合わせが２のＮ乗通りである場合であっても、ソースコード１０１の解析は、１回で済む。そのため、実施形態の解析装置１０によれば、条件付きコンパイルに使用される条件が多いほど、従来の解析方法に比べて、解析回数及び解析時間を削減することができる。
【００３９】
最後に実施形態の解析装置１０のハードウェア構成の例について説明する。
【００４０】
［ハードウェア構成の例］
図１０は実施形態の解析装置１０のハードウェア構成の例を示す図である。実施形態の解析装置１０は、制御装置３０１、主記憶装置３０２、補助記憶装置３０３、表示装置３０４、入力装置３０５及び通信装置３０６を備える。制御装置３０１、主記憶装置３０２、補助記憶装置３０３、表示装置３０４、入力装置３０５及び通信装置３０６は、バス３１０を介して接続されている。
【００４１】
制御装置３０１は、補助記憶装置３０３から主記憶装置３０２に読み出されたプログラムを実行する。主記憶装置３０２は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、及び、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等のメモリである。補助記憶装置３０３は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、及び、メモリカード等である。
【００４２】
表示装置３０４は、解析装置１０の状態等を表示する。表示装置３０４は、例えば液晶ディスプレイ等である。入力装置３０５は、解析装置１０を操作するためのインタフェースである。入力装置３０５は、例えばキーボードやマウス等である。解析装置１０がスマートフォン及びタブレット型端末等のスマートデバイスの場合、表示装置３０４及び入力装置３０５は、例えばタッチパネルである。通信装置３０６は、他の装置と通信するためのインタフェースである。
【００４３】
実施形態の解析装置１０で実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、メモリカード、ＣＤ−Ｒ及びＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）等のコンピュータで読み取り可能な記憶媒体に記録されてコンピュータ・プログラム・プロダクトとして提供される。
【００４４】
また実施形態の解析装置１０で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また実施形態の解析装置１０で実行されるプログラムをダウンロードさせずにインターネット等のネットワーク経由で提供するように構成してもよい。
【００４５】
また実施形態の解析装置１０のプログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【００４６】
実施形態の解析装置１０で実行されるプログラムは、上述した図１の解析装置１０の機能ブロックのうち、プログラムによっても実現可能な機能ブロックを含むモジュール構成となっている。当該各機能ブロックは、実際のハードウェアとしては、制御装置３０１が記憶媒体からプログラムを読み出して実行することにより、上記各機能ブロックが主記憶装置３０２上にロードされる。すなわち上記各機能ブロックは主記憶装置３０２上に生成される。
【００４７】
なお上述した図１の各機能ブロックの一部又は全部をソフトウェアにより実現せずに、ＩＣ等のハードウェアにより実現してもよい。
【００４８】
また複数のプロセッサを用いて各機能を実現する場合、各プロセッサは、各機能のうち１つを実現してもよいし、各機能のうち２以上を実現してもよい。
【００４９】
また実施形態の解析装置１０の動作形態は任意でよい。実施形態の解析装置１０を、例えばネットワーク上のクラウドシステムとして動作させてもよい。
【００５０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５１】
１  分割部
２  生成部
３  解析部
１０  解析装置
１０１  ソースコード
１０２  本体コード情報
１０３  コンパイルスイッチコード情報
１０４  状態情報
１０５  解析結果
２０１  条件別ソースコード
２０２  解析結果
２０３  集計結果
３０１  制御装置
３０２  主記憶装置
３０３  補助記憶装置
３０４  表示装置
３０５  入力装置
３０６  通信装置
３１０  バス
【図１】
2019185593.tif 000003
【図２】
2019185593.tif 000004
【図３】
2019185593.tif 000005
【図４】
2019185593.tif 000006
【図５】
2019185593.tif 000007
【図６】
2019185593.tif 000008
【図７】
2019185593.tif 000009
【図８Ａ】
2019185593.tif 000010
【図８Ｂ】
2019185593.tif 000011
【図８Ｃ】
2019185593.tif 000012
【図８Ｄ】
2019185593.tif 000013
【図９】
2019185593.tif 000014
【図１０】
2019185593.tif 000015