JP3461938B2 - プログラムのコメント解析装置 - Google Patents
プログラムのコメント解析装置Info
- Publication number
- JP3461938B2 JP3461938B2 JP28879094A JP28879094A JP3461938B2 JP 3461938 B2 JP3461938 B2 JP 3461938B2 JP 28879094 A JP28879094 A JP 28879094A JP 28879094 A JP28879094 A JP 28879094A JP 3461938 B2 JP3461938 B2 JP 3461938B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- comment
- token
- commented
- operator
- 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.)
- Expired - Fee Related
Links
Landscapes
- Stored Programmes (AREA)
Description
コメントを抽出し、該コメントを解析するプログラムの
コメント解析装置に関するものである。
ントを挿入することが一般に行われている。コメントに
は、プログラマ等によって記述されたコメントとコメン
ト化されたプログラム片とがある。ここで、コメント化
されたプログラム片とは、プログラム本体の一部をコメ
ント化したものである。
ラム内にコメント化されたプログラム片が存在すると、
すなわちプログラム内のコメントがそのプログラムと同
じプログラミング言語で記述されていると、そのコメン
トをプログラム本体の一部であるかのように誤認識して
しまい、プログラムを理解する際の妨げとなり、保守性
を大きく後退させることがあるという問題があった。
語で記述されたプログラムを用いて説明する。図4にお
いて、第1行目〜第17行目のうち“c”のマークの付
いている行がコメントであることを示している。これら
のうち、第3行目のコメントは、プログラムの関数につ
いて記述したものであるが、第8、9、10および15
行目のコメントは、プログラム本体の一部をコメント化
したものである。
グラム本体として残っているべきものであったが、第
8、10および15行目のコードをコメント化する際
に、誤って一緒にコメント化されたものである。このた
めに、この関数を実行するプログラムの動作は、プログ
ラムの仕様と異なってしまうという問題が生じる。そこ
で、このプログラムを修正する必要がある。
合、そのプログラム内にコメント化されたプログラム片
が存在すると、そのコメントをプログラム本体の一部で
あると誤って認識してしまったり、プログラム本体とコ
メントとの識別が困難になり、そのプログラムに新たに
欠陥を埋め込んでしまったりするという問題が起き易く
なるということがあった。
そのプログラムを正確に理解することが必要であるが、
第8、9、10および15行目のようなコメントは、プ
ログラム本体のコードであると誤認識され易く、プログ
ラムの理解を妨げる大きな要因となり得る。
定する場合にも、実質的にはコメントと言えないコメン
ト化されたプログラム片をもコメントとして積算してし
まい、目的にかなった指標として算出することができな
いという問題も生じる。
片は、製品としてのプログラムには不要のものであるの
で、上記のような問題を発生させないためにも、これを
検出して取り除く、あるいは所定のマークを付けて区別
する等の何らかの処理をする必要がある。
解析を行なうものとしては、例えば「David Luckham 著
“Programming With Specifications ”(Springer-Verl
ag,1990) 」の文献にみられるように、特定のフォーマ
ットで記述されたコメントを解析し、何らかの処理を行
なうといったものが存在する。
ォーマットに従うコメントや、プログラム内の特定のコ
メントに対してのみ何らかの処理を行なうものであり、
プログラム内の任意のコメントがそのプログラム言語で
記述されたコメント化されたプログラム片であるか否か
の判定には一切関知していない。
メント部に適用し、該コメントがプログラミング言語の
文法に準拠しているか否かを判断し、それによって該コ
メントがコメント化されたプログラム片であるか否かを
判定する手法も考えられるが、これは役に立たない。な
ぜならば、従来の構文解析手法は、解析を開始する文法
要素を指定しているのに対し、コメント化されたプログ
ラム片は、任意の文法要素から開始されてしまうからで
ある。
されたプログラム片を検出することができず、このた
め、ソースプログラム内のコメントをプログラム本体の
一部であると誤認識してしまうことがあるという問題が
あった。
に成されたものであり、プログラムを誤って認識してし
まうことを防止するために、プログラム内のコメント化
されたプログラム片を確実に検出することができるよう
することを目的とする。
メント解析装置は、ソースプログラムからコメントを抽
出し、該コメントを解析するプログラムのコメント解析
装置において、上記ソースプログラム内のコメントを抽
出するコメント抽出手段と、上記コメント抽出手段によ
り抽出されたコメントからトークンを抽出するトークン
抽出手段と、上記トークン抽出手段により抽出されたト
ークンをオペレータとオペランドとに分離し、それぞれ
の数を計数する分離・計数手段と、上記分離・計数手段
により計数されたオペレータ数およびオペランド数に基
づいて全体のトークン数に対するオペレータ数の割合を
表すオペレータ比率を計算し、該オペレータ比率を予め
与えられた閾値と比較することにより、上記コメント抽
出手段により抽出されたコメントがコメント化されたプ
ログラム片であるか否かを判定する判定手段とを具備す
るものである。
定手段が、上記オペレータおよびオペランドの種類に対
応した所定の係数を有する係数テーブルと、上記分離・
計数手段により計数されたオペレータ数およびオペラン
ド数に対して上記係数テーブルの係数を用いて重み付け
を行う重み付け手段とを具備するものである。
記係数テーブル内の係数を解析対象となる上記ソースプ
ログラム特有の値に調整する係数調整手段を更に設けた
ものである。
ム内にあるすべてのコメントを認識し、コメント化され
たプログラム片を確実に検出することができるようにな
る。このため、該検出されたコメント化されたプログラ
ム片を削除したり、マークを付けたりする等、何らかの
処理を行なうことによりプログラムの誤認を防止するこ
とが可能となる。
段により計数されたオペレータ数およびオペランド数に
対して係数テーブルの係数を用いて重み付けを行うよう
にしたので、コメント化されたプログラム片をより正確
に検出することができるようになる。
を設けたので、各トークン毎に設けられた係数が解析対
象となるソースプログラム特有の値に調整されるように
なり、特定のソースプログラムに依存したコメント化さ
れたプログラム片であるか否かの判定を行なうことが可
能となる。
いて説明する。図1は、本実施例によるコメント化され
たプログラム片の検出手法を適用したプログラムのコメ
ント解析装置の要部構成を示すブロック図である。ま
た、図2は、以下に述べるコメント化されたプログラム
片であるか否かの判定に関する動作を表すフローチャー
トである。
置1は、ソースプログラム6内のコメントを抽出するコ
メント抽出手段2と、該抽出したコメントからトークン
を抽出するトークン抽出手段3と、該抽出したトークン
をオペレータとオペランドとに分離するとともに、それ
ぞれの数を計数するトークン分離・係数手段4と、上記
コメント抽出手段2により抽出されたコメントがコメン
ト化されたプログラム片であるか否かの判定を行なう判
定手段5とにより構成されている。
ング言語のソースプログラム6に対応して設けられてお
り、該ソースプログラムを解析してプログラム内のコメ
ントを抽出するものである。ここで、ソースプログラム
の言語としては、例えば、C言語や FORTRAN言語などが
あり、C言語のコメント(/*...*/) や FORTRAN言語のコ
メント(C ...) は、それぞれ簡便な方法により抽出する
ことができる。なお、本実施例のプログラムのコメント
解析装置は、その他のプログラミング言語にも適用する
ことが可能である。
抽出手段2により抽出されたコメントを各プログラミン
グ言語に応じた仕様により複数のトークンに切り分け、
これを抽出するものである。トークンとは、文法上規定
された特別な意味を持つ文字列、または空白を区切り子
として該区切り子によって区切られた文字列のことをい
う。例えば、以下に示すC言語のプログラムの一部は、
以下のトークンに切り分けられる。 プログラム(一部) if (n > m) return n; トークン “if”“( ”“n ”“> ”“m ”“) ”“return”“n ”“; ”
ークン抽出手段3により抽出されたトークンがプログラ
ミング言語特有のキーワードであれば、それをオペレー
タとして定義するとともに、特有のキーワード以外であ
ればそれをオペランドとして定義し、それぞれの出現回
数を計数するものである。
ードとは、例えばC言語では予約語、演算子および他の
区切り子のことであり、 FORTRAN言語では INTEGER、I
F、ELSE、FUNCTION等の文法上規定された特別な意味を
持つ文字列のことを指す。例えば、上記の例で抽出され
たトークンは、以下のオペレータおよびオペランドに分
離される。 オペレータ “if”“( ”“> ”“) ”“return”“; ” オペランド “n ”“m ”“n ”
数手段4に対応して設けられており、上記トークン分離
・計数手段4により計数されたオペレータおよびオペラ
ンドの種類とそれぞれの出現回数とをもとに、式(1)
に従ってオペレータ比率を計算し、これにより対象とな
るコメントがコメント化されたプログラム片であるか否
かの判定を行なうものである。
は、コメント内のオペレータx の数を表し、operand _
num(y)とは、コメント内のオペランドy の数を表す。オ
ペレータ比率が予め与えられた閾値を越える場合には、
そのプログラミング言語で記述されたプログラムの一部
であると認識される可能性が高いと判断し、コメント化
されたプログラム片であると判定する。
るプログラムのコメント解析装置1の動作を具体例を挙
げて説明する。ここでは、図4に示した FORTRAN言語の
ソースプログラム中のコメントを解析する場合を例にと
って説明する。つまり、図4のソースプログラムが図1
に示したソースプログラム6であるとする。
メント抽出手段2で図4に示した第3、8、9、10お
よび15行目のコメントが抽出され(図2のステップS
1)、トークン抽出手段3で上記抽出された各コメント
内のトークンが抽出される(図2のステップS2)。こ
うして抽出されたトークンは、トークン分離・計数手段
4でオペレータとオペランドとに分離され、それぞれの
数が計数される(図2のステップS3)。例えば、図4
の第3、8および9行目のコメントに対しては、次の表
1のような情報が抽出される。
よびオペランドの種類とその出現回数とに基づいて、上
記コメント抽出手段2により抽出されたコメントがコメ
ント化されたプログラム片かどうかの判定が行なわれ
る。すなわち、上記オペレータおよびオペランドの出現
回数に基づいて式(1)に示したオペレータ比率が求め
られ(図2のステップS4)、これが所定の閾値と比較
されることにより、コメント化されたプログラム片の判
別が行われる(図2のステップS5)。
も大きいときは、そのコメントはコメント化されたプロ
グラム片であると判定され(図2のステップS6)、オ
ペレータ比率が所定の閾値よりも小さいときは、そのコ
メントはコメント化されたプログラム片でないと判定さ
れる(図2のステップS7)。ここで、オペレータ比率
の閾値を0.5 に設定するもとのとすると、各コメントの
オペレータ比率および判定結果は以下の表2に示すよう
になる。
ような請求項1に基づく判定手段の仕様によってある程
度は検出されるが、請求項2または請求項3に基づく判
定手段の仕様にすることによって更に正確に検出するこ
とができる。すなわち、判定手段5として図3示す構成
のものを用い、次の式(2)に示すように各トークンx,
y にそれぞれ係数α(x),α(y) を与えてオペレータ比率
を計算するようにすれば、コメント化されたプログラム
片の判定をより正確に行うことができる。
た場合は、トークン分離・計数手段4から入力されるオ
ペレータ数およびオペランド数は、重み付け手段として
の乗算器51によって係数テーブル52内の係数α(x),
α(y) が乗じられることにより、重み付けがなされる。
上記係数α(x),α(y) は、調整部53によってソースプ
ログラム6に特有の条件(例えば、プログラミング言語
の種類など)を考慮した値に調整することが可能なよう
になされている。
付けがなされた値を用いて、上記した式(2)に従って
オペレータ比率が求められ、このオペレータ比率に基づ
いてコメント化されたプログラム片であるか否かの判定
が判定部55で行われる。
抽出手段3により抽出されたトークンが、IF文、 WRITE
文等のように実行文および非実行文の名前として現れる
トークンである場合、つまり、IF、 WRITE等の場合は、
式(2)における係数α(x),α(y) を他のトークンの係
数よりも比重を高く定義する。また、代入文におけるト
ークン“=”の係数も同様に比重を高く定義する。さら
に、同じトークンの出現回数に応じて係数の比重を高く
定義する。
は、各コメントのオペレータ比率および判定結果は以下
の表3のようになる。
4のプログラム中から第8、9、10および15行目の
コメントをコメント化されたプログラム片として簡便に
検出することができる。そして、例えば該検出したコメ
ントの文字の色を変えるなどの処理を行うことにより、
第9行目のコメントをプログラム本体であると誤認識す
る問題を回避することができる。
の種類に応じた係数α(x),α(y) として、対象となるソ
ースプログラム6に特有の条件を考慮した係数を使用す
ることにより、コメント化されたプログラム片であるか
否かの判定をさらに正確なものにすることができる。
析装置1により得られるコメント化されたプログラム片
の判定結果は、必要に応じて外部に提供される。例え
ば、ソフトウェアの品質検査において重要視される、コ
メントに記述されたプログラムの情報がどの程度存在す
るかを示す指標として、コメント行数やコメント文字数
等のコメント量を調べる際に、コメント化されたプログ
ラム片ではないと判定されるコメント量を調べることに
より、より目的にかなった指標を定量化することができ
る。
るソースプログラムから抽出したコメントから更にトー
クンを抽出し、該抽出したトークンをオペレータとオペ
ランドとに分離してそれぞれの数を計数し、これらのオ
ペレータ数およびオペランド数に基づいて計算したオペ
レータ比率に基づいて上記抽出されたコメントがコメン
ト化されたプログラム片であるか否かを判定するように
したので、コメント化されたプログラム片を確実かつ簡
便に検出することが可能となり、ソースプログラム内の
コメントをプログラム本体の一部であると誤認識してし
まう問題を回避することができる。これにより、ソース
プログラムの保守性を向上させることができる。
発明によるプログラムのコメント解析装置を利用して、
コメント化されたプログラム片であると判定されるコメ
ントを削除することにより、プログラム本体の一部がソ
ースプログラム内に残存する可能性が極めて小さくな
り、そのソースプログラムが保守工程に移行した際に起
こり得る上記のような誤認識の問題を回避することが可
能となる。
段により計数されたオペレータ数およびオペランド数に
対して所定の係数を用いて重み付けを行うようにしたの
で、コメント化されたプログラム片をより正確に検出す
ることができる。
ンに対応する係数を調整することが可能であるので、特
定のソースプログラムに応じた係数に変更することによ
り、個々のソースプログラムに最適な判定を行なうこと
ができる。
の要部構成を示すブロック図である。
の動作を示すフローチャートである。
ラムの例を示す図である。
Claims (3)
- 【請求項1】 ソースプログラムからコメントを抽出
し、該コメントを解析するプログラムのコメント解析装
置において、 上記ソースプログラム内のコメントを抽出するコメント
抽出手段と、 上記コメント抽出手段により抽出されたコメントからト
ークンを抽出するトークン抽出手段と、 上記トークン抽出手段により抽出されたトークンをオペ
レータとオペランドとに分離し、それぞれの数を計数す
る分離・計数手段と、 上記分離・計数手段により計数されたオペレータ数およ
びオペランド数に基づいて全体のトークン数に対するオ
ペレータ数の割合を表すオペレータ比率を計算し、該オ
ペレータ比率を予め与えられた閾値と比較することによ
り、上記コメント抽出手段により抽出されたコメントが
コメント化されたプログラム片であるか否かを判定する
判定手段とを具備することを特徴とするプログラムのコ
メント解析装置。 - 【請求項2】 上記判定手段は、上記オペレータおよび
オペランドの種類に対応した所定の係数を有する係数テ
ーブルと、 上記分離・計数手段により計数されたオペレータ数およ
びオペランド数に対して上記係数テーブルの係数を用い
て重み付けを行う重み付け手段とを具備することを特徴
とする請求項1記載のプログラムのコメント解析装置。 - 【請求項3】 上記係数テーブル内の係数を解析対象と
なる上記ソースプログラム特有の値に調整する係数調整
手段を更に設けたことを特徴とする請求項2記載のプロ
グラムのコメント解析装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP28879094A JP3461938B2 (ja) | 1994-10-28 | 1994-10-28 | プログラムのコメント解析装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP28879094A JP3461938B2 (ja) | 1994-10-28 | 1994-10-28 | プログラムのコメント解析装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH08123674A JPH08123674A (ja) | 1996-05-17 |
JP3461938B2 true JP3461938B2 (ja) | 2003-10-27 |
Family
ID=17734762
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP28879094A Expired - Fee Related JP3461938B2 (ja) | 1994-10-28 | 1994-10-28 | プログラムのコメント解析装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3461938B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5419804B2 (ja) * | 2010-06-10 | 2014-02-19 | 株式会社エクサ | Javaソースコードチェックプログラム |
-
1994
- 1994-10-28 JP JP28879094A patent/JP3461938B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH08123674A (ja) | 1996-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103714338B (zh) | 图像处理装置和图像处理方法 | |
JP4427500B2 (ja) | 意味解析装置、意味解析方法および意味解析プログラム | |
CN108170468B (zh) | 一种自动检测注释和代码一致性的方法及其系统 | |
CN109711163B (zh) | 基于api调用序列的安卓恶意软件检测方法 | |
CN112035359B (zh) | 程序测试方法、装置、电子设备及存储介质 | |
CN111368303B (zh) | 一种PowerShell恶意脚本的检测方法及装置 | |
CN112364631B (zh) | 基于层级多任务学习的中文语法错误检测方法及系统 | |
CN107153610A (zh) | 一种程序语句错误检测方法和装置 | |
US9946710B2 (en) | Language conversion apparatus, language conversion method, and language conversion program | |
CN106503244A (zh) | 一种统一资源定位符相似度的处理方法 | |
JP3461938B2 (ja) | プログラムのコメント解析装置 | |
CN116578989B (zh) | 基于深度预训练神经网络的智能合约漏洞检测系统及方法 | |
CN117171741A (zh) | 代码缺陷分析方法及装置 | |
CN113138913A (zh) | Java代码注入检测方法、装置、设备及存储介质 | |
CN115357490A (zh) | 一种针对移动应用的界面缩放缺陷检测方法及电子装置 | |
CN114610844A (zh) | 一种敏感信息检测方法、装置、存储介质及终端 | |
US20070078644A1 (en) | Detecting segmentation errors in an annotated corpus | |
CN113704122B (zh) | 一种基于标准接口的ui自动化测试系统及方法 | |
WO2018000273A1 (zh) | 一种不良语料内容检测装置和方法 | |
KR102339498B1 (ko) | 버그 검출 규칙 개선을 위한 코드 문맥 수집 방법 | |
JPH06124211A (ja) | プログラム解析装置 | |
CN115248859A (zh) | 一种文件分类方法、装置、设备及可读存储介质 | |
CN114780391A (zh) | 代码安全缺陷分析方法、装置、设备及存储介质 | |
CN115794104A (zh) | 一种基于特定语言的安全数据编排引擎 | |
CN116185824A (zh) | 一种文件检测方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20030715 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080815 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080815 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090815 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090815 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100815 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110815 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110815 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120815 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120815 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130815 Year of fee payment: 10 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |