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

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

▶ ソフトフォーソフト カンパニーリミテッドの特許一覧

特許5791698アバップソースコードのコード検査遂行システム
<>
  • 特許5791698-アバップソースコードのコード検査遂行システム 図000002
  • 特許5791698-アバップソースコードのコード検査遂行システム 図000003
  • 特許5791698-アバップソースコードのコード検査遂行システム 図000004
  • 特許5791698-アバップソースコードのコード検査遂行システム 図000005
  • 特許5791698-アバップソースコードのコード検査遂行システム 図000006
  • 特許5791698-アバップソースコードのコード検査遂行システム 図000007
  • 特許5791698-アバップソースコードのコード検査遂行システム 図000008
  • 特許5791698-アバップソースコードのコード検査遂行システム 図000009
  • 特許5791698-アバップソースコードのコード検査遂行システム 図000010
  • 特許5791698-アバップソースコードのコード検査遂行システム 図000011
  • 特許5791698-アバップソースコードのコード検査遂行システム 図000012
  • 特許5791698-アバップソースコードのコード検査遂行システム 図000013
  • 特許5791698-アバップソースコードのコード検査遂行システム 図000014
  • 特許5791698-アバップソースコードのコード検査遂行システム 図000015
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5791698
(24)【登録日】2015年8月14日
(45)【発行日】2015年10月7日
(54)【発明の名称】アバップソースコードのコード検査遂行システム
(51)【国際特許分類】
   G06F 11/36 20060101AFI20150917BHJP
   G06F 11/28 20060101ALI20150917BHJP
【FI】
   G06F9/06 620M
   G06F11/28 E
