【文献】
町田欣史,テスト自動化の支援を行うツール活用術 (1)静的解析ツール,ソフトウェア・テストPRESS,日本,(株)技術評論社,2006年 8月25日,第3巻,pp.46-53
【文献】
川口耕介,チーム内作業の改善,WEB+DB PRESS,日本,(株)技術評論社,2012年 3月25日,第67巻,pp.16-21
【文献】
村上智美,チーム開発の土台づくり,WEB+DB PRESS,日本,(株)技術評論社,2008年 3月25日,第43巻,pp.68-72
(58)【調査した分野】(Int.Cl.,DB名)
コードファイルの形で入力されたソースコードから解析に必要な情報を抽出し、精製する構文解析部と、構文解析部で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報を検出し、前記欠陥情報は欠陥が発生したラインの位置情報を含むようにする欠陥検出部と、欠陥検出部で検出された欠陥情報及び構文解析部で精製された解析に必要な情報に基づいて修正例示情報及び留意事項情報のうちの少なくとも一つを生成し、一つの欠陥情報に対して一つまたはそれ以上の修正例示情報または留意事項情報を生成する修正例示生成部と、生成された欠陥情報、修正例示情報及び留意事項情報のうちの少なくとも一つを、修正例示ファイルの形からなる総合解析結果情報として構成して解析結果出力モジュールへ伝達する解析結果伝達部とを含むソースコード解析モジュール、及び、
ソースコード解析モジュールから伝達された総合解析結果情報から欠陥情報を抽出して出力する欠陥出力部と、ソースコード解析モジュールから伝達された総合解析結果情報から修正例示情報及び留意事項情報のうちの少なくとも一つを抽出して出力する修正例出力部とを含む解析結果出力モジュールを含んでなり、
前記欠陥検出部の欠陥情報検出は、それぞれの欠陥有無をチェックするように備えられたそれぞれのチェッカーの機能実行によって行われ、
前記それぞれのチェッカーは、欠陥情報検出時に検出された欠陥情報に対して生成される修正例示情報及び留意事項情報のうちの少なくとも一つが含まれている総合解析結果情報を修正例示生成部へ伝達するように構成され、
前記修正例示情報は、欠陥情報が検出されたソースコードラインに対して他のコードラインの「追加」、他のコードラインへの「変更」、及び検出されたコードラインの「削除」のうちの少なくとも一つを含み、
前記修正例示情報に含まれる修正例示コードは、
欠陥情報を検出したチェッカーが、予め設定されたテンプレートに基づいてソースコードを解析及び推論した結果を入力値にして生成されることを特徴とする、ソースコード解析装置。
【発明を実施するための形態】
【0016】
本発明は、その技術的思想または主要な特徴から逸脱することなく、他の様々な形態で実施できる。よって、本発明の実施形態は、あらゆる点において単純な例示に過ぎず、限定的に解釈されてはならない。
【0017】
「第1」、「第2」などの用語は様々な構成要素を説明するために使用できるが、前記構成要素はこれらの用語により限定されるものではない。これらの用語は、ある構成要素を他の構成要素と区別する目的のみで使用される。例えば、本発明の権利範囲を逸脱しない範疇内で、第1構成要素は第2構成要素と命名することができ、これと同様に、第2構成要素も第1構成要素と命名することができる。「及び/又は」という用語は、複数の関連した記載項目の組み合わせ、又は複数の関連した記載項目のいずれかを含む。
【0018】
ある構成要素が他の構成要素に「連結」または「接続」されていると言及されたときは、その他の構成要素に直接連結又は接続されている可能性もあるが、それらの構成要素の間に別の構成要素が存在することもあると理解すべきである。これに対して、ある構成要素が他の構成要素に「直接連結」されているか、「直接接続」されていると言及されたときは、それらの構成要素の間に別の構成要素が存在しないと理解すべきである。
【0019】
本出願において使用した用語は、単に特定の実施形態を説明するために使用されたものであり、本発明を限定するものではない。単数の表現は、文脈上明らかに異なる意味を表さない限り、複数の表現を含む。本出願において、「含む」又は「備える」、「有する」などの用語は、明細書に記載された特徴、数字、段階、動作、構成要素、部品又はこれらの組み合わせが存在することを示すものであり、1つ又はそれ以上の他の特徴、数字、段階、動作、構成要素、部品又はこれらの組み合わせの存在又は付加の可能性を予め排除するものではないと理解すべきである。
【0020】
別途定義されていない限り、技術的又は科学的な用語を含めてここで使用される全ての用語は、本発明の属する技術分野における通常の知識を有する者に一般的に理解されるものと同様の意味を有する。一般に使用される辞書に定義されている用語は、関連技術の文脈上持つ意味と同じ意味を持つと解釈されるべきであり、本出願において明らかに定義しない限り、理想的または過度に形式的な意味で解釈されない。
【0021】
以下、添付図面を参照して、本発明に係る好適な実施形態を詳細に説明するが、図面符号に関係なく、同一または対応の構成要素は同一の参照番号を付し、これについての重複説明は省略する。本発明を説明するにあたり、関連した公知の技術についての具体的な説明が本発明の要旨を不明確にするおそれがあると判断される場合は、その詳細な説明を省略する。
【0022】
図1は本発明の一実施形態に係るソースコード解析(Analysis)装置の構成図、
図2は本発明の一実施形態に係るソースコード解析装置の解析結果情報の構成例である。
【0023】
本実施形態のソースコード解析装置Aは、ソースコード入力モジュール100、ソースコード解析モジュール200、解析結果出力モジュール300及び制御モジュール400を含み、一例として、ソースコード解析装置の実現のためのコンピュータプログラムが通常のコンピュータハードウェアで駆動される形態で実現できる。
【0024】
ソースコード入力モジュール100は、例えば、解析対象ソースコードの入力をコードファイルの形で受け、後述のソースコード解析モジュール200が解析処理を行えるようにする。一例として、コードファイルの入力はユーザーのファイル入力またはオープン操作によって行われ得る。
【0025】
ソースコード解析モジュール200は、解析のために入力伝達されたソースコードから、欠陥情報220A、修正例示情報230A、及び修正時に発生しうる様々な種類の留意事項情報230Bを含む総合解析結果240Aを生成する。
【0026】
解析結果出力モジュール300は、ソースコード解析モジュール200から伝達された総合解析結果240Aに基づいて、ユーザーに欠陥情報220A、修正例示情報230A、留意事項情報230Bを示す。実施形態によって、ソースコード解析モジュール200及び解析結果出力モジュール300は一つのモジュールに統合実現できる。
【0027】
好ましい一例として、ソースコード解析モジュール200は、構文解析部210、欠陥検出部220、修正例示生成部230、及び解析結果伝達部240を含む。
【0028】
構文解析部210は、入力されたソースコードから解析に必要な各種情報を抽出し、精製する役目を果たす。解析に必要な情報としては、例えば、抽象構文ツリー(Abstract Syntax Tree)やソースコードのライン数、位置情報などが挙げられる。
【0029】
欠陥検出部220は、構文解析部210で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報220Aを検出する。前記欠陥検出部220の欠陥情報220Aの検出は、一例として、欠陥有無をチェックするチェッカーの機能実行によって行われ得る。欠陥情報220Aは、例えば、欠陥が実際に発生したソースコードのファイル名、ラインといった位置情報と、欠陥の種類、実際欠陥の原因となった部分、欠陥が発生したソースコードの流れといった実際欠陥情報などとから構成される。
【0030】
前記構文解析部210の構文解析機能及び欠陥検出部220の欠陥情報検出機能は、公知の様々な静的解析ツール(Static Analysis Tool)の構文解析機能及び欠陥情報検出機能と同じもしくは類似した構成によって実現できる。静的解析ツールは、文法ベース(Syntactic)解析または意味ベース(Semantic)解析方式の様々な商用製品が公知になっているので、その詳細な説明は省略する。
【0031】
前記欠陥検出部220の欠陥情報220Aの検出は、それぞれの欠陥有無をチェックするように備えられたそれぞれのチェッカーの機能実行によって行われ、前記それぞれのチェッカーは、欠陥情報220Aの検出時に検出された欠陥情報220Aに対して生成されるべき修正例示情報230Aと留意事項情報230Bが含まれている総合解析結果情報240Aを修正例示生成部230へ伝達するように構成される。総合解析結果情報240Aは、例えば、修正例示XMLファイルの形で構成でき、必ずしもこのような形態に限定されるものではない。
【0032】
一方、同じ一つのチェッカーである場合にも、解析されたソースコードの構造によって異なる修正例示情報230Aと留意事項情報230Bを伝達することができる。また、欠陥の特性上、チェッカーがチェックした欠陥に対して敢えて修正例示情報230Aと留意事項情報230Bが提供される必要がない場合には、これらの情報を提供しない、或いは修正例示情報230Aのみを提供する、或いは留意事項情報230Bのみを提供するように構成されることもできる。また、一つの欠陥情報220Aに対して複数の修正例示情報230Aと留意事項情報230Bが複数の代替として生成されることもある。これについては別途後述する。本実施形態の説明では、修正例示情報230Aと留意事項情報230Bが一緒に提供される場合を例示説明する。
【0033】
修正例生成部230は、欠陥検出部220で検出された欠陥情報220A及び構文解析部210で精製された解析に必要な情報に基づいて修正例示情報230Aと留意事項情報230Bを生成する。
【0034】
修正例示情報230Aは、欠陥情報220A内で発生した欠陥を実際ソースコードでどのように修正すればよいかを提供する修正例示コードをいう。たとえば、修正例示情報230Aから提供された情報に基づいてソースコードを修正すると、欠陥が発生しない。
【0035】
前記修正例示情報230Aは、欠陥情報220Aが検出されたソースコードラインに対して他のコードラインの「追加」、他のコードラインへの「変更」、及び検出されたコードラインの「削除」のうちの少なくとも一つを含むことができる。
【0036】
留意事項情報230Bは、ユーザーがソースコードを修正したときに発生しうる様々な留意事項情報をいう。たとえば、ユーザーにソースコード修正の際に役立つ情報や、修正例示情報230Aから提供する修正例示コードの通りにコードを修正したときに発生しうる付随的な問題、またはソースコード解析装置Aで自動的に生成することができないためユーザーが直接修正しなければならない事項が挙げられる。
【0037】
解析結果伝達部240は、先に生成された欠陥情報220Aや修正例示情報230A、留意事項情報230Bなどを総合解析結果情報240Aとして構成して解析結果出力モジュール300へ伝達する。このような総合解析結果情報240Aは、ファイル或いはメモリ内のデータであってもよく、他の情報を含んでもよい。また、欠陥の種類によっては、一つの欠陥情報220Aの他に、修正例示情報230A、留意事項情報230Bはないか或いはさらに多い。
【0038】
好ましい一例として、解析結果出力モジュール300は欠陥出力部310と修正例示出力部320を含む。
【0039】
欠陥出力部310は、ソースコード解析モジュール200から伝達された総合解析結果情報240Aから欠陥情報220Aを抽出してユーザーに見せる。このような情報としては、一般に、上述したように、ソースコードのファイル名、ラインなどの位置情報、欠陥の種類、実際欠陥の原因となった部分、欠陥が発生したソースコードの流れなどが挙げられる。
【0040】
修正例示出力部320は、ソースコード解析モジュール200から伝達された総合解析結果情報240Aから修正例示情報230A及び留意事項情報230Bを抽出してユーザーに見せる。このような情報としては、一般に、上述したように、実際ソースコードをどのように修正すべきかに対する修正例示コード、及びソースコードを修正したときに発生しうる様々な留意事項情報が挙げられる。実施形態によっては、欠陥出力部310と修正例示出力部320は同時に出力を行うことも、他の情報をさらに出力することもできる。
【0041】
以下、各例示画面を用いて本実施形態のソースコード解析装置の具現例を例示説明する。
【0042】
図3は本発明の一実施形態に係るソースコード解析装置の欠陥検出部のチェッカーによって欠陥が発見されたソースコードページ画面例である。
【0043】
欠陥が発見されると、画面の右上端に修正例示ボタンが表示される。
【0044】
図4は本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面例である。
【0045】
画面に欠陥情報、修正例示情報、留意事項情報がそれぞれ表示される。修正例示情報または留意事項情報は、一つの欠陥情報に対して一つまたはそれ以上が提供できる。
【0046】
図5は本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の例示メニュー表示例である。
【0047】
例示メニューはチェッカーの種類及びソースコードによってその個数が異なる。それぞれの例示メニューは、左端の三角マークを押すことにより、折り畳まれたり展開されたりすることが可能である。
【0048】
図6は本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の欠陥情報表示例である。
【0049】
欠陥情報メニューは、チェッカーが検出した欠陥をどのように修正すべきであるかを教えてくれる。
【0050】
図7は本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の修正例示情報表示例である。
【0051】
修正例示メニューでは、ソースコードにおけるどの部分をどのように修正すべきかを教えてくれる。前記例示コードはできる限り実際のコードと等しく提供される。画面中に赤色でグラデーションされて「−」で始まるラインは削除されるべきコードを表示し、緑色でグラデーションされて「+」で始まるラインは追加されるべきコードに該当する。修正が必要なコードのラインが大きく離れているか或いは異なるファイルである場合、ボックスが複数個表示できる。
【0052】
図8は本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の留意事項情報表示例である。
【0053】
留意事項情報は、ソースコードを修正したときに発生しうる様々な状況や注意点を説明する。よって、チェッカーの種類及びソースコードによってその個数および内容が異なる。
【0054】
下記のソースコードは本発明の一実施形態に係るソースコード解析装置の修正例示XMLファイルの例であり、表1は下記のソースコードの修正例示XMLファイルの主要タグまたは変数定義の例を示す表である。下記のソースコードおよび表1から、本実施形態の修正例示XMLファイルが例示的に理解できる。
<alarm>
<sca>
<alternativeid=“1”>
<desc id=“crulechk.CHECKER_NAME.sca.desc.default”>
<arg>func</arg>
</desc>
<code type=“add” src=“/src/somefile.cpp” startline=“1230”>
strncpy(dst,src, 10);
</code>
<code type=“remove” src=“/src/somefile.cpp” startline=“1250” endline=“1251”/>
<code type=“replace” src=“/src/somefile.cpp” startline=“1400”>voidfunc(int arg) </code>
<note type=“change_function_interface”>
<desc id=“crulechk.CHECKER_NAME.sca.note.desc.1”>
<arg>func</arg>
</desc>
<value type=“def_src”>/src/somefile.cpp</value>
<value type=“def_line”>1250</value>
<value type=“function_name”>func</value>
</note>
</alternative>
<alternativeid=“2”>
…
</alternative>
</sca>
</alarm>
【表1】
「sca」または「Sca」は、「Smart Code Alternative」の略字であって、本実施形態の修正例示XMLファイルに含まれている複数の代替(alternative)を含む上位要素の例示的名称として便宜上命名する。
【0055】
図9は本発明の一実施形態に係るソースコード解析装置のためのチェッカー実現クラスのうちのXML出力クラスの例、
図10は本発明の一実施形態に係るソースコード解析装置のためのチェッカー実現クラスのうちのコード生成クラスの例である。
【0056】
図9の場合、上位クラスから簡略に例示説明する。
【0057】
最上部の「AlarmXMLMaker」クラスは、アラーム出力の際に、Scaインスタンスがあれば一緒に出力する。
【0058】
中間の「Sca」クラスは、ScaAlternativeインスタンス生成を担当し、チェッカーで代替を生成するときにこの関数を使用する。
【0059】
最下部の「ScaAlternative」クラス(代替情報クラス)は、説明、コード、留意事項情報を含み、コードの追加/変更/削除情報は、「CodeGenerator」クラスが生成したコード情報を受け取るか、或いは元のソースコードから受け取る場合もある。
【0060】
図10の場合、「CodeGenerator」クラス(コード生成クラス)は、一定のテンプレートに基づいて元のソースコードを解析及び推論した結果を入力値として修正例示コードを生成する。「CodeGenerator」クラスには、ライン追加のための「SimpleCodeGenerator」、タイプ生成のための「TypeCodeGenerator」、変数生成のための「VariableCodeGenerator」、関数生成のための「FunctionCodeGenerator」などが含まれる。
【0061】
表2は本発明の一実施形態に係るソースコード解析装置のためのチェッカー構成の一例、表3は本発明の一実施形態に係るソースコード解析装置のためのチェッカー構成の他の一例、表4は本発明の一実施形態に係るソースコード解析装置のためのチェッカー構成の別の一例を示す表である。
【表2】
例題1の場合、dot(.)演算子を除く二項演算子と前後の被演算子はスペースで区切られるべきであることを検査するチェッカーである。提供されたソースコードのうち、二項演算子「−」が使用された部分の左右にスペースを入れることで代替コード(修正例示コード)を作成することができる。この例題の場合、特別な留意事項はない。
【0062】
【表3】
例題2の場合、配列タイプパラメータとして受け取った配列タイプの変数に対してsizeofを使用してはならないというチェッカーである。代替コードは1番ライン、3番ラインで発生する。この際、1番ラインの変更により関数インターフェース変更留意事項が生じる。もし関数インターフェースが変更される場合、この関数の宣言や使用した部分も修正されるべきである。3番ラインのstrncpyは3番目のパラメータの開始節を代替コード1で追加した長さ値の変数を入れるようにする。これに関連しに特別な留意事項はない。
【0063】
【表4】
例題3の場合、効果のない関数呼び出しを検査するチェッカーである。例えば、memsetで3番目のパラメータの値が0である場合、実質的に意味のないコードになる。代替1は、初期化しようとするバッファのサイズを推論可能な場合にはそのサイズを表示し、推論不可能な場合には<<length>>などの指定された識別子を用いて表示する。代替2の場合、条件付きで生成する代替である。もしmemsetの二番目のパラメータが単一定数ではない場合は、2、3番目のパラメータを入れ替えて使用した可能性がある。したがって、代替2はmemsetの2、3番目のパラメータの値を互いに交替することを提案するようにする。当該チェッカーも特別な留意事項はない。
【0064】
一例として、表2〜表4に例示された各チェッカーの代替は、
図9で例示された「Sca」クラス及び「ScaAlternative」クラス(代替情報クラス)によって提供できる。
【0065】
他の例として、表2〜表4に例示された各チェッカーの代替コードは、
図10で例示された「CodeGenerator」クラス(コード生成クラス)によって提供できる。
【0066】
「Sca」クラス、「ScaAlternative」クラス(代替情報クラス)及び「CodeGenerator」クラス(コード生成クラス)は、各チェッカーの欠陥内容に相応して予め設定できる。
【0067】
本発明の実施形態は、様々なコンピュータで実現される動作を行うためのプログラムと、これを記録したコンピュータ可読媒体を含む。前記コンピュータ可読媒体は、プログラム命令、データファイル、データ構造などを単独で或いは組み合わせて含むことができる。前記媒体は、本発明のために特別に設計及び構成されたものであってもよく、コンピュータソフトウェアの当業者に公知されて使用可能なものであってもよい。コンピュータ可読記録媒体の例には、ハードディスク、フロッピーディスク及び磁気テープなどの磁気媒体、CD−ROM、DVD、USBドライブなどの光記録媒体、フロプティカルディスクなどの磁気−光媒体、及びROM、RAM、フラッシュメモリなどのプログラム命令を保存及び実行するように特別に構成されたハードウェア装置が含まれる
。プログラム命令の例には、コンパイラによって作られるような機械語コードだけでなく、インタープリターなどを用いてコンピュータによって実行できる高級言語コードを含む。
【0068】
一例として、本発明のソースコード解析装置は、ソースコード解析機能及び解析結果出力機能を実行するためのコンピュータプログラムによってコンピュータの機能動作が実行される形態で実現できる。
【0069】
ソースコード解析機能は上述したソースコード解析モジュールによって提供され、解析結果出力機能は上述した解析結果出力モジュールによって提供される。
【0070】
ソースコード解析機能はソースコード解析モジュールの詳細機能をさらに実行し、解析結果出力機能は解析結果出力モジュールの詳細機能をさらに実行することにより、本発明のソースコード解析装置の全体機能が提供できる。