JPH0628165A - コーディング規則に基づくコード自動診断装置 - Google Patents

コーディング規則に基づくコード自動診断装置

Info

Publication number
JPH0628165A
JPH0628165A JP4179948A JP17994892A JPH0628165A JP H0628165 A JPH0628165 A JP H0628165A JP 4179948 A JP4179948 A JP 4179948A JP 17994892 A JP17994892 A JP 17994892A JP H0628165 A JPH0628165 A JP H0628165A
Authority
JP
Japan
Prior art keywords
rule
pattern
code
information
checking
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.)
Pending
Application number
JP4179948A
Other languages
English (en)
Inventor
Masamichi Takeuchi
正道 竹内
Yoshiaki Sasaki
良彰 佐々木
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.)
Toray Systems Center Inc
Original Assignee
Toray Systems Center Inc
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 Toray Systems Center Inc filed Critical Toray Systems Center Inc
Priority to JP4179948A priority Critical patent/JPH0628165A/ja
Publication of JPH0628165A publication Critical patent/JPH0628165A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【目的】 所定の文法に従ってコーディングされ計算機
に入力されるコードを、別に定義したコーディング規則
に基づいて自動的に診断する汎用的な装置を提供する。 【構成】 ルール情報の指定により診断対象特定条件を
判定する手段108と、ルール情報の指定により診断対
象情報を加工する手段110と、ルール情報の指定によ
り診断対象が満たすべき条件をチェックする手段111
と、ルール情報に従って前記三つの手段108、110
及び111をそれぞれ独立に呼び出すルール制御手段1
07と、を具備する。また、コードとコーディングパタ
ーンについてのルールとを一文字ずつ比較しながら一致
するかどうかをチェックすることにより、コードがコー
ディングパターンについてのルールを満たしているかど
うかをチェックするパターンチェック手段を含む。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、ある文法に従ってコー
ディングされたプログラムソースやJCL(ジョブ制御
言語)ソースなどの、計算機に入力される命令(以下コ
ードと呼ぶ)を、別に定義したコーディング規則に基づ
いて自動的に診断する装置に関する。
【0002】
【従来の技術】プログラムは、コンパイラ又はアセンブ
ラによる基本的な文法上のチェックの他に、デバッグの
効率化や資源の有効利用を目的として、実際に実機にて
実行する前に、さらに論理性や保守性等の高度な観点か
らチェックしておくことが有効である。プログラムの保
守性を良くするためには、コーディングの標準化を計る
必要があり、作成されたプログラムに関し、コーディン
グスタイルをチェックしておくことが重要である。
【0003】このようなチェックを人間の手作業により
実施することは、見落としが発生しやすく、また多くの
時間がかかる。そのため、自動的に診断する装置がいく
つか提案されている。例えば、特開昭63−12027
号公報、特開昭63−263545号公報、特開昭63
−280344号公報、特開平3−5837号公報及び
特開平3−288226号公報に開示されたものであ
る。これらの装置は、外部に格納されたルール(コーデ
ィング規則を診断装置が解釈できる形に表現したもの)
に基づいてプログラム等のコードの記述形式を自動的に
診断するものであり、ルールを自由に書き替えられるよ
うに外部記憶方式としている。さらに、ルールの表現と
しては、簡単に変更可能とするために、簡易言語を用い
て定義することも提案されている。
【0004】
【発明が解決しようとする課題】しかしながら、上記し
た従来技術の装置は、汎用性を高めるためにルールを外
部に登録しておき、チェック処理時に入力してくる手段
を有してはいるものの、そのルールを如何に表現するか
について深く考究したものではない。すなわち、複雑な
コーディング規則をチェックするための仕組みが用意さ
れていなかったため、ユーザがチェックしたいルールの
全てについて、コード自動診断装置を作り直すことなく
チェックできるようになった訳ではなく、限られた範囲
の中でマイナーなルールの変更や拡張が出来たに過ぎな
い。この問題は、実用上重要であり、ルールを表現する
ために設けられた機能が十分でないと、必要なルールを
表現できず、結果としてベテラン・プログラマのノウハ
ウを完全に記述しきれない。このように、ルールの変更
・拡張能力の低いコード自動診断装置は、実際の業務の
中で必要なコーディング規則を表現できないため、十分
に利用されていなかった。
【0005】また、従来技術では、コーディングパター
ン(記述されたコードの字面)のチェックとして、字下
げ・字下げ戻しや一行に複数命令を記述した場合のチェ
ックについての機能はあったが、コード自動診断装置を
変更・拡張せずにコーディングパターンを厳密にチェッ
クできるものではなかった。従来のコード自動診断装置
では、字下げのカラム数や関数における引数定義の形
式、コメントの書き方などのコーディングパターンをそ
の書かれるカラム位置や字数に至るまで厳密に規定する
ようなルールに基づくチェックは、装置を拡張せずに実
施することはできなかった。
【0006】上記問題点を解決するためにパターンをチ
ェックする手段をコード自動診断装置に取り込むことが
考えられる。そして、パターンのチェックにおいては従
来技術として、正規表現を用いた文字列のパターンマッ
チング法があった。しかし、正規表現には、パターンの
中の特定の文字の位置を指定する方法として、行の先頭
と行の最後を表す「^」および「$」という特殊文字が
用意されているだけであった。それらの特殊文字は行の
中の最初と最後を表すだけであり、行の中の任意のカラ
ム位置を表すことができない。また、その行が何行目に
当たるかも指定できない。さらに、「^」および「$」
の使用に当たっては、「^」は正規表現の先頭、「$」
は正規表現の最後にしか使えないという制限があった。
このため例えば、「行の25カラム目から”abc”と
いう文字が並ぶ」と言うパターンは正規表現では、 /^........................abc/ と書かなければならず非常に煩わしいものであった。ま
た、例えば、「最初の行にこの記述が来るべき」といっ
た絶対的な行位置を指定するルールを表現することがで
きなかった。
【0007】また、正規表現では、文字列のパターンの
二次元的な広がりを意識して、つまりコードをプリント
アウトしたり画面表示したときのイメージのままで、そ
のパターンを表現することができなかった。例えば、 if△ . . . △△a△= . . . と言うコーディングパターンがあった場合、従来の正規
表現では、 /if△ .¥n△*a△= .*/ と一行で記述することになる。(”/”は正規表現の最
初と最後を表し、”¥n”は改行を表す。”△”又は”
_”は空白を表し、”.”は任意一文字、”*”は直前
の文字の0個以上の繰り返しを表す。)これでは、コー
ディングパターンの二次元的な広がりのイメージは全く
無くなり正規表現はただ読みにくいだけである。ま
た、”a”と言う文字が”if”の”i”から相対的に
2カラム下がった位置にあることも表現できない。この
ように、従来の正規表現では文字列のパターンの二次元
的な広がりを表すことができなかったし、無理やり一行
で表現すると相対的な字下げが表現できなくなるという
問題があった。
【0008】また、従来の正規表現では、「対となる記
述」のチェックができなかった。例えば、 {_a_{x}_,_b{y}_}_{_c_} −−−−−−−−−−−−−−−− というコーディングパターンにおいて、”{”、”}”
は対として用いられており、また入れ子にすることもで
きる。ここで、このコーディングパターンの下線部をマ
ッチングさせるため正規表現で、 /{_a.*}/ と記述した場合、 {_a_{x} とか {_a_{x}_,_b{y}_}_{_c_} といった対とならない括弧にマッチングしてしまうこと
があった。このように、従来の正規表現では、「対とな
る記述」とマッチさせようとして書いた記述が「対でな
い記述」とマッチングしてしまうということが度々おこ
った。このためチェックしようとしていたルールをチェ
ックすることができず、誤診断が多発するという事態が
発生した。そしてその誤診断を人間が目視でチェックを
行わなければならなかった。これは大変時間のかかる作
業であった。
【0009】また、従来の正規表現では、別に定義した
パターンを正規表現のなかで再利用することができなか
った。このため同じコーディングパターンを何度もルー
ルに記述しなければならず効率が悪かった。
【0010】係る実情に鑑み、本発明の第1の目的は、
ユーザがチェックしたいルールを、コード自動診断装置
を作り直したり、そのコーディング規則をチェックする
手段を付け加えたりすることなくチェックできるような
汎用的なコード自動診断装置を提供することにある。
【0011】また、本発明の第2の目的は、「字下げの
形式」や「関数における引数定義の形式」、「コメント
の形式」などのコーディングパターンをそれらの記述さ
れるカラム位置や字数に至るまで厳密に規定するような
ルールをユーザがチェックしたいと考えた時、コード自
動診断装置を作り直したり、そのコーディング規則をチ
ェックする手段を付け加えたりすることなくチェックで
きるような汎用的なコード自動診断装置を提供すること
にある。
【0012】また、本発明の第3の目的は、コーディン
グパターンのチェックにおいて、パターンの中の特定の
文字の絶対位置を指定したパターンルールを処理するこ
とにより、パターンルールを簡潔に記述できるコード自
動診断装置を提供することにある。
【0013】また、本発明の第4の目的は、コーディン
グパターンのチェックにおいて、文字列のパターンの二
次元的な広がりを意識して、書き易く読み易いパターン
ルールを記述できるコード自動診断装置を提供すること
にある。
【0014】また、本発明の第5の目的は、コーディン
グパターンのチェックにおいて、「対となる記述」のチ
ェックをすることにより、チェックしようとしていたル
ールを簡単にチェックできかつ誤診断の少ないコード自
動診断装置を提供することにある。
【0015】さらに、本発明の第6の目的は、コーディ
ングパターンのチェックにおいて、別に定義したパター
ンを再利用することにより、ルール記述の効率性を高め
ることのできるコード自動診断装置を提供することにあ
る。
【0016】
【課題を解決するための手段】上記第1の目的を達成す
るために、本発明によれば、所定の文法に従ってコーデ
ィングされて計算機に入力されるコードを、別に定義し
たコーディング規則に基づいて自動的に診断する装置に
おいて、係るコード自動診断装置を以下のように構成す
る。すなわち、本発明のコード自動診断装置は、該コー
ディング規則を該装置が解釈可能な形に表現したルール
を入力してルール情報をルールDBに格納するルール入
力手段と、該コードを解析してコード情報をコード情報
DBに格納するコード解析手段と、該ルール情報に指定
された診断対象を特定するための条件である診断対象特
定条件を該コードの特定位置が満たすかどうかを判定す
る「診断対象特定条件を判定する手段」と、該ルール情
報に指定された「診断対象情報の加工処理」を実行する
「診断対象情報を加工する手段」と、該ルール情報に指
定された「診断対象が満たすべき条件」をチェックする
「診断対象が満たすべき条件をチェックする手段」と、
該ルール情報に従って、前記「診断対象特定条件を判定
する手段」、「診断対象情報を加工する手段」及び「診
断対象が満たすべき条件をチェックする手段」をそれぞ
れ独立に呼び出すルール制御手段と、前記「診断対象特
定条件を判定する手段」、「診断対象情報を加工する手
段」及び「診断対象が満たすべき条件をチェックする手
段」が処理過程における情報を書き出し及び参照するた
めの記憶手段と、前記「診断対象が満たすべき条件」が
満たされないときに前記ルール制御手段によって呼び出
され、該ルール情報に従って診断メッセージを出力する
「診断メッセージの出力手段」と、を具備する。
【0017】上記第2の目的を達成するために、本発明
によれば、所定の文法に従ってコーディングされて計算
機に入力されるコードを、別に定義したコーディング規
則に基づいて自動的に診断する装置において、コードと
コーディングパターンについてのルールとを一文字ずつ
比較しながら一致するかどうかをチェックすることによ
り、コードがコーディングパターンについてのルールを
満たしているかどうかをチェックする「パターンのチェ
ック手段」を含むことを特徴とする装置が提供される。
【0018】上記第3の目的を達成するために、本発明
のコード自動診断装置は、前記「パターンのチェック手
段」が「絶対位置のチェック手段」を含む構成とする。
該「絶対位置のチェック手段」は、コーディングパター
ンのルールの中に含まれる文字や記述が、コード上のあ
る絶対位置に置かれているかどうかをチェックする手段
である。
【0019】上記第4の目的を達成するために、本発明
のコード自動診断装置は、前記「パターンのチェック手
段」が、「二次元に広がるコーディングパターンルール
を制御する手段」を含む構成とする。該「二次元に広が
るコーディングパターンルールを制御する手段」は、二
次元的に広がるコーディングパターンルールを一行ずつ
に分解して、前の行からの相対位置の補正を行いながら
パターンル−ルのチェックを行う手段である。
【0020】上記第5の目的を達成するために、本発明
のコード自動診断装置は、前記「パターンのチェック手
段」が「対となる記述のチェック手段」を含む構成とす
る。該「対となる記述のチェック手段」は、パターンル
ールの中に対となる記述があるときに呼び出され、コー
ド上の対となる記述とルール上の対となる記述がそれぞ
れ対応していることをチェックする手段である。
【0021】上記第6の目的を達成するために、本発明
のコード自動診断装置は、前記「パターンのチェック手
段」が「別のパターンルールの参照手段」を含む構成と
する。「別のパターンルールの参照手段」は、パターン
ルールの中に「別のパターンルールの参照記述」がある
ときに呼び出され、ルールDBから別のパターンルール
を取り出してきて、それに従いパターンのチェックを行
わせるための手段である。
【0022】
【作用】上記のように構成されたコード自動診断装置に
おいては、「診断対象特定条件を判定する手段」、「診
断対象情報を加工する手段」及び「診断対象が満たすべ
き条件をチェックする手段」という三つの手段が分離さ
れ、それぞれが、ルール制御手段により独立に呼び出さ
れる構成となっているので、例えば、「診断対象の特定
処理」と「診断対象情報の加工処理」を多段に繰り返す
といったことができる。従って、複雑なコーディング規
則も、「診断対象特定条件」と「診断対象情報の加工処
理」と「診断対象が満たすべき条件」の組み合わせに分
解できるので、この仕組みにより、コード自動診断装置
を作り直したり、そのコーディング規則をチェックする
手段を付け加えることなくチェックできる。
【0023】また、「パターンのチェック手段」を含ん
でいるので、カラム位置や字数に至るまで厳密に規定す
るようなコーディングパターンルールを、コード自動診
断装置を作り直したり、そのコーディング規則をチェッ
クする手段を付け加えることなくチェックできる。
【0024】さらに、「パターンのチェック手段」が
「絶対位置のチェック手段」を含んでおり、パターンの
中の特定の文字の絶対位置を指定したパターンルールを
処理することができる。従って、パターンルールを簡潔
に記述できる。また、従来記述できなかった、記述の絶
対的な行位置を指定するコーディング規則を記述でき
る。
【0025】さらに、「パターンのチェック手段」が
「二次元に広がるコーディングパターンルールを制御す
る手段」を含んでおり、二次元に広がるパターンルール
を解析するので、パターンルールを一行に記述せずに、
コードをプリントアウトしたり画面表示したときのイメ
ージのままで表現することができる。従って、パターン
ルールが書き易く読み易いため、コーディング規則の記
述ミスが少なくなり、修正も簡単になる。
【0026】さらに、「パターンのチェック手段」が
「対となる記述のチェック手段」を含んでおり、対でな
い記述がパターンマッチするのを防ぐので、対でない記
述がパターンマッチすることによって発生する誤診断を
無くすことができる。従って、誤診断チェックのために
費やしていた多くの時間を節約することができる。
【0027】さらに、「パターンのチェック手段」が
「別のパターンルールの参照手段」を含んでおり、コー
ディングパターンのチェックにおいて、別に定義したパ
ターンを再利用することができる。従って、ルール記述
の効率性を高めることができ、修正も簡単にできるよう
になる。
【0028】
【実施例】以下、添付図面を参照して本発明の実施例を
詳細に説明する。本発明の一実施例に係るコード自動診
断装置は、図17に示すようなマイクロコンピュータ・
システムとその上で走行するソフトウェアとで具体化さ
れる。以下の説明において、記憶手段は図17に示す主
記憶装置602で具現され、また診断メッセージの出力
手段はプリンタ出力装置604で具現される。さらにル
ール入力手段及びコード解析手段の入力機能は、入出力
端末装置603により具現され、その解析機能は、CP
U601上で走行するソフトウェアにより具現される。
また、ルールDB及びコード情報DBは、外部記憶装置
605に作成される。その他の各手段は、その機能を実
現する、CPU601上で走行するソフトウェアによっ
て具現される。
【0029】最初に、図1に関して説明する。図1は、
本発明のコード自動診断装置の構成を示す図である。図
1において、ルール101は、予めルール入力手段10
3から入力されてルールDB104に格納される。ま
た、コード102は、コード解析手段105によって解
析されてその情報(コード情報)がコード情報DB10
6に格納される。ここでのコード解析手段105は、構
文解析手段及び文節解析手段を含んでいる。
【0030】次に、ルール制御手段107は、ルールD
B104からルール情報を読み込む。次いで、ルール制
御手段107は、ルール情報に従って、診断対象特定条
件を判定する手段108、診断対象情報を加工する手段
110、診断対象が満たすべき条件をチェックする手段
111、をそれぞれ呼び出す。ここで、これら三つの手
段108、110、111は、コード102、コード情
報DB106、ルールDB104、という三つの情報を
参照しながら、それぞれの機能を果たす。さらに、記憶
手段109に情報を書出したり、それから情報を参照し
たりする。
【0031】ルール制御手段107は、ルール情報の中
の診断対象特定条件と「コードの絶対位置」(コード上
の行、カラム位置を指定する情報)とを「診断対象特定
条件を判定する手段」108に渡す。「診断対象特定条
件を判定する手段」108は、指定された「コードの絶
対位置」から始まるコードの記述が診断対象特定条件を
満たすかどうかを判定する。満たす場合は、位置情報な
ど判定時に得た情報(「特定された診断対象情報」)を
記憶手段109に書出す。
【0032】ルール制御手段107は、ルール情報の中
の「診断対象情報の加工処理」を「診断対象情報を加工
する手段」110に渡す。「診断対象情報を加工する手
段」110は、「診断対象情報の加工処理」を実行し加
工した結果、発生した情報(診断対象加工情報)を記憶
手段109に書出す。
【0033】ルール制御手段107は、ルール情報の中
の「診断対象が満たすべき条件」を「診断対象が満たす
べき条件をチェックする手段」111に渡す。「診断対
象が満たすべき条件をチェックする手段」111は、特
定された診断対象情報、診断対象加工情報、コード情報
DB106の情報、コード102の情報、をもとに、
「診断対象が満たすべき条件」をチェックする。
【0034】そして、このチェックの結果、「診断対象
が満たすべき条件」が満たされない場合、ルール制御手
段107は、ルール情報の中の診断メッセージを「診断
メッセージの出力手段」112に渡す。「診断メッセー
ジの出力手段」112は、診断メッセージを受け取り、
記憶手段109の情報を編集して帳票や画面などに出力
する(113)。
【0035】図2は、図1の「診断対象特定条件を判定
する手段」108の内部構成を示す図である。図2にお
いて、外部の構成要素については、そのうちの重要な関
連の有るもののみ図示されている。省略されたからとい
って関連が無いわけではなく、特に記憶手段109と
は、図2の全ての手段と関連があるので省略されてい
る。
【0036】「診断対象特定条件を判定する手段」10
8が受け取った「診断対象特定条件」は、第1の論理判
定手段201によって、パターンルール、構文要素が満
たすべき属性条件、に分離され、それぞれ、パターンの
チェック手段501、構文要素が満たすべき属性条件の
チェック手段202、に渡される。パターンのチェック
手段501は、「コードの絶対位置」がパターンルール
を満たすかどうか判定する。以下、この処理をパターン
チェックと呼ぶ。また、パターンチェックによりパター
ンルールが満たされた状態をパターンがマッチした状態
と呼ぶ。パターンルールは、一般に構文情報を含んでい
るので、チェックにはコード情報DB106を参照する
必要がある。構文要素が満たすべき属性条件のチェック
手段202は、パターンがマッチした時のみ起動され、
パターンルールが含む構文要素が満たすべき属性条件を
チェックする。この時コード情報DB106を参照する
ことになる。
【0037】このようにして、「パターンのチェック手
段」501と、「構文要素が満たすべき属性条件のチェ
ック手段」202と、によって、パターンルールと「構
文要素が満たすべき属性条件」についてチェックされた
結果が第1の論理判定手段201に返される。第1の論
理判定手段201は、パターンルールと「構文要素が満
たすべき属性条件」の真偽値をもとに診断対象特定条件
が真か偽かを判定し結果をルール制御手段107に返
す。
【0038】図3は、図1の「診断対象情報を加工する
手段」110の内部構成を示す図である。図3におい
て、外部の構成要素については、そのうちの重要な関連
の有るもののみ図示されている。省略されたからといっ
て関連が無いわけではなく、特に記憶手段109とは、
図3の全ての手段と関連があるので省略されている。
【0039】「診断対象情報を加工する手段」110が
受け取った「診断対象情報の加工処理」は、処理の振り
分け手段301によって、範囲情報の抽出処理、DB操
作処理、に分離され、それぞれ、範囲情報の抽出手段3
02、DB操作手段303、に渡される。範囲情報の抽
出手段302は、パターンルールが含む部分パターンの
範囲や、パターンルールを含む最も内側のネスト範囲、
といった範囲情報を抽出する手段である。ネスト範囲と
は、例えばC言語において対となる”{”、”}”に囲
まれた範囲である。あるネスト範囲が別のネスト範囲を
含むという多重の構造(階層構造といったほうが良いか
もしれない)になっている。構文要素に対する範囲情報
は、コード情報DB106に格納されており、これを参
照する必要がある。DB操作手段303は、コード情報
DB106に格納された情報(テーブルとして格納され
ている)を操作したり、DB操作により加工された情報
を新しいテーブルとして記憶手段109に格納する手段
である。
【0040】図4は、図1の「診断対象が満たすべき条
件をチェックする手段」111の内部構成を示す図であ
る。図4において、外部の構成要素については、そのう
ちの重要な関連の有るもののみ図示されている。省略さ
れたからといって関連が無いわけではなく、特に記憶手
段109とは、図4の全ての手段と関連があるので省略
されている。
【0041】「診断対象が満たすべき条件をチェックす
る手段」111が受け取った「診断対象が満たすべき条
件」は、第2の論理判定手段404によって、パターン
ルール、比較条件、テーブル要素の配列条件、に分離さ
れ、それぞれ、パターンのチェック手段501、比較条
件のチェック手段402、テーブル要素の配列条件のチ
ェック手段403、に渡される。パターンのチェック手
段501には、診断対象特定条件により特定されたコー
ド上の位置(以下、パターンマッチ位置と呼ぶ。本実施
例では、パターンルールの第1文字がマッチした「コー
ドの絶対位置」をパターンマッチ位置としている)とパ
ターンルールとが渡され、診断対象がパターンルールを
満たすかどうか判定される。
【0042】比較条件のチェック手段402は、特定さ
れた診断対象情報、診断対象加工情報、コード情報DB
106の情報、コード102の情報、といった情報から
なる数値や文字列に関する比較条件式の判定を行う手段
である。特に、比較条件式の中に”NESTLEVE
L”という特殊変数が現れた場合、「ネストレベルを求
める手段」401を呼び出してパターンマッチ位置のネ
ストレベルを求める。ネストレベルとは、コード上のあ
る記述が、どの深さのネスト範囲に属するかを表すもの
で、どのネスト範囲にも属さない部分のネストレベルは
0と数える。テーブル要素の配列条件のチェック手段4
03は、テーブルのある要素(列データ)が昇順もしく
は降順に並んでいるかどうかをチェックする手段であ
る。
【0043】このようにして、パターンのチェック手段
501、比較条件のチェック手段402、テーブル要素
の配列条件のチェック手段403、によって、パターン
ルール、比較条件、テーブル要素の配列条件、のチェッ
ク結果が第2の論理判定手段404に返される。第2の
論理判定手段404は、パターンルール、比較条件、テ
ーブル要素の配列条件、の真偽値をもとに「診断対象が
満たすべき条件」が真か偽かを判定し結果をルール制御
手段107に返す。
【0044】図5は、図2及び図4の構成要素であるパ
ターンのチェック手段501の内部構成を示す図であ
る。図5において、外部の構成要素については、そのう
ちの重要な関連の有るもののみ図示されている。省略さ
れたからといって関連が無いわけではなく、特に記憶手
段109とは、図5の全ての手段と関連があるので省略
されている。
【0045】本実施例では、「二次元に広がるコーディ
ングパターンルールを制御する手段」は、「複数行のコ
ーディングパターンルールを一行に変換する手段」50
6と「相対位置のチェック手段」505を用いることに
よって実現されている。「複数行のコーディングパター
ンルールを一行に変換する手段」506は、二次元的に
広がるコーディングパターンルールを一行ずつに分解
し、行の間に前行からの相対位置を指定する特殊文字を
挿入して全てを繋ぎ合わせ一行のルールを作る手段であ
る。この「複数行のコーディングパターンルールを一行
に変換する手段」506は、「パターンのチェック手
段」501に含めることもできるしルール入力手段10
3に含めることもできる。「相対位置のチェック手段」
505は、コーディングパターンのルールの中に含まれ
る、相対位置を指定する特殊文字の次に来る文字や記述
が、コード上のパターンのチェックが始まったカラム位
置と同じカラム位置に置かれているかどうかをチェック
する(行位置は違ってよい)手段である。
【0046】先ず、「パターンのチェック手段」501
は、コードの絶対位置、パターンルール、の二つの情報
を受け取る。コードの絶対位置の情報は、記憶手段10
9に書き込まれる。この位置をパターンチェックの開始
位置と呼ぶ。パターンルールは、「複数行のコーディン
グパターンルールを一行に変換する手段」506に渡さ
れる。パターンルールを受け取った「複数行のコーディ
ングパターンルールを一行に変換する手段」506は、
パターンルールを一行に変換し、「パターンルールの制
御手段」502に渡す。一行に変換されたパターンルー
ルを受け取った「パターンルールの制御手段」502
は、一文字の一致のチェック手段503、対となる記述
のチェック手段507、絶対位置のチェック手段50
4、相対位置のチェック手段505、構文要素記述のチ
ェック手段509、別パターンルールの参照手段50
8、をそれぞれ呼び出しながらパターンルールとコード
とのマッチングのチェックを行う。一文字の一致のチェ
ック手段503は、パターンルールに含まれる一文字
(を表す記述)とコード上の文字の一文字が一致するか
どうかをチェックする手段である。構文要素記述のチェ
ック手段509は、パターンルールが”文”とか”条件
式”といった構文要素記述を含んでいる場合に呼ばれ、
チェック対象のコードの記述が、”文”とか”条件式”
といった構文要素に対応するかどうかをコード情報DB
を参照することによってチェックする手段である。
【0047】絶対位置のチェック手段504は、パター
ンルール中に”¥nn”(nnは、2桁の整数)という
特殊文字を見つけるとパターンルールのこの”¥nn”
の次の文字に対応するコード中の文字の位置が、nnカ
ラム目にあるかどうかをチェックする。また、パターン
ルール中に”¥!nnnn”(nnnnは、4桁の整
数)という特殊文字を見つけるとパターンルールのこ
の”¥!nnnn”を含む行がnnnn行目かどうかを
チェックする。例えば、「行の25カラム目から”ab
c”という文字が並ぶ」と言うパターンルールを、 /.*¥25abc/ と簡潔に記述することができる。従来技術の正規表現で
は、行頭と行末位置をチェックすることができたが、こ
れに比べ以下の利点がある。 ・行頭と行末だけでなく行中の位置を指定できる。 ・絶対的な行の位置を指定できる。 ・絶対位置の指定をパターンルールの最初と最後だけで
なくパターンルールのどこにでも指定できる。
【0048】相対位置のチェック手段505は、パター
ンルール中に”¥#”という特殊文字を見つけるとパタ
ーンルールの中の”¥#”の次の文字に対応するコード
中の文字のカラム位置が、パターンチェックの開始位置
のカラム位置と同じであるかどうかをチェックする。
【0049】対となる記述のチェック手段507は、C
言語の”{”,”}” および、”(”,”)” を対
となる記述と考え、これらの記述がパターンルール中に
現れるとパターンルールの制御手段502から呼ばれ
る。対となる記述を受け取った「対となる記述のチェッ
ク手段」507は、先ず、一文字の一致のチェック手段
503を呼び出しその対となる記述にコード中の記述が
一致するかどうかをチェックする。一致した場合は、一
致したものが、右側の記述か左側の記述かによって処理
が異なる。一致したものが、左側の記述の場
合(”{”,”(”の場合)、コード中の左側の記述と
パターンルール中の左側の記述を対応づけた情報を記憶
手段109に書き出しておく。一致したものが、右側の
記述の場合(”}”,”)”の場合) 、「コード中の右
側の記述と対になる左側の記述」と「パターンルール中
の右側の記述と対になる左側の記述」が対応付けられて
記憶手段109に書き出されているかどうかをチェック
する。これにより、対となる記述のみをパターンマッチ
させることができる。
【0050】ただし、「対となる記述のチェック手段」
の機能を、「コード上の対となる記述の対応を取る手
段」、「ルール上の対となる記述の対応を取る手段」、
及び、「コード上の対となる記述とルール上の対となる
記述がそれぞれ対応していることをチェックする手
段」、に分解すれば、「コード上の対となる記述の対応
を取る手段」及び「ルール上の対となる記述の対応を取
る手段」については、それぞれ、コード解析手段10
5、ルール入力手段103に含めることも可能である。
【0051】別パターンルールの参照手段508は、パ
ターンルール中に別のルールが再利用されている場合
に、パターンルールの制御手段502より呼ばれる。別
パターンルールの参照手段508は、パターンルール中
に使われた別のルールをルールDB104から読み取
り、読み取ったルールの中の「『診断対象が満たすべき
条件』として記述されているパターンルール」(つま
り、ルールのCHECK部のパターンルール)が、そこ
に記述されているものとして、「パターンのチェック手
段」501を再帰的に呼び出すことによってチェックす
る。
【0052】図6は、本発明のコード自動診断装置が入
力するコードの例であって、C言語によるものである。
本コード例は、C言語によって、大きさ5のaという配
列を0で初期化する処理を2通り示したものである。C
言語では、例えば大きさ5のaという配列を次のように int a[5]; と宣言したとき、aは、a[0],a[1],…,a
[4]の5つの要素を持つ配列となる(a[5]までで
なくa[4]までである)。for文は繰り返しを記述
する構文である。ここで、for文によってこの全ての
要素を零に初期化するには、図6に示される2つのfo
r文の書き方(12から14行および16から18行)
がある。この時、配列を宣言するときは”a[5]”と
記述するのであるからfor文の終了条件も”i<5”
と同じく配列の大きさを用いて記述する方が分かり易い
と考えられる。つまり、12から14行の記述のほうが
分かり易く、16から18行の記述のほうが分かり難い
と考えられる。
【0053】図7は、本発明のコード自動診断装置が入
力するルールの例である。本ルールは、C言語の配列要
素の操作をするfor文の書き方に関するものであり、
図6の下の方のfor文の書き方(16から18行)を
禁止するというコーディング規約を記述したものであ
る。ルールは、ルール名、FIND部、PROC部、C
HECK部、MSG部、より構成されている。
【0054】1行目の部分は、ルール名である。2から
5行目と8、9行目の部分は、FIND部であり、診断
対象特定条件を指定する。6、7行目と10、11行目
の部分は、PROC部であり、診断対象情報の加工処理
を指定する。12、13行目の部分は、CHECK部で
あり、診断対象の満たすべき条件を指定する。14、1
5行目の部分は、MSG部であり、診断メッセージを指
定する。
【0055】3から5行目では、「0から整定数Nまで
の繰り返しを行うfor文」という診断対象特定条件が
指定されている。7行目では、「for文の繰り返し記
述に相当する複文Wの範囲をFIND範囲という特殊な
変数に代入する」という「診断対象情報の加工処理」が
指定されている。FIND範囲は、次のFIND部での
検索の範囲を指すもので、デフォルト値(既定値)はコ
ード全体である。9行目では、「for文の繰り返しの
ために用いた制御変数:I:を添え字に使っている配
列」という診断対象特定条件が指定されている。ここで
の探索範囲は、7行目で指定した、複文Wの範囲であ
る。
【0056】11行目では、「9行目で求めた配列Aの
大きさを変数Mに代入する」という「診断対象情報の加
工処理」が指定されている。13行目では、「変数Mか
ら1引いた値が、3行目にある整定数Nに一致しない」
という「診断対象の満たすべき条件」が指定されてい
る。一致した場合は、図6の16から18行の様な禁止
されるべき記述になっていると考えられるので、「診断
対象が満たすべき条件」にするためには、全体にNOT
を付けて否定する必要がある。15行目では、「診断対
象が満たすべき条件」が満たされない場合に出力される
診断メッセージを指定している。
【0057】図7の記述のなかで、 ・ ”/”で挟まれた記述は、パターンルールを表す記
述(以下パターン記述と呼ぶ)である。 ・ ルール中に現れる”:”で挟まれた記述には、構文
要素を表すもの、変数を表すもの、テーブルを表すも
の、別ルールを表すもの、の4種がある。このうち、構
文要素、変数、テーブルを表すものを総称して組込み記
述と呼ぶ。 ・ 組込み記述の中の”;”以降は、その記述に付けら
れた名前である。一度名前を付けられた組込み記述
は、”:名前:”という形式で参照できる。 ・ AREA( )という関数は、特定のパターン記述
のコード上での範囲を求める関数である。 ・ 構文要素を表す組込み記述は、”:構文要素名:.
属性名”という形式で書くことによりその構文要素の持
つ属性を参照できる(例:A:.大きさ)。 ・ 診断メッセージの中の%s,%dは、:I:、:
M:をそれぞれ文字列、整数として編集して表示するた
めの制御文字である。
【0058】図8は、本発明のコード自動診断装置が出
力する診断メッセージの例であって、図6に示すコード
を図7に示すルールに基づいて診断した場合の診断メッ
セージである。ファイル名は、コードのファイル名を表
す。行番号は、コードの行番号でルールのマッチした位
置を表す。ルール番号は、チェックしたルールのルール
番号を表す。メッセージは、そのルールのMSG部が編
集されたものである。
【0059】図9は、本発明のコード自動診断装置にお
けるルール制御手段107の処理手順の例を表すもので
あって、図7に示すルールの場合の処理手順である。図
9の処理手順に沿って、図1から図5のコード自動診断
装置の構成と図6のコード、図7のルール、図8の診断
メッセージとの関係を説明する。
【0060】まず、ルール制御手段107は、図7のル
ールを読み取る。次に、ルール制御手段107は、ルー
ルのFIND部(図7の2から5行目) に指定された診
断対象特定条件を満たす部分を検索する(901、90
2、903)。
【0061】手順の903では、ルール制御手段107
は、「診断対象特定条件を判定する手段」108を呼び
出してこの判断を行う。この時、「コードの絶対位置」
も渡される。そして、「診断対象特定条件を判定する手
段」108の中の第1の論理判定手段201が診断対象
特定条件を受け取る。ここで、診断対象特定条件は、パ
ターンルールのみからできているので、第1の論理判定
手段201は、パターンのチェック手段501にこのパ
ターンルールを渡す。パターンのチェック手段501
は、「コードの絶対位置」からのコードのコーディング
パターンがパターンルールに一致するかどうかを判定す
る。
【0062】一致しない場合は、901、902のルー
プにより、「コードの絶対位置」が1カラムずつ移され
ながらチェックが行われる。「コードの絶対位置」が図
6の12行目の”for”の”f”の位置に来た時、パ
ターンルールと図6の12行目がマッチしかけるが、図
6のコードでは、for文の終了条件が”i<=5”で
なく”i<5”となっているため、マッチしない。
【0063】次に、「コードの絶対位置」が図6の16
行目の”for”の”f”の位置(5カラム目)に来た
時、パターンルールと図6の16から18行目がマッチ
する。そこで、「パターンマッチ位置」として16行の
5カラム目が記憶手段109に書き出される。パターン
ルール中の構文要素、 :整数;I: :整定数;N: :複文;W: は、それぞれコード(正確には、コード情報DB)中の i 4 a[i] = 0; にマッチし、この対応関係(パターンルール中での構文
要素に付けた名前とコード情報DB上の構文要素に関す
る情報との対応関係)が記憶手段109に書き出され
る。(以下、「構文要素の対応関係情報」と呼ぶ。)以
上の「パターンマッチ位置」と「構文要素の対応関係情
報」が「特定された診断対象情報」である。
【0064】次に、ルール制御手段107は、ルールの
PROC(図7の6、7行目)に指定された「診断対象
情報の加工処理」を、「診断対象情報を加工する手段」
110に渡して、「診断対象情報を加工する処理」90
4を行う。「診断対象情報を加工する手段」110で
は、「処理の振り分け手段」301が、「範囲情報の抽
出手段」302を呼び出し、図7の7行目の処理が実行
される。ここでは、:W:が表す図6のコードの17行
目の記述”a[i] = 0;”の範囲(17行目の9
カラムから17カラムまで)が「FIND範囲」という
特殊変数に代入される。
【0065】次にまた、ルール制御手段107は、ルー
ルのFIND部(図7の8、9行目)に指定された診断
対象特定条件を満たす部分を検索する(905、90
6、907)。ここでの検索範囲は、905、906に
示すように特殊変数「FIND範囲」が示す領域とな
る。
【0066】図7の9行目のルールは前と同じくパター
ンルールである。ここでは、前の検索で:I:と名前を
付けた構文要素つまりこの場合iを添え字として使って
いる配列が検索される。パターンのチェックの時、この
ように以前に出現した構文要素を参照する場合、「構文
要素記述のチェック手段」509が記憶手段109に書
き出されている「構文要素の対応関係情報」を参照して
以前に出現したものと同じ字面のものだけとマッチさせ
る。パターンルール中の構文要素、 :配列;A: は、コード中の a にマッチし、この「構文要素の対応関係情報」が記憶手
段109に書き出される。
【0067】次にまた、ルール制御手段107は、ルー
ルのPROC部(図7の10、11行目)に指定された
「診断対象情報の加工処理」を、「診断対象情報を加工
する手段」110に渡して、「診断対象情報を加工する
処理」908を行う。「診断対象情報を加工する手段」
110では、「処理の振り分け手段」301が、DB操
作手段303を呼び出し、図7の11行目の処理が実行
される。ここでは、DB操作手段303がコード情報D
B106を検索することによって、配列:A:(コード
上では、a)の”大きさ”という属性(ここでは、5と
いう値となる)が得られ、それがMという名の整数型の
変数に代入される。そしてこの整変数Mの情報は、記憶
手段109に書き出される。これが診断対象加工情報で
ある。
【0068】次に、ルール制御手段107は、ルールの
CHECK部(図7の12、13行目)に指定された
「診断対象が満たすべき条件」を「診断対象が満たすべ
き条件をチェックする手段」111に渡し、「診断対象
が満たすべき条件」を満たすか判断を行う(909)。
「診断対象が満たすべき条件をチェックする手段」11
1では、第2の論理判定手段404が、「比較条件のチ
ェック手段」402を呼び出し、図7の13行目の括弧
内のチェックが行われる。ここでは、:N:は4、:
M:は5なので括弧内の式は”真”となる。括弧の外に
付いたNOTが、第2の論理判定手段404によって判
定され、「診断対象が満たすべき条件」は”偽”とな
る。
【0069】そこで、ルール制御手段107は、ルール
のMSG部(図7の14、15行目)に指定された診断
メッセージを「診断メッセージの出力手段」112に渡
し、「診断メッセージの出力処理」910を行う。この
ようにして出力される診断メッセージが図8である。
【0070】このあと、ルール制御手段107は、90
5、906のループによって907の判定に戻るが、こ
の範囲には図7の7行目の条件を満たす配列はないの
で、もう一つ外側の901、902のループによって9
03の判定に戻る。ここでも、903の判定を満たすf
or文はないので901、902のループを抜けてルー
ルのチェックが終了する。
【0071】図1から図5のような構成を持ち、ルール
制御手段107が、「診断対象特定条件を判定する手
段」108、「診断対象情報を加工する手段」110、
「診断対象が満たすべき条件をチェックする手段」11
1、を多段に呼び出すことによって、従来はチェックで
きなかったルールをチェックできるようになった。
【0072】次に、本発明のコード自動診断装置が、図
10に示すコード(C言語によるプログラム)を、図1
1〜13に示すルールに基づいて診断し、図14に示す
診断メッセージを出力する例について説明する。
【0073】図11のルールは、「絶対位置のチェック
手段」504を用いる例である。診断対象特定条件とし
てFIND部で、絶対位置を指定する特殊文字を含んだ
パターンルールが指定されている。これにより、パター
ンマッチ位置は、1行1カラム目に位置付けられる。次
に、「診断対象が満たすべき条件」としてCHECK部
のパターンルールが指定されている。このパターンルー
ルは、パターンマッチ位置から記述されるべき定型のコ
メント形式を表現したものである。図10のコードで
は、ルールで指定した通りのコメント形式が1行1カラ
ム目より記述されている。従って診断メッセージの出力
もない。また、パターンルールの中では、”/”や”
*”は、特殊な意味を持つので脱出記号”¥”を用い
て”¥/”,”¥*”と表すことにより単なる文字とし
ての”/”,”*”を表現している。また、” ”も”
_”も空白を表す。”_”は空白の個数を数え易くする
ために用いているものである。
【0074】図12のルールは、「複数行のコーディン
グパターンルールを一行に変換する手段」506、「相
対位置のチェック手段」505、及び、「対となる記述
のチェック手段」507を用いる例である。
【0075】このルールは、”if文標準パターン”を
表している。まず、FIND部の指定にある「ifと任
意個の空白と左括弧」というコーディングパターンが検
索される。”(”の前にある脱出記号”¥”は、”(”
の「対となる記述」という特殊な意味を打ち消し、単な
る文字としての”(”を表現している。CHECK部で
は、if文を記述する時の標準パターンが指示されてい
る。先ず、このパターンルールに含まれている特殊文字
の説明をする。 ・ ”@”は、「任意個の空白、省略可能なコメント、
任意個の空白、改行」という記述を表す特殊文字であ
る。因みに、正規表現で表現すると、 /_*<¥/¥*.*¥*¥/>?_*¥n/ となる。 ・ ”<”,”>”は、ブロックを表す。”<...>
*”と表現すると”<”、”>”で挟まれたブロック全
体が、0回以上の任意回繰り返すことを示す。 ・ ”?”は、前の文字もしくはブロックがあってもな
くても良いことを示す。 ・ ”...@*”という風に”@”と”*”を連続し
て記述した場合は、”@”の前の1行分の記述を”
<”,”>”で挟んで”*”を付けるという意味で”
<...@>*”と同等である。特にこの変換は、「複
数行のコーディングパターンルールを1行に変換する手
段」506が、複数行のコーディングパターンルールに
相対位置を表す特殊文字を付けたものに対して行われ、
この変換ののち一行に繋ぎ合わされる。例えば、6行目
と9行目の、”△△△△:文:@*”という記述は、”
*”を除いたものに、”△*¥#△△△△:文:@”と
いう相対位置を表す特殊文字がまず付けられ、次にそれ
を”<△*¥#△△△△:文:@>*”と変換し、その
のちつなぎ合わされる。
【0076】したがって、CHECK部のパターンルー
ルは、二次元的に広がっているので、「複数行のコーデ
ィングパターンルールを一行に変換する手段」506に
よって次のような一行のルールに変換される(横幅が足
りないため、便宜上複数行にわたって記述されてい
る)。 /if△(△:条件式:△)△{@<△*¥#△△△
△:文:@>*△*¥#}@△*¥#else△{@<
△*¥#△△△△:文:@>*△*¥#}@/
【0077】上のパターンルールの中の”¥#”は、
「パターンチェックの開始位置」のカラム位置つまり、
パターンルールの先頭文字”i”と同じカラム位置とい
う相対位置を示す特殊文字である。”¥#”は、「相対
位置のチェック手段」505によってチェックされる。
【0078】このルールを図10のコードに適用する
と、51から54行目のif文の形式は文法的には正し
いが、ルールを満たしていない(if文の条件判定時の
実行文を”{”,”}”で囲んでいない)ので診断メッ
セージが出力される(図14の1行目のメッセージ)。
61から67行目のif文の形式はルールを満たしてい
る。ルールを満たすためには、ルールによりチェックさ
れるパターンとカラム位置が一つずれていても駄目であ
る。
【0079】また、パターンルール中の”(”,”)”
および、”{”,”}”は、「対となる記述」であるの
で、コード中の対となる記述としかマッチしない。従っ
て、71から87行目のようにif文が多重構造になっ
ている場合にも、別のif文のelse句とマッチする
ようなことなく、必ず自身のelse句とパターンのチ
ェックが行われる。例えば、82行目では、”}”が、
1 カラムずれているためこの記述に対応する72行目か
ら始まるif文に対して診断メッセージが出力されるこ
とになる(図14の2行目のメッセージ)。
【0080】このように、「パターンのチェック手段」
501により厳密なコーディングパターンルールのチェ
ックができる。また、コーディングパターンルールは常
に厳しい訳でなく、パターンルール中の ・ ”△”を”△*”に置き換えたり(1つの空白を任
意個の空白で良しとする) ・ 字下げにおける”△△△△”を”<△△>*”に置
き換える(4カラム字下げを偶数カラムの字下げで良し
とする)などすることにより、パターンルールの厳しさ
を自由自在に緩めることができる。
【0081】図13のルールは、「別パターンルールの
参照手段」502を用いる例である。このルールでは、
FIND部のパターンルールで、別パターンルール”i
f文標準パターン”を参照している。これは、図12で
示したルールである。このように別パターンルールを参
照すると、「別パターンルールの参照記述」の部分(こ
の場合、図13のFIND部)に、参照されたルールの
CHECK部のパターンルール(この場合、図12のC
HECK部のパターンルール)が書かれているかのよう
に動作する。このパターンルールのチェックは、「パタ
ーンルールの制御手段」502が、「別パターンルール
の参照手段」508を呼び出すことによって行われる。
「別パターンルールの参照手段」508は、ルールDB
104を検索して別パターンルール(この場合、”if
文標準パターン”)を見つけると、CHECK部のパタ
ーンルールと現在の「コードの絶対位置」をパラメータ
として「パターンのチェック手段」501を再帰的に呼
び出すことにより、パターンのチェックを行う。こうし
て、診断対象が特定されると、次に図13のCHECK
部がチェックされる。ここで、NESTLEVELとい
う特殊変数は、パターンマッチ位置、この場合、”if
文標準パターン”の”i”がマッチした位置のネストレ
ベルを表す。これは、「ネストレベルを求める手段」4
01によって求められる。図10の場合、74行目から
始まるif文は、ネストレベルが4となっているため条
件を満たさず、図14の3行目の診断メッセージが出力
される。
【0082】こうして、コード中の絶対的な行カラム位
置を指定してそこに記述されるべきコーディングパター
ンのチェックをすることができる。また、二次元的に広
がったコーディングパターンルールをそのままの形で記
述できるので、書き易く読み易いコーディングパターン
ルールを記述することができる。また、「パターンのチ
ェック手段」501により厳密なコーディングパターン
規約のチェックができる。また、パターンルールの厳し
さを緩めることも自由自在である。また、「対となる記
述のチェック手段」507により多重構造になっている
コーディングパターンにおいても対応する記述がコーデ
ィングパターンルールを満たしているかどうかチェック
できる。つまり、対応しない記述とマッチして不必要な
診断メッセージを出力するという誤診断を回避できるの
で、誤診断を確認するための時間を節約できる。さら
に、別パターンルールを再利用することが出来るので、
コーディングパターンルールを簡潔に表現でき、かつ修
正も簡単になる。
【0083】次に、本発明のコード自動診断装置によっ
て処理可能な、図15、16に示すルールについて説明
する。図15は、本実施例の構成によりコーディングパ
ターンルールだけでなく利用者定義語の命名規約のチェ
ックができることを示したルール例である。FIND部
は、パターンルールと「構文要素が満たすべき属性条
件」の論理結合によりできている。「構文要素が満たす
べき属性条件」は、「構文要素が満たすべき属性条件の
チェック手段」202によりチェックされる。CHEC
K部は、比較条件の形をしているが、右辺がパターンル
ールの形をしていることから、パターンチェックである
ことがわかる。こういった場合、「比較条件のチェック
手段」402は、「パターンのチェック手段」501を
呼び出してチェックを行う。このルールにより、ポイン
タ型関数は、”pf”で始まっていなければならないと
いう命名規約がチェックされる。
【0084】また、「特定された診断対象情報」や、そ
れを加工した情報に対して、例えば、文字列の連結や部
分文字列の抽出もしくは、プリフィックス(接頭語)や
ポストフィックス(接尾語)の除去といった文字列操作
を行う文字列操作手段を、「診断対象情報を加工する手
段」110に含むことによって、より強力な命名規約の
チェックをすることができる。
【0085】図16は、本実施例の構成によりコード上
での利用者定義語の定義順のチェックができることを示
したルール例である。ここでは、「関数名が定義された
あとに変数名の定義が来るべき」というルールを表現し
たものである。PROC部において、まず、属性と順位
をペアにしたテーブルAを作り、次に、コード情報DB
106にある利用者定義語が定義順に収まっている利用
者語テーブルとテーブルAを結合して、「利用者定義語
の字面」と「テーブルAの順位」がペアとなったテーブ
ルCを作る。以上の処理は、DB操作手段303により
行われる。CHECK部において、テーブルCの2列目
が、昇順(Aは昇順を表す)かどうかチェックされる。
CHECKORDER( )は、「テーブル要素の配列
条件のチェック手段」403が提供する関数であり、テ
ーブル要素の配列条件のチェックができる。
【0086】こうして、「パターンのチェック手段」5
01を用いてコーディングパターンルールだけでなく利
用者定義語の命名規約のチェックができる。また、DB
操作手段303と「テーブル要素の配列条件のチェック
手段」403を用いて、コード上での利用者定義語の定
義順のチェックができる。
【0087】「診断対象情報を加工する手段」110
が、「特定された診断対象情報」や、それを加工した情
報に対して、例えば、数値を表す文字列を数値変数に変
換したり逆に数値変数を数値を表す文字列に変換すると
いった属性変換を行う属性変換手段、また、「特定され
た診断対象情報」や、それを加工した情報の中の数値デ
ータに対して四則演算などをおこなって新しいデータに
加工する数値演算手段、さらに、「特定された診断対象
情報」や、それを加工した情報の中のテーブル(コード
情報DBの情報のうち、ある条件を満たすものを集めて
コード上での出現順に並べたもの)のデータに対して例
えば、ソート処理をおこなって新しいデータに加工する
ソート処理手段、といった手段を含んでいると、ルール
のチェック能力がさらに強化される。
【0088】また、「診断対象情報を加工する手段」1
10に含まれる「診断対象が存在すべきネストレベル
(階層記述の深さ)を指定する手段」が、「診断対象特
定条件を判定する手段」108にも含まれていれば、さ
らに診断対象の特定能力を強化できる。
【0089】コード解析手段が、コードの行数やコード
が含む呼び出し関数の数などを計数する計数手段を含ん
でいると、ルールのチェック能力がさらに強化される。
【0090】
【発明の効果】以上説明したように、本発明に係るコー
ド自動診断装置は、以下のような効果を有する。 (1) コーディングルールの記述能力を大幅に高める
ことができる。すなわち、従来のコード自動診断装置で
は、装置に特定のルールのチェック手段を追加せずには
チェック出来なかった複雑なコーディングルールを装置
の変更や拡張をせずにチェックできる。これにより、客
観的もしくは論理的に正当性を証明出来ないような専門
家の勘とか主観とも言うべき(微妙な、 もしくは凝っ
た)経験則をコーディングルールとして記述できる。こ
ういったベテランプログラマのコーディングノウハウを
コーディングルールとして表現できることにより、この
コード自動診断装置を使う初心者により良いコーディン
グスタイルを指導できる。
【0091】(2) コーディングパターンの厳密なチ
ェックができる。すなわち、行・カラムの位置に至るま
でチェック出来るので人によるコーディングパターンの
差異がでなくなるような厳密なコーディング規約のチェ
ックができる。これにより、コーディングパターンの標
準化を徹底できる。 (3) パターンルールの中に絶対位置の指定ができる
ので、コーディングパターンのルールを簡潔に表現でき
る。 (4) 従来診断できなかった、コーディングパターン
の置かれるべき絶対的な行位置の指定ができる。 (5) コーディングパターンの二次元的な広がりをそ
のままコーディングパターンのルールとして表現できる
ので、ルールを記述し易く、また、読み易い。これによ
り、ルールの記述ミスや修正ミスを防ぐことができると
共に診断対象であるコードとの対比も容易となる。
【0092】(6) ルールの対の記述をコードの対の
記述だけとマッチングさせることができるので、人間の
感覚通りのルールを表現でき、誤動作を防ぎ、誤動作を
分析するために必要な多くの時間を倹約できる。 (7) コーディングルールを幾つかのチェック処理や
データの加工処理の組み合わせとして表現するためルー
ルの内容が厳密且つ客観的に表現される。すなわち、利
用者は、ルールによりチェックされる内容を勘違いする
ことなくルールの修正や追加, 削除をスムーズに行うこ
とができる。 (8) 一度定義したルールを再利用することにより、
以下の効果がある。すなわち、何度も現れるルールの記
述を部品化してルールの記述効率を高めることができ
る。また、同じ記述が何度も現れないので、ルールの修
正や追加, 削除を行う時も一箇所だけ修正すればよく、
ルールの保守性が高まる。さらに、利用者は、今までに
定義されたルールを組み合わせることによってより高度
なルールを簡単に記述出来る。
【図面の簡単な説明】
【図1】本発明のコード自動診断装置の構成を示す図で
ある。
【図2】図1の「診断対象特定条件を判定する手段」の
内部構成を示す図である。
【図3】図1の「診断対象情報を加工する手段」の内部
構成を示す図である。
【図4】図1の「診断対象が満たすべき条件をチェック
する手段」の内部構成を示す図である。
【図5】図2及び図4の「パターンのチェック手段」の
内部構成を示す図である。
【図6】本発明のコード自動診断装置が入力するコード
の第1の例を示す図である。
【図7】本発明のコード自動診断装置が入力するルール
の第1の例を示す図である。
【図8】本発明のコード自動診断装置が出力する診断メ
ッセージの第1の例を示す図である。
【図9】本発明のコード自動診断装置におけるルール制
御手段の処理手順の例を示す図である。
【図10】本発明のコード自動診断装置が入力するコー
ドの第2の例を示す図である。
【図11】本発明のコード自動診断装置が入力するルー
ルの第2の例を示す図である。
【図12】本発明のコード自動診断装置が入力するルー
ルの第3の例を示す図である。
【図13】本発明のコード自動診断装置が入力するルー
ルの第4の例を示す図である。
【図14】本発明のコード自動診断装置が出力する診断
メッセージの第2の例を示す図である。
【図15】本発明のコード自動診断装置が入力するルー
ルの第5の例を示す図である。
【図16】本発明のコード自動診断装置が入力するルー
ルの第6の例を示す図である。
【図17】本発明のコード自動診断装置をマイクロコン
ピュータ・システムとして構成した場合の一実施例を示
す概略ブロック図である。
【符号の説明】 101…ルール 102…コード 103…ルール入力手段 104…ルールDB 105…コード解析手段 106…コード情報DB 107…ルール制御手段 108…診断対象特定条件を判定する手段 109…記憶手段 110…診断対象情報を加工する手段 111…診断対象が満たすべき条件をチェックする手段 112…診断メッセージの出力手段 113…診断メッセージ 201…第1の論理判定手段 202…構文要素が満たすべき属性条件のチェック手段 301…処理の振り分け手段 302…範囲情報の抽出手段 303…DB操作手段 401…ネストレベルを求める手段 402…比較条件のチェック手段 403…テーブル要素の配列条件のチェック手段 404…第2の論理判定手段 501…パターンのチェック手段 502…パターンルールの制御手段 503…一文字の一致のチェック手段 504…絶対位置のチェック手段 505…相対位置のチェック手段 506…複数行のコーディングパターンルールを一行に
変換する手段 507…対となる記述のチェック手段 508…別パターンルールの参照手段 509…構文要素記述のチェック手段 601…CPU 602…主記憶装置 603…入出力端末装置 604…プリンタ出力装置 605…外部記憶装置

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】 所定の文法に従ってコーディングされて
    計算機に入力されるコード(102)を、別に定義した
    コーディング規則に基づいて自動的に診断する装置であ
    って、該装置は、 該コーディング規則を該装置が解釈可能な形に表現した
    ルール(101)を入力してルール情報をルールDB
    (104)に格納するルール入力手段(103)と、 該コード(102)を解析してコード情報をコード情報
    DB(106)に格納するコード解析手段(105)
    と、 該ルール情報に指定された診断対象を特定するための条
    件である診断対象特定条件を該コード(102)の特定
    位置が満たすかどうかを判定する「診断対象特定条件を
    判定する手段」(108)と、 該ルール情報に指定された「診断対象情報の加工処理」
    を実行する「診断対象情報を加工する手段」(110)
    と、 該ルール情報に指定された「診断対象が満たすべき条
    件」をチェックする「診断対象が満たすべき条件をチェ
    ックする手段」(111)と、 該ルール情報に従って、前記「診断対象特定条件を判定
    する手段」(108)、「診断対象情報を加工する手
    段」(110)及び「診断対象が満たすべき条件をチェ
    ックする手段」(111)をそれぞれ独立に呼び出すル
    ール制御手段(107)と、 前記「診断対象特定条件を判定する手段」(108)、
    「診断対象情報を加工する手段」(110)及び「診断
    対象が満たすべき条件をチェックする手段」(111)
    が処理過程における情報を書き出し及び参照するための
    記憶手段(109)と、 前記「診断対象が満たすべき条件」が満たされないとき
    に前記ルール制御手段(107)によって呼び出され、
    該ルール情報に従って診断メッセージ(113)を出力
    する「診断メッセージの出力手段」(112)と、 を具備する、コーディング規則に基づくコード自動診断
    装置。
  2. 【請求項2】 所定の文法に従ってコーディングされて
    計算機に入力されるコード(102)を、別に定義した
    コーディング規則に基づいて自動的に診断する装置にお
    いて、 該装置は、コードとコーディングパターンについてのル
    ールとを一文字ずつ比較しながら一致するかどうかをチ
    ェックすることにより、該コード(102)がコーディ
    ングパターンについてのルールを満たしているかどうか
    をチェックする「パターンのチェック手段」(50
    1)、を含むことを特徴とする、コーディング規則に基
    づくコード自動診断装置。
  3. 【請求項3】 前記「パターンのチェック手段」(50
    1)は、 コーディングパターンのルールの中に含まれる文字や記
    述が、コード上のある絶対位置に置かれているかどうか
    をチェックする「絶対位置のチェック手段」(50
    4)、 を含む請求項2記載のコーディング規則に基づくコード
    自動診断装置。
  4. 【請求項4】 前記「パターンのチェック手段」(50
    1)は、 二次元的に広がるコーディングパターンルールを一行ず
    つに分解して、前の行からの相対位置の補正を行いなが
    らパターンル−ルのチェックを行う「二次元に広がるコ
    ーディングパターンルールを制御する手段」(506、
    505)、 を含む請求項2記載のコーディング規則に基づくコード
    自動診断装置。
  5. 【請求項5】 前記「パターンのチェック手段」(50
    1)は、 パターンルールの中に対となる記述があるときに呼び出
    され、コード上の対となる記述とルール上の対となる記
    述がそれぞれ対応していることをチェックする「対とな
    る記述のチェック手段」(507)、 を含む請求項2記載のコーディング規則に基づくコード
    自動診断装置。
  6. 【請求項6】 前記「パターンのチェック手段」(50
    1)は、 パターンルールの中に「別のパターンルールの参照記
    述」があるときに呼び出され、ルールDB(104)か
    ら別のパターンルールを取り出してきて、該別のパター
    ンルールに従いパターンのチェックを行わせるための
    「別のパターンルールの参照手段」(508)、 を含む請求項2記載のコーディング規則に基づくコード
    自動診断装置。
JP4179948A 1992-07-07 1992-07-07 コーディング規則に基づくコード自動診断装置 Pending JPH0628165A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP4179948A JPH0628165A (ja) 1992-07-07 1992-07-07 コーディング規則に基づくコード自動診断装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP4179948A JPH0628165A (ja) 1992-07-07 1992-07-07 コーディング規則に基づくコード自動診断装置

Publications (1)

Publication Number Publication Date
JPH0628165A true JPH0628165A (ja) 1994-02-04

Family

ID=16074751

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4179948A Pending JPH0628165A (ja) 1992-07-07 1992-07-07 コーディング規則に基づくコード自動診断装置

Country Status (1)

Country Link
JP (1) JPH0628165A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6675207B1 (en) 1999-02-15 2004-01-06 International Business Machines Corporation Possibility of execution evaluating apparatus and method therefor
JP2009098872A (ja) * 2007-10-16 2009-05-07 Toshiba Corp ソースプログラム解析装置、ソースプログラム解析方法及びコンピュータプログラム
JP2015130026A (ja) * 2014-01-07 2015-07-16 Necソリューションイノベータ株式会社 診断システム、診断方法、および、プログラム

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6675207B1 (en) 1999-02-15 2004-01-06 International Business Machines Corporation Possibility of execution evaluating apparatus and method therefor
JP2009098872A (ja) * 2007-10-16 2009-05-07 Toshiba Corp ソースプログラム解析装置、ソースプログラム解析方法及びコンピュータプログラム
JP2015130026A (ja) * 2014-01-07 2015-07-16 Necソリューションイノベータ株式会社 診断システム、診断方法、および、プログラム

Similar Documents

Publication Publication Date Title
Donzeau-Gouge et al. Programming environments based on structured editors: The MENTOR experience
Griswold et al. The SNOBOL4 Programming
EP0643851B1 (en) Debugger program which includes correlation of computer program source code with optimized objet code
Kahn et al. Metal: A formalism to specify formalisms
JPS6375835A (ja) 目的コ−ド、プログラム・リスト及び設計文書を生成する装置
US20070266378A1 (en) Source code generation method, apparatus, and program
JPH1078959A (ja) エッジデータ構造を統一する方法
US20050160410A1 (en) Object-oriented optimization code generator and a method therefor
de Souza Amorim et al. Multi-purpose syntax definition with SDF3
Lourenço et al. OSTRICH-A Type-Safe Template Language for Low-Code Development.
US20070298389A1 (en) System presenting step by step mathematical solutions
JPH11249875A (ja) プログラミング支援方法及びその装置
JPH10105551A (ja) プロセッサを用いて第1グラフの単一化の一部として第1節と第2節を結合する方法
KR20090011974A (ko) 컴파일 대상 파일 추출 방법
CN113811849A (zh) 计算机辅助计算机编程的系统和方法
JPH0628165A (ja) コーディング規則に基づくコード自動診断装置
JP2004157927A (ja) 帳票入力用プログラムの生成方式、生成プログラム及び生成方法
JP2002288004A (ja) プログラムソース処理装置、プログラムソース処理方法、およびプログラムソース処理プログラム
CN115268907A (zh) 一种使用json数据生成软件系统控件交互逻辑的方法
MacLennan The Synmac syntax macroprocessor: Introduction and manual, version 5
Winkler et al. Program-Variations-in-the-Small.
JP3069050B2 (ja) プログラム変換方法
JP2008059515A (ja) プログラム実行過程の表示方法及びシステム並びにプログラム
Lolong The MNL: A Block-Based Functional Programming Language with Reactive Blocks
JPS6379176A (ja) デイスプレイ上の設計画面より入力した設計仕様から部品を組合せてプログラムを自動生成する方法