JP2001005650A - コンピュータプログラムのコメント文生成方法及び装置 - Google Patents
コンピュータプログラムのコメント文生成方法及び装置Info
- Publication number
- JP2001005650A JP2001005650A JP11176914A JP17691499A JP2001005650A JP 2001005650 A JP2001005650 A JP 2001005650A JP 11176914 A JP11176914 A JP 11176914A JP 17691499 A JP17691499 A JP 17691499A JP 2001005650 A JP2001005650 A JP 2001005650A
- Authority
- JP
- Japan
- Prior art keywords
- knowledge
- program
- comment
- module
- explanation
- 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
Links
Landscapes
- Stored Programmes (AREA)
Abstract
(57)【要約】
【課題】 構造が曖昧なプログラムであっても、その内
容を適切に表わすコメント文を生成する。 【解決手段】 プログラム8のソースコードを読み出
し、該ソースコードの意味を解析して推論し、対応する
コメント文がモジュール毎に蓄積された辞書34と対照
し、対応するコメント文を選択して組合せることによ
り、コメント文を自動的に生成する。
容を適切に表わすコメント文を生成する。 【解決手段】 プログラム8のソースコードを読み出
し、該ソースコードの意味を解析して推論し、対応する
コメント文がモジュール毎に蓄積された辞書34と対照
し、対応するコメント文を選択して組合せることによ
り、コメント文を自動的に生成する。
Description
【0001】
【発明の属する技術分野】本発明は、コンピュータプロ
グラムのコメント文生成方法及び装置に係り、特に、構
造が曖昧なプログラムも対象に含めたプログラム理解支
援を行うことによって、ソフトウェアの保守負荷の軽減
を図るために、プログラムに手を加えることなく、ソー
スコードを解析し、モジュール単位でその意味をコメン
ト文として自動的に生成することが可能な、コンピュー
タプログラムのコメント文生成方法及び装置に関する。
グラムのコメント文生成方法及び装置に係り、特に、構
造が曖昧なプログラムも対象に含めたプログラム理解支
援を行うことによって、ソフトウェアの保守負荷の軽減
を図るために、プログラムに手を加えることなく、ソー
スコードを解析し、モジュール単位でその意味をコメン
ト文として自動的に生成することが可能な、コンピュー
タプログラムのコメント文生成方法及び装置に関する。
【0002】
【従来の技術】近年、計算機システム開発において、ソ
フトウェア保守の負荷が大きな問題となっている。ソフ
トウェア保守負荷の増大は、基本的に、システムの成長
によって生じるが、成長による歪みが保守作業の増加に
拍車をかけている一面もある。
フトウェア保守の負荷が大きな問題となっている。ソフ
トウェア保守負荷の増大は、基本的に、システムの成長
によって生じるが、成長による歪みが保守作業の増加に
拍車をかけている一面もある。
【0003】即ち、計算機システム開発の現場では、既
存システムの保守のために過去のプログラムソースコー
ドの変更が行われている。このとき、変更後の動作を確
実に保証するため、大幅な修正は避け、最小範囲の改造
に留める傾向にある。そのため、実際に使われているプ
ログラムは、プログラム構造化手法が確立する以前に作
成されたもの、異言語間にコンバートしたもの、幾多の
部分的修正が重ねられたものとなる。これがプログラム
理解、ひいては修正に過大な負担をかけ、この環境改善
が急務になっている。
存システムの保守のために過去のプログラムソースコー
ドの変更が行われている。このとき、変更後の動作を確
実に保証するため、大幅な修正は避け、最小範囲の改造
に留める傾向にある。そのため、実際に使われているプ
ログラムは、プログラム構造化手法が確立する以前に作
成されたもの、異言語間にコンバートしたもの、幾多の
部分的修正が重ねられたものとなる。これがプログラム
理解、ひいては修正に過大な負担をかけ、この環境改善
が急務になっている。
【0004】そこで、ソフトウェアの保守負荷を軽減す
るための方策として、計算機によるプログラム理解が着
目されている。即ち、プログラムの保守を効率化するた
めには、プログラムから仕様への逆生成が重要である。
人口知能の先端研究分野では、ファイル処理例題に対す
るCOBOLプログラムから形式的な要求仕様(いわゆ
る非手続仕様)を逆生成するリバースエンジニアリング
手法が提案されると共に、それを実現するシステムCO
BOL Reverse Engineer for Modules:CORE
/M(情報処理学会誌:1995.Mar. Vol.36 No.
3)が開発されている。
るための方策として、計算機によるプログラム理解が着
目されている。即ち、プログラムの保守を効率化するた
めには、プログラムから仕様への逆生成が重要である。
人口知能の先端研究分野では、ファイル処理例題に対す
るCOBOLプログラムから形式的な要求仕様(いわゆ
る非手続仕様)を逆生成するリバースエンジニアリング
手法が提案されると共に、それを実現するシステムCO
BOL Reverse Engineer for Modules:CORE
/M(情報処理学会誌:1995.Mar. Vol.36 No.
3)が開発されている。
【0005】この従来技術では、事務処理の中のファイ
ル処理を対象に、プログラム理解の結果を表わす要求仕
様としては、ファイル処理例題における実体や関連の属
性項目間の関係と出力・更新要求を等関係式と称する数
式の集合で表わした等関係式仕様を採用している。この
仕様は、要求を非手続的に表現している。ここでは、各
計算式の項目は、“・”を介して、それが所属する実体
の識別子によって、又、“ ”を介して、それが格納さ
れているファイル名によって修飾されている。従って、
等関係式は、その左辺項目の意味定義になっている。こ
の手法では、まずCOBOLプログラムを構文解析し
て、ブロック構造に展開し、次に、ブロックが処理対象
とする実体や関連を表わす照合基準を抽出する。この照
合基準を基に、実体識別子とファイル修飾子を導出し、
ブロックに含まれる処理文内の項目を適切に修飾して等
関係式に変換し出力する。これらによって、事務処理の
ファイル処理を中心に、解説書を自動生成しようとして
いる。
ル処理を対象に、プログラム理解の結果を表わす要求仕
様としては、ファイル処理例題における実体や関連の属
性項目間の関係と出力・更新要求を等関係式と称する数
式の集合で表わした等関係式仕様を採用している。この
仕様は、要求を非手続的に表現している。ここでは、各
計算式の項目は、“・”を介して、それが所属する実体
の識別子によって、又、“ ”を介して、それが格納さ
れているファイル名によって修飾されている。従って、
等関係式は、その左辺項目の意味定義になっている。こ
の手法では、まずCOBOLプログラムを構文解析し
て、ブロック構造に展開し、次に、ブロックが処理対象
とする実体や関連を表わす照合基準を抽出する。この照
合基準を基に、実体識別子とファイル修飾子を導出し、
ブロックに含まれる処理文内の項目を適切に修飾して等
関係式に変換し出力する。これらによって、事務処理の
ファイル処理を中心に、解説書を自動生成しようとして
いる。
【0006】又、特開平8−272596には、ソース
プログラムの各文字を順次的に読み込んで字句解析し、
ソースプログラムの構成要素を抽出する字句解析機能部
と、抽出されたプログラムの構成要素を予め登録されて
いるプログラム言語の文法と照合することにより、文単
位で切り出す構文解析機能部と、切り出された各文を予
め登録されている注釈挿入ルールに従って1つにまとめ
て処理ブロックとして構成する処理ブロック構成機能部
と、処理ブロック構成機能部が構成した各処理ブロック
に対して、その処理に対応する図形パターンを貼り付
け、更に処理ブロック配置ルールを参照して各図形パタ
ーンを配置することにより、プログラム設定書を生成す
る整形出力機能部とを備えることにより、注釈が不完全
な状態でしか挿入されていないようなソースプログラム
からでも、プログラム設計書を作成し得るプログラム設
計書生成装置が提案されている。
プログラムの各文字を順次的に読み込んで字句解析し、
ソースプログラムの構成要素を抽出する字句解析機能部
と、抽出されたプログラムの構成要素を予め登録されて
いるプログラム言語の文法と照合することにより、文単
位で切り出す構文解析機能部と、切り出された各文を予
め登録されている注釈挿入ルールに従って1つにまとめ
て処理ブロックとして構成する処理ブロック構成機能部
と、処理ブロック構成機能部が構成した各処理ブロック
に対して、その処理に対応する図形パターンを貼り付
け、更に処理ブロック配置ルールを参照して各図形パタ
ーンを配置することにより、プログラム設定書を生成す
る整形出力機能部とを備えることにより、注釈が不完全
な状態でしか挿入されていないようなソースプログラム
からでも、プログラム設計書を作成し得るプログラム設
計書生成装置が提案されている。
【0007】このように、プログラムの構文解析手法は
既に確立されたものがあり、解析結果をプログラム構造
化支援のための構文視覚化、あるいは自動構造化に利用
する手法が提案されている。複雑なソースコードを構造
化して読み易くすることは、間接的にプログラム理解へ
の支援となっている。
既に確立されたものがあり、解析結果をプログラム構造
化支援のための構文視覚化、あるいは自動構造化に利用
する手法が提案されている。複雑なソースコードを構造
化して読み易くすることは、間接的にプログラム理解へ
の支援となっている。
【0008】
【発明が解決しようとする課題】しかし、実働している
システムのプログラムを、人間の手を介さずに変更する
ことは、万が一不具合が生じた場合の被害を考慮すれ
ば、現場では受け入れられない。
システムのプログラムを、人間の手を介さずに変更する
ことは、万が一不具合が生じた場合の被害を考慮すれ
ば、現場では受け入れられない。
【0009】そこで、従来技術で述べたプログラム理解
の支援を目的として、ソースコードを理解し、モジュー
ル単位で、その意味を解説書として生成する手法が求め
られている。即ち、プログラムのソースコードを解析
し、適切な大きさのモジュールの意味を理解してコメン
ト文を自動的に生成する方法が要求される。更に、コメ
ント文が生成不可能な場合には、その旨をユーザに提示
し、逆に人手による修正を反映させて知識ベースを精練
・拡張するための機械学習手法、ならびにユーザインタ
ーフェイスのあり方が重要である。しかしながら、従来
技術では、推論を行っていないため、必ずしも十分な効
果を上げることができなかった。
の支援を目的として、ソースコードを理解し、モジュー
ル単位で、その意味を解説書として生成する手法が求め
られている。即ち、プログラムのソースコードを解析
し、適切な大きさのモジュールの意味を理解してコメン
ト文を自動的に生成する方法が要求される。更に、コメ
ント文が生成不可能な場合には、その旨をユーザに提示
し、逆に人手による修正を反映させて知識ベースを精練
・拡張するための機械学習手法、ならびにユーザインタ
ーフェイスのあり方が重要である。しかしながら、従来
技術では、推論を行っていないため、必ずしも十分な効
果を上げることができなかった。
【0010】本発明は、前記従来の問題点を解決するべ
くなされたもので、構造が曖昧なプログラムであって
も、プログラムに手を加えることなく、適切なコメント
文を自動的に生成することを課題とする。
くなされたもので、構造が曖昧なプログラムであって
も、プログラムに手を加えることなく、適切なコメント
文を自動的に生成することを課題とする。
【0011】
【課題を解決するための手段】本発明は、コンピュータ
プログラムの内容を表わすコメント文を生成するに際し
て、プログラムのソースコードを読み出し、該ソースコ
ードの意味を解析して推論し、対応するコメント文がモ
ジュール毎に蓄積された辞書と対照し、対応するコメン
ト文を選択して組合せることにより、コメント文を自動
的に生成するようにして、前記課題を解決したものであ
る。
プログラムの内容を表わすコメント文を生成するに際し
て、プログラムのソースコードを読み出し、該ソースコ
ードの意味を解析して推論し、対応するコメント文がモ
ジュール毎に蓄積された辞書と対照し、対応するコメン
ト文を選択して組合せることにより、コメント文を自動
的に生成するようにして、前記課題を解決したものであ
る。
【0012】又、前記辞書に蓄積された情報が不足し
て、適切なコメント文を選択できない場合は、適切なコ
メント文を学習し、教師情報として辞書に追加するよう
にしたものである。
て、適切なコメント文を選択できない場合は、適切なコ
メント文を学習し、教師情報として辞書に追加するよう
にしたものである。
【0013】本発明は、又、コンピュータプログラムの
内容を表わすコメント文を生成する装置において、プロ
グラムのソースコードに対応するコメント文が、モジュ
ール毎に蓄積された辞書と、プログラムのソースコード
を読み出す手段と、読み出されたソースコードの意味を
解析して推論し、モジュール毎に辞書と対照して、対応
するコメント文を選択して組合せる手段とを備えること
により、前記課題を解決したものである。
内容を表わすコメント文を生成する装置において、プロ
グラムのソースコードに対応するコメント文が、モジュ
ール毎に蓄積された辞書と、プログラムのソースコード
を読み出す手段と、読み出されたソースコードの意味を
解析して推論し、モジュール毎に辞書と対照して、対応
するコメント文を選択して組合せる手段とを備えること
により、前記課題を解決したものである。
【0014】更に、前記辞書に蓄積された情報が不足し
て、適切なコメント文を選択できない場合は、適切なコ
メント文を学習し、教師情報として辞書に追加する学習
手段を備えたものである。
て、適切なコメント文を選択できない場合は、適切なコ
メント文を学習し、教師情報として辞書に追加する学習
手段を備えたものである。
【0015】又、前記ソースコードの意味の解析を、P
rolog(PROgramming inLOGic)推論の手法
により行うようにしたものである。
rolog(PROgramming inLOGic)推論の手法
により行うようにしたものである。
【0016】本発明は、プログラムそのものを変更する
ことなく、プログラムモジュールの意味をコメント文と
して生成して人間に提示するというアプローチで支援を
試みることに特色がある。但し、問題領域に特化するの
では無く、領域知識を入れ替えることによって、様々な
問題に適用可能な枠組であり、計算機システム開発が抱
えているソースコード理解の問題を広く解決できる。
ことなく、プログラムモジュールの意味をコメント文と
して生成して人間に提示するというアプローチで支援を
試みることに特色がある。但し、問題領域に特化するの
では無く、領域知識を入れ替えることによって、様々な
問題に適用可能な枠組であり、計算機システム開発が抱
えているソースコード理解の問題を広く解決できる。
【0017】プログラムソース理解の研究分野において
は、枠組の一般性を指向するためには、構文解析の段階
で留めざるを得ず、プログラミング教育支援や構造化支
援への適用が試みられている。更に、意味解析の段階に
まで踏み込むために、いわゆるプログラミング一般に共
通する知識の導入も試みられているが、これは、解析ア
ルゴリズムに組み込まれるため、対象領域の変更が容易
ではない。いずれにせよ、これらの方向性では、開発現
場で求められているレベルのプログラム理解支援は困難
である。
は、枠組の一般性を指向するためには、構文解析の段階
で留めざるを得ず、プログラミング教育支援や構造化支
援への適用が試みられている。更に、意味解析の段階に
まで踏み込むために、いわゆるプログラミング一般に共
通する知識の導入も試みられているが、これは、解析ア
ルゴリズムに組み込まれるため、対象領域の変更が容易
ではない。いずれにせよ、これらの方向性では、開発現
場で求められているレベルのプログラム理解支援は困難
である。
【0018】本発明は、領域固有の知識の導入が可能な
対象に焦点を絞ることによって、コメント文生成まで理
解を進めることのできる一般的な枠組を実現している。
対象に焦点を絞ることによって、コメント文生成まで理
解を進めることのできる一般的な枠組を実現している。
【0019】本発明で推論に用いることができるPro
log言語は、AIプログラムの記述・開発に適してい
るAI用言語の1つとして開発されたもので、データと
して、記号(シンボル)を取り扱うことができる記号処
理言語であり、又、リストと呼ばれる可変長のデータの
列を取り扱うことのできるリスト処理言語である。更
に、新たな述語を論理式で定義することによってプログ
ラムを作り上げていくもので、Prologのプログラ
ムは、論理式の集まりである論理型言語である。このP
rologやLISPは、FORTRANやBASIC
等の手続き型言語とは異なり、非手続型言語と呼ばれ
る。このPrologシステムの主要形態は対話的であ
り、ユーザはPrologシステムを立ち上げた後、シ
ステムと会話するような形で命令を与え、述語を定義し
たり実行したりできるという特徴を有する。
log言語は、AIプログラムの記述・開発に適してい
るAI用言語の1つとして開発されたもので、データと
して、記号(シンボル)を取り扱うことができる記号処
理言語であり、又、リストと呼ばれる可変長のデータの
列を取り扱うことのできるリスト処理言語である。更
に、新たな述語を論理式で定義することによってプログ
ラムを作り上げていくもので、Prologのプログラ
ムは、論理式の集まりである論理型言語である。このP
rologやLISPは、FORTRANやBASIC
等の手続き型言語とは異なり、非手続型言語と呼ばれ
る。このPrologシステムの主要形態は対話的であ
り、ユーザはPrologシステムを立ち上げた後、シ
ステムと会話するような形で命令を与え、述語を定義し
たり実行したりできるという特徴を有する。
【0020】
【発明の実施の形態】以下図面を参照して、本発明の実
施形態を詳細に説明する。
施形態を詳細に説明する。
【0021】本発明の動作を中心とする主要な構成を示
す第1実施形態は、図1に示す如く、構文解析によるフ
レーム生成部10と、モジュール分割部12と、コメン
ト生成部16、説明木生成部18及び辞書を収容したデ
ータベース部20を含む、説明による一般化(EBGと
称する)部14と、ユーザ24に対するインターフェー
ス部22とを含んでいる。
す第1実施形態は、図1に示す如く、構文解析によるフ
レーム生成部10と、モジュール分割部12と、コメン
ト生成部16、説明木生成部18及び辞書を収容したデ
ータベース部20を含む、説明による一般化(EBGと
称する)部14と、ユーザ24に対するインターフェー
ス部22とを含んでいる。
【0022】前記フレーム生成部10では、プログラム
言語として例えばyacc/lexを用いて、ソースプログラム
を、モジュール分割部12及びEBG部14で用いられ
ているプログラム言語Prologで処理可能な表現と
なるフレームへの変換を行う。
言語として例えばyacc/lexを用いて、ソースプログラム
を、モジュール分割部12及びEBG部14で用いられ
ているプログラム言語Prologで処理可能な表現と
なるフレームへの変換を行う。
【0023】前記モジュール分割部12及びEBG部1
4では、フレーム集合を入力として、処理が行われる。
4では、フレーム集合を入力として、処理が行われる。
【0024】前記モジュール分割部12では、EBG部
14のコメント生成部16及び説明木生成部18の要求
に応じ、ソースプログラムの制御フローグラフを基に、
モジュール分割を行う。モジュール分割は、ソースプロ
グラムに対し、大域的なモジュール分割から開始し、E
BG部14の要求に応じて、より局所的なモジュール分
割へと移行する。
14のコメント生成部16及び説明木生成部18の要求
に応じ、ソースプログラムの制御フローグラフを基に、
モジュール分割を行う。モジュール分割は、ソースプロ
グラムに対し、大域的なモジュール分割から開始し、E
BG部14の要求に応じて、より局所的なモジュール分
割へと移行する。
【0025】前記EBG部14は、コメント生成部16
及び説明木生成部18とデータベース部20に分けられ
る。コメント生成部16は、ソースプログラムに対応す
るコメントを生成し、説明木生成部18は、なぜそのコ
メントが生成されたかの説明を表わしている説明木の生
成を行う。ソースプログラム全体に対し、コメントの説
明が一意に決定されない場合は、モジュール分割部12
を呼び出し、モジュール分割を行う。そのときのモジュ
ールに対し、説明木生成を試み、分割された全てのモジ
ュールに対し、説明木が一意に決定されると、それぞれ
の説明木をつなぎ合わせることによって、ソースプログ
ラム全体の説明木を生成する。
及び説明木生成部18とデータベース部20に分けられ
る。コメント生成部16は、ソースプログラムに対応す
るコメントを生成し、説明木生成部18は、なぜそのコ
メントが生成されたかの説明を表わしている説明木の生
成を行う。ソースプログラム全体に対し、コメントの説
明が一意に決定されない場合は、モジュール分割部12
を呼び出し、モジュール分割を行う。そのときのモジュ
ールに対し、説明木生成を試み、分割された全てのモジ
ュールに対し、説明木が一意に決定されると、それぞれ
の説明木をつなぎ合わせることによって、ソースプログ
ラム全体の説明木を生成する。
【0026】前記データベース部20では、領域知識の
追加を行う際に、データベース内の領域知識との整合性
を行う。
追加を行う際に、データベース内の領域知識との整合性
を行う。
【0027】最後に、前記ユーザインターフェース部2
2では、生成されたコメント及び説明をユーザ24に提
示する。更に、辞書における知識の変更や追加も、この
ユーザインターフェース部22を介して行われる。
2では、生成されたコメント及び説明をユーザ24に提
示する。更に、辞書における知識の変更や追加も、この
ユーザインターフェース部22を介して行われる。
【0028】以下、解析対象プログラムをC言語とし、
それぞれのプロセスの説明を行う。ここで用いる知識表
現についての定義は、次のとおりである。
それぞれのプロセスの説明を行う。ここで用いる知識表
現についての定義は、次のとおりである。
【0029】領域知識は、ホーン節によって表現する。
ホーン節は、句:-句、句、…、句.で表現される。“:
-”をめだかマークと呼び、めだかマークの左辺をヘッ
ド部、右辺をボディ部と呼ぶ。ボディ部の句は全てAn
d関係にある。句には知識a(X,Y)と、フレーム理
論に基づく知識表現により一つの場面や物事を表すデー
タ構造であるframe(Z)が存在し、Xはコメント、Y
はa(X,Y)をヘッド部に持つホーン節が格納されて
いるデータベースの種類を表わしている。Yにはメイン
データベース“mdb”、サブデータベース“sd
b”、新たに追加される領域知識を表わす“new”の
いずれかが入る。又、Zには解析対象となるソースプロ
グラム−文の情報が格納される。
ホーン節は、句:-句、句、…、句.で表現される。“:
-”をめだかマークと呼び、めだかマークの左辺をヘッ
ド部、右辺をボディ部と呼ぶ。ボディ部の句は全てAn
d関係にある。句には知識a(X,Y)と、フレーム理
論に基づく知識表現により一つの場面や物事を表すデー
タ構造であるframe(Z)が存在し、Xはコメント、Y
はa(X,Y)をヘッド部に持つホーン節が格納されて
いるデータベースの種類を表わしている。Yにはメイン
データベース“mdb”、サブデータベース“sd
b”、新たに追加される領域知識を表わす“new”の
いずれかが入る。又、Zには解析対象となるソースプロ
グラム−文の情報が格納される。
【0030】集合{frame(Z1),frame(Z2),…,
frame(Zn)}をFrame(Zi)(1≦i≦n)とす
る。更に、集合{a(X1,mdb),a(X2,md
b),…,a(Xm,mdb)}をA(Xj,mdb)
(1≦j≦m)とする。
frame(Zn)}をFrame(Zi)(1≦i≦n)とす
る。更に、集合{a(X1,mdb),a(X2,md
b),…,a(Xm,mdb)}をA(Xj,mdb)
(1≦j≦m)とする。
【0031】ホーン節a(Xi,Y):-A(Xj,Y),
Frame(Zk)(1≦j≦n,1≦k≦m,i≠j)を
知識知識a(Xi,Y)と呼ぶ。
Frame(Zk)(1≦j≦n,1≦k≦m,i≠j)を
知識知識a(Xi,Y)と呼ぶ。
【0032】ホーン節のヘッド部には知識a(Xi,
Y)のみが入り、frame(Zj)が入ることはない。よっ
て、説明木が生成された時、葉の部分は必ずframe(Z
j)となる。
Y)のみが入り、frame(Zj)が入ることはない。よっ
て、説明木が生成された時、葉の部分は必ずframe(Z
j)となる。
【0033】知識a(X,Y)のボディ部からframe
(Zi)を全て除いた知識を知識a(X′,Y)とす
る。
(Zi)を全て除いた知識を知識a(X′,Y)とす
る。
【0034】関係演算子(包含関係)Cを、以下に定義
する。
する。
【0035】
【数1】
【0036】ボディ部の句は全てAnd関係にあるた
め、包含関係にあるFrame(Zi)とFrame(Zj)とで
は要素数が多いFrame(Zi)の方が領域が狭くなる。
更に、 a(X1,Y1):-frame(Z1),frame(Z2),…,fr
ame(Zn+m) a(X2,Y2):-frame(Z1),frame(Z2),…,fr
ame(Zn)
め、包含関係にあるFrame(Zi)とFrame(Zj)とで
は要素数が多いFrame(Zi)の方が領域が狭くなる。
更に、 a(X1,Y1):-frame(Z1),frame(Z2),…,fr
ame(Zn+m) a(X2,Y2):-frame(Z1),frame(Z2),…,fr
ame(Zn)
【数2】 のとき、となる。ここで、知識a(X,Y)の包含関係
を調べる時は、知識a(X,Y)をチャンク化し、ボデ
ィ部をframe(Z)のみにする。
を調べる時は、知識a(X,Y)をチャンク化し、ボデ
ィ部をframe(Z)のみにする。
【0037】解析対象となるソースプログラムは単なる
文字列にすぎない。よって、前記フレーム生成部10
で、字句解析及び構文解析によって構文木を導出し、プ
ログラムとして解釈する。更に、ソースプログラムは,
Prologでは直接扱えないため、フレーム生成部1
0で、ソースプログラムをフレームによって表現し、P
rolog形式に変換する。フレームへの変換は、構文
木を基に行われる。
文字列にすぎない。よって、前記フレーム生成部10
で、字句解析及び構文解析によって構文木を導出し、プ
ログラムとして解釈する。更に、ソースプログラムは,
Prologでは直接扱えないため、フレーム生成部1
0で、ソースプログラムをフレームによって表現し、P
rolog形式に変換する。フレームへの変換は、構文
木を基に行われる。
【0038】本実施形態で用いるフレーム構造は、第1
引数が、フレームIDとなっており、一つのフレームに
対しIDは一対一対応となっている。ここで、フレーム
IDとソースプログラムの行番号とは必ず対応している
とは限らないので、IDと行番号との対応表を作成す
る。第2引数はプログラムにおける深さ情報を表してお
り、C言語では“{”が出現する度に、1加算さ
れ、“}”で1減算される。第3引数では、プログラム
情報を表現しており、第4引数では、第3引数でプログ
ラム情報として関数、ループ、条件分岐情報が表現され
ているときのみ、その有効範囲が格納される。
引数が、フレームIDとなっており、一つのフレームに
対しIDは一対一対応となっている。ここで、フレーム
IDとソースプログラムの行番号とは必ず対応している
とは限らないので、IDと行番号との対応表を作成す
る。第2引数はプログラムにおける深さ情報を表してお
り、C言語では“{”が出現する度に、1加算さ
れ、“}”で1減算される。第3引数では、プログラム
情報を表現しており、第4引数では、第3引数でプログ
ラム情報として関数、ループ、条件分岐情報が表現され
ているときのみ、その有効範囲が格納される。
【0039】前記モジュール分割部12は、制御フロー
グラフを用いることによって、ソースプログラムに対し
モジュール分割を行う。以下にアルゴリズムを示す。
グラフを用いることによって、ソースプログラムに対し
モジュール分割を行う。以下にアルゴリズムを示す。
【0040】(1)制御フローグラフを作成する(図2
参照)。 (2)制御フローグラフからバックアークを除く(図3
参照)。 (3)制御フローグラフをENTRYから辿り、複数
(n本)のアークが存在するブロックまでの集合をモジ
ュールPとし、そのアークを入力アークとするブロック
からEXITまでに辿るブロックの集合をそれぞれモジ
ュールCi(1≦i≦n)とする(図4参照)。 (4)EBG部14からの要求があれば、それぞれのモ
ジュールCiに対し、モジュールCiの先頭のブロックか
ら辿り、(3)と同様にモジュール分割を行う(図5参
照) (5)EBG部14からの要求があり、且つ、モジュー
ルを分割できなくなる(モジュール内に複数のアークを
持つブロックが存在しない)まで、(4)を繰り替す。
参照)。 (2)制御フローグラフからバックアークを除く(図3
参照)。 (3)制御フローグラフをENTRYから辿り、複数
(n本)のアークが存在するブロックまでの集合をモジ
ュールPとし、そのアークを入力アークとするブロック
からEXITまでに辿るブロックの集合をそれぞれモジ
ュールCi(1≦i≦n)とする(図4参照)。 (4)EBG部14からの要求があれば、それぞれのモ
ジュールCiに対し、モジュールCiの先頭のブロックか
ら辿り、(3)と同様にモジュール分割を行う(図5参
照) (5)EBG部14からの要求があり、且つ、モジュー
ルを分割できなくなる(モジュール内に複数のアークを
持つブロックが存在しない)まで、(4)を繰り替す。
【0041】(2)ではバックアークが除かれるが、本
実施形態では、プログラムの流れに対する変数情報は考
慮せず、ENTRYからEXITまでのブロックのつな
がりのみを基にモジュール分割を行う。従って、バック
アークが存在するブロック間ては、繰り返しは行われな
いものとする。
実施形態では、プログラムの流れに対する変数情報は考
慮せず、ENTRYからEXITまでのブロックのつな
がりのみを基にモジュール分割を行う。従って、バック
アークが存在するブロック間ては、繰り返しは行われな
いものとする。
【0042】本実施形態では、EBGの概念を、次のよ
うに設定する。
うに設定する。
【0043】目標概念:ソースプログラムに対する「コ
メント」であり、a(“コメント”,mdb)によって
表現される。ここで、mdbは、知識が格納されている
データベースの種類を表わしている。
メント」であり、a(“コメント”,mdb)によって
表現される。ここで、mdbは、知識が格納されている
データベースの種類を表わしている。
【0044】説明対象事例、訓練例:ソースプログラム
を変換したフレーム集合とする。
を変換したフレーム集合とする。
【0045】領域知識:ホーン節によって表現される。
ホーン節は目的・手段の関係を表現しており、ヘッド部
が目的、ボディ部が手段に対応する。
ホーン節は目的・手段の関係を表現しており、ヘッド部
が目的、ボディ部が手段に対応する。
【0046】操作性規範:説明木の葉(フレーム)の部
分とする。
分とする。
【0047】目標概念となるコメントは予め与えられて
いないため、領域知識から目標概念を選出する必要があ
る。領域知識の中から、証明が成功する知識のみ取り出
し、成功したn個の知識の中から、次の関係が成立する
a(Xi,mdb)を目標概念として、説明木の生成を
行う。
いないため、領域知識から目標概念を選出する必要があ
る。領域知識の中から、証明が成功する知識のみ取り出
し、成功したn個の知識の中から、次の関係が成立する
a(Xi,mdb)を目標概念として、説明木の生成を
行う。
【0048】
【数3】
【0049】このとき、領域知識が不足している場合
は、包含関係が成立しない知識の組合せが存在する。こ
の場合、包含関係が成立する知識同士で、最も葉が多い
知識を選択する。そして、選択された知識それぞれを目
標概念とする説明木を生成し、ユーザに複数の説明木の
根をつなぐ知識の追加を促す。
は、包含関係が成立しない知識の組合せが存在する。こ
の場合、包含関係が成立する知識同士で、最も葉が多い
知識を選択する。そして、選択された知識それぞれを目
標概念とする説明木を生成し、ユーザに複数の説明木の
根をつなぐ知識の追加を促す。
【0050】領域知識に曖昧性が含まれている場合、葉
の部分のみ異なる説明木が複数生成される。領域知識で
定義されている目的・手段の関係は、図6に示すよう
に、目的処理Aを実行するためには、手段処理B、処理
Cが必要であることが表現されている。従って、Pro
logでは、処理Bと処理Cの組合せの探索を行う。こ
の場合、組合せ1と組合せ2が存在するが、if文の文
法規則から、組合せ2は成立しない。よって、このよう
なPrologのマッチングを制約するために、モジュ
ール分割を行う。制御フローグラフは図7のようにな
り、図8に示すように、モジュール1とモジュール2に
分割される。それぞれのモジュールに対し、目的・手段
の関係を適用すると、モジュール1からは目的処理Aが
導出されるが、モジュール2からは目的処理Aは導出さ
れない。このように、説明木が一意に決定されない場
合、モジュール分割を行い、それぞれのモジュールに対
し、EBGを適用し、説明木生成を試みる。全てのモジ
ュールに対し、説明木が一意に決定された時、それぞれ
の説明木の根を説明対象事例として説明木をつなぎあわ
せることによって、プログラムの説明木を一意に生成す
ることができる。
の部分のみ異なる説明木が複数生成される。領域知識で
定義されている目的・手段の関係は、図6に示すよう
に、目的処理Aを実行するためには、手段処理B、処理
Cが必要であることが表現されている。従って、Pro
logでは、処理Bと処理Cの組合せの探索を行う。こ
の場合、組合せ1と組合せ2が存在するが、if文の文
法規則から、組合せ2は成立しない。よって、このよう
なPrologのマッチングを制約するために、モジュ
ール分割を行う。制御フローグラフは図7のようにな
り、図8に示すように、モジュール1とモジュール2に
分割される。それぞれのモジュールに対し、目的・手段
の関係を適用すると、モジュール1からは目的処理Aが
導出されるが、モジュール2からは目的処理Aは導出さ
れない。このように、説明木が一意に決定されない場
合、モジュール分割を行い、それぞれのモジュールに対
し、EBGを適用し、説明木生成を試みる。全てのモジ
ュールに対し、説明木が一意に決定された時、それぞれ
の説明木の根を説明対象事例として説明木をつなぎあわ
せることによって、プログラムの説明木を一意に生成す
ることができる。
【0051】本実施形態では、領域知識を格納するため
に、前記データベース部20で、メインデータベースm
dbとサブデータベースsdbの2つのデータベースを
用いる。あるコメントに対する領域知識が1つしか存在
しない場合には、mdbに格納する。複数存在する場合
は、同じコメントに対し、領域が最も広い領域知識をm
dbに格納し、他の領域知識はsdbに格納する。
に、前記データベース部20で、メインデータベースm
dbとサブデータベースsdbの2つのデータベースを
用いる。あるコメントに対する領域知識が1つしか存在
しない場合には、mdbに格納する。複数存在する場合
は、同じコメントに対し、領域が最も広い領域知識をm
dbに格納し、他の領域知識はsdbに格納する。
【0052】前記説明木生成部18では、まず、mdb
の知識のみを用いて、プログラムの最も基本的な説明を
表わす説明木を生成する。そして、必要に応じて(ユー
ザからの要求に応じて)更に詳しいsdbの知識を用い
た説明木の生成を行う。2つのデータベースを用いる利
点としては、mdbで、1つのコメントに対し1つの知
識に限定することによって、同じコメントに対する複数
の説明木が生成された場合、コメント同士(説明木の葉
より上位)のつながりが一意に決定され、原因を説明木
の葉の部分に限定できることにある。これは、モジュー
ル分割を行うことによって解決される。更に、変数や関
数に関する情報を格納するためのデータベースを用意す
ることができる。変数データベースには、変数に付けら
れている固有の意味を格納する。1つの変数に複数の意
味が登録される場合もある。関数データベースには、関
数固有の意味、引数情報等が格納される。
の知識のみを用いて、プログラムの最も基本的な説明を
表わす説明木を生成する。そして、必要に応じて(ユー
ザからの要求に応じて)更に詳しいsdbの知識を用い
た説明木の生成を行う。2つのデータベースを用いる利
点としては、mdbで、1つのコメントに対し1つの知
識に限定することによって、同じコメントに対する複数
の説明木が生成された場合、コメント同士(説明木の葉
より上位)のつながりが一意に決定され、原因を説明木
の葉の部分に限定できることにある。これは、モジュー
ル分割を行うことによって解決される。更に、変数や関
数に関する情報を格納するためのデータベースを用意す
ることができる。変数データベースには、変数に付けら
れている固有の意味を格納する。1つの変数に複数の意
味が登録される場合もある。関数データベースには、関
数固有の意味、引数情報等が格納される。
【0053】以下、初期データベースの作成方法を示
し、領域知識の獲得方法について定義する。
し、領域知識の獲得方法について定義する。
【0054】プログラムモジュールの意味は、ソースコ
ードに含まれる情報からは得られない。一方、大量のソ
ースコードを使用している部署では、ファイル名、関数
名、識別子名を統一し、その意味を定めておくのが通例
である。そこで、これらの統一名称と、その意味を、断
片的な領域知識として初期データベースに登録する。更
に、機能仕様書とコメントのついたサンプルプログラム
を入手する。木構造で表現された機能仕様書の各部分木
は、目的−手段の関係に読み替えることが可能であり、
次に示す知識のコーディング方法に従って、データベー
スに登録することが可能である。
ードに含まれる情報からは得られない。一方、大量のソ
ースコードを使用している部署では、ファイル名、関数
名、識別子名を統一し、その意味を定めておくのが通例
である。そこで、これらの統一名称と、その意味を、断
片的な領域知識として初期データベースに登録する。更
に、機能仕様書とコメントのついたサンプルプログラム
を入手する。木構造で表現された機能仕様書の各部分木
は、目的−手段の関係に読み替えることが可能であり、
次に示す知識のコーディング方法に従って、データベー
スに登録することが可能である。
【0055】本実施形態では、領域知識の追加には、次
の2つの場合が考えられる。
の2つの場合が考えられる。
【0056】(1)領域知識不足の場合 (2)コメントに対するソースプログラムの領域が不十
分な場合
分な場合
【0057】(1)の領域知識不足の場合、説明木が生
成されなかったり、不完全な説明木が生成される。ここ
で用いる不完全な説明木とは、1つのプログラムに対し
て、複数の説明木が生成される場合を指す。1つのプロ
グラムで全くつながりのない処理を複数行っている場
合、複数の説明木が生成されるが、通常1つのプログラ
ムでは複数の処理のつながりによって、1つのより大き
な処理を行っていると考えられる。よって、複数の説明
木が生成された場合、領域知識不足とみなし、システム
が領域知識の追加を要求する。
成されなかったり、不完全な説明木が生成される。ここ
で用いる不完全な説明木とは、1つのプログラムに対し
て、複数の説明木が生成される場合を指す。1つのプロ
グラムで全くつながりのない処理を複数行っている場
合、複数の説明木が生成されるが、通常1つのプログラ
ムでは複数の処理のつながりによって、1つのより大き
な処理を行っていると考えられる。よって、複数の説明
木が生成された場合、領域知識不足とみなし、システム
が領域知識の追加を要求する。
【0058】(2)のコメントに対するソースプログラ
ムの領域が不十分な場合は、説明対象事例に対し、十分
な説明木を生成することができない。よって、同じコメ
ントに対し、異なる領域の知識を複数登録することによ
って、柔軟性を増やし、より葉が多い(詳しい)説明木
を生成することができる。
ムの領域が不十分な場合は、説明対象事例に対し、十分
な説明木を生成することができない。よって、同じコメ
ントに対し、異なる領域の知識を複数登録することによ
って、柔軟性を増やし、より葉が多い(詳しい)説明木
を生成することができる。
【0059】以下、領域知識追加アルゴリズムについて
説明する。
説明する。
【0060】領域知識の追加は、説明木から、全てのfr
ame(Zi)を除いた説明木構造(図9参照)を保持しな
がら行われる。これは、無限ループを回避するためであ
る(図10参照)。
ame(Zi)を除いた説明木構造(図9参照)を保持しな
がら行われる。これは、無限ループを回避するためであ
る(図10参照)。
【0061】(1)新しい知識a(X,new)と同じ
コメントの知識がmdbに存在しないなら(2)へ、存
在する場合は(3)へ進む。
コメントの知識がmdbに存在しないなら(2)へ、存
在する場合は(3)へ進む。
【0062】(2)知識a(X,new)を知識a
(X,mdb)とし、mdbに格納する。
(X,mdb)とし、mdbに格納する。
【0063】(3)知識a(X,mdb)の説明木にお
ける1つ上位(より根の方向)の知識を知識a(Xr,
mdb)とし、a(X,new)と知識a(X′,md
b)、更に知識a(Xr,mdb)の関係を調べる。知
識a(Xr,mdb)が知識a(X,new)に包含さ
れ、この知識a(X,new)が知識a(X′,md
b)に包含されれば(4)へ進み、そうでなければ、説
明木構造は崩れてしまうため、知識追加は行わない。
ける1つ上位(より根の方向)の知識を知識a(Xr,
mdb)とし、a(X,new)と知識a(X′,md
b)、更に知識a(Xr,mdb)の関係を調べる。知
識a(Xr,mdb)が知識a(X,new)に包含さ
れ、この知識a(X,new)が知識a(X′,md
b)に包含されれば(4)へ進み、そうでなければ、説
明木構造は崩れてしまうため、知識追加は行わない。
【0064】(4)知識a(X,new)と知識a
(X,mdb)の関係を調べる。図11より、以下の3
つの場合分けが行われる。ここで、X1、X2、X3、
X4には、全て同じコメントXが入る。
(X,mdb)の関係を調べる。図11より、以下の3
つの場合分けが行われる。ここで、X1、X2、X3、
X4には、全て同じコメントXが入る。
【0065】S1:両知識のボディ部に存在する句の集
合が斜線部となる。この場合、斜線部に含まれる句をボ
ディ部とする知識をmdbに追加し、知識a(X1,m
db)を知識a(X1,sdb)に変換し、mdbから
sdbに移す。更に、知識a(X2,new)を知識a
(X2,sdb)に変換し、sdbに追加する。
合が斜線部となる。この場合、斜線部に含まれる句をボ
ディ部とする知識をmdbに追加し、知識a(X1,m
db)を知識a(X1,sdb)に変換し、mdbから
sdbに移す。更に、知識a(X2,new)を知識a
(X2,sdb)に変換し、sdbに追加する。
【0066】S2:知識a(X3,new)が知識a
(X1,mdb)に包含される場合、知識a(X3,n
ew)を知識a(X3,sdb)に変換し、sdbに格
納する。
(X1,mdb)に包含される場合、知識a(X3,n
ew)を知識a(X3,sdb)に変換し、sdbに格
納する。
【0067】S3:知識a(X1,mdb)が知識a
(X4,new)に包含される場合、知識a(X1,m
db)を知識a(X1,sdb)に変換し、mdbから
sdbに移し、知識a(X4,new)を知識a(X
4,mdb)に変換し、mdbに格納する。
(X4,new)に包含される場合、知識a(X1,m
db)を知識a(X1,sdb)に変換し、mdbから
sdbに移し、知識a(X4,new)を知識a(X
4,mdb)に変換し、mdbに格納する。
【0068】上記アルゴリズム(1)、(2)では、領
域知識不足の場合における知識追加を行い、(3)以下
では、コメントに対するソースプログラムの領域を変更
し、候補となる場合の知識追加を行っている。(3)で
は、あるコメントに対する他の領域候補を登録すること
によって、コメントのみの(frame(Z)の全てを除い
た)説明木構造が崩れないようにしている。更に(4)
では、同じコメントの中で、範囲が最も広い知識をmd
bに登録する。よって、sdb中の知識の証明が成功す
るとき、同じコメントに対応するmdb中の知識の証明
も必ず成功する。
域知識不足の場合における知識追加を行い、(3)以下
では、コメントに対するソースプログラムの領域を変更
し、候補となる場合の知識追加を行っている。(3)で
は、あるコメントに対する他の領域候補を登録すること
によって、コメントのみの(frame(Z)の全てを除い
た)説明木構造が崩れないようにしている。更に(4)
では、同じコメントの中で、範囲が最も広い知識をmd
bに登録する。よって、sdb中の知識の証明が成功す
るとき、同じコメントに対応するmdb中の知識の証明
も必ず成功する。
【0069】又、図12に示すように、追加される知識
は、領域知識の知識構造に含まれていない。よって、図
13に示すように、追加される知識を階層化し、領域知
識に登録する必要がある。
は、領域知識の知識構造に含まれていない。よって、図
13に示すように、追加される知識を階層化し、領域知
識に登録する必要がある。
【0070】以下に、知識階層化アルゴリズムを示す。
【0071】(1)新しく登録された知識a(X,md
b)と、他の領域知識との包含関係を調べ、知識a
(X,mdb)に対し、領域が狭い知識を選び、その中
から最も領域が広い知識a(Yi,mdb)を選び出
す。
b)と、他の領域知識との包含関係を調べ、知識a
(X,mdb)に対し、領域が狭い知識を選び、その中
から最も領域が広い知識a(Yi,mdb)を選び出
す。
【0072】(2)知識a(Yi,mdb)のボディ部
から、知識a(X,mdb)と同じ領域部分を削除し、
知識a(X,mdb)を加える。
から、知識a(X,mdb)と同じ領域部分を削除し、
知識a(X,mdb)を加える。
【0073】(3)新しく登録された知識a(X,md
b)と、他の領域知識との包含関係を調べ、知識a
(X,mdb)に対して、領域が広い知識を選び、その
中から最も領域が狭い知識a(Zj,mdb)を選び出
す。
b)と、他の領域知識との包含関係を調べ、知識a
(X,mdb)に対して、領域が広い知識を選び、その
中から最も領域が狭い知識a(Zj,mdb)を選び出
す。
【0074】(4)知識a(X,mdb)のボディ部か
ら、知識a(Zj,mdb)と同じ領域部分を削除し、
その知識a(X,mdb)を加える。
ら、知識a(Zj,mdb)と同じ領域部分を削除し、
その知識a(X,mdb)を加える。
【0075】包含関係が成立しない場合、成立する知識
同士、最も広い、もしくは、最も狭い知識を選び出す。
ここで、図12を用いてアルゴリズムの説明を行う。
(1)では、新しい知識a(処理C,mdb)に対し、
知識a(処理B,mdb)が選ばれる。(2)では、 a(処理B,mdb):-a(処理D,mdb),frame
(3),frame(4).のボディ部から知識a(処理C,
mdb)と同じ領域部分を削除し、 a(処理B,mdb):-frame(4).a(処理C,md
b)を追加する a(処理B,mdb):-a(処理C,mdb),frame
(4).
同士、最も広い、もしくは、最も狭い知識を選び出す。
ここで、図12を用いてアルゴリズムの説明を行う。
(1)では、新しい知識a(処理C,mdb)に対し、
知識a(処理B,mdb)が選ばれる。(2)では、 a(処理B,mdb):-a(処理D,mdb),frame
(3),frame(4).のボディ部から知識a(処理C,
mdb)と同じ領域部分を削除し、 a(処理B,mdb):-frame(4).a(処理C,md
b)を追加する a(処理B,mdb):-a(処理C,mdb),frame
(4).
【0076】(3)、(4)についても同様にし、生成
された構造は図13のようになる。
された構造は図13のようになる。
【0077】知識獲得は、解析対象となるプログラムか
ら複数の文を選択し、選択された文にコメントを付ける
ことによって行われる。そのため、獲得された知識の変
数は特殊化されており、他のプログラムへの適用は困難
となる。よって、関数の働きを決定するような引数は特
殊化を行い、計算結果が代入される引数等、関数の働き
には直接関係ない引数は変数に置き換えることによって
一般化を行う。引数の情報は、関数データベースを参照
することによって得られる。
ら複数の文を選択し、選択された文にコメントを付ける
ことによって行われる。そのため、獲得された知識の変
数は特殊化されており、他のプログラムへの適用は困難
となる。よって、関数の働きを決定するような引数は特
殊化を行い、計算結果が代入される引数等、関数の働き
には直接関係ない引数は変数に置き換えることによって
一般化を行う。引数の情報は、関数データベースを参照
することによって得られる。
【0078】前記ユーザインターフェース部22は、例
えばプログラム言語tcl/tkで実装されており、E
BG部14を実装しているPrologプログラムから
動的に呼び出される。このユーザインターフェース部2
2では、EBG部14で生成された説明木構造を視覚的
に分かり易く表示する。更に、領域知識の追加、削除
は、このユーザインターフェース部22を介して行わ
れ、知識追加の場合、ユーザ24は、追加したい知識の
コメントを入力し、コメントに対応するプログラムの領
域を選択するだけで、知識の追加が行われる。
えばプログラム言語tcl/tkで実装されており、E
BG部14を実装しているPrologプログラムから
動的に呼び出される。このユーザインターフェース部2
2では、EBG部14で生成された説明木構造を視覚的
に分かり易く表示する。更に、領域知識の追加、削除
は、このユーザインターフェース部22を介して行わ
れ、知識追加の場合、ユーザ24は、追加したい知識の
コメントを入力し、コメントに対応するプログラムの領
域を選択するだけで、知識の追加が行われる。
【0079】次に、本発明の具体的な構成例である第2
実施形態について説明する。
実施形態について説明する。
【0080】本実施形態に係る知識処理アプローチによ
るソフトウエア開発・保守支援装置30は、図14に示
す如く、ソースプログラム8を解析し、その意味を理解
して、Prolog推論により知識要素を選んで組み合
わせることにより、コメント文40を生成するための、
第1実施形態のフレーム生成部10、モジュール分割部
12及びEBG部14のデータベース部20及び学習機
構を除く構成に対応する文生成機構32と、前記データ
ベース部20に対応するプログラム、コメント等の断片
的な知識要素を集めた知識集合である辞書34と、前記
Prolog推論用の知識要素を拡張するための、ユー
ザからの修正要求に駆動される学習機構36と、前記ユ
ーザインターフェース部22に対応するユーザインター
フェース部38とを含んで構成されている。
るソフトウエア開発・保守支援装置30は、図14に示
す如く、ソースプログラム8を解析し、その意味を理解
して、Prolog推論により知識要素を選んで組み合
わせることにより、コメント文40を生成するための、
第1実施形態のフレーム生成部10、モジュール分割部
12及びEBG部14のデータベース部20及び学習機
構を除く構成に対応する文生成機構32と、前記データ
ベース部20に対応するプログラム、コメント等の断片
的な知識要素を集めた知識集合である辞書34と、前記
Prolog推論用の知識要素を拡張するための、ユー
ザからの修正要求に駆動される学習機構36と、前記ユ
ーザインターフェース部22に対応するユーザインター
フェース部38とを含んで構成されている。
【0081】以下、ある任意のタイミングでの本実施形
態の代表的な基本動作を説明する。
態の代表的な基本動作を説明する。
【0082】まず、変換前のソースプログラム8を、外
部から、前記文生成機構32により読み出し、前記辞書
34を用いて変換し、変換可能であればコメント文40
を生成する。前記辞書34は、ユーザインターフェース
部38を用いて、事前に内部データを作成しておく。
部から、前記文生成機構32により読み出し、前記辞書
34を用いて変換し、変換可能であればコメント文40
を生成する。前記辞書34は、ユーザインターフェース
部38を用いて、事前に内部データを作成しておく。
【0083】変換ができない場合には、ユーザインター
フェース部38を用いて、人手により教師情報を入力す
る。そして、教師情報を繰り返し利用するために、前記
学習機構32により学習する。
フェース部38を用いて、人手により教師情報を入力す
る。そして、教師情報を繰り返し利用するために、前記
学習機構32により学習する。
【0084】以上を繰り返すことにより、プログラム全
体として変換し、プログラムモジュールの意味をコメン
ト文として生成して、人に提示するというアプローチで
支援して、計算機保守を効率化する。
体として変換し、プログラムモジュールの意味をコメン
ト文として生成して、人に提示するというアプローチで
支援して、計算機保守を効率化する。
【0085】
【実施例】図14にて、ソースプログラム8に対して、
辞書34内のフレーム及びソフト断片知識を用いて、文
生成機構32によりフレーム知識を自動変換したとこ
ろ、良好な変換結果を得ることができた。
辞書34内のフレーム及びソフト断片知識を用いて、文
生成機構32によりフレーム知識を自動変換したとこ
ろ、良好な変換結果を得ることができた。
【0086】
【発明の効果】本発明によれば、内容不明なシステムに
ついて、労力をかけることなく、プログラムレベルで構
造や機能等の基本的な理解が可能となる。又、コンピュ
ータソフトウェアの保守、改良又は新規開発作業におい
て、解説書作成時に大幅な労力軽減を図ることができ
る。
ついて、労力をかけることなく、プログラムレベルで構
造や機能等の基本的な理解が可能となる。又、コンピュ
ータソフトウェアの保守、改良又は新規開発作業におい
て、解説書作成時に大幅な労力軽減を図ることができ
る。
【0087】逆に、人手を介して知識ベース(プログラ
ム部品群)を用いることで、プログラムを効率的に作成
することもできる。
ム部品群)を用いることで、プログラムを効率的に作成
することもできる。
【図面の簡単な説明】
【図1】本発明の動作を中心とする主要な構成を示す第
1実施形態の線図
1実施形態の線図
【図2】第1実施形態のモジュール分割部により作成さ
れた制御フローグラフの例を示す線図
れた制御フローグラフの例を示す線図
【図3】図2の制御フローグラフからバックアークを除
いた状態を示す線図
いた状態を示す線図
【図4】図3の制御フローグラフをモジュール化した状
態を示す線図
態を示す線図
【図5】図4に従ってモジュール分割した状態を示す線
図
図
【図6】第1実施形態におけるPrologのマッチン
グの例を示す線図
グの例を示す線図
【図7】図6のマッチングを制約するためにモジュール
分割を行った時の制御フローグラフを示す線図
分割を行った時の制御フローグラフを示す線図
【図8】同じく分割後のモジュール状態を示す線図
【図9】第1実施形態におけるフレームを除いた説明木
構造の例を示す線図
構造の例を示す線図
【図10】同じく無限ループが存在する知識の例を示す
線図
線図
【図11】同じく領域知識追加アルゴリズムで場合分け
した状態を示す線図
した状態を示す線図
【図12】同じく階層化されていない知識構造の例を示
す線図
す線図
【図13】同じく階層化が行われた知識構造の例を示す
線図
線図
【図14】本発明の第2実施形態の構成例を示すブロッ
ク線図
ク線図
8…ソースプログラム 10…フレーム生成部 12…モジュール分割部 14…説明による一般化(EBG)部 16…コメント生成部 18…説明木生成部 20…データベース部 22、38…ユーザインターフェース部 24…ユーザ 30…ソフトウエア開発・保守支援装置 32…文生成機構 34…辞書 36…学習機構 40…コメント文
Claims (6)
- 【請求項1】コンピュータプログラムの内容を表わすコ
メント文を生成するに際して、 プログラムのソースコードを読み出し、 該ソースコードの意味を解析して推論し、 対応するコメント文がモジュール毎に蓄積された辞書と
対照し、 対応するコメント文を選択して組合せることにより、コ
メント文を自動的に生成することを特徴とするコンピュ
ータプログラムのコメント文生成方法。 - 【請求項2】請求項1において、前記辞書に蓄積された
情報が不足して、適切なコメント文を選択できない場合
は、適切なコメント文を学習し、教師情報として辞書に
追加することを特徴とするコンピュータプログラムのコ
メント文生成方法。 - 【請求項3】請求項1又は2において、前記ソースコー
ドの意味の解析を、Prolog推論の手法により行う
ことを特徴とするコンピュータプログラムのコメント文
生成方法。 - 【請求項4】コンピュータプログラムの内容を表わすコ
メント文を生成する装置において、 プログラムのソースコードに対応するコメント文が、モ
ジュール毎に蓄積された辞書と、 プログラムのソースコードを読み出す手段と、 読み出されたソースコードの意味を解析して推論し、モ
ジュール毎に辞書と対照して、対応するコメント文を選
択して組合せる手段と、 を備えたことを特徴とするコンピュータプログラムのコ
メント文生成装置。 - 【請求項5】請求項4において、更に、前記辞書に蓄積
された情報が不足して、適切なコメント文を選択できな
い場合は、適切なコメント文を学習し、教師情報として
辞書に追加する学習手段を備えたことを特徴とするコン
ピュータプログラムのコメント文生成装置。 - 【請求項6】請求項4又は5において、前記ソースコー
ドの意味の解析が、Prolog推論の手法により行わ
れることを特徴とするコンピュータプログラムのコメン
ト文生成装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11176914A JP2001005650A (ja) | 1999-06-23 | 1999-06-23 | コンピュータプログラムのコメント文生成方法及び装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11176914A JP2001005650A (ja) | 1999-06-23 | 1999-06-23 | コンピュータプログラムのコメント文生成方法及び装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2001005650A true JP2001005650A (ja) | 2001-01-12 |
Family
ID=16021977
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP11176914A Pending JP2001005650A (ja) | 1999-06-23 | 1999-06-23 | コンピュータプログラムのコメント文生成方法及び装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2001005650A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109799990A (zh) * | 2017-11-16 | 2019-05-24 | 中标软件有限公司 | 源代码注释自动生成方法及系统 |
CN113076133A (zh) * | 2021-04-25 | 2021-07-06 | 南京大学 | 基于深度学习的Java程序内部注释的生成方法及系统 |
-
1999
- 1999-06-23 JP JP11176914A patent/JP2001005650A/ja active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109799990A (zh) * | 2017-11-16 | 2019-05-24 | 中标软件有限公司 | 源代码注释自动生成方法及系统 |
CN109799990B (zh) * | 2017-11-16 | 2022-02-11 | 中标软件有限公司 | 源代码注释自动生成方法及系统 |
CN113076133A (zh) * | 2021-04-25 | 2021-07-06 | 南京大学 | 基于深度学习的Java程序内部注释的生成方法及系统 |
CN113076133B (zh) * | 2021-04-25 | 2023-09-26 | 南京大学 | 基于深度学习的Java程序内部注释的生成方法及系统 |
US12106095B2 (en) | 2021-04-25 | 2024-10-01 | Nanjing University | Deep learning-based java program internal annotation generation method and system |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10831449B2 (en) | Process and system for automatic generation of functional architecture documents and software design and analysis specification documents from natural language | |
US10303441B2 (en) | Process and system for automatic generation of functional architecture documents and software design and analysis specification documents from natural language | |
Van den Brand et al. | Disambiguation filters for scannerless generalized LR parsers | |
Del Fabro et al. | Semi-automatic model integration using matching transformations and weaving models | |
Van den Brand et al. | Generation of components for software renovation factories from context-free grammars | |
US5321608A (en) | Method and system for processing natural language | |
US5848385A (en) | Machine translation system using well formed substructures | |
CN107515887B (zh) | 一种适用于多种大数据管理系统的交互式查询方法 | |
US5555169A (en) | Computer system and method for converting a conversational statement to computer command language | |
JPH06110701A (ja) | コンピユータ・プログラム言語変換装置及びその方法 | |
US20220245353A1 (en) | System and method for entity labeling in a natural language understanding (nlu) framework | |
US20220245361A1 (en) | System and method for managing and optimizing lookup source templates in a natural language understanding (nlu) framework | |
Paige | Viewing a program transformation system at work | |
CN111831624A (zh) | 数据表创建方法、装置、计算机设备及存储介质 | |
Bais et al. | A model of a generic natural language interface for querying database | |
Videira et al. | A linguistic patterns approach for requirements specification | |
EP3977261A1 (en) | Process and system for automatic generation of functional architecture documents and software design and analysis specification documents from natural language | |
CN115935943A (zh) | 一种支持自然语言结构计算的分析框架 | |
US20220245352A1 (en) | Ensemble scoring system for a natural language understanding (nlu) framework | |
Rudolph | Acquiring generalized domain-range restrictions | |
US20220229986A1 (en) | System and method for compiling and using taxonomy lookup sources in a natural language understanding (nlu) framework | |
US20220229990A1 (en) | System and method for lookup source segmentation scoring in a natural language understanding (nlu) framework | |
JP2001005650A (ja) | コンピュータプログラムのコメント文生成方法及び装置 | |
JPH0765022A (ja) | 質問回答方法および装置 | |
Nan et al. | Enabling near real-time nlu-driven natural language programming through dynamic grammar graph-based translation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20041130 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050128 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20050524 |