特許第6965202号(P6965202)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社東芝の特許一覧 ▶ 東芝ソリューション株式会社の特許一覧

<>
  • 特許6965202-解析装置、解析方法及びプログラム 図000002
  • 特許6965202-解析装置、解析方法及びプログラム 図000003
  • 特許6965202-解析装置、解析方法及びプログラム 図000004
  • 特許6965202-解析装置、解析方法及びプログラム 図000005
  • 特許6965202-解析装置、解析方法及びプログラム 図000006
  • 特許6965202-解析装置、解析方法及びプログラム 図000007
  • 特許6965202-解析装置、解析方法及びプログラム 図000008
  • 特許6965202-解析装置、解析方法及びプログラム 図000009
  • 特許6965202-解析装置、解析方法及びプログラム 図000010
  • 特許6965202-解析装置、解析方法及びプログラム 図000011
  • 特許6965202-解析装置、解析方法及びプログラム 図000012
  • 特許6965202-解析装置、解析方法及びプログラム 図000013
  • 特許6965202-解析装置、解析方法及びプログラム 図000014
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6965202
(24)【登録日】2021年10月22日
(45)【発行日】2021年11月10日
(54)【発明の名称】解析装置、解析方法及びプログラム
(51)【国際特許分類】
   G06F 8/75 20180101AFI20211028BHJP
【FI】
   G06F8/75