【請求項の数】5
【全頁数】19
(21)【出願番号】特願2013-501169(P2013-501169)
(86)(22)【出願日】2010年4月5日
(65)【公表番号】特表2013-522790(P2013-522790A)
(43)【公表日】2013年6月13日
(86)【国際出願番号】KR2010002061
(87)【国際公開番号】WO2011122724
(87)【国際公開日】20111006
【審査請求日】2012年9月21日
(31)【優先権主張番号】10-2010-0028128
(32)【優先日】2010年3月29日
(33)【優先権主張国】KR
【前置審査】
(73)【特許権者】
【識別番号】512245805
【氏名又は名称】ソフトフォーソフト カンパニーリミテッド
【氏名又は名称原語表記】SOFT4SOFT CO.,LTD.
(74)【代理人】
【識別番号】100130111
【弁理士】
【氏名又は名称】新保 斉
(72)【発明者】
【氏名】イ、フォン ギ
【審査官】 衣川 裕史
(56)【参考文献】
【文献】 米国特許出願公開第2007/0283325(US,A1)
【文献】 特開2005−056183(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
G06F 11/28
(57)【特許請求の範囲】
【請求項1】
アバップ(ABAP)ソースコードのコード検査を遂行するコード検査遂行システムであって、
コード検査対象であるアバップソースコードを、語彙、構文及び意味分析して、それぞれ抽象構文木とシンボルテーブルの資料構造に保存するアバップソースコード文法分析部と、
ソースコード及び文法構造を欠陷検査して、コード欠陷報告を生成するアバップソースコード欠陥検査部と、を備え、
前記アバップソースコード文法分析部は、
検査対象であるアバップソースコードファイルをファイル単位で読んであらかじめ定義されたアバップ文法(BNF)によって、アバップソースコードを一連の文字列を意味するトークン単位で分離する語彙分析モジュールと、
各ファイル単位で分離したトークンの構文(文法)があらかじめ定義されたアバップ文法に違反されるか否かを検査して文法間違いがあれば、関連ファイルの文法間違いメッセージを、文法間違いがなければ、文章の構文を分析して構文間の制御流れ関係の意味を付与して各ファイル単位の構文構造を抽出する構文分析モジュールと、
前記構文分析モジュールから抽出された情報を各ファイル単位でツリー資料構造に保存する抽象構文木貯蔵処理モジュールと、
前記抽象構文木貯蔵処理モジュールで各ファイルを構成するシンボル類型とその間の連結関係情報及び欠陥検査に必要な各シンボル類型の欠陷パターン構造を抽出する意味分析モジュールと、
前記意味分析モジュールから抽出された情報を、各ファイルの構成要素であるシンボルのテーブル資料構造に保存するシムボルテーブル貯蔵処理モジュールと、を含み、
前記アバップソースコード欠陥検査部は、
アバップ規則管理モジュールから選択されたコーディング規則に係わるソースコード及び文法構造を、前記資料構造によってプログラム経路分析モジュールでコード欠陷を検査するものであり、
欠陥深刻度及びプログラミング特性によって多様なコーディング規則カテゴリーらと各規則のシンボル類型、 欠陷パターン構造類型、そして欠陷条件類型をアバップ規則管理モジュールの処理によって、保存及び管理されるアバップ規則データベースと、
前記アバップ規則データベースからコーディング規則を選択し、選択された規則と係わるシンボルと欠陷パターン構造に対応されるシンボルテーブルのシンボル値を各ファイル別に検索し、検索された各シンボル値別に対応されるすべての文法構造及びソースコードを抽象構文木から抽出してプログラム経路分析モジュールに伝達するアバップ規則管理モジュールと、
前記抽出された各シンボル値打ちの文法構造及びソースコードを選択された規則のプログラム経路パターン、欠陷パターン構造と欠陥条件によって欠陥検査するプログラム経路分析モジュールと、
前記選択されたコード規則に違反された欠陷があれば、コード欠陷報告書を生成するコード欠陥報告書生成モジュールと、を含む
ことを特徴とするアバップソースコードのコード検査を遂行するコード検査遂行システム。
【請求項2】
前記アバップソースコード文法分析部は、
上向き式構文分析技法(Bottom−up Syntax Analysis)であるLR(1)パーサアルゴリズムでトークンの文法的構造分析する
請求項1に記載のアバップソースコードのコード検査を遂行するコード検査遂行システム。
【請求項3】
前記アバップソースコード文法分析部は、
タイプ(Type) 情報、名連結関係を抽出する
請求項1に記載のアバップソースコードのコード検査を遂行するコード検査遂行システム。
【請求項4】
前記アバップソースコード文法分析部は、
アバップソースコードある上位ディレクトリを選択すれば、下位ディレクトリを含んだすべてのアバップファイルを検査対象とするか、または一つのファイルを選択しても検査対象とする
請求項1に記載のアバップソースコードのコード検査を遂行するコード検査遂行システム。
【請求項5】
前記アバップ規則データベースは
アバップ規則管理モジュールによって規則の追加または変更を管理される
請求項1に記載のアバップソースコードのコード検査を遂行するコード検査遂行システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、アバップソースコードのコード検査を遂行するコード検査遂行システムに関するものである。詳細には、ドイツSAP会社で作ったABAP/4言語はクライアントサーバ環境であるSAP R/3基盤で企業の全社的資源管理パッケージシステム(ERP、Enterprise Resource Planning)などを開発するのに使う4世代言語だが、Java(登録商標)などの4世代言語と違うようにアバッププログラミングに対する整形化された大小文字区別(Case-sensitive)とコーディングフォーマット(Format)の制限がなくて、アバップ言語及びSAP R/3に対するアバップ開発者の誤解、誤用そして間違いなどにより発生するシステム故障及び止まり、データ損失及び変形、過大な性能低下、機能の違った行動及び結果、複雑なコード構造及び綴字間違いなどのコーディング欠陷を検査してアバップアプリケーションの維持保守性、性能性、正確性、安全性及び保安性などを信頼するようにするアバップ(ABAP)ソースコードのコード検査を遂行するコード検査遂行システムに関するものである。
【背景技術】
【0002】
アバップソフトウェアに含まれている多様なコード欠陷を検査することができる方法には、ソースコードだけで静的分析して実際実行の時発生することができるコード欠陷を前もって探知するコード検査と、ソースコードを行ってその結果値を基盤でコード欠陷を捜すテスティング技法がある。
【0003】
コード検査技法は、テスティング以前にコード欠陷をとり除くことによって、開発期間短縮、テスティングの費用節減及び期間の短縮だけでなく、一貫性があるコーディングフォーマット基盤アプリケーション開発で今後の維持補修費用を節減することができるから特に效率的である。
【0004】
従来のアバップコード検査は、コード開発の後(コンパイル後)、コード欠陷を手作業でコードを検討する方法と、プログラムを行ってリアルタイムで保安弱みを捜してくれるテスティング技法であるコードプロファイラー(Code Profiler)があるが、コード開発段階で(コンパイル以前)コードを行わなく、アバップコードそのものだけでアバップアプリケーションの維持保守性、性能性、正確性、安全性及び保安性などに違反したコードを探知することはできない。
【発明の概要】
【発明が解決しようとする課題】
【0005】
そこで、本発明は、前記のような従来の問題に鑑みなされたものであり、アバップソースコードをあらかじめ定義されたアバップ文法(BNF)によって、語彙及び構文分析して抽象構文木のツリー資料構造を構築し、抽象構文木で意味分析してシンボルテーブルのテーブル資料構造を構築するアバップソースコードのコード検査を遂行するコード検査遂行システムの提供を課題とする。
【0006】
本発明の他の目的は、アバップ コード検査道具のソースコード欠陷検査は多様なコーディング規則に係わるソースコードの欠陷を前記で構築されたテーブル及びツリー資料構造基盤によって検査して違反されたコード欠陷を修正するようにコード欠陷報告書を提供するアバップソースコードのコード検査を遂行するコード検査遂行システムの提供にある。
【課題を解決するための手段】
【0007】
本発明が解決しようとする課題を果たすために、本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムは、
【0008】
コード検査対象であるアバップソースコードを語彙、構文及び意味分析してそれぞれ抽象構文木とシンボルテーブルの資料構造に保存するアバップソースコード文法分析部と、
【0009】
アバップ規則管理モジュールから選択されたコーディング規則に係わるソースコード及び文法構造を前記資料構造基盤によってプログラム経路分析モジュールでコード欠陷を検査して違反されたコード欠陷を修正するようにコード欠陷報告書を生成するアバップソースコード欠陥検査部と、を含んで構成され本発明の課題を解決する。
【発明の効果】
【0010】
以上の構成及び作用を持つ本発明によるアバップソースコードのコード検査を遂行するコード検査遂行システムは、アバップソフトウェアに含まれている多様なコード欠陷をソースコードだけで静的分析して実際実行の時発生することができるコード欠陷を前もって探知することができる效果を提供するようになる。
【0011】
また、アバップ言語及びSAP R/3に対するアバップ開発者の誤解、誤用そして間違いなどで発生するシステム故障及び止まり、データ損失及び変形、過大な性能低下、機能の違った行動及び結果、複雑なコード構造及び綴字間違いなどのコーディング欠陷をテスティング以前にとり除くことによって、開発期間短縮、テスティングの費用節減及び期間の短縮だけでなく、一貫性があるコーディングフォーマット基盤アプリケーション開発で今後の維持補修費用を節減することができるより良い效果を得ることができる。
【図面の簡単な説明】
【0012】
図1】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの全体ブロック図
図2】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの遂行方法を現わした流れ図
図3】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの検査対象であるアバップソースコードファイルを選択する画面の例示説明図
図4】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムのコード検査対象アバップソースコードの例示説明図
図5】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの語彙分析モジュールの例示説明図
図6】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの構文分析モジュールの例示説明図
図7】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの抽象構文木の資料構造の例示説明図
図8】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの抽象構文木の例示説明図
図9】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムのシンボルテーブル資料構造のクラスダイヤグラム
図10】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの構文及び意味分析を行うディスプレーのスクリーンショット
図11】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムのコーディング規則を選択する画面の例示説明図
図12】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの制御流れ経路パターンのコード検査を行った後、コード欠陷報告書画面の例示説明図
図13】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの制御及び資料流れ経路パターンのコード検査を行った後、コード欠陷報告書画面を現わした例示説明図
図14】本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの制御流れ及び呼び出し経路パターンのコード検査を行った後、コード欠陷報告書画面を現わした例示説明図
【発明を実施するための形態】
【0013】
前記課題を果たすための本発明のアバップソースコードのコード検査を遂行するコード検査遂行システムは、
【0014】
コード検査対象であるアバップソースコードを語彙、構文及び意味分析してそれぞれ抽象構文木とシンボルテーブルの資料構造に保存するアバップソースコード文法分析部と、
【0015】
アバップ規則管理モジュールから選択されたコーディング規則に係わるソースコード及び文法構造を前記資料構造基盤によってプログラム経路分析モジュールでコード欠陷を検査して違反されたコード欠陷を修正するようにコード欠陷報告書を生成するアバップソースコード欠陥検査部と、を含んで構成されることを特徴とする。
【0016】
この時、前記アバップソースコード文法分析部は、
【0017】
検査対象であるアバップソースコードファイルをファイル単位で読んであらかじめ定義されたアバップ文法(BNF)によって、アバップソースコードを一連の文字列を意味するトークン単位(キーワード、識別子、シンボル識別子、定数、演算子)で分離する語彙分析モジュールと、
【0018】
各ファイル単位で分離したトークンの構文(文法)があらかじめ定義されたアバップ文法に違反されるか否かを検査して文法間違いがあれば、関連ファイルの文法間違いメッセージを、文法間違いがなければ、文章の構文を分析して構文間の制御流れ関係の意味を付与して各ファイル単位の構文構造を抽出する構文分析モジュールと、
【0019】
前記構文分析モジュールから抽出された情報を各ファイル単位でツリー資料構造に保存する抽象構文木貯蔵処理モジュールと、
【0020】
前記抽象構文木貯蔵処理モジュールで各ファイルを構成するシンボル類型(クラス、メソッド、変数、型、関数、イベント、ダイアログ、処理ブロック)らとその間の連結関係情報及び欠陥検査に必要な各シンボル類型の欠陷パターン構造を抽出する意味分析モジュールと、
【0021】
前記意味分析モジュールから抽出された情報を各ファイルの構成要素であるシンボルのテーブル資料構造に保存するシムボルテーブル貯蔵処理モジュールと、を含んで構成されることを特徴とする。
【0022】
この時、前記アバップソースコード欠陥検査部は、
【0023】
欠陥深刻度及びプログラミング特性によって多様なコーディング規則カテゴリー(アバップ及びSQLコーディングスタイル、コーディング標準、アキテクチャ標準、SQL標準、ラン-タイムエラー、保安弱み)らと各規則のシンボル類型、欠陷パターン構造類型、そして欠陷条件類型をアバップ規則管理モジュールの処理によって、保存及び管理されるアバップ規則データベースと、
【0024】
前記アバップ規則データベースからコーディング規則を選択し、選択された規則と係わるシンボルと欠陷パターン構造に対応されるシンボルテーブルのシンボル値を各ファイル別に検索し、検索された各シンボル値別に対応されるすべての文法構造及びソースコードを抽象構文木から抽出してプログラム経路分析モジュールに伝達するアバップ規則管理モジュールと、
【0025】
前記抽出された各シンボル値打ちの文法構造及びソースコードを選択された規則のプログラム経路パターン(制御流れ、制御及び資料流れ、または制御流れ及び呼び出し)、欠陷パターン構造と欠陥条件によって欠陥検査するプログラム経路分析モジュールと、
【0026】
前記選択されたコード規則に違反された欠陷があれば、コード欠陷報告書を生成するコード欠陥報告書生成モジュールと、を含んで構成されることを特徴とする。
【0027】
この時、前記アバップソースコード文法分析部は、
【0028】
構文分析されたトークンを各ファイル単位で受けて上向き式構文分析技法(Bottom-up Syntax Analysis)であるLR(1)パーサアルゴリズムでトークンの文法的構造で分析して各ファイル単位で構文構造間の制御流れ関係を抽出して抽象構文木の資料構造に保存することを特徴とする。
【0029】
この時、前記アバップソースコード文法分析部は、
【0030】
抽象構文木の資料構造で各ファイルを構成するシンボル類型とその間のシンボル連結関係、タイプ(Type)情報、名連結関係を抽出し、欠陥検査に必要な各シンボル類型の欠陷パターン構造情報をシンボルテーブルの資料構造に保存することを特徴とする。
【0031】
この時、前記アバップソースコード文法分析部は、
【0032】
アバップソースコードを分析する時、アバップファイル(*.abap)がある上位ディレクトリを選択すれば、下位ディレクトリを含んだすべてのアバップファイルを検査対象で遂行するか、または一つのファイルを選択しても検査対象で遂行することを特徴とする。
【0033】
この時、前記プログラム経路分析モジュールは、
【0034】
アバップ規則データベースで定義されたコーディング規則のプログラム経路パターン、欠陷パターン構造と欠陥条件の下にアバップ規則管理ブによって抽出された各シンボル値打ちの文法構造及びソースコードで係わるコーディング規則のコード欠陷を識別する機能を遂行することを特徴とする。
【0035】
この時、前記アバップ規則管理モジュールは、
【0036】
アバップ規則データベースで各カテゴリー別コーディング規則を選択そして詳細オプションを設定し、選択された規則で係わるシンボルと欠陷パターン構造に対応されるシンボルテーブルのシンボル値を各ファイル別に検索し、検索された各シンボル値打ち別に対応されるすべての文法構造及びソースコードを抽象構文木から抽出してプログラム経路分析モジュールに伝達する機能を遂行することを特徴とする。
【0037】
この時、前記アバップ
規則データベースは、
【0038】
多様なカテゴリー(アバップ及びSQLコーディングスタイル、コーディング標準、アキテクチャ標準、SQL標準、ラン-タイムエラー、保安弱み)のコーディング規則を保存するデータベースとして、各規則別にカテゴリー類型、シンボル類型、プログラム経路パターン、欠陷パターン構造類型、欠陥条件、
規則名、規則ID、エラータイプ、エラーメッセージの資料構造で成り立っているし、アバップ規則管理モジュールによって規則の追加または変更を管理することを特徴とする。
【0039】
以下、本発明によるアバップソースコードのコード検査を遂行するコード検査遂行システムを、実施例を挙げて詳しく説明する。
【0040】
図1は、本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの全体ブロック図である。
【0041】
図1に図示したように、本発明であるアバップソースコードのコード検査を遂行するコード検査遂行システムは、
【0042】
コード検査対象であるアバップソースコードを語彙、構文及び意味分析してそれぞれ抽象構文木とシンボルテーブルの資料構造に保存するアバップソースコード文法分析部100と;
【0043】
アバップ規則管理モジュールから選択されたコーディング規則に係わるソースコード及び文法構造を前記資料構造基盤によってプログラム経路分析モジュールでコード欠陷を検査して違反されたコード欠陷を修正するようにコード欠陷報告書を生成するアバップソースコード欠陥検査部200と;を含んで構成される。
【0044】
この時、前記アバップソースコード文法分析部100は、
【0045】
検査対象であるアバップソースコードファイルをファイル単位で読んであらかじめ定義されたアバップ文法(BNF)によって、アバップソースコードを一連の文字列を意味するトークン単位(キーワード、識別子、シンボル識別子、定数、演算子)で分離する語彙分析モジュール110と、
【0046】
各ファイル単位で分離したトークンの構文(文法)があらかじめ定義されたアバップ文法に違反されるか否かを検査して文法間違いがあれば、関連ファイルの文法間違いメッセージを、
文法間違いがなければ、文章の構文を分析して構文間の制御流れ関係の意味を付与して、各ファイル単位の構文構造を抽出する構文分析モジュール120と、
【0047】
前記構文分析モジュールから抽出された情報を各ファイル単位でツリー資料構造に保存する抽象構文木貯蔵処理モジュール130と、
【0048】
前記抽象構文木貯蔵処理モジュールで各ファイルを構成するシンボル類型(クラス、メソッド、変数、型、関数、イベント、ダイアログ、処理ブロック)らとその間の連結関係情報及び欠陥検査に必要な各シンボル類型の欠陷パターン構造を抽出する意味分析モジュール140と、
【0049】
前記意味分析モジュールから抽出された情報を各ファイルの構成要素であるシンボルのテーブル資料構造に保存するシムボルテーブル貯蔵処理モジュール150とを含んで構成されることを特徴とする。
【0050】
この時、前記アバップソースコード欠陥検査部200は、
【0051】
欠陥深刻度及びプログラミング特性によって、多様なコーディング規則カテゴリー(アバップ及びSQLコーディングスタイル、コーディング標準、アキテクチャ標準、SQL標準、 ラン-タイムエラー、保安弱み)らと各規則のシンボル類型、欠陷パターン構造類型、そして欠陷条件類型をアバップ規則管理モジュールの処理によって、保存及び管理されるアバップ規則データベース210と、
【0052】
前記アバップ規則データベースからコーディング規則を選択し、選択された規則と係わるシンボルと欠陷パターン構造に対応されるシンボルテーブルのシンボル値を各ファイル別に検索し、検索された各シンボル値別に対応されるすべての文法構造及びソースコードを抽象構文木から抽出してプログラム経路分析モジュールに伝達するアバップ規則管理モジュール220と、
【0053】
前記抽出された各シンボル値打ちの文法構造及びソースコードを選択された規則のプログラム経路パターン(制御流れ、制御及び資料流れ、または制御流れ及び呼び出し)、欠陷パターン構造と欠陥条件によって欠陥検査するプログラム経路分析モジュール230と、
【0054】
前記選択されたコード規則に違反された欠陷があれば、コード欠陷報告書を生成するコード欠陥報告書生成モジュール240とを含んで構成されることを特徴とする。
【0055】
本発明の検査対象であるアバップソースコードを語彙、構文及び意味分析して、それぞれ抽象構文木とシンボルテーブルの資料構造に保存するアバップソースコード文法分析部と、アバップ規則管理モジュールから選択されたコーディング規則に係わるソースコード及び文法構造を前記資料構造基盤によってプログラム経路分析モジュールでコード欠陷を検査して違反されたコード欠陷を修正するようにコード欠陷報告書を生成するアバップソースコード欠陥検査部とで大きく仕分けされられる。
【0056】
前記アバップソースコード文法分析部の機能は次のようである。
【0057】
図3のように、使用者によって図4のようなアバップファイル(*。abap)がある上位ディレクトリを選択すれば、下位ディレクトリを含んだすべてのアバップファイルを検査対象とし、または図4の例題アバップファイルのように、一つのファイルを選択して検査対象として、選択されたファイルを読んでインデックスを設定し、検査対象であるすべてのアバップソースコードファイルのインデックス手順で語彙分析モジュール110に伝達する。
【0058】
参照的に、図4の左側の行番号は説明の便宜上、記録したものである。
【0059】
この時、前記語彙分析モジュールは、図4の例題ソースのような検査対象であるアバップファイルをファイル単位で読んで、あらかじめ定義されたアバップ文法のアバップBackus標準形式(Backus Normal Form、BNF)によって、アバップソースコードを一連の文字列を意味するトークン単位で分離して構文分析モジュール120に伝達する。
【0060】
前記機能を遂行するために、語彙分析モジュールのトークンは、文法的にこれ以上分けることができない基本的な言語要素を示し、キーワード(keyword)、識別子(identifier)、シンボル識別子(symbol-identifier)、定数(constant)、演算子(operator)の記号で仕分けされて各トークンに付与する。
【0061】
図5に図示しように、入力された図4の一番目と四番目のラインの文章を文字列であるトークンで変換して各トークン別にトークンの記号を付与した例である。
【0062】
ただ、線終決(end)、空白、そして注釈はトークンではない。
【0063】
前記構文分析モジュールは、図5の例題のような構文分析されたトークンを各ファイル単位で受けてトークンの構文があらかじめ定義されたアバップ文法(BNF)に違反されるか否かを分析して文法間違いがあれば、関連ファイルの文法間違いメッセージをアバップ文法エラーメッセージで知らせ、文法間違いがなければ、上向き式構文分析技法(Bottom-up Syntax Analysis)であるLR(1)パーサアルゴリズムでトークンの文法的構造を分析して各ファイル単位で構文構造間の制御流れ関係を抽出して抽象構文木の資料構造に抽象構文木貯蔵処理モジュール130の処理によって保存し、生成された抽象構文木の文法構造情報を各ファイル単位で意味分析モジュールに伝達する。
【0064】
前記文法検査の実施例として、図6はトークン化された図4の四番目ラインのクラス宣言文章でクラス BNFに違反された文法的エラーがないかを点検する。
【0065】
追加的に、すべてのアバップの一文章の終りは、常に "。" 演算子の終決がいなければならない。
【0066】
もし、アバップ文法に違反されたファイルは図10のように、エラーファイル(Erroneous Files)のファイル数及びエラー位置を表示して意味分析対象から除く。
【0067】
前記抽象構文木生成の実施例として、図8は、図4の例題ソースを構文分析した後、生成されたツリー資料構造である。
【0068】
前述したような抽象構文木の資料構造は、図7でよく見れば、各ファイルの各ノードは、意味的一単位である文章(Statement)を現わし、各文章は、ソースの物理的位置(ID)、表現式(Expression、文法構造及びソースコード)と文章の間の連結関係(親ノード(father、自分のノード深みより前にあるノード)、子ノード(child、自分のノード深みより次にあるノード)、次ノード(next、自分のノードと同じ深みにあるノード)、以前ノード(pervious、自分のノードと同じ深みにあるノード)、 羅列ノード (list、自分のノードと同じ深みにある同時に同一ソースラインにあるノード))の資料構造で成り立つ。
【0069】
図8のように、ノード間の連結関係は、ノード間の制御流れを方向性グラフのように図式化したことであり、各ノードはノード間の制御流れの連結(link)を現わしているし、次のノード(next)のないノードは文章の終りを現わす。
【0070】
前記意味分析モジュール140は、図8の抽象構文木の資料構造で各ファイルを構成するシンボル類型とその間のシンボル連結関係、タイプ(Type)情報、名連結関係を抽出し、シムボルテーブル貯蔵処理モジュール150によって欠陥検査に必要な各シンボル類型の欠陷パターン構造情報をシンボルテーブルの資料構造に保存する。
【0071】
また、アバップ規則管理モジュール220から選択されたコーディング規則を遂行するために先にシンボルテーブルの資料構造を検索する。
【0072】
前述したようなシンボルテーブルの資料構造をよく見れば、サブシステム (Subsystem)、ファイル(File)、クラス(Class)、メソッド(Method)、変数(Variable)、型(Form)、関数(Function)、イベント(Events)、ダイアログ(Dialog)、処理ブロック(Processing Block)のクラス資料構造で成り立つ。
【0073】
図9のように、各クラスはクラス名、 属性名、メソッド名で構成されており、連結線はクラスとの関係を現わしている。
【0074】
メソッドは各シンボル類型の文法構造及びソースコードを抽象構文木から読み出す機能を遂行する。
【0075】
次は、アバップソースコード欠陥検査部200を具体的に説明するようにする。
前記アバップ規則データベース210は、図11のように、6個カテゴリーの多様なコーディング規則を保存したデータベースとして、アバップ規則管理モジュール220により規則の追加または変更などを管理するようになる。
【0076】
前記アバップ規則データベースの構造をよく見れば、カテゴリー類型、シンボル類型、プログラム経路パターン、欠陷パターン構造類型、欠陥条件、規則名、規則ID、エラータイプ、エラーメッセージの資料構造で成り立つ。
また、コーディング規則のカテゴリーは、アバップ及びSQ コーディングスタイル、コーディング標準、アキテクチャ標準、SQ標準、ランタイムエラー、保安弱みで仕分けされる。
【0077】
各カテゴリー別コーディング規則の名と説明に対する実施例は次のようである。
【0078】
(1)アバップ及びSQLコーディングスタイル
-Indentation(単位ごとに引っ込みをしなければならない)
-Line Length(ライン当たり100以内で作成しなければならない)
-Hard-Coding(ハードコーディングしてはいけない)
【0079】
(2)コーディング標準
-Variable Naming(変数命名規則を守らなければならない)
-Recursive Calls(再帰呼出してはいけない)
-Form Obsolete Statements (form文章は使用してはいけない)
【0080】
(3)アキテクチャ標準
-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を記述しなければならない)
【0081】
(4)SQL 標準
-Forbidden Nested Select Statement(多重select文章は、記述してはいけない)
-Forbidden Multiple Table Join(3個以上のTableをjoinしてはいけない)
-Select Statement with an GroupBy Function(Select構文使用の時、groupby 関数を使ってはいけない)
【0082】
(5)ランタイムエラー
-Division by zero(掛け算演算の時、0で分けてはいけない)
-Unassigned Field Symbol(Field symbolは使用前必ず初期化しなければならない)
-Infinite Loops(ループ文作成の時、必ずexitコードを記述しなければならない)
【0083】
(6)保安弱み
-Call of System Function(システム関数は使ってはいけない)
-Call of Transactions(Call Transaction文章は使ってはいけない)
-Use of Database Hints(Select文章使用の時、hints構文を使ってはいけない)
【0084】
アバップ規則管理モジュール220は、図11のように、アバップ規則データベースで各カテゴリー別コーディング規則を選択そして詳細オプションを設定し、選択された規則から係わるシンボルと欠陷パターン構造に対応されるシンボルテーブルのシンボル値を各ファイル別に検索し、検索された各シンボル値打ち別に対応されるすべての文法構造及びソースコードを抽象構文木から抽出してプログラム経路分析モジュール230に伝達する。
【0085】
前記プログラム経路分析モジュールは、アバップ規則データベースで定義されたコーディング規則のプログラム経路パターン、欠陷パターン構造と欠陥条件の下に前記アバップ規則管理モジュールによって抽出された各シンボル値打ちの文法構造及びソースコードで係わるコーディング規則のコード欠陷を識別する機能を遂行し、検出された欠陷はそれぞれソースコードの位置と繋がれたコード欠陷報告書に伝達して最終使用者に図12、13、14のように実施例のコード欠陷情報を提供する。
【0086】
前記のような機能を遂行するために、プログラム経路分析モジュールのプログラム経路パターンは制御流れ、制御及び資料流れ、そして制御流れ及び呼び出しで仕分けされ、アバップ規則データベースで定義されたすべてのコーディング規則はただ一つのプログラム経路パターンに属する。
【0087】
前記各プログラム経路パターンによってプログラム経路分析モジュールで欠陷を検査する実施例は次のようである。
【0088】
(1) 制御流れのプログラム経路パターン基盤欠陥検査(図12 参照)
- 規則名及び欠陥条件(Infinite Loops、ループ文作成の時、必ずexitコードを記述しなければならない):アバップ規則データベース
- Fromシンボルでループ文があるかどうかを検索:アバップ規則管理モジュール及びシンボルテーブル
- Fromシンボルに関連文法構造及びソースコードを読み出し: 抽象構文木
- ループ文でExitコードがあるかどうかを制御流れ経路で分析:プログラム経路分析モジュール
- ループ文でExitコードがなければ、コード欠陷で識別して欠陥報告書の生成:コード 欠陥報告書生成モジュール
- アバップソースの例題
FORM foo。
data i type i value1。
data sum type i value 0。
do。"Violation:shall be exited from loops。
if sum>10。
sum = sum + i。
endif。
enddo。
ENDFORM。
【0089】
(2)制御及び資料流れのプログラム経路パターン基盤欠陥検査(図13参照)
- 規則名及び欠陥条件(Unassigned
Field Symbol、Field symbolは使用前必ず初期化しなければならない):アバップ規則データベース
- From シンボルでField-symbolがあるかどうかを検索 : アバップ規則管理モジュール及びシンボルテーブル
- From シンボルに関連文法構造及びソースコードを読み出し:抽象構文木
- 文章中にあるField-symbolが初期化したのかを制御及び資料流れ経路で分析: プログラム経路分析モジュール
- 宣言文に初期化されなかったら、コード欠陷で識別して欠陥報告書の生成
: コード欠陷報告で
-アバップソースの例題
FORM foo。
FIELD-SYMBOLS:<fs1> type any。"Violation : shall be assigned。
data:tp_value type string value'any valueis acceptable
data:tp_fieldname type string value'tp_value'。
if<fs1>is ASSIGNED。
write/'assigned'。
else。
write/'unassinged'。
endif。
write<fs1>。
ENDFORM。
【0090】
(3)制御流れ及び呼び出しのプログラム経路パターン基盤欠陥検査(図14参照)
- 規則名及び欠陥条件(Recursive Calls、再帰呼出してはいけない):アバップ規則データベース
- Methodシンボルで再帰呼び出しがあるかどうかを検索: アバップ規則管理モジュール及びシンボルテーブル
- Methodシンボルに関連文法構造及びソースコードを読み出し:抽象構文木
- メソッド内部で自分自身を呼び出すメソッドがあるかどうかを制御流れ及び呼び出し経路で分析 : プログラム経路分析モジュール
-再帰呼び出しがあったら、コード欠陷に識別して欠陷報告書の生成:コード欠陷報告書
-アバップ ソースの例題
METHOD foo。
data i type i value1。
data sum type i value 0。
write/'unassinged'。
foo()。"Violation:shall not be recursive
ENDMETHOD。
【0091】
図2は、本発明の一実施例によるアバップソースコードのコード検査を遂行するコード検査遂行システムの遂行方法を現わした流れ図である。
【0092】
すなわち、アバップ規則管理モジュールのアバップ及びSQLコーディングスタイル、コーディング標準、アキテクチャ標準、SQL標準、ランタイムエラー、保安弱みの規則の中から選択された規則に対する欠陥検査を遂行してコード欠陷報告書を生成する詳細処理流れ図である。
【0093】
S101は、図1のアバップ規則管理モジュールから選択されたアバップ規則を規則インデックスを設定する。
【0094】
S102は、S101の設定されたコーディング規則のインデックス手順で検査対象であるすべてのファイルに対してS103からS119までコード欠陷検査を繰り返し遂行し、規則インデックスの終わりまで上の過程を繰り返し的に遂行する。
【0095】
S103は、S102で一つの規則に対するカテゴリー類型、シンボル類型、プログラム経路パターン、欠陷パターン構造類型、欠陥条件、規則名、規則ID、エラータイプ、エラーメッセージの資料構造情報を受ける。
【0096】
受けた一つのプログラム経路パターンをS109、S111、または S113に知らせ、シンボル類型、欠陷パターン構造類型及び欠陥条件はS106に伝達する。
【0097】
S104は、シンボルテーブルのファイルクラスで検索されたファイルをアバップファイルインデックスで設定する。
【0098】
S105は、S104の検索されたアバップファイルインデックス手順で検査対象であるすべてのシンボルに対してS106からS118までコード欠陷検査を繰り返し遂行し、ファイルインデックスの終わりまで上の過程を繰り返し的に遂行する。
【0099】
S106は、S103の一規則のシンボル類型及び欠陷パターン構造類型の情報と S105で伝達した一つのファイル名に根拠してそのファイルで構成されているシンボルの値をシンボルテーブルで検索してシンボル値インデックスを設定する。
【0100】
S107は、S106のシンボル値インデックス手順で値打ちを読み出してS108に伝達し、S108は、シンボル値に係わるすべての文法構造及びソースコードを抽象構文木で検索し、またS103から受けた欠陷パターン構造類型をS110、S112またはS114に伝達する。
【0101】
S109がS103から制御流れの経路パターンをもらったら、S110は、S108から検索されたシンボル値の文法構造及びソースコードを対象としてS103から受けた欠陷パターン構造類型及び欠陥条件の下でコード検査した結果をS115に知らせる。
【0102】
S111がS103から制御及び資料流れの経路パターンをもらったら、S112は S108から検索されたシンボル値の文法構造及びソースコードを対象としてS103から受けた欠陷パターン構造類型及び欠陥条件の下でコード検査した結果をS115に知らせる。
【0103】
S113がS103から制御流れ及び呼び出しの経路パターンをもらったら、S114は、S108から検索されたシンボル値の文法構造及びソースコードを対象としてS103から受けた欠陷パターン構造類型及び欠陥条件の下でコード検査した結果をS115に知らせる。
【0104】
前記S115は、検査したシンボル値のソースコードで欠陷があったら、S116に伝達し、欠陷がなければ、S118へ移動する。
【0105】
S116は、発見された各欠陷のソース位置を抽象構文木の物理的位置(ID)で検索してS117に伝達する。
【0106】
S117は、S116により伝達した欠陷とソース位置を欠陷保存所に保存し、S118に移動する。
【0107】
S118は、S106のシンボル値インデックスで次のシンボル値があれば、S107に移動し、なければ、次のファイルのコード検査のためにS119に移動する。
【0108】
S119は、S104のファイルインデックスで次のファイルがあれば、S105に移動して、なければ、次の規則を適用するためにS120に移動する。
【0109】
S120は、S101の規則インデックスで次の規則があれば、S102に移動し、なければ、コード欠陥検査を終了する。
【0110】
前記のような構成及び動作を通じてアバップソフトウェアに含まれている多様なコード欠陷をソースコードだけで静的分析して実際実行の時、発生することができるコード欠陷を前もって探知することができる效果を提供するようになる。
【0111】
なお、本発明は実施例によって限定されず、本発明が属する技術分野において通常の知識を有するものであれば本発明の趣旨から逸脱しない範囲で、修正または変更できる。
【産業上の利用可能性】
【0112】
本発明は、アバップソースコードをあらかじめ定義されたアバップ文法(BNF)によって、語彙及び構文分析して抽象構文木のツリー資料構造を構築し、抽象構文木で意味分析してシンボルテーブルのテーブル資料構造を構築することができる。
【符号の説明】
【0113】
100 アバップソースコード文法分析部
110 語彙分析モジュール
120 構文分析モジュール
130 抽象構文木貯蔵処理モジュール
140 意味分析モジュール
150 シムボルテーブル貯蔵処理モジュール
200 アバップソースコード欠陥検査部
210 アバップ 規則データベース
220 アバップ規則管理モジュール
230 プログラム経路分析モジュール
240 コード 欠陥報告書生成モジュール
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14