JP2017527034A - ソースコード解析装置、そのためのコンピュータプログラム、及びその記録媒体 - Google Patents

ソースコード解析装置、そのためのコンピュータプログラム、及びその記録媒体 Download PDF

Info

Publication number
JP2017527034A
JP2017527034A JP2017510645A JP2017510645A JP2017527034A JP 2017527034 A JP2017527034 A JP 2017527034A JP 2017510645 A JP2017510645 A JP 2017510645A JP 2017510645 A JP2017510645 A JP 2017510645A JP 2017527034 A JP2017527034 A JP 2017527034A
Authority
JP
Japan
Prior art keywords
information
source code
analysis
defect
function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017510645A
Other languages
English (en)
Other versions
JP6579340B2 (ja
Inventor
ヒョンキル ハム,
ヒョンキル ハム,
ヨンボム ジョン,
ヨンボム ジョン,
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fasoo com Co Ltd
Original Assignee
Fasoo com Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fasoo com Co Ltd filed Critical Fasoo com Co Ltd
Priority claimed from PCT/KR2015/008937 external-priority patent/WO2016032234A1/ko
Publication of JP2017527034A publication Critical patent/JP2017527034A/ja
Application granted granted Critical
Publication of JP6579340B2 publication Critical patent/JP6579340B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis

Abstract

本発明は、ソースコードから解析に必要な情報を抽出し精製する構文解析部と、構文解析部で精製された解析に必要な情報に基づきソースコードから欠陥情報を検出する欠陥検出部と、欠陥検出部で検出された欠陥情報及び構文解析部で精製された解析に必要な情報に基づき修正例示情報及び/又は留意事項情報を生成する修正例示生成部と、生成された欠陥情報等を総合解析結果情報として構成して解析結果出力モジュールへ伝達する解析結果伝達部とを含むソースコード解析モジュール、及び、ソースコード解析モジュールから伝達された総合解析結果情報から欠陥情報を抽出して出力する欠陥出力部と、ソースコード解析モジュールから伝達された総合解析結果情報から修正例示情報及び留意事項情報のうちの少なくとも一つを抽出して出力する修正例出力部とを含む解析結果出力モジュールを備えるソースコード解析装置に関する。【選択図】図1

Description

本発明は、ソースコード解析装置、そのためのコンピュータプログラム、及びその記録媒体に関し、さらに詳しくは、予め定義された解析ルールに基づいて解析した解析対象ソースコードに欠陥が発見された場合に欠陥修正案を提案することができるように構成されたソースコード解析装置、そのためのコンピュータプログラム、及びその記録媒体に関する。
静的プログラム解析(Static Code Analysis)は、コンピュータソフトウェアを解析する様々な方法の一つである。この方法の特徴は、ソフトウェアを直接実行せず、開発中のソフトウェアのソースコードを対象に解析を行うという点である。
静的解析ツール(Static Analysis Tool)は、静的プログラム解析を人の手ではなく、ソフトウェアを用いて自動的に行うように開発されたプログラムである。一般に、ソースコードのサイズは非常に膨大であり、人の手で一つ一つ静的プログラム解析を行うことは殆ど不可能であるといえる。したがって、このような解析を自動化して実行し得るようにすることが静的解析ツールの役目であるといえる。静的解析ツールは、種類によって、ソースコードから様々な種類の欠陥や脆弱性を検出することができ、解析によって検出された欠陥をユーザーに知らせる。
前述したような静的解析ツール形態のソースコード解析装置が従来から様々に提案されている。
しかし、従来から提案または使用されてきたソースコード解析装置は、欠陥検出及びそれに対する検出メッセージ生成という限られた機能のみを提供し、検出された欠陥に対する修正作業はユーザー(プログラマ)の個人的な知識と経験に依存しなければならないという限界があった。
本発明は、かかる問題点に鑑みてなされたもので、その目的は、予め定義された解析ルールに基づいて解析した解析対象ソースコードに欠陥が発見された場合に欠陥修正案を提案することができるように構成されたソースコード解析装置、そのためのコンピュータプログラム、及びその記録媒体を提供することにある。
上記の目的を達成するための本発明の一側面によれば、ソースコードから解析に必要な情報を抽出し、精製する構文解析部と、構文解析部で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報を検出する欠陥検出部と、欠陥検出部で検出された欠陥情報及び構文解析部で精製された解析に必要な情報に基づいて修正例示情報及び留意事項情報のうちの少なくとも一つを生成する修正例示生成部と、生成された欠陥情報、修正例示情報及び留意事項情報のうちの少なくとも一つを総合解析結果情報として構成して解析結果出力モジュールへ伝達する解析結果伝達部とを含むソースコード解析モジュール、及び、ソースコード解析モジュールから伝達された総合解析結果情報から欠陥情報を抽出して出力する欠陥出力部と、ソースコード解析モジュールから伝達された総合解析結果情報から修正例示情報及び留意事項情報のうちの少なくとも一つを抽出して出力する修正例出力部とを含む解析結果出力モジュールを含んでなる、ソースコード解析装置が開示される。
好ましくは、前記修正例示生成部は、一つの欠陥情報に対して一つまたはそれ以上の修正例示情報または留意事項情報を生成するように構成されたことを特徴とする。
好ましくは、前記欠陥検出部の欠陥情報検出は、それぞれの欠陥有無をチェックするように備えられたそれぞれのチェッカーの機能実行によって行われ、前記それぞれのチェッカーは、欠陥情報検出時に検出された欠陥情報に対して生成される修正例示情報及び留意事項情報のうちの少なくとも一つが含まれている総合解析結果情報を修正例示生成部へ伝達するように構成されたことを特徴とする。
好ましくは、前記修正例示情報は、欠陥情報が検出されたソースコードラインに対して他のコードラインの「追加」、他のコードラインへの「変更」、及び検出されたコードラインの「削除」のうちの少なくとも一つを含むことを特徴とする。
好ましくは、前記修正例示情報に含まれる修正例示コードは、欠陥情報を検出したチェッカーが、予め設定されたテンプレートに基づいてソースコードを解析及び推論した結果を入力値にして生成されることを特徴とする。
本発明の別の一側面によれば、ソースコード解析装置でソースコード解析機能及び解析結果出力機能を実行するためのコンピュータプログラムであって、前記ソースコード解析機能は、ソースコードから解析に必要な情報を抽出し、精製する構文解析機能と、構文解析機能で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報を検出する欠陥検出機能と、欠陥検出機能で検出された欠陥情報及び構文解析機能で精製された解析に必要な情報に基づいて修正例示情報及び留意事項情報のうちの少なくとも一つを生成する修正例示生成機能と、生成された欠陥情報、修正例示情報及び留意事項情報のうちの少なくとも一つを総合解析結果情報として構成して解析結果出力機能へ伝達する解析結果伝達機能とを含めて実行し;前記解析結果出力機能は、ソースコード解析機能から伝達された総合解析結果情報から欠陥情報を抽出して出力する欠陥出力機能と、ソースコード解析機能から伝達された総合解析結果情報から修正例示情報及び留意事項情報のうちの少なくとも一つを抽出して出力する修正例示出力機能とを含めて実行するために;媒体に格納された、コンピュータプログラムが開示される。
本発明の別の一側面によれば、ソースコード解析装置でソースコード解析機能及び解析結果出力機能を実行するためのコンピュータプログラムが記録された記録媒体であって、前記ソースコード解析機能は、ソースコードから解析に必要な情報を抽出し、精製する構文解析機能と、構文解析機能で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報を検出する欠陥検出機能と、欠陥検出機能で検出された欠陥情報及び構文解析機能で精製された解析に必要な情報に基づいて修正例示情報及び留意事項情報のうちの少なくとも一つを生成する修正例示生成機能と、生成された欠陥情報、修正例示情報及び留意事項情報のうちの少なくとも一つを総合解析結果情報として構成して解析結果出力機能へ伝達する解析結果伝達機能とを含めて実行し;前記解析結果出力機能は、ソースコード解析機能から伝達された総合解析結果情報から欠陥情報を抽出して出力する欠陥出力機能と、ソースコード解析機能から伝達された総合解析結果情報から修正例示情報及び留意事項情報のうちの少なくとも一つを抽出して出力する修正例示出力機能とを含めて実行するための;コンピュータプログラムが記録された、コンピュータで読み取り可能な記録媒体が開示される。
このような本発明は、予め定義された解析ルールに基づいて解析した解析対象ソースコードに欠陥が発見された場合に欠陥修正案を提案することができるように構成されるので、ソースコードに対する欠陥修正作業の際にユーザー(プログラマ)の個人的な知識及び経験に依存せず、より客観的かつ向上した欠陥修正作業が可能である。
本発明の一実施形態に係るソースコード解析装置の構成図である。 本発明の一実施形態に係るソースコード解析装置の解析結果情報の構成例である。 本発明の一実施形態に係るソースコード解析装置の欠陥検出部のチェッカーによって欠陥が発見されたソースコードページ画面例である。 本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面例である。 本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の例示メニュー表示例である。 本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の欠陥情報表示例である。 本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の修正例示情報表示例である。 本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の留意事項情報表示例である。 本発明の一実施形態に係るソースコード解析装置のためのチェッカー実現クラスのうちのXML出力クラスの例である。 本発明の一実施形態に係るソースコード解析装置のためのチェッカー実現クラスのうちのコード生成クラスの例である。
本発明は、その技術的思想または主要な特徴から逸脱することなく、他の様々な形態で実施できる。よって、本発明の実施形態は、あらゆる点において単純な例示に過ぎず、限定的に解釈されてはならない。
「第1」、「第2」などの用語は様々な構成要素を説明するために使用できるが、前記構成要素はこれらの用語により限定されるものではない。これらの用語は、ある構成要素を他の構成要素と区別する目的のみで使用される。例えば、本発明の権利範囲を逸脱しない範疇内で、第1構成要素は第2構成要素と命名することができ、これと同様に、第2構成要素も第1構成要素と命名することができる。「及び/又は」という用語は、複数の関連した記載項目の組み合わせ、又は複数の関連した記載項目のいずれかを含む。
ある構成要素が他の構成要素に「連結」または「接続」されていると言及されたときは、その他の構成要素に直接連結又は接続されている可能性もあるが、それらの構成要素の間に別の構成要素が存在することもあると理解すべきである。これに対して、ある構成要素が他の構成要素に「直接連結」されているか、「直接接続」されていると言及されたときは、それらの構成要素の間に別の構成要素が存在しないと理解すべきである。
本出願において使用した用語は、単に特定の実施形態を説明するために使用されたものであり、本発明を限定するものではない。単数の表現は、文脈上明らかに異なる意味を表さない限り、複数の表現を含む。本出願において、「含む」又は「備える」、「有する」などの用語は、明細書に記載された特徴、数字、段階、動作、構成要素、部品又はこれらの組み合わせが存在することを示すものであり、1つ又はそれ以上の他の特徴、数字、段階、動作、構成要素、部品又はこれらの組み合わせの存在又は付加の可能性を予め排除するものではないと理解すべきである。
別途定義されていない限り、技術的又は科学的な用語を含めてここで使用される全ての用語は、本発明の属する技術分野における通常の知識を有する者に一般的に理解されるものと同様の意味を有する。一般に使用される辞書に定義されている用語は、関連技術の文脈上持つ意味と同じ意味を持つと解釈されるべきであり、本出願において明らかに定義しない限り、理想的または過度に形式的な意味で解釈されない。
以下、添付図面を参照して、本発明に係る好適な実施形態を詳細に説明するが、図面符号に関係なく、同一または対応の構成要素は同一の参照番号を付し、これについての重複説明は省略する。本発明を説明するにあたり、関連した公知の技術についての具体的な説明が本発明の要旨を不明確にするおそれがあると判断される場合は、その詳細な説明を省略する。
図1は本発明の一実施形態に係るソースコード解析(Analysis)装置の構成図、図2は本発明の一実施形態に係るソースコード解析装置の解析結果情報の構成例である。
本実施形態のソースコード解析装置Aは、ソースコード入力モジュール100、ソースコード解析モジュール200、解析結果出力モジュール300及び制御モジュール400を含み、一例として、ソースコード解析装置の実現のためのコンピュータプログラムが通常のコンピュータハードウェアで駆動される形態で実現できる。
ソースコード入力モジュール100は、例えば、解析対象ソースコードの入力をコードファイルの形で受け、後述のソースコード解析モジュール200が解析処理を行えるようにする。一例として、コードファイルの入力はユーザーのファイル入力またはオープン操作によって行われ得る。
ソースコード解析モジュール200は、解析のために入力伝達されたソースコードから、欠陥情報220A、修正例示情報230A、及び修正時に発生しうる様々な種類の留意事項情報230Bを含む総合解析結果240Aを生成する。
解析結果出力モジュール300は、ソースコード解析モジュール200から伝達された総合解析結果240Aに基づいて、ユーザーに欠陥情報220A、修正例示情報230A、留意事項情報230Bを示す。実施形態によって、ソースコード解析モジュール200及び解析結果出力モジュール300は一つのモジュールに統合実現できる。
好ましい一例として、ソースコード解析モジュール200は、構文解析部210、欠陥検出部220、修正例示生成部230、及び解析結果伝達部240を含む。
構文解析部210は、入力されたソースコードから解析に必要な各種情報を抽出し、精製する役目を果たす。解析に必要な情報としては、例えば、抽象構文ツリー(Abstract Syntax Tree)やソースコードのライン数、位置情報などが挙げられる。
欠陥検出部220は、構文解析部210で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報220Aを検出する。前記欠陥検出部220の欠陥情報220Aの検出は、一例として、欠陥有無をチェックするチェッカーの機能実行によって行われ得る。欠陥情報220Aは、例えば、欠陥が実際に発生したソースコードのファイル名、ラインといった位置情報と、欠陥の種類、実際欠陥の原因となった部分、欠陥が発生したソースコードの流れといった実際欠陥情報などとから構成される。
前記構文解析部210の構文解析機能及び欠陥検出部220の欠陥情報検出機能は、公知の様々な静的解析ツール(Static Analysis Tool)の構文解析機能及び欠陥情報検出機能と同じもしくは類似した構成によって実現できる。静的解析ツールは、文法ベース(Syntactic)解析または意味ベース(Semantic)解析方式の様々な商用製品が公知になっているので、その詳細な説明は省略する。
前記欠陥検出部220の欠陥情報220Aの検出は、それぞれの欠陥有無をチェックするように備えられたそれぞれのチェッカーの機能実行によって行われ、前記それぞれのチェッカーは、欠陥情報220Aの検出時に検出された欠陥情報220Aに対して生成されるべき修正例示情報230Aと留意事項情報230Bが含まれている総合解析結果情報240Aを修正例示生成部230へ伝達するように構成される。総合解析結果情報240Aは、例えば、修正例示XMLファイルの形で構成でき、必ずしもこのような形態に限定されるものではない。
一方、同じ一つのチェッカーである場合にも、解析されたソースコードの構造によって異なる修正例示情報230Aと留意事項情報230Bを伝達することができる。また、欠陥の特性上、チェッカーがチェックした欠陥に対して敢えて修正例示情報230Aと留意事項情報230Bが提供される必要がない場合には、これらの情報を提供しない、或いは修正例示情報230Aのみを提供する、或いは留意事項情報230Bのみを提供するように構成されることもできる。また、一つの欠陥情報220Aに対して複数の修正例示情報230Aと留意事項情報230Bが複数の代替として生成されることもある。これについては別途後述する。本実施形態の説明では、修正例示情報230Aと留意事項情報230Bが一緒に提供される場合を例示説明する。
修正例生成部230は、欠陥検出部220で検出された欠陥情報220A及び構文解析部210で精製された解析に必要な情報に基づいて修正例示情報230Aと留意事項情報230Bを生成する。
修正例示情報230Aは、欠陥情報220A内で発生した欠陥を実際ソースコードでどのように修正すればよいかを提供する修正例示コードをいう。たとえば、修正例示情報230Aから提供された情報に基づいてソースコードを修正すると、欠陥が発生しない。
前記修正例示情報230Aは、欠陥情報220Aが検出されたソースコードラインに対して他のコードラインの「追加」、他のコードラインへの「変更」、及び検出されたコードラインの「削除」のうちの少なくとも一つを含むことができる。
留意事項情報230Bは、ユーザーがソースコードを修正したときに発生しうる様々な留意事項情報をいう。たとえば、ユーザーにソースコード修正の際に役立つ情報や、修正例示情報230Aから提供する修正例示コードの通りにコードを修正したときに発生しうる付随的な問題、またはソースコード解析装置Aで自動的に生成することができないためユーザーが直接修正しなければならない事項が挙げられる。
解析結果伝達部240は、先に生成された欠陥情報220Aや修正例示情報230A、留意事項情報230Bなどを総合解析結果情報240Aとして構成して解析結果出力モジュール300へ伝達する。このような総合解析結果情報240Aは、ファイル或いはメモリ内のデータであってもよく、他の情報を含んでもよい。また、欠陥の種類によっては、一つの欠陥情報220Aの他に、修正例示情報230A、留意事項情報230Bはないか或いはさらに多い。
好ましい一例として、解析結果出力モジュール300は欠陥出力部310と修正例示出力部320を含む。
欠陥出力部310は、ソースコード解析モジュール200から伝達された総合解析結果情報240Aから欠陥情報220Aを抽出してユーザーに見せる。このような情報としては、一般に、上述したように、ソースコードのファイル名、ラインなどの位置情報、欠陥の種類、実際欠陥の原因となった部分、欠陥が発生したソースコードの流れなどが挙げられる。
修正例示出力部320は、ソースコード解析モジュール200から伝達された総合解析結果情報240Aから修正例示情報230A及び留意事項情報230Bを抽出してユーザーに見せる。このような情報としては、一般に、上述したように、実際ソースコードをどのように修正すべきかに対する修正例示コード、及びソースコードを修正したときに発生しうる様々な留意事項情報が挙げられる。実施形態によっては、欠陥出力部310と修正例示出力部320は同時に出力を行うことも、他の情報をさらに出力することもできる。
以下、各例示画面を用いて本実施形態のソースコード解析装置の具現例を例示説明する。
図3は本発明の一実施形態に係るソースコード解析装置の欠陥検出部のチェッカーによって欠陥が発見されたソースコードページ画面例である。
欠陥が発見されると、画面の右上端に修正例示ボタンが表示される。
図4は本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面例である。
画面に欠陥情報、修正例示情報、留意事項情報がそれぞれ表示される。修正例示情報または留意事項情報は、一つの欠陥情報に対して一つまたはそれ以上が提供できる。
図5は本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の例示メニュー表示例である。
例示メニューはチェッカーの種類及びソースコードによってその個数が異なる。それぞれの例示メニューは、左端の三角マークを押すことにより、折り畳まれたり展開されたりすることが可能である。
図6は本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の欠陥情報表示例である。
欠陥情報メニューは、チェッカーが検出した欠陥をどのように修正すべきであるかを教えてくれる。
図7は本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の修正例示情報表示例である。
修正例示メニューでは、ソースコードにおけるどの部分をどのように修正すべきかを教えてくれる。前記例示コードはできる限り実際のコードと等しく提供される。画面中に赤色でグラデーションされて「−」で始まるラインは削除されるべきコードを表示し、緑色でグラデーションされて「+」で始まるラインは追加されるべきコードに該当する。修正が必要なコードのラインが大きく離れているか或いは異なるファイルである場合、ボックスが複数個表示できる。
図8は本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の留意事項情報表示例である。
留意事項情報は、ソースコードを修正したときに発生しうる様々な状況や注意点を説明する。よって、チェッカーの種類及びソースコードによってその個数および内容が異なる。
下記のソースコードは本発明の一実施形態に係るソースコード解析装置の修正例示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>


「sca」または「Sca」は、「Smart Code Alternative」の略字であって、本実施形態の修正例示XMLファイルに含まれている複数の代替(alternative)を含む上位要素の例示的名称として便宜上命名する。
図9は本発明の一実施形態に係るソースコード解析装置のためのチェッカー実現クラスのうちのXML出力クラスの例、図10は本発明の一実施形態に係るソースコード解析装置のためのチェッカー実現クラスのうちのコード生成クラスの例である。
図9の場合、上位クラスから簡略に例示説明する。
最上部の「AlarmXMLMaker」クラスは、アラーム出力の際に、Scaインスタンスがあれば一緒に出力する。
中間の「Sca」クラスは、ScaAlternativeインスタンス生成を担当し、チェッカーで代替を生成するときにこの関数を使用する。
最下部の「ScaAlternative」クラス(代替情報クラス)は、説明、コード、留意事項情報を含み、コードの追加/変更/削除情報は、「CodeGenerator」クラスが生成したコード情報を受け取るか、或いは元のソースコードから受け取る場合もある。
図10の場合、「CodeGenerator」クラス(コード生成クラス)は、一定のテンプレートに基づいて元のソースコードを解析及び推論した結果を入力値として修正例示コードを生成する。「CodeGenerator」クラスには、ライン追加のための「SimpleCodeGenerator」、タイプ生成のための「TypeCodeGenerator」、変数生成のための「VariableCodeGenerator」、関数生成のための「FunctionCodeGenerator」などが含まれる。
表2は本発明の一実施形態に係るソースコード解析装置のためのチェッカー構成の一例、表3は本発明の一実施形態に係るソースコード解析装置のためのチェッカー構成の他の一例、表4は本発明の一実施形態に係るソースコード解析装置のためのチェッカー構成の別の一例を示す表である。

例題1の場合、dot(.)演算子を除く二項演算子と前後の被演算子はスペースで区切られるべきであることを検査するチェッカーである。提供されたソースコードのうち、二項演算子「−」が使用された部分の左右にスペースを入れることで代替コード(修正例示コード)を作成することができる。この例題の場合、特別な留意事項はない。

例題2の場合、配列タイプパラメータとして受け取った配列タイプの変数に対してsizeofを使用してはならないというチェッカーである。代替コードは1番ライン、3番ラインで発生する。この際、1番ラインの変更により関数インターフェース変更留意事項が生じる。もし関数インターフェースが変更される場合、この関数の宣言や使用した部分も修正されるべきである。3番ラインのstrncpyは3番目のパラメータの開始節を代替コード1で追加した長さ値の変数を入れるようにする。これに関連しに特別な留意事項はない。

例題3の場合、効果のない関数呼び出しを検査するチェッカーである。例えば、memsetで3番目のパラメータの値が0である場合、実質的に意味のないコードになる。代替1は、初期化しようとするバッファのサイズを推論可能な場合にはそのサイズを表示し、推論不可能な場合には<<length>>などの指定された識別子を用いて表示する。代替2の場合、条件付きで生成する代替である。もしmemsetの二番目のパラメータが単一定数ではない場合は、2、3番目のパラメータを入れ替えて使用した可能性がある。したがって、代替2はmemsetの2、3番目のパラメータの値を互いに交替することを提案するようにする。当該チェッカーも特別な留意事項はない。
一例として、表2〜表4に例示された各チェッカーの代替は、図9で例示された「Sca」クラス及び「ScaAlternative」クラス(代替情報クラス)によって提供できる。
他の例として、表2〜表4に例示された各チェッカーの代替コードは、図10で例示された「CodeGenerator」クラス(コード生成クラス)によって提供できる。
「Sca」クラス、「ScaAlternative」クラス(代替情報クラス)及び「CodeGenerator」クラス(コード生成クラス)は、各チェッカーの欠陥内容に相応して予め設定できる。
本発明の実施形態は、様々なコンピュータで実現される動作を行うためのプログラムと、これを記録したコンピュータ可読媒体を含む。前記コンピュータ可読媒体は、プログラム命令、データファイル、データ構造などを単独で或いは組み合わせて含むことができる。前記媒体は、本発明のために特別に設計及び構成されたものであってもよく、コンピュータソフトウェアの当業者に公知されて使用可能なものであってもよい。コンピュータ可読記録媒体の例には、ハードディスク、フロッピーディスク及び磁気テープなどの磁気媒体、CD−ROM、DVD、USBドライブなどの光記録媒体、フロプティカルディスクなどの磁気−光媒体、及びROM、RAM、フラッシュメモリなどのプログラム命令を保存及び実行するように特別に構成されたハードウェア装置が含まれる。前記媒体は、プログラム命令、データ構造などを指定する信号を伝送する搬送波を含む光または金属線、導波管などの伝送媒体であってもよい。プログラム命令の例には、コンパイラによって作られるような機械語コードだけでなく、インタープリターなどを用いてコンピュータによって実行できる高級言語コードを含む。
一例として、本発明のソースコード解析装置は、ソースコード解析機能及び解析結果出力機能を実行するためのコンピュータプログラムによってコンピュータの機能動作が実行される形態で実現できる。
ソースコード解析機能は上述したソースコード解析モジュールによって提供され、解析結果出力機能は上述した解析結果出力モジュールによって提供される。
ソースコード解析機能はソースコード解析モジュールの詳細機能をさらに実行し、解析結果出力機能は解析結果出力モジュールの詳細機能をさらに実行することにより、本発明のソースコード解析装置の全体機能が提供できる。

Claims (7)

  1. ソースコードから解析に必要な情報を抽出し、精製する構文解析部と、構文解析部で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報を検出する欠陥検出部と、欠陥検出部で検出された欠陥情報及び構文解析部で精製された解析に必要な情報に基づいて修正例示情報及び留意事項情報のうちの少なくとも一つを生成する修正例示生成部と、生成された欠陥情報、修正例示情報及び留意事項情報のうちの少なくとも一つを総合解析結果情報として構成して解析結果出力モジュールへ伝達する解析結果伝達部とを含むソースコード解析モジュール、及び、
    ソースコード解析モジュールから伝達された総合解析結果情報から欠陥情報を抽出して出力する欠陥出力部と、ソースコード解析モジュールから伝達された総合解析結果情報から修正例示情報及び留意事項情報のうちの少なくとも一つを抽出して出力する修正例出力部とを含む解析結果出力モジュールを含んでなる、ソースコード解析装置。
  2. 前記修正例示生成部は、
    一つの欠陥情報に対して一つまたはそれ以上の修正例示情報または留意事項情報を生成するように構成されたことを特徴とする、請求項1に記載のソースコード解析装置。
  3. 前記欠陥検出部の欠陥情報検出は、それぞれの欠陥有無をチェックするように備えられたそれぞれのチェッカーの機能実行によって行われ、
    前記それぞれのチェッカーは、欠陥情報検出時に検出された欠陥情報に対して生成される修正例示情報及び留意事項情報のうちの少なくとも一つが含まれている総合解析結果情報を修正例示生成部へ伝達するように構成されたことを特徴とする、請求項2に記載のソースコード解析装置。
  4. 前記修正例示情報は、
    欠陥情報が検出されたソースコードラインに対して他のコードラインの「追加」、他のコードラインへの「変更」、及び検出されたコードラインの「削除」のうちの少なくとも一つを含むことを特徴とする、請求項1に記載のソースコード解析装置。
  5. 前記修正例示情報に含まれる修正例示コードは、
    欠陥情報を検出したチェッカーが、予め設定されたテンプレートに基づいてソースコードを解析及び推論した結果を入力値にして生成されることを特徴とする、請求項3に記載のソースコード解析装置。
  6. ソースコード解析装置でソースコード解析機能及び解析結果出力機能を実行するためのコンピュータプログラムであって、
    前記ソースコード解析機能は、
    ソースコードから解析に必要な情報を抽出し、精製する構文解析機能と、構文解析機能で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報を検出する欠陥検出機能と、欠陥検出機能で検出された欠陥情報及び構文解析機能で精製された解析に必要な情報に基づいて修正例示情報及び留意事項情報のうちの少なくとも一つを生成する修正例示生成機能と、生成された欠陥情報、修正例示情報及び留意事項情報のうちの少なくとも一つを総合解析結果情報として構成して解析結果出力機能へ伝達する解析結果伝達機能とを含めて実行し;
    前記解析結果出力機能は、
    ソースコード解析機能から伝達された総合解析結果情報から欠陥情報を抽出して出力する欠陥出力機能と、ソースコード解析機能から伝達された総合解析結果情報から修正例示情報及び留意事項情報のうちの少なくとも一つを抽出して出力する修正例示出力機能とを含めて実行するために;媒体に格納された、コンピュータプログラム。
  7. ソースコード解析装置でソースコード解析機能及び解析結果出力機能を実行するためのコンピュータプログラムが記録された記録媒体であって、
    前記ソースコード解析機能は、
    ソースコードから解析に必要な情報を抽出し、精製する構文解析機能と、構文解析機能で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報を検出する欠陥検出機能と、欠陥検出機能で検出された欠陥情報及び構文解析機能で精製された解析に必要な情報に基づいて修正例示情報及び留意事項情報のうちの少なくとも一つを生成する修正例示生成機能と、生成された欠陥情報、修正例示情報及び留意事項情報のうちの少なくとも一つを総合解析結果情報として構成して解析結果出力機能へ伝達する解析結果伝達機能とを含めて実行し;
    前記解析結果出力機能は、
    ソースコード解析機能から伝達された総合解析結果情報から欠陥情報を抽出して出力する欠陥出力機能と、ソースコード解析機能から伝達された総合解析結果情報から修正例示情報及び留意事項情報の少なくとも一つを抽出して出力する修正例示出力機能とを含めて実行するための;コンピュータプログラムが記録された、コンピュータで読み取り可能な記録媒体。
JP2017510645A 2014-08-27 2015-08-26 ソースコード解析装置、そのためのコンピュータプログラム、及びその記録媒体 Active JP6579340B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
KR10-2014-0112583 2014-08-27
KR20140112583 2014-08-27
KR1020140133347A KR101623174B1 (ko) 2014-08-27 2014-10-02 소스 코드 분석 장치, 이를 위한 컴퓨터 프로그램, 그 기록매체
KR10-2014-0133347 2014-10-02
PCT/KR2015/008937 WO2016032234A1 (ko) 2014-08-27 2015-08-26 소스 코드 분석 장치, 이를 위한 컴퓨터 프로그램, 그 기록매체

Publications (2)

Publication Number Publication Date
JP2017527034A true JP2017527034A (ja) 2017-09-14
JP6579340B2 JP6579340B2 (ja) 2019-09-25

Family

ID=55534423

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017510645A Active JP6579340B2 (ja) 2014-08-27 2015-08-26 ソースコード解析装置、そのためのコンピュータプログラム、及びその記録媒体

Country Status (4)

Country Link
US (1) US10496516B2 (ja)
JP (1) JP6579340B2 (ja)
KR (1) KR101623174B1 (ja)
CN (1) CN106796543A (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6472545B2 (ja) * 2016-01-27 2019-02-20 優太 竹田 処理システム、処理方法及びプログラム
KR101850303B1 (ko) 2016-09-13 2018-05-31 슈어소프트테크주식회사 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체
WO2020097611A1 (en) * 2018-11-09 2020-05-14 Manhattan Engineering Incorporated Deployment models
CN110349477B (zh) * 2019-07-16 2022-01-07 长沙酷得网络科技有限公司 一种基于历史学习行为的编程错误修复方法、系统及服务器
CN110765003B (zh) * 2019-09-24 2023-06-02 贝壳技术有限公司 代码检测方法、装置以及设备、存储介质
CN112181428B (zh) * 2020-09-28 2021-10-22 北京航空航天大学 一种基于抽象语法树的开源软件缺陷数据分类方法及系统
CN112579477A (zh) * 2021-02-26 2021-03-30 北京北大软件工程股份有限公司 一种缺陷检测方法、装置以及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009011056A1 (ja) * 2007-07-19 2009-01-22 Fujitsu Limited アプリケーション改善支援プログラム、アプリケーション改善支援方法およびアプリケーション改善支援装置
JP2010097426A (ja) * 2008-10-16 2010-04-30 Autonetworks Technologies Ltd コンピュータプログラム、ソースプログラム入力受付装置及びソースプログラム入力受付方法
JP2011129121A (ja) * 2009-12-18 2011-06-30 Korea Electronics Telecommun 静的分析道具統合管理装置及びシステム

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0281230A (ja) * 1988-09-19 1990-03-22 Hitachi Ltd 構文解析および言語処理システム
US4931928A (en) * 1988-11-09 1990-06-05 Greenfeld Norton R Apparatus for analyzing source code
JPH0449432A (ja) * 1990-06-19 1992-02-18 Nec Corp 構文エラー解析方式
KR100621063B1 (ko) 1999-07-24 2006-09-07 삼성전자주식회사 인터프리터형 제어프로그램의 개발 방법 및 시스템
JP2003006255A (ja) * 2001-06-22 2003-01-10 Fujitsu Ltd Hdl自動修正装置およびhdl自動修正プログラム並びに同プログラムを記録したコンピュータ読取可能な記録媒体
KR100501936B1 (ko) 2003-05-07 2005-07-18 삼성전자주식회사 소스 코드 검사 시스템 및 방법
JP2006107338A (ja) * 2004-10-08 2006-04-20 Matsushita Electric Ind Co Ltd プログラム処理装置
CN101286132B (zh) * 2008-06-02 2010-09-08 北京邮电大学 一种基于软件缺陷模式的测试方法及系统
CN101499015A (zh) * 2009-03-18 2009-08-05 北京和利时系统工程有限公司 一种高级语言转换成其它高级语言的方法及转换器
KR20110020520A (ko) 2009-08-24 2011-03-03 한국전력기술 주식회사 소프트웨어 개발 과정이 통합된 소프트웨어의 안전성 분석 방법 및 그를 위한 시스템
KR101051600B1 (ko) * 2010-03-29 2011-07-22 주식회사 소프트 포 소프트 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템
JP2012103923A (ja) 2010-11-10 2012-05-31 Renesas Electronics Corp コンパイラ装置、コンパイル方法及びコンパイラプログラム
JP5725359B2 (ja) * 2011-09-20 2015-05-27 日本電気株式会社 ソースコード比較装置、ソースコード比較方法およびソースコード比較プログラム
KR20130097252A (ko) 2012-02-23 2013-09-03 삼성전자주식회사 소스 코드 분석에 의한 응용 프로그램 분석을 위한 방법 및 장치
US20170212829A1 (en) * 2016-01-21 2017-07-27 American Software Safety Reliability Company Deep Learning Source Code Analyzer and Repairer

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009011056A1 (ja) * 2007-07-19 2009-01-22 Fujitsu Limited アプリケーション改善支援プログラム、アプリケーション改善支援方法およびアプリケーション改善支援装置
JP2010097426A (ja) * 2008-10-16 2010-04-30 Autonetworks Technologies Ltd コンピュータプログラム、ソースプログラム入力受付装置及びソースプログラム入力受付方法
JP2011129121A (ja) * 2009-12-18 2011-06-30 Korea Electronics Telecommun 静的分析道具統合管理装置及びシステム

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
川口耕介: "チーム内作業の改善", WEB+DB PRESS, vol. 第67巻, JPN6018003663, 25 March 2012 (2012-03-25), JP, pages 16 - 21, ISSN: 0003946028 *
村上智美: "チーム開発の土台づくり", WEB+DB PRESS, vol. 第43巻, JPN6018003665, 25 March 2008 (2008-03-25), JP, pages 68 - 72, ISSN: 0003946029 *
町田欣史: "テスト自動化の支援を行うツール活用術 (1)静的解析ツール", ソフトウェア・テストPRESS, vol. 第3巻, JPN6018050778, 25 August 2006 (2006-08-25), JP, pages 46 - 53, ISSN: 0003946027 *

Also Published As

Publication number Publication date
KR20160025426A (ko) 2016-03-08
US10496516B2 (en) 2019-12-03
KR101623174B1 (ko) 2016-05-20
US20170277617A1 (en) 2017-09-28
JP6579340B2 (ja) 2019-09-25
CN106796543A (zh) 2017-05-31

Similar Documents

Publication Publication Date Title
JP6579340B2 (ja) ソースコード解析装置、そのためのコンピュータプログラム、及びその記録媒体
US9733901B2 (en) Domain specific language design
US8434062B2 (en) Enhancing source code debugging and readability using visual symbols
US20110099538A1 (en) Techniques for debugging
US10789418B2 (en) Batch generation of links to documents based on document name and page content matching
JP6354457B2 (ja) アプリケーション開発支援装置、そのデータ処理方法、およびプログラム
AU2019229348B2 (en) Pre-filtering for visual object searching of documents
JP6258159B2 (ja) プログラム情報生成システム、方法、及びプログラム
US20140215431A1 (en) Static analysis of computer software applications having a model-view-controller architecture
JP2017538996A5 (ja)
Feigenspan et al. Visual support for understanding product lines
US20090207436A1 (en) Image forming apparatus, server, image forming system, and storage medium
WO2017141893A1 (ja) ソフトウェア分析装置及びソフトウェア分析方法
US9645798B1 (en) Using program code to generate help information, and using help information to generate program code
JP6790921B2 (ja) プログラム分析装置、プログラム分析方法及びプログラム分析プログラム
JP5702265B2 (ja) プログラム自動生成装置およびプログラム自動生成方法
JP2009205242A (ja) 検証用プログラム自動生成装置、その方法及びプログラム
Soares et al. Modeling of embedded software on MDA platform models
JP2016085681A (ja) 特許書類品質検査装置、特許書類品質検査方法、およびプログラム
JP2013073292A (ja) 分析レポート作成システム
JP4925340B2 (ja) ソフトウェア成果物作成システム、方法及びそのプログラム
JP2009042951A (ja) プログラム中のデータ抽出方法及び装置
JP4249038B2 (ja) 文書表示装置、文書表示方法、および文書表示プログラム
Dominguez Perez et al. Generating Predicate Callback Summaries for the Android Framework
JP2014191519A (ja) 印刷画像生成装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170222

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180206

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20180425

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20180627

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180705

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190108

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190405

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190730

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190813

R150 Certificate of patent or registration of utility model

Ref document number: 6579340

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250