(57)【要約】【課題】  アバップソースコードのコード検査を遂行するコード検査遂行システムを提供すること。【解決手段】  システム故障及び止まり、データ損失及び変形、過大な性能低下、機能の違った行動及び結果、複雑なコード構造及び綴字間違いなどのコーディング欠陷を検査してアバップアプリケーションの維持保守性、性能性、正確性、安全性及び保安性などを信頼するようにするアバップ (ABAP)ソースコードのコード検査を遂行する。【選択図】  図１
2013522790.tif 000002
【特許請求の範囲】
【請求項１】
コード検査対象であるアバップソースコードを、語彙、構文及び意味分析して、それぞれ抽象構文木とシンボルテーブルの資料構造に保存するアバップソースコード文法分析部と、
アバップ規則管理モジュールから選択されたコーディング規則に係わるソースコード及び文法構造を、前記資料構造基盤によってプログラム経路分析モジュールでコード欠陷を検査して、違反されたコード欠陷を修正するようにコード欠陷報告書を生成するアバップソースコード欠陥検査部と、を含んで構成される
ことを特徴とするアバップソースコードのコード検査を遂行するコード検査遂行システム。
【請求項２】
前記アバップソースコード文法分析部は、
検査対象であるアバップソースコードファイルをファイル単位で読んであらかじめ定義されたアバップ文法(BNF)によって、アバップソースコードを一連の文字列を意味するトークン単位(キーワード、識別子、シンボル識別子、定数、演算子)で分離する語彙分析モジュールと、 
各ファイル単位で分離したトークンの構文(文法)があらかじめ定義されたアバップ文法に違反されるか否かを検査して文法間違いがあれば、関連ファイルの文法間違いメッセージを、文法間違いがなければ、文章の構文を分析して構文間の制御流れ関係の意味を付与して各ファイル単位の構文構造を抽出する構文分析モジュールと、
前記構文分析モジュールから抽出された情報を各ファイル単位でツリー資料構造に保存する抽象構文木貯蔵処理モジュールと、
前記抽象構文木貯蔵処理モジュールで各ファイルを構成するシンボル類型(クラス、メソッド、変数、型、関数、イベント、ダイアログ、処理ブロック)とその間の連結関係情報及び欠陥検査に必要な各シンボル類型の欠陷パターン構造を抽出する意味分析モジュールと、
前記意味分析モジュールから抽出された情報を、各ファイルの構成要素であるシンボルのテーブル資料構造に保存するシムボルテーブル貯蔵処理モジュールと、を含む
請求項１に記載のアバップソースコードのコード検査を遂行するコード検査遂行システム。
【請求項３】
前記アバップソースコード欠陥検査部は、
欠陥深刻度及びプログラミング特性によって多様なコーディング規則カテゴリー(アバップ及びSQLコーディングスタイル、コーディング標準、アキテクチャ標準、SQL標準、ラン-タイムエラー、保安弱み)らと各規則のシンボル類型、
欠陷パターン構造類型、そして欠陷条件類型をアバップ規則管理モジュールの処理によって、保存及び管理されるアバップ規則データベースと、
前記アバップ規則データベースからコーディング規則を選択し、選択された規則と係わるシンボルと欠陷パターン構造に対応されるシンボルテーブルのシンボル値を各ファイル別に検索し、検索された各シンボル値別に対応されるすべての文法構造及びソースコードを抽象構文木から抽出してプログラム経路分析モジュールに伝達するアバップ規則管理モジュールと、
前記抽出された各シンボル値打ちの文法構造及びソースコードを選択された規則のプログラム経路パターン(制御流れ、制御及び資料流れ、または制御流れ及び呼び出し)、欠陷パターン構造と欠陥条件によって欠陥検査するプログラム経路分析モジュールと、
前記選択されたコード規則に違反された欠陷があれば、コード欠陷報告書を生成するコード欠陥報告書生成モジュールと、を含む
請求項１に記載のアバップソースコードのコード検査を遂行するコード検査遂行システム。
【請求項４】
前記アバップソースコード文法分析部は、
構文分析されたトークンを各ファイル単位で受けて上向き式構文分析技法(Bottom-up Syntax Analysis)であるLR(１)パーサアルゴリズムでトークンの文法的構造で分析して、各ファイル単位で構文構造間の制御流れ関係を抽出して抽象構文木の資料構造に保存する
請求項１に記載のアバップソースコードのコード検査を遂行するコード検査遂行システム。
【請求項５】
前記アバップソースコード文法分析部は、
抽象構文木の資料構造で各ファイルを構成するシンボル類型とその間のシンボル連結関係、タイプ(Type) 情報、名連結関係を抽出し、欠陥検査に必要な各シンボル類型の欠陷パターン構造情報をシンボルテーブルの資料構造に保存する
請求項１に記載のアバップソースコードのコード検査を遂行するコード検査遂行システム。
【請求項６】
前記アバップソースコード文法分析部は、
アバップソースコードを分析する時、アバップファイル(*.abap)がある上位ディレクトリを選択すれば、下位ディレクトリを含んだすべてのアバップファイルを検査対象で遂行するか、または一つのファイルを選択しても検査対象で遂行する
請求項１に記載のアバップソースコードのコード検査を遂行するコード検査遂行システム。
【請求項７】
前記プログラム経路分析モジュールは、
アバップ規則データベースで定義されたコーディング規則のプログラム経路パターン、欠陷パターン構造と欠陥条件の下にアバップ規則管理ブによって抽出された各シンボル値打ちの文法構造及びソースコードで係わるコーディング規則のコード欠陷を識別する機能を遂行する
請求項３に記載のアバップソースコードのコード検査を遂行するコード検査遂行システム。
【請求項８】
前記アバップ規則管理モジュールは、 
アバップ規則データベースで各カテゴリー別コーディング規則を選択そして詳細オプションを設定し、選択された規則で係わるシンボルと欠陷パターン構造に対応されるシンボルテーブルのシンボル値を、各ファイル別に検索し、検索された各シンボル値打ち別に対応されるすべての文法構造及びソースコードを抽象構文木から抽出して、プログラム経路分析モジュールに伝達する機能を遂行する
請求項３に記載のアバップソースコードのコード検査を遂行するコード検査遂行システム。
【請求項９】
前記アバップ規則データベースは、
多様なカテゴリー(アバップ及びSQLコーディングスタイル、コーディング標準、アキテクチャ標準、SQL標準、ラン-タイムエラー、保安弱み)のコーディング規則を保存するデータベースとして、各規則別にカテゴリー類型、
シンボル類型、プログラム経路パターン、欠陷パターン構造類型、欠陥条件、 規則名、規則ID、エラータイプ、エラーメッセージの資料構造で成り立っているし、アバップ規則管理モジュールによって規則の追加または変更を管理する
請求項３に記載のアバップソースコードのコード検査を遂行するコード検査遂行システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アバップソースコードのコード検査を遂行するコード検査遂行システムに関するものである。詳細には、ドイツSAP会社で作ったABAP/４言語はクライアントサーバ環境であるSAP R/３基盤で企業の全社的資源管理パッケージシステム(ERP、Enterprise Resource Planning)などを開発するのに使う４世代言語だが、Java(登録商標)などの４世代言語と違うようにアバッププログラミングに対する整形化された大小文字区別(Case-sensitive)とコーディングフォーマット(Format)の制限がなくて、アバップ言語及びSAP R/３に対するアバップ開発者の誤解、誤用そして間違いなどにより発生するシステム故障及び止まり、データ損失及び変形、過大な性能低下、機能の違った行動及び結果、複雑なコード構造及び綴字間違いなどのコーディング欠陷を検査してアバップアプリケーションの維持保守性、性能性、正確性、安全性及び保安性などを信頼するようにするアバップ(ABAP)ソースコードのコード検査を遂行するコード検査遂行システムに関するものである。
【背景技術】
【０００２】
アバップソフトウェアに含まれている多様なコード欠陷を検査することができる方法には、ソースコードだけで静的分析して実際実行の時発生することができるコード欠陷を前もって探知するコード検査と、ソースコードを行ってその結果値を基盤でコード欠陷を捜すテスティング技法がある。
【０００３】
コード検査技法は、テスティング以前にコード欠陷をとり除くことによって、開発期間短縮、テスティングの費用節減及び期間の短縮だけでなく、一貫性があるコーディングフォーマット基盤アプリケーション開発で今後の維持補修費用を節減することができるから特に效率的である。
【０００４】
従来のアバップコード検査は、コード開発の後（コンパイル後）、コード欠陷を手作業でコードを検討する方法と、プログラムを行ってリアルタイムで保安弱みを捜してくれるテスティング技法であるコードプロファイラー（Ｃｏｄｅ  Ｐｒｏｆｉｌｅｒ）があるが、コード開発段階で（コンパイル以前）コードを行わなく、アバップコードそのものだけでアバップアプリケーションの維持保守性、性能性、正確性、安全性及び保安性などに違反したコードを探知することはできない。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
そこで、本発明は、前記のような従来の問題に鑑みなされたものであり、アバップソースコードをあらかじめ定義されたアバップ文法（ＢＮＦ）によって、語彙及び構文分析して抽象構文木のツリー資料構造を構築し、抽象構文木で意味分析してシンボルテーブルのテーブル資料構造を構築するアバップソースコードのコード検査を遂行するコード検査遂行システムの提供を課題とする。
【０００６】
本発明の他の目的は、アバップ  コード検査道具のソースコード欠陷検査は多様なコーディング規則に係わるソースコードの欠陷を前記で構築されたテーブル及びツリー資料構造基盤によって検査して違反されたコード欠陷を修正するようにコード欠陷報告書を提供するアバップソースコードのコード検査を遂行するコード検査遂行システムの提供にある。
【課題を解決するための手段】
【０００７】
本発明が解決しようとする課題を果たすために、本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムは、
【０００８】
コード検査対象であるアバップソースコードを語彙、構文及び意味分析してそれぞれ抽象構文木とシンボルテーブルの資料構造に保存するアバップソースコード文法分析部と、
【０００９】
アバップ規則管理モジュールから選択されたコーディング規則に係わるソースコード及び文法構造を前記資料構造基盤によってプログラム経路分析モジュールでコード欠陷を検査して違反されたコード欠陷を修正するようにコード欠陷報告書を生成するアバップソースコード欠陥検査部と、を含んで構成され本発明の課題を解決する。
【発明の効果】
【００１０】
以上の構成及び作用を持つ本発明によるアバップソースコードのコード検査を遂行するコード検査遂行システムは、アバップソフトウェアに含まれている多様なコード欠陷をソースコードだけで静的分析して実際実行の時発生することができるコード欠陷を前もって探知することができる效果を提供するようになる。
【００１１】
また、アバップ言語及びSAP R/３に対するアバップ開発者の誤解、誤用そして間違いなどで発生するシステム故障及び止まり、データ損失及び変形、過大な性能低下、機能の違った行動及び結果、複雑なコード構造及び綴字間違いなどのコーディング欠陷をテスティング以前にとり除くことによって、開発期間短縮、テスティングの費用節減及び期間の短縮だけでなく、一貫性があるコーディングフォーマット基盤アプリケーション開発で今後の維持補修費用を節減することができるより良い效果を得ることができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの全体ブロック図
【図２】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの遂行方法を現わした流れ図
【図３】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの検査対象であるアバップソースコードファイルを選択する画面の例示説明図
【図４】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムのコード検査対象アバップソースコードの例示説明図
【図５】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの語彙分析モジュールの例示説明図
【図６】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの構文分析モジュールの例示説明図
【図７】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの抽象構文木の資料構造の例示説明図
【図８】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの抽象構文木の例示説明図
【図９】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムのシンボルテーブル資料構造のクラスダイヤグラム
【図１０】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの構文及び意味分析を行うディスプレーのスクリーンショット
【図１１】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムのコーディング規則を選択する画面の例示説明図
【図１２】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの制御流れ経路パターンのコード検査を行った後、コード欠陷報告書画面の例示説明図
【図１３】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの制御及び資料流れ経路パターンのコード検査を行った後、コード欠陷報告書画面を現わした例示説明図
【図１４】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの制御流れ及び呼び出し経路パターンのコード検査を行った後、コード欠陷報告書画面を現わした例示説明図
【発明を実施するための形態】
【００１３】
前記課題を果たすための本発明のアバップソースコードのコード検査を遂行するコード検査遂行システムは、
【００１４】
コード検査対象であるアバップソースコードを語彙、構文及び意味分析してそれぞれ抽象構文木とシンボルテーブルの資料構造に保存するアバップソースコード文法分析部と、
【００１５】
アバップ規則管理モジュールから選択されたコーディング規則に係わるソースコード及び文法構造を前記資料構造基盤によってプログラム経路分析モジュールでコード欠陷を検査して違反されたコード欠陷を修正するようにコード欠陷報告書を生成するアバップソースコード欠陥検査部と、を含んで構成されることを特徴とする。
【００１６】
この時、前記アバップソースコード文法分析部は、
【００１７】
検査対象であるアバップソースコードファイルをファイル単位で読んであらかじめ定義されたアバップ文法(BNF)によって、アバップソースコードを一連の文字列を意味するトークン単位(キーワード、識別子、シンボル識別子、定数、演算子)で分離する語彙分析モジュールと、 
【００１８】
各ファイル単位で分離したトークンの構文(文法)があらかじめ定義されたアバップ文法に違反されるか否かを検査して文法間違いがあれば、関連ファイルの文法間違いメッセージを、文法間違いがなければ、文章の構文を分析して構文間の制御流れ関係の意味を付与して各ファイル単位の構文構造を抽出する構文分析モジュールと、
【００１９】
前記構文分析モジュールから抽出された情報を各ファイル単位でツリー資料構造に保存する抽象構文木貯蔵処理モジュールと、
【００２０】
前記抽象構文木貯蔵処理モジュールで各ファイルを構成するシンボル類型(クラス、メソッド、変数、型、関数、イベント、ダイアログ、処理ブロック)らとその間の連結関係情報及び欠陥検査に必要な各シンボル類型の欠陷パターン構造を抽出する意味分析モジュールと、
【００２１】
前記意味分析モジュールから抽出された情報を各ファイルの構成要素であるシンボルのテーブル資料構造に保存するシムボルテーブル貯蔵処理モジュールと、を含んで構成されることを特徴とする。
【００２２】
この時、前記アバップソースコード欠陥検査部は、
【００２３】
欠陥深刻度及びプログラミング特性によって多様なコーディング規則カテゴリー(アバップ及びSQLコーディングスタイル、コーディング標準、アキテクチャ標準、SQL標準、ラン-タイムエラー、保安弱み)らと各規則のシンボル類型、欠陷パターン構造類型、そして欠陷条件類型をアバップ規則管理モジュールの処理によって、保存及び管理されるアバップ規則データベースと、
【００２４】
前記アバップ規則データベースからコーディング規則を選択し、選択された規則と係わるシンボルと欠陷パターン構造に対応されるシンボルテーブルのシンボル値を各ファイル別に検索し、検索された各シンボル値別に対応されるすべての文法構造及びソースコードを抽象構文木から抽出してプログラム経路分析モジュールに伝達するアバップ規則管理モジュールと、
【００２５】
前記抽出された各シンボル値打ちの文法構造及びソースコードを選択された規則のプログラム経路パターン(制御流れ、制御及び資料流れ、または制御流れ及び呼び出し)、欠陷パターン構造と欠陥条件によって欠陥検査するプログラム経路分析モジュールと、
【００２６】
前記選択されたコード規則に違反された欠陷があれば、コード欠陷報告書を生成するコード欠陥報告書生成モジュールと、を含んで構成されることを特徴とする。
【００２７】
この時、前記アバップソースコード文法分析部は、
【００２８】
構文分析されたトークンを各ファイル単位で受けて上向き式構文分析技法(Bottom-up Syntax Analysis)であるLR(１)パーサアルゴリズムでトークンの文法的構造で分析して各ファイル単位で構文構造間の制御流れ関係を抽出して抽象構文木の資料構造に保存することを特徴とする。
【００２９】
この時、前記アバップソースコード文法分析部は、
【００３０】
抽象構文木の資料構造で各ファイルを構成するシンボル類型とその間のシンボル連結関係、タイプ(Type)情報、名連結関係を抽出し、欠陥検査に必要な各シンボル類型の欠陷パターン構造情報をシンボルテーブルの資料構造に保存することを特徴とする。
【００３１】
この時、前記アバップソースコード文法分析部は、
【００３２】
アバップソースコードを分析する時、アバップファイル(*.abap)がある上位ディレクトリを選択すれば、下位ディレクトリを含んだすべてのアバップファイルを検査対象で遂行するか、または一つのファイルを選択しても検査対象で遂行することを特徴とする。
【００３３】
この時、前記プログラム経路分析モジュールは、
【００３４】
アバップ規則データベースで定義されたコーディング規則のプログラム経路パターン、欠陷パターン構造と欠陥条件の下にアバップ規則管理ブによって抽出された各シンボル値打ちの文法構造及びソースコードで係わるコーディング規則のコード欠陷を識別する機能を遂行することを特徴とする。
【００３５】
この時、前記アバップ規則管理モジュールは、 
【００３６】
アバップ規則データベースで各カテゴリー別コーディング規則を選択そして詳細オプションを設定し、選択された規則で係わるシンボルと欠陷パターン構造に対応されるシンボルテーブルのシンボル値を各ファイル別に検索し、検索された各シンボル値打ち別に対応されるすべての文法構造及びソースコードを抽象構文木から抽出してプログラム経路分析モジュールに伝達する機能を遂行することを特徴とする。
【００３７】
この時、前記アバップ
規則データベースは、
【００３８】
多様なカテゴリー(アバップ及びSQLコーディングスタイル、コーディング標準、アキテクチャ標準、SQL標準、ラン-タイムエラー、保安弱み)のコーディング規則を保存するデータベースとして、各規則別にカテゴリー類型、シンボル類型、プログラム経路パターン、欠陷パターン構造類型、欠陥条件、
規則名、規則ID、エラータイプ、エラーメッセージの資料構造で成り立っているし、アバップ規則管理モジュールによって規則の追加または変更を管理することを特徴とする。
【００３９】
以下、本発明によるアバップソースコードのコード検査を遂行するコード検査遂行システムを、実施例を挙げて詳しく説明する。
【００４０】
図１は、本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの全体ブロック図である。
【００４１】
図１に図示したように、本発明であるアバップソースコードのコード検査を遂行するコード検査遂行システムは、
【００４２】
コード検査対象であるアバップソースコードを語彙、構文及び意味分析してそれぞれ抽象構文木とシンボルテーブルの資料構造に保存するアバップソースコード文法分析部１００と;
【００４３】
アバップ規則管理モジュールから選択されたコーディング規則に係わるソースコード及び文法構造を前記資料構造基盤によってプログラム経路分析モジュールでコード欠陷を検査して違反されたコード欠陷を修正するようにコード欠陷報告書を生成するアバップソースコード欠陥検査部２００と;を含んで構成される。
【００４４】
この時、前記アバップソースコード文法分析部１００は、
【００４５】
検査対象であるアバップソースコードファイルをファイル単位で読んであらかじめ定義されたアバップ文法(BNF)によって、アバップソースコードを一連の文字列を意味するトークン単位(キーワード、識別子、シンボル識別子、定数、演算子)で分離する語彙分析モジュール１１０と、
【００４６】
各ファイル単位で分離したトークンの構文(文法)があらかじめ定義されたアバップ文法に違反されるか否かを検査して文法間違いがあれば、関連ファイルの文法間違いメッセージを、
文法間違いがなければ、文章の構文を分析して構文間の制御流れ関係の意味を付与して、各ファイル単位の構文構造を抽出する構文分析モジュール１２０と、
【００４７】
前記構文分析モジュールから抽出された情報を各ファイル単位でツリー資料構造に保存する抽象構文木貯蔵処理モジュール１３０と、
【００４８】
前記抽象構文木貯蔵処理モジュールで各ファイルを構成するシンボル類型(クラス、メソッド、変数、型、関数、イベント、ダイアログ、処理ブロック)らとその間の連結関係情報及び欠陥検査に必要な各シンボル類型の欠陷パターン構造を抽出する意味分析モジュール１４０と、
【００４９】
前記意味分析モジュールから抽出された情報を各ファイルの構成要素であるシンボルのテーブル資料構造に保存するシムボルテーブル貯蔵処理モジュール１５０とを含んで構成されることを特徴とする。 
【００５０】
この時、前記アバップソースコード欠陥検査部２００は、
【００５１】
欠陥深刻度及びプログラミング特性によって、多様なコーディング規則カテゴリー(アバップ及びSQLコーディングスタイル、コーディング標準、アキテクチャ標準、SQL標準、 ラン-タイムエラー、保安弱み)らと各規則のシンボル類型、欠陷パターン構造類型、そして欠陷条件類型をアバップ規則管理モジュールの処理によって、保存及び管理されるアバップ規則データベース２１０と、
【００５２】
前記アバップ規則データベースからコーディング規則を選択し、選択された規則と係わるシンボルと欠陷パターン構造に対応されるシンボルテーブルのシンボル値を各ファイル別に検索し、検索された各シンボル値別に対応されるすべての文法構造及びソースコードを抽象構文木から抽出してプログラム経路分析モジュールに伝達するアバップ規則管理モジュール２２０と、
【００５３】
前記抽出された各シンボル値打ちの文法構造及びソースコードを選択された規則のプログラム経路パターン（制御流れ、制御及び資料流れ、または制御流れ及び呼び出し）、欠陷パターン構造と欠陥条件によって欠陥検査するプログラム経路分析モジュール２３０と、
【００５４】
前記選択されたコード規則に違反された欠陷があれば、コード欠陷報告書を生成するコード欠陥報告書生成モジュール２４０とを含んで構成されることを特徴とする。
【００５５】
本発明の検査対象であるアバップソースコードを語彙、構文及び意味分析して、それぞれ抽象構文木とシンボルテーブルの資料構造に保存するアバップソースコード文法分析部と、アバップ規則管理モジュールから選択されたコーディング規則に係わるソースコード及び文法構造を前記資料構造基盤によってプログラム経路分析モジュールでコード欠陷を検査して違反されたコード欠陷を修正するようにコード欠陷報告書を生成するアバップソースコード欠陥検査部とで大きく仕分けされられる。
【００５６】
前記アバップソースコード文法分析部の機能は次のようである。
【００５７】
図３のように、使用者によって図４のようなアバップファイル(*。abap)がある上位ディレクトリを選択すれば、下位ディレクトリを含んだすべてのアバップファイルを検査対象とし、または図４の例題アバップファイルのように、一つのファイルを選択して検査対象として、選択されたファイルを読んでインデックスを設定し、検査対象であるすべてのアバップソースコードファイルのインデックス手順で語彙分析モジュール１１０に伝達する。
【００５８】
参照的に、図４の左側の行番号は説明の便宜上、記録したものである。
【００５９】
この時、前記語彙分析モジュールは、図４の例題ソースのような検査対象であるアバップファイルをファイル単位で読んで、あらかじめ定義されたアバップ文法のアバップBackus標準形式(Backus Normal Form、BNF)によって、アバップソースコードを一連の文字列を意味するトークン単位で分離して構文分析モジュール１２０に伝達する。
【００６０】
前記機能を遂行するために、語彙分析モジュールのトークンは、文法的にこれ以上分けることができない基本的な言語要素を示し、キーワード(keyword)、識別子(identifier)、シンボル識別子(symbol-identifier)、定数(constant)、演算子(operator)の記号で仕分けされて各トークンに付与する。
【００６１】
図５に図示しように、入力された図４の一番目と四番目のラインの文章を文字列であるトークンで変換して各トークン別にトークンの記号を付与した例である。
【００６２】
ただ、線終決(end)、空白、そして注釈はトークンではない。
【００６３】
前記構文分析モジュールは、図５の例題のような構文分析されたトークンを各ファイル単位で受けてトークンの構文があらかじめ定義されたアバップ文法(BNF)に違反されるか否かを分析して文法間違いがあれば、関連ファイルの文法間違いメッセージをアバップ文法エラーメッセージで知らせ、文法間違いがなければ、上向き式構文分析技法(Bottom-up Syntax Analysis)であるLR(１)パーサアルゴリズムでトークンの文法的構造を分析して各ファイル単位で構文構造間の制御流れ関係を抽出して抽象構文木の資料構造に抽象構文木貯蔵処理モジュール１３０の処理によって保存し、生成された抽象構文木の文法構造情報を各ファイル単位で意味分析モジュールに伝達する。
【００６４】
前記文法検査の実施例として、図６はトークン化された図４の四番目ラインのクラス宣言文章でクラス BNFに違反された文法的エラーがないかを点検する。
【００６５】
追加的に、すべてのアバップの一文章の終りは、常に "。" 演算子の終決がいなければならない。
【００６６】
もし、アバップ文法に違反されたファイルは図１０のように、エラーファイル(Erroneous Files)のファイル数及びエラー位置を表示して意味分析対象から除く。
【００６７】
前記抽象構文木生成の実施例として、図８は、図４の例題ソースを構文分析した後、生成されたツリー資料構造である。
【００６８】
前述したような抽象構文木の資料構造は、図７でよく見れば、各ファイルの各ノードは、意味的一単位である文章(Statement)を現わし、各文章は、ソースの物理的位置(ID)、表現式(Expression、文法構造及びソースコード)と文章の間の連結関係(親ノード(father、自分のノード深みより前にあるノード)、子ノード(child、自分のノード深みより次にあるノード)、次ノード(next、自分のノードと同じ深みにあるノード)、以前ノード(pervious、自分のノードと同じ深みにあるノード)、 羅列ノード (list、自分のノードと同じ深みにある同時に同一ソースラインにあるノード))の資料構造で成り立つ。
【００６９】
図８のように、ノード間の連結関係は、ノード間の制御流れを方向性グラフのように図式化したことであり、各ノードはノード間の制御流れの連結(link)を現わしているし、次のノード(next)のないノードは文章の終りを現わす。
【００７０】
前記意味分析モジュール１４０は、図８の抽象構文木の資料構造で各ファイルを構成するシンボル類型とその間のシンボル連結関係、タイプ(Type)情報、名連結関係を抽出し、シムボルテーブル貯蔵処理モジュール１５０によって欠陥検査に必要な各シンボル類型の欠陷パターン構造情報をシンボルテーブルの資料構造に保存する。
【００７１】
また、アバップ規則管理モジュール２２０から選択されたコーディング規則を遂行するために先にシンボルテーブルの資料構造を検索する。
【００７２】
前述したようなシンボルテーブルの資料構造をよく見れば、サブシステム (Subsystem)、ファイル(File)、クラス(Class)、メソッド(Method)、変数(Variable)、型(Form)、関数(Function)、イベント(Events)、ダイアログ(Dialog)、処理ブロック(Processing Block)のクラス資料構造で成り立つ。
【００７３】
図９のように、各クラスはクラス名、 属性名、メソッド名で構成されており、連結線はクラスとの関係を現わしている。
【００７４】
メソッドは各シンボル類型の文法構造及びソースコードを抽象構文木から読み出す機能を遂行する。
【００７５】
次は、アバップソースコード欠陥検査部２００を具体的に説明するようにする。
前記アバップ規則データベース２１０は、図１１のように、６個カテゴリーの多様なコーディング規則を保存したデータベースとして、アバップ規則管理モジュール２２０により規則の追加または変更などを管理するようになる。
【００７６】
前記アバップ規則データベースの構造をよく見れば、カテゴリー類型、シンボル類型、プログラム経路パターン、欠陷パターン構造類型、欠陥条件、規則名、規則ID、エラータイプ、エラーメッセージの資料構造で成り立つ。
また、コーディング規則のカテゴリーは、アバップ及びSQ コーディングスタイル、コーディング標準、アキテクチャ標準、SQ標準、ランタイムエラー、保安弱みで仕分けされる。
【００７７】
各カテゴリー別コーディング規則の名と説明に対する実施例は次のようである。
【００７８】
(１)アバップ及びSQLコーディングスタイル
-Indentation(単位ごとに引っ込みをしなければならない)
-Line Length(ライン当たり１００以内で作成しなければならない)
-Hard-Coding(ハードコーディングしてはいけない)
【００７９】
(２)コーディング標準
-Variable Naming(変数命名規則を守らなければならない)
-Recursive Calls(再帰呼出してはいけない)
-Form Obsolete Statements (form文章は使用してはいけない)
【００８０】
(３)アキテクチャ標準
-Return Value Testing on SQL  Statement(SQL文使用の後、errorに対する点検をしなければならない)
-Forbidden External Subroutine  Invocation(他のプログラムのサブルーチンは呼び出してはいけない)
-Using Commit and Rollback on Try  Block(Try文にcommit workを記述すれば、catch構文に rollback workを記述しなければならない)
【００８１】
(４)SQL 標準
-Forbidden Nested Select Statement(多重select文章は、記述してはいけない)
-Forbidden Multiple Table Join(３個以上のTableをjoinしてはいけない)
-Select Statement with an GroupBy  Function(Select構文使用の時、groupby 関数を使ってはいけない)
【００８２】
(５)ランタイムエラー
-Division by zero(掛け算演算の時、０で分けてはいけない)
-Unassigned Field Symbol(Field  symbolは使用前必ず初期化しなければならない)
-Infinite Loops(ループ文作成の時、必ずexitコードを記述しなければならない)
【００８３】
(６)保安弱み
-Call of System Function(システム関数は使ってはいけない)
-Call of Transactions(Call  Transaction文章は使ってはいけない)
-Use of Database Hints(Select文章使用の時、hints構文を使ってはいけない)
【００８４】
アバップ規則管理モジュール２２０は、図１１のように、アバップ規則データベースで各カテゴリー別コーディング規則を選択そして詳細オプションを設定し、選択された規則から係わるシンボルと欠陷パターン構造に対応されるシンボルテーブルのシンボル値を各ファイル別に検索し、検索された各シンボル値打ち別に対応されるすべての文法構造及びソースコードを抽象構文木から抽出してプログラム経路分析モジュール２３０に伝達する。
【００８５】
前記プログラム経路分析モジュールは、アバップ規則データベースで定義されたコーディング規則のプログラム経路パターン、欠陷パターン構造と欠陥条件の下に前記アバップ規則管理モジュールによって抽出された各シンボル値打ちの文法構造及びソースコードで係わるコーディング規則のコード欠陷を識別する機能を遂行し、検出された欠陷はそれぞれソースコードの位置と繋がれたコード欠陷報告書に伝達して最終使用者に図１２、１３、１４のように実施例のコード欠陷情報を提供する。
【００８６】
前記のような機能を遂行するために、プログラム経路分析モジュールのプログラム経路パターンは制御流れ、制御及び資料流れ、そして制御流れ及び呼び出しで仕分けされ、アバップ規則データベースで定義されたすべてのコーディング規則はただ一つのプログラム経路パターンに属する。
【００８７】
前記各プログラム経路パターンによってプログラム経路分析モジュールで欠陷を検査する実施例は次のようである。
【００８８】
(１) 制御流れのプログラム経路パターン基盤欠陥検査(図１２ 参照)
- 規則名及び欠陥条件(Infinite  Loops、ループ文作成の時、必ずexitコードを記述しなければならない):アバップ規則データベース
- Fromシンボルでループ文があるかどうかを検索:アバップ規則管理モジュール及びシンボルテーブル
- Fromシンボルに関連文法構造及びソースコードを読み出し: 抽象構文木
- ループ文でExitコードがあるかどうかを制御流れ経路で分析:プログラム経路分析モジュール
- ループ文でExitコードがなければ、コード欠陷で識別して欠陥報告書の生成:コード 欠陥報告書生成モジュール
- アバップソースの例題
FORM foo。
data i type i value１。
data sum type i value ０。
do。"Violation:shall  be  exited  from  loops。
if sum>１０。
sum = sum + i。
endif。
enddo。
ENDFORM。
【００８９】
(２)制御及び資料流れのプログラム経路パターン基盤欠陥検査(図１３参照)
- 規則名及び欠陥条件(Unassigned
Field  Symbol、Field  symbolは使用前必ず初期化しなければならない):アバップ規則データベース
- From シンボルでField-symbolがあるかどうかを検索 : アバップ規則管理モジュール及びシンボルテーブル
- From シンボルに関連文法構造及びソースコードを読み出し:抽象構文木
- 文章中にあるField-symbolが初期化したのかを制御及び資料流れ経路で分析: プログラム経路分析モジュール
- 宣言文に初期化されなかったら、コード欠陷で識別して欠陥報告書の生成
: コード欠陷報告で
-アバップソースの例題
FORM foo。
FIELD-SYMBOLS:<fs１> type any。"Violation : shall be  assigned。
data:tp_value type string value'any  valueis  acceptable
data:tp_fieldname type string  value'tp_value'。
if<fs１>is  ASSIGNED。
write/'assigned'。
else。
write/'unassinged'。
endif。
write<fs１>。
ENDFORM。
【００９０】
(３)制御流れ及び呼び出しのプログラム経路パターン基盤欠陥検査(図１４参照)
- 規則名及び欠陥条件(Recursive  Calls、再帰呼出してはいけない):アバップ規則データベース
- Methodシンボルで再帰呼び出しがあるかどうかを検索: アバップ規則管理モジュール及びシンボルテーブル
- Methodシンボルに関連文法構造及びソースコードを読み出し:抽象構文木
- メソッド内部で自分自身を呼び出すメソッドがあるかどうかを制御流れ及び呼び出し経路で分析 : プログラム経路分析モジュール
-再帰呼び出しがあったら、コード欠陷に識別して欠陷報告書の生成:コード欠陷報告書
-アバップ ソースの例題
METHOD foo。
data i  type  i  value１。
data sum type i  value ０。
write/'unassinged'。
foo()。"Violation:shall  not  be  recursive
ENDMETHOD。
【００９１】
図２は、本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの遂行方法を現わした流れ図である。
【００９２】
すなわち、アバップ規則管理モジュールのアバップ及びSQLコーディングスタイル、コーディング標準、アキテクチャ標準、SQL標準、ランタイムエラー、保安弱みの規則の中から選択された規則に対する欠陥検査を遂行してコード欠陷報告書を生成する詳細処理流れ図である。
【００９３】
S１０１は、図１のアバップ規則管理モジュールから選択されたアバップ規則を規則インデックスを設定する。
【００９４】
S１０２は、S１０１の設定されたコーディング規則のインデックス手順で検査対象であるすべてのファイルに対してS１０３からS１１９までコード欠陷検査を繰り返し遂行し、規則インデックスの終わりまで上の過程を繰り返し的に遂行する。
【００９５】
Ｓ１０３は、Ｓ１０２で一つの規則に対するカテゴリー類型、シンボル類型、プログラム経路パターン、欠陷パターン構造類型、欠陥条件、規則名、規則ＩＤ、エラータイプ、エラーメッセージの資料構造情報を受ける。
【００９６】
受けた一つのプログラム経路パターンをＳ１０９、Ｓ１１１、または  Ｓ１１３に知らせ、シンボル類型、欠陷パターン構造類型及び欠陥条件はＳ１０６に伝達する。
【００９７】
Ｓ１０４は、シンボルテーブルのファイルクラスで検索されたファイルをアバップファイルインデックスで設定する。
【００９８】
Ｓ１０５は、Ｓ１０４の検索されたアバップファイルインデックス手順で検査対象であるすべてのシンボルに対してＳ１０６からＳ１１８までコード欠陷検査を繰り返し遂行し、ファイルインデックスの終わりまで上の過程を繰り返し的に遂行する。
【００９９】
Ｓ１０６は、Ｓ１０３の一規則のシンボル類型及び欠陷パターン構造類型の情報と  Ｓ１０５で伝達した一つのファイル名に根拠してそのファイルで構成されているシンボルの値をシンボルテーブルで検索してシンボル値インデックスを設定する。
【０１００】
Ｓ１０７は、Ｓ１０６のシンボル値インデックス手順で値打ちを読み出してＳ１０８に伝達し、Ｓ１０８は、シンボル値に係わるすべての文法構造及びソースコードを抽象構文木で検索し、またＳ１０３から受けた欠陷パターン構造類型をＳ１１０、Ｓ１１２またはＳ１１４に伝達する。
【０１０１】
Ｓ１０９がＳ１０３から制御流れの経路パターンをもらったら、Ｓ１１０は、Ｓ１０８から検索されたシンボル値の文法構造及びソースコードを対象としてＳ１０３から受けた欠陷パターン構造類型及び欠陥条件の下でコード検査した結果をＳ１１５に知らせる。
【０１０２】
Ｓ１１１がＳ１０３から制御及び資料流れの経路パターンをもらったら、Ｓ１１２は  Ｓ１０８から検索されたシンボル値の文法構造及びソースコードを対象としてＳ１０３から受けた欠陷パターン構造類型及び欠陥条件の下でコード検査した結果をＳ１１５に知らせる。
【０１０３】
Ｓ１１３がＳ１０３から制御流れ及び呼び出しの経路パターンをもらったら、Ｓ１１４は、Ｓ１０８から検索されたシンボル値の文法構造及びソースコードを対象としてＳ１０３から受けた欠陷パターン構造類型及び欠陥条件の下でコード検査した結果をＳ１１５に知らせる。
【０１０４】
前記Ｓ１１５は、検査したシンボル値のソースコードで欠陷があったら、Ｓ１１６に伝達し、欠陷がなければ、Ｓ１１８へ移動する。
【０１０５】
Ｓ１１６は、発見された各欠陷のソース位置を抽象構文木の物理的位置（ＩＤ）で検索してＳ１１７に伝達する。
【０１０６】
Ｓ１１７は、Ｓ１１６により伝達した欠陷とソース位置を欠陷保存所に保存し、Ｓ１１８に移動する。
【０１０７】
Ｓ１１８は、Ｓ１０６のシンボル値インデックスで次のシンボル値があれば、Ｓ１０７に移動し、なければ、次のファイルのコード検査のためにＳ１１９に移動する。
【０１０８】
Ｓ１１９は、Ｓ１０４のファイルインデックスで次のファイルがあれば、Ｓ１０５に移動して、なければ、次の規則を適用するためにＳ１２０に移動する。
【０１０９】
Ｓ１２０は、Ｓ１０１の規則インデックスで次の規則があれば、Ｓ１０２に移動し、なければ、コード欠陥検査を終了する。
【０１１０】
前記のような構成及び動作を通じてアバップソフトウェアに含まれている多様なコード欠陷をソースコードだけで静的分析して実際実行の時、発生することができるコード欠陷を前もって探知することができる效果を提供するようになる。
【０１１１】
なお、本発明は実施例によって限定されず、本発明が属する技術分野において通常の知識を有するものであれば本発明の趣旨から逸脱しない範囲で、修正または変更できる。
【産業上の利用可能性】
【０１１２】
本発明は、アバップソースコードをあらかじめ定義されたアバップ文法（ＢＮＦ）によって、語彙及び構文分析して抽象構文木のツリー資料構造を構築し、抽象構文木で意味分析してシンボルテーブルのテーブル資料構造を構築することができる。
【符号の説明】
【０１１３】
１００    アバップソースコード文法分析部
１１０    語彙分析モジュール
１２０    構文分析モジュール
１３０    抽象構文木貯蔵処理モジュール
１４０    意味分析モジュール
１５０    シムボルテーブル貯蔵処理モジュール
２００    アバップソースコード欠陥検査部
２１０    アバップ  規則データベース
２２０    アバップ規則管理モジュール
２３０    プログラム経路分析モジュール
２４０    コード  欠陥報告書生成モジュール
【図１】
2013522790.tif 000003
【図２】
2013522790.tif 000004
【図３】
2013522790.tif 000005
【図４】
2013522790.tif 000006
【図５】
2013522790.tif 000007
【図６】
2013522790.tif 000008
【図７】
2013522790.tif 000009
【図８】
2013522790.tif 000010
【図９】
2013522790.tif 000011
【図１０】
2013522790.tif 000012
【図１１】
2013522790.tif 000013
【図１２】
2013522790.tif 000014
【図１３】
2013522790.tif 000015
【図１４】
2013522790.tif 000016
【国際調査報告】
2013522790.tif 000017
2013522790.tif 000018
2013522790.tif 000019
2013522790.tif 000020