【請求項の数】8
【全頁数】12
(21)【出願番号】特願2018-78398(P2018-78398)
(22)【出願日】2018年4月16日
(65)【公開番号】特開2019-185593(P2019-185593A)
(43)【公開日】2019年10月24日
【審査請求日】2020年9月24日
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(73)【特許権者】
【識別番号】301063496
【氏名又は名称】東芝デジタルソリューションズ株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】特許業務法人酒井国際特許事務所
(72)【発明者】
【氏名】荒木 大
(72)【発明者】
【氏名】藤浦 理恵
(72)【発明者】
【氏名】根本 昌幸
(72)【発明者】
【氏名】内田 稔
(72)【発明者】
【氏名】鶴我 信隆
【審査官】 中村 信也
(56)【参考文献】
【文献】 特開平6−089170(JP,A)
【文献】 特開2013−114575(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00−8/38
G06F 8/60−8/77
G06F 9/44−9/445
G06F 9/451
(57)【特許請求の範囲】
【請求項1】
ソースコードを、コンパイルスイッチの状態制御を示すコンパイルスイッチコード情報と、前記コンパイルスイッチコード情報を含まない本体コード情報とに分割する分割部と、
前記コンパイルスイッチコード情報から、前記ソースコードの行毎の前記コンパイルスイッチの状態を示す状態情報を生成する生成部と、
前記状態情報から、前記コンパイルスイッチの組み合わせを解析する解析部と、
を備える解析装置。
【請求項2】
前記解析部は、前記本体コード情報と、前記状態情報とから、前記コンパイルスイッチの組み合わせに依存する依存情報を、前記コンパイルスイッチの組み合わせ毎に更に解析する、
請求項1に記載の解析装置。
【請求項3】
前記依存情報は、前記ソースコードに含まれる変数が有効であるか否かを、前記コンパイルスイッチの組み合わせ毎に示す変数情報を含む、
請求項2に記載の解析装置。
【請求項4】
前記変数情報は、前記変数の型、前記変数の種類、及び、前記変数のコメント行に含まれる情報のうち、少なくとも1つを更に含む、
請求項3に記載の解析装置。
【請求項5】
前記依存情報は、前記ソースコードに含まれる関数が有効であるか否かを、前記コンパイルスイッチの組み合わせ毎に示す関数情報を含む、
請求項2乃至4のいずれか1項に記載の解析装置。
【請求項6】
前記関数情報は、前記関数の定義、及び、前記関数のコメント行に含まれる情報の少なくとも一方を更に含む、
請求項5に記載の解析装置。
【請求項7】
分割部が、ソースコードを、コンパイルスイッチの状態制御を示すコンパイルスイッチコード情報と、前記コンパイルスイッチコード情報を含まない本体コード情報とに分割するステップと、
生成部が、前記コンパイルスイッチコード情報から、前記ソースコードの行毎の前記コンパイルスイッチの状態を示す状態情報を生成するステップと、
解析部が、前記状態情報から、前記コンパイルスイッチの組み合わせを解析するステップと、
を含む解析方法。
【請求項8】
コンピュータを、
ソースコードを、コンパイルスイッチの状態制御を示すコンパイルスイッチコード情報と、前記コンパイルスイッチコード情報を含まない本体コード情報とに分割する分割部と、
前記コンパイルスイッチコード情報から、前記ソースコードの行毎の前記コンパイルスイッチの状態を示す状態情報を生成する生成部と、
前記状態情報から、前記コンパイルスイッチの組み合わせを解析する解析部、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は解析装置、解析方法及びプログラムに関する。
【背景技術】
【0002】
C言語等のコンピュータプログラムのソースコードでは、プリプロセッサ命令を使用した条件付きコンパイル(コンパイルスイッチ)のための記述が、従来から利用されている。所定の条件を示すコンパイルスイッチを利用することによって、コンピュータプログラムの動作を変更することができる。
【0003】
条件付きコンパイル(コンパイルスイッチ)のための記述とは、C言語のコンピュータプログラムのソースコードにおいては、#ではじまるプリプロセッサディレクティブの中で、#ifdef、#ifndef、#endif、#if、#elif、#elseから始まる文を意味する。その他の、#include、#define、#undefなどから始まるプリプロセッサディレクティブは除く。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特許第4827418号公報
【特許文献2】特開2000−148508号公報
【特許文献3】特開平5−341976号公報
【特許文献4】特開平11−073305号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来の技術では、条件付きコンパイルに使用される条件が多いほど、ソースコードを解析することが難しかった。例えば、ソースコードを解析する際には、条件の組み合わせを考慮する必要があるため、条件付きコンパイルに使用される条件が多いほど、解析回数及び解析時間を要していた。
【課題を解決するための手段】
【0006】
実施形態の解析装置は、ソースコードを、コンパイルスイッチの状態制御を示すコンパイルスイッチコード情報と、前記コンパイルスイッチコード情報を含まない本体コード情報とに分割する分割部と、前記コンパイルスイッチコード情報から、前記ソースコードの行毎の前記コンパイルスイッチの状態を示す状態情報を生成する生成部と、前記状態情報から、前記コンパイルスイッチの組み合わせを解析する解析部と、を備える。
【図面の簡単な説明】
【0007】
図1図1は実施形態の解析装置の機能構成の例を示す図である。
図2図2は実施形態のソースコードの例を示す図である。
図3図3は実施形態の本体コード情報の例を示す図である。
図4図4は実施形態のコンパイルスイッチコード情報の例を示す図である。
図5図5は実施形態の状態情報の例を示す図である。
図6図6は実施形態の解析結果の例を示す図である。
図7図7は実施形態の解析方法と、従来の解析方法との差異を説明するための図である。
図8A図8Aは従来の条件別ソースコードの例を示す図である。
図8B図8Bは従来の条件別ソースコードの例を示す図である。
図8C図8Cは従来の条件別ソースコードの例を示す図である。
図8D図8Dは従来の条件別ソースコードの例を示す図である。
図9図9は従来の解析方法を示す図である。
図10図10は実施形態の解析装置のハードウェア構成の例を示す図である。
【発明を実施するための形態】
【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】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0051】
1 分割部
2 生成部
3 解析部
10 解析装置
101 ソースコード
102 本体コード情報
103 コンパイルスイッチコード情報
104 状態情報
105 解析結果
201 条件別ソースコード
202 解析結果
203 集計結果
301 制御装置
302 主記憶装置
303 補助記憶装置
304 表示装置
305 入力装置
306 通信装置
310 バス
図1
図2
図3
図4
図5
図6
図7
図8A
図8B
図8C
図8D
図9
図10