JP2003228499A - 構成要素分類方法、実装多重度評価方法、実装多重コード抽出方法、同時変更対象箇所抽出方法、クラス階層再構成方法、およびプログラム - Google Patents

構成要素分類方法、実装多重度評価方法、実装多重コード抽出方法、同時変更対象箇所抽出方法、クラス階層再構成方法、およびプログラム

Info

Publication number
JP2003228499A
JP2003228499A JP2002027172A JP2002027172A JP2003228499A JP 2003228499 A JP2003228499 A JP 2003228499A JP 2002027172 A JP2002027172 A JP 2002027172A JP 2002027172 A JP2002027172 A JP 2002027172A JP 2003228499 A JP2003228499 A JP 2003228499A
Authority
JP
Japan
Prior art keywords
multiplicity
component
tree
mounting
program
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
JP2002027172A
Other languages
English (en)
Inventor
Takeo Imai
健男 今井
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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2002027172A priority Critical patent/JP2003228499A/ja
Priority to US10/356,540 priority patent/US7228530B2/en
Publication of JP2003228499A publication Critical patent/JP2003228499A/ja
Priority to US11/745,225 priority patent/US7886274B2/en
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation

Abstract

(57)【要約】 【課題】 プログラムを構成する各構成要素間の比較指
標値を用いて、プログラム中の実装多重度を定量的に容
易に評価可能とし、実装多重なコードを効率的かつ確実
に抽出可能とし、実装多重度の定量的な評価に基づいて
プログラムにおける同時変更が必要な箇所を効率的かつ
確実に抽出可能とする。 【解決手段】 ツリーTが入力されると(S501)、
ツリーTによって表現されるプログラムPに対する実装
多重度m(P)の初期値を0とし、節NとしてツリーTの
頂点を選択する(S502)。選択した節Nについて、
その節が持つ「類似度」と「子の数」という属性情報を
取得して所定の演算を行い、得られる値αを実装多重度
m(P)に加える(S503)。所定の演算を、ツリーT
中の全ての節に対して行う(S504のYES、S50
5)ことにより、全ての節に対する値αの総和を含む実
装多重度m(P)が得られる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プログラム中に同
様の機能が分散して複数実装されている場合に、その機
能がどれだけ重複しているかを示す実装多重度を定量的
に評価する実装多重度評価方法、および重複しているコ
ードを抽出する実装多重コード抽出方法に関するもので
ある。
【0002】
【従来の技術】ソフトウェアを開発する際、類似した機
能を持つ部分がプログラムの設計全体に分散して発見さ
れることがある。このような状況においても、ソフトウ
ェア開発者が、そのような類似機能の分散に気づかずに
そのままプログラミングを進めたり、あるいは気づいた
としても、時間的なコスト等を節約するるために、以前
実装したプログラムコードを複製したりすることによ
り、結果的に同様の機能を果たすコードが、プログラム
中に分散して多数実装されてしまうことがある。
【0003】しかしながら、ある機能を果たすコードに
対して、同様の機能を果たしながら他の箇所に重複して
実装されているコード(実装多重なコード)が存在する
場合に、この重複したコードの果たす機能を変更しよう
とすると、実装多重なコードを全て修正しなければなら
ない可能性が生じる。同時に修正すべきコード部分が多
数存在すると、修正すべき箇所の発見にかかるコストが
増大する上、発見漏れを発生する可能性が高まる。発見
漏れが発生すると、発見できなかった箇所がソフトウェ
ア開発者の意図に合わない挙動を起こし、その結果、そ
の不具合を解消するために新たな変更を行う手間が必要
となり、さらにコストが増大する。
【0004】このように、実装多重なコードの存在は、
ソフトウェアの変更に関連するソフトウェア保守のコス
トに大きく影響する。しかも、あるコード部分に対して
実装多重なコードの集合を取った場合、その集合の大き
さが大きければ大きいほど、保守のコストに及ぼす影響
は大きい。
【0005】従来、実装多重なコードを発見するための
技術としては、プログラムあるいは2つのコード部分が
どれだけ類似しているかを比較指標(類似度)を用いて
評価する技術(特開平8−241193号公報等)や、
予めしきい値を設定しておき、類似度がしきい値以上で
あるものを実装多重なコードと判定する技術(特開20
01−125783号公報等)が存在している。
【0006】一方、オブジェクト指向言語によってソフ
トウェアの設計を行う際に、複数のクラス間で同様の機
能を持つ場合には、「汎化」という作業を行って新たな
クラスを作成し、そこに共通機能を括り出している。こ
の汎化作業を行うことにより、(1)共通機能を修正す
る際に、共通化クラスの修正だけで済み、修正にかかる
コストを削減できる、(2)同様に共通機能を持った派
生クラスを新たに作成する際に作業が簡便になる、等の
メリットが得られる。この場合、元来のクラスは共通化
したクラスから派生したクラスと定義する。これらの作
業により、クラス定義の一部は階層的な構成をなす。
【0007】
【発明が解決しようとする課題】しかしながら、上記の
ような従来技術を用いた場合、実装多重なコードを発見
できたとしても、実装多重なコードに関する定量的な保
守性評価を実現することはできないため、定量的な評価
に基づいてプログラムの変更部分を効率的に選択するこ
とはできない。この点について以下に説明する。
【0008】まず、実装多重なコードを発見するために
類似度を用いた前記手法は、1つのコードに類似する実
装多重なコードを個別に発見することはできても、多数
の実装多重なコードが存在する場合に、その実装多重度
を定量的に評価できるものではないため、実装多重なコ
ードの存在に起因する保守コストの大きさを定量的に評
価できるものではない。
【0009】また、しきい値を用いた前記手法の場合、
得られる結果がしきい値の設定の仕方に大きく依存する
ことになる上、所定のしきい値に対して得られる結果は
一律であり、ある特定の変更を加える際に特化した実装
多重コードを検出できないという問題がある。
【0010】一方、統計学的手法として、要素間の類似
度から、よく似た特徴を持つ要素同士をグループ分けす
る階層的クラスター分析(HCA)という手法(特開2
001−92841号公報等)が存在している。この階
層的クラスター分析手法は、各種のアンケート結果の分
析手法(特開2001−184405号公報等)として
広く用いられている他、監視対象の状態データの分析
(特開平09−093665号公報等)や、ネットワー
ク上でリンク付けされた多数の電子文書の分類(特開平
10−027125号公報等)に応用される等、各種の
分野で幅広く使用されている。
【0011】しかしながら、この階層的クラスター分析
手法は、対象となる多数のデータを複数のグループに階
層的に分類して各グループの特徴を把握するための手法
であり、その分類結果からさらに、1つの指標値を導き
出して全体の傾向を評価したり、その指標値に大きく寄
与しているグループを特定する等の目的では使用されて
いない。
【0012】また、オブジェクト指向言語で開発された
プログラムの場合、前述したように、設計段階において
複数のクラス間で共通機能を持つ場合には、汎化の作業
を行って共通化クラスを作成して共通機能を括り出し、
元のクラスを派生クラスと定義している。しかしなが
ら、実際にオブジェクト指向言語によるプログラムの実
装を施した段階で、設計段階では見つからなかった共通
機能が発見されることがある。このような場合に、前述
したようなメリットを得るためには、共通機能に対して
再び汎化の作業を行う必要があり、実装後の作業が増大
してしまう。
【0013】本発明は、上記した従来の問題点を解消す
るためになされたものであり、その目的は、しきい値等
を使用せずに、プログラムを構成する各構成要素間の比
較指標値を用いて、プログラム中の実装多重度を定量的
に容易に評価可能な実装多重度見積方法、実装多重なコ
ードを効率的かつ確実に抽出可能な実装多重コード抽出
方法、および実装多重度の定量的な評価に基づいてプロ
グラムにおける同時変更が必要な箇所を効率的かつ確実
に抽出可能な同時変更対象箇所抽出方法、を提供するこ
とである。
【0014】本発明の別の目的は、プログラム中の実装
多重度を定量的に評価可能とするために、プログラムの
構成要素を、実装多重度を反映した理解しやすい構造に
分類可能な構成要素分類方法を提供することである。本
発明のさらに別の目的は、オブジェクト指向言語で記述
されたプログラム中から、実装多重なコードを持つクラ
ス定義群を効率的かつ確実に抽出して、クラス階層を適
切に再構成可能なクラス階層再構成方法を提供すること
である。
【0015】
【課題を解決するための手段】上記目的を達成するため
に、本発明は、ソースプログラムの構成要素群に対し
て、構成要素間の比較指標値とそれを反映させたツリー
状の階層構造とを用いることにより、しきい値等を使用
せずに、プログラムを構成する各構成要素間の類似度を
用いて、プログラム中の実装多重度を定量的に評価可能
とし、実装多重なコードを効率的に抽出可能とし、さら
に、定量的な評価に基づいてプログラムにおける同時変
更が必要な箇所を効率的に抽出可能としたものである。
【0016】なお、本発明において重要な用語の定義は
次の通りである。「構成要素」は、ソースプログラムを
処理する場合の処理単位となるような、1行以上の命令
の列を示しており、例えば、プログラム中の関数や手
続、オブジェクト指向言語におけるクラス定義等であ
る。「比較指標値」は、構成要素間の類似度を表現する
値であるが、階層的クラスター分析手法において使用さ
れるような類似度を含まない樹形図においては、樹形図
中の「各節の高さ」により表現できる。
【0017】請求項1の発明は、コンピュータを利用し
て、ソースプログラムの構成要素を分類する構成要素分
類方法において、構成要素解析ステップ、構成要素比較
ステップ、構成要素分類ステップを含むことを特徴とし
ている。ここで、構成要素解析ステップは、ソースプロ
グラムのソースコードを構成要素に分割して構成要素群
を抽出するステップであり、構成要素比較ステップは、
抽出された構成要素群から各2つの構成要素を比較して
その2構成要素間の比較指標値を求めるステップであ
る。また、構成要素分類ステップは、抽出された構成要
素群と、それに対して得られた各2構成要素間の比較指
標値とに基づいて、その構成要素群を、構成要素間の比
較指標値、各節が持つ子の数、各節が持つ葉の数、とい
う3種類の情報を各節が保持するツリー状の階層構造に
分類するステップである。この方法によれば、プログラ
ムの構成要素を、実装多重度を反映した理解しやすいツ
リー状の階層構造に分類することができるため、プログ
ラム中の実装多重度の定量的な評価の実現に貢献でき
る。
【0018】請求項2の発明は、請求項1の構成要素分
類方法においてさらに、構成要素比較ステップにおいて
は、抽出された構成要素群に対して得られた各2構成要
素間の比較指標値を段階的にグループ化し、構成要素分
類ステップにおいては、グループ化された比較指標値の
各段階に応じた各階層からなる階層構造に分類する、こ
とを特徴としている。この方法によれば、比較指標値を
グループ化する段階の数に応じて、階層構造の階層の数
を自由に調整できる。特に、グループ化する段階の数を
ある程度制限することにより、類似度の近い構成要素の
集合を大きくまとめることができるため、その集合を容
易に把握可能となり、実装多重度の定量的な評価が容易
になる。
【0019】請求項3の発明は、コンピュータを利用し
て、ソースプログラム中の実装多重度を定量的に評価す
る実装多重度見積方法において、情報取得・演算ステッ
プと実装多重度評価ステップを含むことを特徴としてい
る。ここで、情報取得・演算ステップは、ソースプログ
ラムの構成要素群を表現するツリー状の階層構造から、
ツリー中の各節について、その節が保持する構成要素間
の比較指標値と、その節が持つ子の数または葉の数、と
いう2種類の情報を取得して所定の演算を行うステップ
である。また、実装多重度評価ステップは、ツリー中の
各節について得られた演算結果の総和から実装多重度を
定量的に評価するステップである。この方法によれば、
比較指標値に関する情報を含むツリー状の階層構造から
ツリー中の各節についての演算を機械的に行い、その演
算結果の総和からプログラム全体の実装多重度を定量的
に容易に評価することができる。
【0020】請求項4の発明は、請求項3の実装多重度
評価方法において、所定の演算が、子の数マイナス1と
比較指標値との積であることを特徴としている。この方
法によれば、ツリー中の各節の比較指標値をプログラム
全体の実装多重度の評価に等しく反映することができる
ため、実装多重度の正規化が可能となる。
【0021】請求項5の発明は、請求項3の実装多重度
評価方法において、所定の演算が、子の数のべき乗と比
較指標値との積であることを特徴としている。この方法
によれば、ツリー中の節のうち、特に、子の数が多い節
の比較指標値が大きく反映されることになる。この場
合、1つの節が持つ子の数は、同じ機能を持つ構成要素
の数を示しているため、同じ機能を持つ構成要素が多数
存在するほど、その情報が強く反映されることになる。
したがって、この方法は、請求項1によって得られるよ
うな、比較指標値に関する情報を含むツリー状の積層構
造を使用する場合に最適である。
【0022】請求項6の発明は、コンピュータを利用し
て、ソースプログラム中の実装多重なコードを抽出する
実装多重コード抽出方法において、節選択ステップと要
素集合出力ステップを含むことを特徴としている。ここ
で、節選択ステップは、ソースプログラムの構成要素群
を表現するツリー状の階層構造と予め設定された構成要
素の集合数に対する基準値とを用いて、ツリーの頂点か
ら葉に向かって、常に、葉の数が最大となる子を選択し
ながら順に節をたどるステップである。また、要素集合
出力ステップは、新たに選択された節の持つ葉の数が前
記基準値より小さくなるか、あるいは子となる節がなく
なった時点で、その時点で選択されている節が持つ葉に
対応する構成要素集合を出力するステップである。この
方法によれば、ツリー構造を利用して、ツリーの頂点か
ら葉に向かって葉の数が最大となる子を選択するという
機械的な作業を繰り返すだけで、プログラム中の実装多
重なコードを効率的かつ確実に抽出することができる。
【0023】請求項7の発明は、コンピュータを利用し
て、ソースプログラム中の任意の箇所を変更しようとす
る場合に、同時に変更すべき別の箇所を抽出する同時変
更対象箇所抽出方法において、構成要素選択ステップ、
実装多重度評価ステップ、同時変更候補抽出ステップを
含むことを特徴としている。ここで、構成要素選択ステ
ップは、ユーザに、変更しようとする構成要素を選択さ
せるステップである。また、実装多重度評価ステップ
は、ソースプログラムの構成要素群とこの構成要素群の
各2つの構成要素間の比較指標値を含む構成要素群情報
に基づいて、ユーザにより選択された構成要素の実装多
重度を評価するステップである。そしてまた、同時変更
候補抽出ステップは、前記構成要素群情報に基づいて、
ユーザにより選択された構成要素に対して実装多重な構
成要素を、同時に変更すべき構成要素の候補として抽出
するステップである。
【0024】この方法によれば、比較指標値を含む構成
要素群情報を利用して、ユーザにより選択された構成要
素の実装多重度を容易に評価できると同時に、その構成
要素に対して実装多重な構成要素を効率的かつ確実に抽
出することができる。したがって、ある構成要素を変更
しようとしているユーザに対し、その構成要素の実装多
重度の評価結果と変更の必要な構成要素の候補集合との
両方を提示して、構成要素の変更作業を強力に支援する
ことができる。
【0025】請求項8の発明は、コンピュータを利用し
て、オブジェクト指向言語で記述されたソースプログラ
ム中のクラス階層を再構成するクラス階層再構成方法に
おいて、再構成候補抽出ステップを含むことを特徴とし
ている。ここで、再構成候補抽出ステップは、ソースプ
ログラム中の各クラス定義とクラス間の比較指標値を含
むクラス群情報に対して、ユーザからクラス階層を再構
成する必要性が提示された場合に、請求項6または請求
項7に記載の方法により、前記クラス群情報に基づい
て、実装多重なコードを持つクラス定義群を、再構成す
べきクラス定義群の候補として抽出するステップであ
る。
【0026】この方法によれば、請求項6または請求項
7の方法を、オブジェクト指向言語で記述されたソース
プログラムに適用することにより、比較指標値を含むク
ラス群情報を利用して、実装多重なコードを持つクラス
定義群を効率的かつ確実に抽出することができる。した
がって、ユーザがクラス階層の再構成の必要性を入力し
た時点で、実装多重なコードを持つクラス定義群を、再
構成の必要なクラス定義群の候補に関する情報としてユ
ーザに提示して、クラス階層の再構成作業を強力に支援
することができる。
【0027】請求項9の発明は、請求項8のクラス階層
再構成方法において、再構成判断支援ステップを含むこ
とを特徴としている。ここで、再構成判断支援ステップ
は、前記クラス群情報に対して、ユーザからクラス階層
を再構成する必要性の有無が提示されていない場合に、
請求項3に記載の方法により、クラス群情報に基づいて
実装多重度を評価し、評価結果をユーザに提示すること
により、ユーザにクラス階層を再構成する必要性の有無
を判断させるステップである。
【0028】この方法によれば、ユーザがクラス階層の
再構成の必要性を認識していない場合でも、請求項3の
方法を適用して、クラス群情報に基づいて実装多重度を
評価し、評価結果をユーザに提示することにより、ユー
ザは、その評価結果に基づいて、クラス階層の再構成が
必要であるか否かを容易に判断することができる。した
がって、ユーザが再構成の必要性を認識していなくて
も、実装多重度が高く、クラス階層の再構成が必要な場
合には、ユーザに再構成の必要性を認識させ、再構成候
補抽出ステップへと進むことができる。
【0029】なお、請求項10〜13の発明は、請求項
1、3、6、7の発明の方法をそれぞれプログラムの観
点から把握したものであり、各プログラムによれば、対
応する各方法について上述した作用と同様の作用が得ら
れる。
【0030】
【発明の実施の形態】以下には、本発明の実施形態を図
面に沿って具体的に説明する。ただし、ここで記載する
実施形態は、本発明を何ら限定するものではなく、本発
明の一態様を例示するものにすぎない。
【0031】本発明は、典型的には、コンピュータをソ
フトウェアで制御することにより実現される。この場合
のソフトウェアは、コンピュータのハードウェアを物理
的に活用することで本発明の作用効果を実現するもので
あり、また、従来技術を適用可能な部分には好適な従来
技術が適用される。さらに、本発明を実現するハードウ
ェアやソフトウェアの具体的な種類や構成、ソフトウェ
アで処理する範囲などは自由に変更可能であり、例え
ば、本発明を実現するプログラムは本発明の一態様であ
る。
【0032】なお、前述したように、本発明における構
成要素は、例えば、プログラム中の関数や手続、オブジ
ェクト指向言語におけるクラス定義等であるが、以下で
は、一例として、構成要素がC言語における関数である
場合について説明する。
【0033】[1.構成要素分類方法]図1は、本発明
を適用した構成要素分類方法の概要を示すフローチャー
トであり、図2は、図1におけるツリーへの追加処理の
サブルーチンを示すフローチャートである。
【0034】図1に示すように、ソースプログラムが入
力されてコンピュータのメモリ等の格納部に格納される
と(S110)、プログラムに含まれる全ての関数を構
成要素解析ステップ(S120)にて抽出し、その後、
構成要素比較ステップ(S130)にて全ての2関数間
の類似度を測定する。なお、「類似度」とは、2つの関
数から一意に定まる値であり、その2関数がどれだけ類
似しているかどうかを評価する比較指標値である。
【0035】類似度についてより詳細に説明すれば、任
意個数の類似度の集合は順序集合となる。つまり、任意
の2関数a1,a2の組み合わせをAとし、別の任意の
2関数b1,b2の組み合わせをBとした場合、すなわ
ち、A=(a1,a2)、B=(b1,b2)、に対し
て、Aの組み合わせの方がBの組み合わせ以上に類似し
ている関係にあると判断されるならば、Aから得られる
類似度s(A)と、Bから得られる類似度s(B)に対し
て、「s(A)の順位はs(B)の順位以上」という順序関
係が存在する。ただし、「s(A)の順位はs(B)の順位
以上」であり、かつ、「s(A)はs(B)と等しくない」
場合には、「s(A)の順位はs(B)の順位より上」が成
り立つものとする。そしてこの場合、Aの2関数a1,
a2はBの2関数b1,b2より「類似度が高い」と表
現する。逆に、Bの2関数b1,b2はAの2関数a
1,a2より「類似度が低い」と表現する。
【0036】なお、具体的な類似度の例として、例え
ば、2関数を行ごとに文字列比較し、一致した行数が2
関数の全行数に占める割合を類似度と定義できる。この
場合、類似度は実数値で表現できる。
【0037】次に、構成要素解析ステップ(S120)
にて得られた関数群と、構成要素比較ステップ(S13
0)にて得られた各2関数間の類似度を使用して、構成
要素分類ステップ(S140)を行い、n分木で構成さ
れるツリー状の階層構造(以下には、ツリーと略称す
る)を構成する。
【0038】すなわち、構成要素分類ステップにおいて
は、まず、構成要素群である関数群と、比較指標値であ
る類似度とを入力として与え(S141)、与えられた
類似度の中から最も大きな値を持つ関数の組み合わせを
選択する(S142)。ここで、最大の類似度を持つ関
数の組み合わせが複数存在する場合には、それらの複数
の組み合わせを選択する。そして、選択した関数の組み
合わせをツリーに追加登録し、同時に選択した類似度を
必要に応じて節として登録する(S143)。このよう
なツリーへの追加処理の詳細は、図2に示す通りであ
る。
【0039】すなわち、比較指標値である類似度と比較
対象の2構成要素(a,b)を入力し(S201)、2
構成要素(a,b)ともツリーに登録されているか否か
を判断する(S202)。そして、いずれか一方でも未
登録である場合(S202のNO)には、類似度を登録
した節Nを生成する(S203)。次に、一方の構成要
素aがツリーに登録されているか否かを判断し(S20
4)、未登録の場合(S204のNO)にはその構成要
素aを節Nの子として登録し(S205)、登録済みの
場合(S204のYES)にはその構成要素aが属する
ツリーの頂点を節Nの子として登録する(S206)。
【0040】続いて、他方の構成要素bがツリーに登録
されているか否かを判断し(S207)、未登録の場合
(S207のNO)にはその構成要素bを節Nの子とし
て登録し(S208)、登録済みの場合(S207のY
ES)にはその構成要素bが属するツリーの頂点を節N
の子として登録して(S209)、ツリーへの追加処理
を終了する。また、2構成要素が共に登録済みである場
合(S202のYES)には、その時点でツリーへの追
加処理を終了する。
【0041】ツリーへの追加処理を終了すると、登録さ
れた組み合わせが持つ類似度を処理対象から除外した
(S144)上で、処理対象となる類似度がまだ残って
いるか否かを判別する(S145)。処理対象となる類
似度が残っている場合(S145のYES)には、S1
42に戻って次に大きな類似度を持つ組み合わせを選択
し、処理対象となる類似度が残っていない場合(S14
5のNO)には処理を終了する。
【0042】以下には、この構成要素分類ステップにつ
いて、図3に示すような関数群と各2関数間の類似度の
一例を用いて具体的に説明する。この図3においては、
8個の関数f1〜f8をそれぞれ表現する円が示される
と共に、2関数間の類似度が、それらの関数に対応する
2つの円の間を接続する線とそれに添えられた数字とい
う形で示されている。この例では、類似度を小数点第1
位までの小数としている。
【0043】まず、類似度の最大値を持つ関数の組み合
わせを順次選択するという前述の処理(S142〜S1
45)は、具体的には、類似度の基準値を設定し、基準
値を下げながらその値以下の類似度を排除していく、と
いう作業によって実現される。図3の例においては、最
大の類似度は「0.8」であるため、まず、基準値を
「0.8」とすると、最も類似度の高い関数のグループ
{f1,f2,f3}が形成されるので、このグループ
をツリーに追加すると共に、類似度「0.8」を節とし
て登録する。
【0044】次に基準値を「0.7」とすると、次に類
似度の高い関数のグループ{f7,f8}が形成される
ので、このグループをツリーに追加すると共に、類似度
「0.7」を節として登録する。以降、最小の類似度
「0.1」まで、同様の作業を繰り返すと、図3中に円
で囲んで示すような、類似度が高い順に階層化されたグ
ループ構造が形成されると共に、図4に示すように、そ
の階層構造を反映したツリーが形成される。すなわち、
図4は、図3に示す関数f1〜f8、各2関数間の類似
度、および類似度に応じて形成された関数のグループ
を、n分木で表現したものである。
【0045】この図4に示すように、本実施形態におい
て、ツリーは、一般のn分木と同様に、接点とその親子
関係から構成され、頂点(親を持たない接点)、葉(子
を持たない接点)、節(葉以外の接点)が定義できる。
【0046】この例では、図4のツリーにおける葉は、
ソースプログラム中の関数の1つ1つにそれぞれ対応し
ており、全ての関数が漏れなく葉に対応している。ま
た、節は、葉または他の節を子として持ち、その節が持
つ葉の数と、類似度を属性情報として持つ。これらの属
性情報は以下のように定義される。
【0047】(定義1): 「ある節が持つ葉」とは、
その節の子となる葉、および子となる節が持つ葉を意味
する。したがって、ある節Kが持つ葉の数は、その節の
子となる葉の数と、子となる節が持つ葉の数の総和に等
しい。
【0048】(定義2): ある節が属性情報として持
つ類似度は、次のように定義される。節Kがn個の子を
持っている場合に、各々の子に対して、子が葉であれ
ば、その葉自身を選び出し、また、子が節であれば、そ
の節が持つ葉の中の1つを選び出し、選び出されたn個
の葉からなる集合leaf(K)={k1,k2,…,kn}
を考える。さらに、任意の類似度sが与えられた場合
に、「k∈leaf(K)である任意のkに対し、ki∈leaf
(K)でありかつkとの類似度がsであるki(1≦i≦
n,k≠ki)が必ず存在するようなleaf(K)」を、
「conleaf(K,s)」と定義する。そして、「節Kが属
性情報として類似度sを持つ」とは、次の(i)、(i
i)が共に成立することと同義である、とする。 (i)conleaf(K,s)が必ず1つ以上存在する。 (ii)「s1の順位はsの順位より上」である任意のs
1に対して、conleaf(K,s1)は存在しない。
【0049】さらに、本実施形態のツリーは、次の規則
にしたがって構成される。 (規則): 親子関係にある任意の2節間において、親
の節が持つ類似度s(P)、子の節が持つ類似度s(C)に
対して、「s(C)の順位はs(P)の順位より上」という
順序関係が成立する。すなわち、関数間の類似度が高け
れば高いほど、これらの関数が同一の機能を実装してい
る可能性が高い。また、同じ機能を実装している関数が
多いほど、やはり機能変更にかかるコストを高める可能
性が高い。このツリーを用いて関数を分類すると、「あ
る値以上の類似度を持つ関数の集合、数」、および「類
似度の高低」を、ツリー内の節と節間の関係で表現する
ことができる。ここで、「ある値以上の類似度を持つ関
数の集合」は、その類似度を属性情報として持つ節が持
つ葉の集合の和に対応する。「数」は節が持つ葉の数に
相当し、節に属性情報として記述されている。「類似度
の高低」は、節間の親子関係で表現される。
【0050】以上のような本実施形態の構成要素分類方
法によれば、階層的クラスター分析手法において使用さ
れるような樹形図では抽出しにくい実装多重度に関する
情報を反映した、理解しやすいツリーを形成することが
できる。この点について以下に説明する。
【0051】まず、階層的クラスター分析手法において
使用される樹形図(デンドログラム)は、その目的や構
築手法から、ある節の子となる節あるいは葉の数は、2
つ程度にすぎない。しかしながら、本発明が対象として
いるようなソフトウェアにおいては、実装多重なコード
は、同一の類似度で類似しあうことが多く、したがっ
て、同一の類似度で類似しあう要素・グループとその数
が重要視されるべきであり、これらは同一の節を親とし
た方が望ましい。その点で、図4に示すようなツリーで
は、同一の類似度で類似しあう要素を1つのグループに
まとめており、樹形図では抽出しにくい実装多重度に関
する情報を効率よく取り扱うことができる。
【0052】また、例えば類似度を実数値とした場合、
実際には非常に大きな桁数を持ったり、無限の桁数を持
った数値が得られることが多い。その際には、計算機の
扱える範囲内で桁数を制限することとなるが、本実施形
態においては、類似度の桁数を意図的に少なく制限する
ことにより、ある程度の幅を有する類似度を同じ類似度
のグループとしてまとめることもできる。すなわち、図
3の例のように、類似度を小数点第1位までの小数とし
た場合には、類似度は、0.1〜0.9までの最大9段
階で段階的にグループ化されることになる。このよう
に、類似度を段階的にグループ化することにより、段階
の数に応じて、ツリーの階層の数を自由に調整できる。
【0053】このように、本実施形態の構成要素分類方
法によれば、プログラムの構成要素を、実装多重度を反
映した理解しやすいツリー状の階層構造に分類すること
ができるため、プログラム中の実装多重度の定量的な評
価の実現に貢献できる。また、類似度を段階的にグルー
プ化することにより、段階の数に応じて、ツリーの階層
の数を自由に調整して、類似度の近い構成要素の集合を
適切に表現することができる。特に、グループ化する段
階の数をある程度制限することにより、類似度の近い構
成要素の集合を大きくまとめることができるため、その
集合を容易に把握可能となり、実装多重度の定量的な評
価が容易になる。
【0054】[2.実装多重度見積方法]図5は、本発
明を適用した実装多重度見積方法の概要を示すフローチ
ャートである。この実装多重度見積方法は、前述した構
成要素分類方法で得られたツリーや、あるいは階層的ク
ラスター分析手法によって作成された樹形図を元に、プ
ログラムの実装多重度を見積もる方法である。
【0055】まず、前提として、「実装多重度」は、次
のような性質を持つものとする。 (性質1): 関数間の類似度が高い程、これらの関数
が同一の機能を実装していると推測できる。すなわち、
それだけ実装多重度が高くなる。 (性質2): 同じ機能を実装している(と推測でき
る)関数が多いほど、実装多重度が高い。
【0056】本実施形態における実装多重度見積方法に
おいては、このような性質を反映させるように、ツリー
中の各節が属性として持つ「類似度」と節が持つ「子の
数」(あるいは節が持つ「葉の数」)から実装多重度を
見積もる。なお、便宜上の理由から、以下では、前述し
た構成要素分類方法で得られるようなツリーについて説
明するが、樹形図を用いる場合には、「節が持つ類似
度」を樹形図中の各節の高さによって置き換えることに
より、同様の方法で実装多重度を見積もることができ
る。
【0057】図5に示すように、ツリーTが入力されて
コンピュータのメモリ等の格納部に格納されると(S5
01)、そのツリーTによって表現されるプログラムP
に対する実装多重度m(P)の初期値を0とし、節Nとし
てツリーTの頂点を選択する(S502)。そして、選
択した節Nについて、その節が持つ「類似度」と「子の
数」という属性情報を取得して所定の演算を行い、その
演算結果である値αを実装多重度m(P)に加える(S5
03)。このような所定の演算を、ツリーT中の全ての
節に対して行う(S504のYES、S505)ことに
より、全ての節に対する値αの総和を含む実装多重度m
(P)が得られる。以下には、各節に対して行う演算の具
体例について説明する。
【0058】[演算例1]類似度が実数値で表現できる
場合には、一例として、各節Nに対する値αを、次の式
で求める。
【数1】α=(Nの子の数−1)×(Nが持つ類似度) この場合、プログラムPに対する実装多重度m(P)を求
める式は、次のように定義される。
【数2】 この式(1)において、nodes(P)は、プログラムPか
ら求めたツリーTに含まれる全ての節からなる集合であ
る。
【0059】この式(1)により実装多重度m(P)を求
めると、右辺にある「項(Nの子の数−1)の総数+
1」が、「Pが持つ関数の数」に等しくなる。したがっ
て、類似度の値域が[0...1]であるとすると、次の式
が成立する。
【数3】m(P)≦(Pが持つ関数の数) したがって、次の式による正規化が可能となり、他のプ
ログラムとの間での指標値の比較が可能となる。
【数4】m(P)/(Pが持つ関数の数)
【0060】なお、図4に示すツリーについて上記の式
(1)で実装多重度m(P)を計算すると、次のようにな
る。
【数5】 m(P) =0.1×1+0.4×1+0.4×1+0.6×1+0.7×1+0.8×2+1 =4.8
【0061】[演算例2]類似度が実数値で表現できる
場合には、別の一例として、各節Nに対する値αを、次
の式で求める。
【数6】α=(Nの子の数)2×(Nが持つ類似度) この場合、プログラムPに対する実装多重度m(P)を求
める式は、次のように定義される。
【数7】
【0062】この式(2)により実装多重度m(P)を求
めると、ツリーT中の節のうち、特に、子の数が多い節
の比較指標値が大きく反映されることになる。この場
合、1つの節が持つ子の数は、同じ機能を持つ関数の数
を示しているため、同じ機能を持つ関数が多数存在する
ほど、その情報が強く反映されることになる。したがっ
て、この方法は、階層的クラスター分析手法によって作
成された樹形図よりは、前述した構成要素分類方法で得
られたツリーを使用して計算する場合に好適であり、そ
の特徴を生かすことができる。
【0063】なお、図4に示すツリーについて上記の式
(2)で実装多重度m(P)を計算すると、次のようにな
る。
【数8】 m(P) =0.1×22+0.4×22+0.4×22+0.6×22+0.7×22+0.8×32 =16
【0064】以上のような本実施形態の実装多重度評価
方法によれば、比較指標値に関する情報を含むツリー状
の階層構造からツリー中の各節についての演算を機械的
に行い、その演算結果の総和からプログラム全体の実装
多重度を定量的に容易に評価することができる。
【0065】[3.実装多重コード抽出方法]図6は、
本発明を適用した実装多重コード抽出方法の概要を示す
フローチャートである。この実装多重コード抽出方法
は、前述した構成要素分類方法で得られたツリーや、あ
るいは階層的クラスター分析手法によって作成された樹
形図を元に、プログラム中の実装多重なコードを抽出す
る方法であり、この方法において重要なポリシーは、
「類似度が高く、かつ、共通の機能実装を持つと推測さ
れるような関数の集合のうち、最も大きいものを抽出す
る」ことである。
【0066】図6に示すように、ツリーTが入力されて
コンピュータのメモリ等の格納部に格納されると(S6
01)、まず、節NとしてツリーTの頂点を選択する
(S602)と共に、関数の集合数に対する基準値Uを
設定する(S603)。そして、ツリーTの頂点から葉
に向かって、順に節をたどっていく。この場合、ツリー
の性質から、親の節が持つ葉の数は子の節が持つ葉の数
より大きいので、節が持つ葉の数は、たどっていくうち
に小さくなっていく。そして、親の節から子の節へたど
る際には、前述したポリシーに基づき、常に、葉の数が
最大となる子を選択しながら順に節Nをたどる。
【0067】すなわち、新たに選択された節Nの葉の数
が基準値U以上であり(S604のNO)、その節Nに
子となる節がある場合(S605のYES)には、子と
なる節のうち、葉の数が最大となる節を新たな節Nとし
て選択する(S606)。そして、新たに選択された節
Nの葉の数が基準値Uより小さくなった時点(S604
のYES)、あるいは節Nに子となる節がなくなった時
点(S605のNO)で、その時点で選択されている節
Nが持つ葉に対応する構成要素集合、すなわち関数集合
を、ユーザに提示する(S607)。この方法によれ
ば、葉の数が最大となる子を常に選択するので、より大
きい関数の集合、すなわち、より構成要素数の多い実装
多重なコードの集合を選択することができる。
【0068】図4に示すツリーの例では、まず、頂点の
節「0.1(8)」を選択し、葉の数が多い節「0.4
(5)」、「0.8(3)」を順にたどっていくことに
なる。ここで、基準値Uが5より小さい場合には、
「0.8(3)」が持つ葉f1〜f3に対応する関数が
実装多重なコードとして得られる。また、基準値Uが5
以上の場合には、「0.4(5)」が持つ葉f1〜f5
に対応する関数が得られる。なお、このようにして得ら
れた関数をユーザに提示する際には、ツリーの構造をそ
のまま画像表示することが望ましい。それにより、ユー
ザは、ツリー構造の形で画像表示された関数の中から、
共通化する際の優先順位を容易に決定することができる
ので、同一機能を予め共通化する等の改善作業の効率を
向上できる。
【0069】以上のような本実施形態の実装多重コード
抽出方法によれば、ツリー構造を利用して、ツリーの頂
点から葉に向かって葉の数が最大となる子を選択すると
いう機械的な作業を繰り返すだけで、プログラム中の実
装多重なコードを効率的かつ確実に抽出することができ
る。したがって、同一機能の分散実装に対して、変更に
係るリスクの軽減を目的として予め共通化する等の改善
作業を行う場合に、ユーザは、どの機能を共通化するこ
とが効率的であるかを容易に把握することができるた
め、改善作業を効率的に行うことができる。
【0070】[4.同時変更対象箇所抽出方法]図7
は、本発明を適用した同時変更対象箇所抽出方法の概要
を示すフローチャートである。この同時変更対象箇所抽
出方法は、プログラム中の任意の箇所を変更しようとす
る場合に、前述した構成要素分類方法で得られたツリー
や、あるいは階層的クラスター分析手法によって作成さ
れた樹形図を元に、変更しようとする箇所と同時に変更
すべき別の箇所を抽出する方法である。
【0071】図7に示すように、構成要素である関数群
と各2関数間の類似度に関する関数群情報を含むツリー
Tが入力されてコンピュータのメモリ等の格納部に格納
された状態で(S701)、ユーザが、変更しようとす
る関数fを選択すると(S702)、その関数fに対応
する葉のn代前の祖先となる節pn(f)を求める(S7
03)。そして、この節pn(f)が持つ情報から関数f
の実装多重度m(f,n)を求める(S704)。ここ
で、関数fの実装多重度m(f,n)は、節p n(f)を
頂点としたツリーの部分木に対応する実装多重度と定義
され、例えば、部分木内に含まれる各節について、節が
持つ子の数と類似度を用いた所定の演算を行い、その演
算結果の総和から定量的に評価される。
【0072】また、関数fの実装多重度m(f,n)の
評価と同時に、関数fに対応する葉のn代前の祖先とな
る節pn(f)が持つ葉の集合を、同時に変更すべき関数
の候補として求める(S705)。この場合、自然数で
あるnの値を適宜変更することにより、候補の数、範囲
を適切に調節することができる。
【0073】以上のようにして求めた実装多重度と同時
変更候補に関する情報をユーザに提示する(S706)
ことにより、ユーザは、その情報から、変更しようとす
る関数に対して、他の関数を変更すべきか否かを判断で
きると共に、具体的にどの関数を変更すべきかを把握す
ることができる。なお、このようにして得られた情報を
ユーザに提示する際には、ツリーの構造をそのまま画像
表示することが望ましい。それにより、ユーザは、他の
関数の変更の有無の判断や変更すべき関数の特定を容易
に行うことができるので、関数の変更による改善作業の
効率を向上できる。
【0074】また、図7においては、関数fの実装多重
度および同時に変更すべき関数の候補として、関数fに
対応する葉のn代前の祖先となる節pn(f)を頂点とし
たツリーの部分木に対応する実装多重度m(f,n)を
求めると共に、節pn(f)が持つ葉の集合を求めたが、
関数fに対応する葉の親となる節p(f)が持つ情報だけ
を使用することも可能である。
【0075】この場合には、関数fの実装多重度m(f)
は、例えば次のように定義される。
【数9】m(f)=(p(f)が持つ子の数)×(p(f)が
持つ類似度) そして、このような実装多重度m(f)が求められると共
に、p(f)が持つ葉の集合が変更すべき関数の候補とし
て求められ、ユーザに提示されることになる。
【0076】以上のような本実施形態の同時変更対象箇
所抽出方法によれば、関数群と各2関数間の類似度に関
する関数群情報を含むツリーを利用して、ユーザにより
選択された関数の実装多重度を容易に評価できると同時
に、その関数に対して実装多重な他の関数を効率的かつ
確実に抽出することができる。したがって、ある関数を
変更しようとしているユーザに対し、その関数の実装多
重度の評価結果と変更の必要な他の関数の候補集合との
両方を提示して、関数の変更によるプログラムの改善作
業を強力に支援することができる。
【0077】さらに、上記の説明では、予めツリーを入
力した場合について説明したが、本発明における同時変
更対象箇所抽出方法はこれに限定されるものではなく、
ユーザにより関数が選択された時点で、その関数に対応
する葉を含む部分木を形成して必要な情報を取得するこ
とも可能である。
【0078】[5.クラス階層再構成方法]図8は、本
発明を適用したクラス階層再構成方法の概要を示すフロ
ーチャートである。このクラス階層再構成方法は、前述
した実装多重度評価方法、実装多重コード抽出方法、同
時変更対象箇所抽出方法等を、オブジェクト指向言語で
開発されたソフトウェアにおけるクラス階層の再構成に
応用した方法であり、対象となる構成要素は、オブジェ
クト指向言語におけるクラス定義である。
【0079】図8に示すように、プログラム中に定義さ
れているクラス定義群と各2クラス定義間の類似度に関
するクラス群情報が入力されてコンピュータのメモリ等
の格納部に格納された状態で(S801)、ユーザから
クラス階層を再構成する必要性の有無が提示されている
か否かを判断する(S802)。そして、ユーザが必要
性を理解していない等の理由により、必要性の有無が提
示されていない場合(S802のNO)には、前述した
実装多重度評価方法(図5)等を用いて、クラス定義と
それらの間の類似度に基づいた実装多重度を測定してユ
ーザに提示する(S803)。これにより、ユーザは、
提示された実装多重度から、クラス階層の再構成が必要
か否かを容易に判断することができる。
【0080】ユーザが再構成の必要性があると判断して
その旨を提示した場合(S804のYES)には、前述
した実装多重コード抽出方法(図6)あるいは同時変更
対象箇所抽出方法(図7)等を用いて、実装多重なコー
ドを持つクラス定義群を、再構成すべきクラス定義群の
候補として抽出する(S805)。抽出されたクラス群
に、すでに共通化されたクラスがあるか否かを判別する
(S806)。共通化されたクラスがない場合(S80
6のNO)には、共通化クラスの定義を作成する(S8
07)。そして、抽出されたクラス群が共通に持つ機能
の定義を既存のあるいは新たに作成された共通化クラス
の機能としてクラス定義に追加する(S808)。
【0081】続いて、抽出された元の各クラスごとに
(S809)、共通化クラスの派生クラスとしてのクラ
ス定義を作成し(S810)、元のクラスと共通化クラ
スとの間の機能の差分を派生クラスの機能としてクラス
定義に追加する(S811)、という一連のループ処理
を行う(S812)。これにより、クラス階層の再構成
を終了する。
【0082】図9および図10は、Javaによるプロ
グラムコードに対して上記のようなクラス階層の再構成
を行った場合の具体例を示しており、図9は再構成前の
コード、図10は再構成後のコードを示している。な
お、図面の簡略化の観点から、説明に必要な部分以外は
省略している。この例について以下に説明する。
【0083】まず、図9に示すコードのうち、「Class
1」の「func1」と「Class2」の「func3」が同様の機能
を別個に実装しており、また、「Class1」の「func2」
と「Class2」の「func4」が同様の機能を別個に実装し
ているものとする。そして、「func1」と「func3」は全
く同一であり、また、「func2」と「func4」は差異があ
るものの、その一部が共通しているものとする。
【0084】これらのクラス「Class1」、「Class2」が
実装多重なコードを持つクラス群として抽出された場合
に、共通化クラスがなければ、共通化クラス「CommonCl
ass」のクラス定義が作成される。そして、この共通化
クラス「CommonClass」のクラス定義に、クラス「Class
1」、「Class2」を通じて共通である機能が追加され
る。すなわち、この例では、「func1_3」(「func1」と
「func3」の共通機能)、「func2_4」(「func2」と「f
unc4」の共通機能)がそれぞれ実装される。
【0085】そして、元のクラス「Class1」、「Class
2」には、共通化クラスの派生クラスであることを示す
宣言「extends CommonClass」が追加され、新たなクラ
ス定義が作成される。続いて、これらの派生クラス「Cl
ass1」、「Class2」に対し、元のクラスと共通化クラス
との機能の差分が追加される。すなわち、派生クラス
「Class1」については、「func2」と「func2_4」との間
の差分が実装され、また、派生クラス「Class2」につい
ては、「func4」と「func2_4」との間の差分が実装され
る。なお、「func1」と「func3」は全く同一であるた
め、「func1_3」との間には差分は存在せず、派生クラ
ス定義には何も発生しない。
【0086】以上のような本実施形態のクラス階層再構
成方法によれば、前述した実装多重コード抽出方法(図
6)あるいは同時変更対象箇所抽出方法(図7)等を、
オブジェクト指向言語で記述されたソースプログラムに
適用することにより、類似度を含むクラス群情報を利用
して、実装多重なコードを持つクラス定義群を効率的か
つ確実に抽出することができる。したがって、ユーザが
クラス階層の再構成の必要性を入力した時点で、実装多
重なコードを持つクラス定義群を、再構成の必要なクラ
ス定義群の候補に関する情報としてユーザに提示して、
クラス階層の再構成作業を強力に支援することができ
る。
【0087】また、ユーザがクラス階層の再構成の必要
性を認識していない場合でも、前述した実装多重度評価
方法(図5)等を適用して、クラス群情報に基づいて実
装多重度を評価し、評価結果をユーザに提示することに
より、ユーザは、その評価結果に基づいて、クラス階層
の再構成が必要であるか否かを容易に判断することがで
きる。したがって、ユーザが再構成の必要性を認識して
いなくても、実装多重度が高く、クラス階層の再構成が
必要な場合には、実装多重度を提示してユーザに再構成
の必要性を認識させ、クラス階層の再構成を確実に実施
することができる。
【0088】なお、クラス階層の再構成作業は、ユーザ
自身が行ってもよいが、クラス階層の再構成作業は、共
通化クラスやその派生クラスのクラス定義の作成や各ク
ラスへの機能の追加等により機械的に実行可能であるた
め、コンピュータにより自動的に実行することにより、
クラス階層の再構成を効率よく確実に行うことができる
と共に、ユーザの作業を少なくすることができる。
【0089】[6.他の実施形態]なお、本発明は、前
述した実施形態に限定されるものではなく、本発明の範
囲内で他にも多種多様な形態が実施可能である。例え
ば、前述した実装多重度見積方法、実装多重コード抽出
方法、同時変更対象箇所抽出方法等の説明においては、
本発明による構成要素分類方法で得られたツリーを用い
た場合について記載したが、それらの方法は、構成要素
間の比較指標値となる情報を含む限り、階層的クラスタ
ー分析手法によって作成された樹形図を用いた場合で
も、同様に適用可能であり、同様に優れた効果が得られ
るものである。
【0090】
【発明の効果】以上説明したように、本発明によれば、
ソースプログラムの構成要素群に対して、構成要素間の
比較指標値とそれを反映させたツリー状の階層構造とを
用いることにより、しきい値等を使用せずに、プログラ
ムを構成する各構成要素間の比較指標値を用いて、プロ
グラム中の実装多重度を定量的に容易に評価可能な実装
多重度見積方法、実装多重なコードを効率的かつ確実に
抽出可能な実装多重コード抽出方法、および実装多重度
の定量的な評価に基づいてプログラムにおける同時変更
が必要な箇所を効率的かつ確実に抽出可能な同時変更対
象箇所抽出方法、を提供することができる。
【0091】また、プログラム中の実装多重度を定量的
に評価可能とするために、プログラムの構成要素を、実
装多重度を反映した理解しやすいツリー状の階層構造に
分類可能な構成要素分類方法を提供することができる。
そしてまた、オブジェクト指向言語で記述されたプログ
ラム中から、実装多重なコードを持つクラス定義群を効
率的かつ確実に抽出して、クラス階層を適切に再構成可
能なクラス階層再構成方法を提供することができる。
【図面の簡単な説明】
【図1】本発明を適用した構成要素分類方法の概要を示
すフローチャート。
【図2】図1におけるツリーへの追加処理のサブルーチ
ンを示すフローチャート。
【図3】関数群と各2関数間の類似度の一例を示す概念
図。
【図4】図3に示す関数、各2関数間の類似度、および
類似度に応じて形成された関数のグループをn分木で表
現したツリー状の積層構造を示すデータ構造図。
【図5】本発明を適用した実装多重度見積方法の概要を
示すフローチャート。
【図6】本発明を適用した実装多重コード抽出方法の概
要を示すフローチャート。
【図7】本発明を適用した同時変更対象箇所抽出方法の
概要を示すフローチャート。
【図8】本発明を適用したクラス階層再構成方法の概要
を示すフローチャート。
【図9】Javaによるプログラムコードに対して図8
に示すクラス階層再構成方法を適用した場合の具体例を
示しており、再構成前のコードを示す図。
【図10】図9に示すコードの再構成後のコードを示す
図。

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータを利用して、ソースプログ
    ラムの構成要素を分類する構成要素分類方法において、 前記ソースプログラムのソースコードを構成要素に分割
    して構成要素群を抽出する構成要素解析ステップと、 抽出された構成要素群から各2つの構成要素を比較して
    その2構成要素間の比較指標値を求める構成要素比較ス
    テップと、 抽出された構成要素群と、それに対して得られた各2構
    成要素間の比較指標値とに基づいて、その構成要素群
    を、構成要素間の比較指標値、各節が持つ子の数、各節
    が持つ葉の数、という3種類の情報を各節が保持するツ
    リー状の階層構造に分類する構成要素分類ステップと、
    を含むことを特徴とする構成要素分類方法。
  2. 【請求項2】 前記構成要素比較ステップにおいては、
    抽出された構成要素群に対して得られた各2構成要素間
    の比較指標値を段階的にグループ化し、 前記構成要素分類ステップにおいては、グループ化され
    た比較指標値の各段階に応じた各階層からなる階層構造
    に分類する、ことを特徴とする請求項1に記載の構成要
    素分類方法。
  3. 【請求項3】 コンピュータを利用して、ソースプログ
    ラム中の実装多重度を定量的に評価する実装多重度見積
    方法において、 前記ソースプログラムの構成要素群を表現するツリー状
    の階層構造から、ツリー中の各節について、その節が保
    持する構成要素間の比較指標値と、その節が持つ子の数
    または葉の数、という2種類の情報を取得して所定の演
    算を行う情報取得・演算ステップと、 ツリー中の各節について得られた演算結果の総和から実
    装多重度を定量的に評価する実装多重度評価ステップ
    と、を含むことを特徴とする実装多重度評価方法。
  4. 【請求項4】 前記所定の演算は、子の数マイナス1と
    比較指標値との積であることを特徴とする請求項3に記
    載の実装多重度評価方法。
  5. 【請求項5】 前記所定の演算は、子の数のべき乗と比
    較指標値との積であることを特徴とする請求項3に記載
    の実装多重度評価方法。
  6. 【請求項6】 コンピュータを利用して、ソースプログ
    ラム中の実装多重なコードを抽出する実装多重コード抽
    出方法において、 前記ソースプログラムの構成要素群を表現するツリー状
    の階層構造と予め設定された構成要素の集合数に対する
    基準値とを用いて、ツリーの頂点から葉に向かって、常
    に、葉の数が最大となる子を選択しながら順に節をたど
    る節選択ステップと、 新たに選択された節の持つ葉の数が前記基準値より小さ
    くなるか、あるいは子となる節がなくなった時点で、そ
    の時点で選択されている節が持つ葉に対応する構成要素
    集合を出力する要素集合出力ステップと、を含むことを
    特徴とする実装多重コード抽出方法。
  7. 【請求項7】 コンピュータを利用して、ソースプログ
    ラム中の任意の箇所を変更しようとする場合に、同時に
    変更すべき別の箇所を抽出する同時変更対象箇所抽出方
    法において、 ユーザに、変更しようとする構成要素を選択させる構成
    要素選択ステップと、 前記ソースプログラムの構成要素群とこの構成要素群の
    各2つの構成要素間の比較指標値を含む構成要素群情報
    に基づいて、前記ユーザにより選択された構成要素の実
    装多重度を評価する実装多重度評価ステップと、 前記構成要素群情報に基づいて、前記ユーザにより選択
    された構成要素に対して実装多重な構成要素を、同時に
    変更すべき構成要素の候補として抽出する同時変更候補
    抽出ステップと、を含むことを特徴とする同時変更対象
    箇所抽出方法。
  8. 【請求項8】 コンピュータを利用して、オブジェクト
    指向言語で記述されたソースプログラム中のクラス階層
    を再構成するクラス階層再構成方法において、 前記ソースプログラム中の各クラス定義とクラス間の比
    較指標値を含むクラス群情報に対して、ユーザからクラ
    ス階層を再構成する必要性が提示された場合に、前記請
    求項6または請求項7に記載の方法により、前記クラス
    群情報に基づいて、実装多重なコードを持つクラス定義
    群を、再構成すべきクラス定義群の候補として抽出する
    再構成候補抽出ステップ、を含むことを特徴とするクラ
    ス階層再構成方法。
  9. 【請求項9】 前記クラス群情報に対して、ユーザから
    クラス階層を再構成する必要性の有無が提示されていな
    い場合に、前記請求項3に記載の方法により、クラス群
    情報に基づいて実装多重度を評価し、評価結果をユーザ
    に提示することにより、ユーザにクラス階層を再構成す
    る必要性の有無を判断させる再構成判断支援ステップ、
    を含むことを特徴とする請求項8に記載のクラス階層再
    構成方法。
  10. 【請求項10】 コンピュータを利用して、ソースプロ
    グラムの構成要素を分類するためのプログラムにおい
    て、 前記ソースプログラムのソースコードを構成要素に分割
    して構成要素群を抽出する構成要素解析機能と、 抽出された構成要素群から各2つの構成要素を比較して
    その2構成要素間の比較指標値を求める構成要素比較機
    能と、 抽出された構成要素群と、それに対して得られた各2構
    成要素間の比較指標値とに基づいて、その構成要素群
    を、構成要素間の比較指標値、各節が持つ子の数、各節
    が持つ葉の数、という3種類の情報を各節が保持するツ
    リー状の階層構造に分類する構成要素分類機能と、をコ
    ンピュータに実現させることを特徴とするプログラム。
  11. 【請求項11】 コンピュータを利用して、ソースプロ
    グラム中の実装多重度を定量的に評価するためのプログ
    ラムにおいて、 前記ソースプログラムの構成要素群を表現するツリー状
    の階層構造から、ツリー中の各節について、その節が保
    持する構成要素間の比較指標値と、その節が持つ子の数
    または葉の数、という2種類の情報を取得して所定の演
    算を行う情報取得・演算機能と、 ツリー中の各節について得られた演算結果の総和から実
    装多重度を定量的に評価する実装多重度評価機能と、を
    コンピュータに実現させることを特徴とするプログラ
    ム。
  12. 【請求項12】 コンピュータを利用して、ソースプロ
    グラム中の実装多重なコードを抽出するためのプログラ
    ムにおいて、 前記ソースプログラムの構成要素群を表現するツリー状
    の階層構造と予め設定された構成要素の集合数に対する
    基準値とを用いて、ツリーの頂点から葉に向かって、常
    に、葉の数が最大となる子を選択しながら順に節をたど
    る節選択機能と、 新たに選択された節の持つ葉の数が前記基準値より小さ
    くなるか、あるいは子となる節がなくなった時点で、そ
    の時点で選択されている節が持つ葉に対応する構成要素
    集合を出力する要素集合出力機能と、をコンピュータに
    実現させることを特徴とするプログラム。
  13. 【請求項13】 コンピュータを利用して、ソースプロ
    グラム中の任意の箇所を変更しようとする場合に、同時
    に変更すべき別の箇所を抽出するためのプログラムにお
    いて、 ユーザに、変更しようとする構成要素を選択させる構成
    要素選択機能と、 前記ソースプログラムの構成要素群とこの構成要素群の
    各2つの構成要素間の比較指標値を含む構成要素群情報
    に基づいて、前記ユーザにより選択された構成要素の実
    装多重度を評価する実装多重度評価機能と、 前記構成要素群情報に基づいて、前記ユーザにより選択
    された構成要素に対して実装多重な構成要素を、同時に
    変更すべき構成要素の候補として抽出する同時変更候補
    抽出機能と、をコンピュータに実現させることを特徴と
    するプログラム。
JP2002027172A 2002-02-04 2002-02-04 構成要素分類方法、実装多重度評価方法、実装多重コード抽出方法、同時変更対象箇所抽出方法、クラス階層再構成方法、およびプログラム Pending JP2003228499A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2002027172A JP2003228499A (ja) 2002-02-04 2002-02-04 構成要素分類方法、実装多重度評価方法、実装多重コード抽出方法、同時変更対象箇所抽出方法、クラス階層再構成方法、およびプログラム
US10/356,540 US7228530B2 (en) 2002-02-04 2003-02-03 Source program processing method
US11/745,225 US7886274B2 (en) 2002-02-04 2007-05-07 Source program processing method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002027172A JP2003228499A (ja) 2002-02-04 2002-02-04 構成要素分類方法、実装多重度評価方法、実装多重コード抽出方法、同時変更対象箇所抽出方法、クラス階層再構成方法、およびプログラム

Publications (1)

Publication Number Publication Date
JP2003228499A true JP2003228499A (ja) 2003-08-15

Family

ID=27654618

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002027172A Pending JP2003228499A (ja) 2002-02-04 2002-02-04 構成要素分類方法、実装多重度評価方法、実装多重コード抽出方法、同時変更対象箇所抽出方法、クラス階層再構成方法、およびプログラム

Country Status (2)

Country Link
US (2) US7228530B2 (ja)
JP (1) JP2003228499A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006018693A (ja) * 2004-07-02 2006-01-19 Fujitsu Ltd 類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法
JP2006099249A (ja) * 2004-09-28 2006-04-13 Fujitsu Ltd 障害管理装置および障害管理方法

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7802236B2 (en) * 2002-09-09 2010-09-21 The Regents Of The University Of California Method and apparatus for identifying similar regions of a program's execution
US7392512B2 (en) * 2003-09-08 2008-06-24 Microsoft Corporation System and method for automatic conversion from WAP client provisioning XML represented objects to OMA DM tree structure represented objects
US20110055373A1 (en) * 2009-08-30 2011-03-03 International Business Machines Corporation Service identification for resources in a computing environment
US8407197B2 (en) * 2009-09-08 2013-03-26 Zoom Catalog, Llc System and method to research documents in online libraries
CN102650964B (zh) 2011-02-28 2016-03-09 国际商业机器公司 用于监控面向对象的应用的方法、系统和自监控系统
US9977655B2 (en) 2012-03-20 2018-05-22 Massively Parallel Technologies, Inc. System and method for automatic extraction of software design from requirements
US9424168B2 (en) 2012-03-20 2016-08-23 Massively Parallel Technologies, Inc. System and method for automatic generation of software test
US8959494B2 (en) 2012-03-20 2015-02-17 Massively Parallel Technologies Inc. Parallelism from functional decomposition
WO2013184952A1 (en) * 2012-06-06 2013-12-12 Massively Parallel Technologies, Inc. Method for automatic extraction of designs from standard source code
US8990183B2 (en) * 2012-06-06 2015-03-24 Microsoft Technology Licensing, Llc Deep application crawling
WO2013185098A1 (en) 2012-06-08 2013-12-12 Massively Parallel Technologies, Inc. System and method for automatic detection of decomposition errors
WO2014152800A1 (en) * 2013-03-14 2014-09-25 Massively Parallel Technologies, Inc. Project planning and debugging from functional decomposition
US9292263B2 (en) 2013-04-15 2016-03-22 Massively Parallel Technologies, Inc. System and method for embedding symbols within a visual representation of a software design to indicate completeness
CN105589807B (zh) * 2015-12-21 2018-05-11 中国科学院信息工程研究所 一种应用程序间组件能力泄露动态检测方法和系统

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5058144A (en) * 1988-04-29 1991-10-15 Xerox Corporation Search tree data structure encoding for textual substitution data compression systems
US5574837A (en) * 1995-01-17 1996-11-12 Lucent Technologies Inc. Method of generating a browser interface for representing similarities between segments of code
US5699507A (en) * 1995-01-17 1997-12-16 Lucent Technologies Inc. Method of identifying similarities in code segments
JP2001125783A (ja) 1999-10-26 2001-05-11 Fujitsu Ltd 同種命令群抽出方法および同種命令群抽出装置
US6614789B1 (en) * 1999-12-29 2003-09-02 Nasser Yazdani Method of and apparatus for matching strings of different lengths
US7100148B2 (en) * 2001-03-16 2006-08-29 Sap Ag Development computer, development program for combining components to applications, using component descriptors related to the components, method, and computer program
US6807546B2 (en) * 2002-08-12 2004-10-19 Sybase, Inc. Database system with methodology for distributing query optimization effort over large search spaces
US7493596B2 (en) * 2004-06-30 2009-02-17 International Business Machines Corporation Method, system and program product for determining java software code plagiarism and infringement

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006018693A (ja) * 2004-07-02 2006-01-19 Fujitsu Ltd 類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法
JP2006099249A (ja) * 2004-09-28 2006-04-13 Fujitsu Ltd 障害管理装置および障害管理方法

Also Published As

Publication number Publication date
US20070209033A1 (en) 2007-09-06
US20030149968A1 (en) 2003-08-07
US7886274B2 (en) 2011-02-08
US7228530B2 (en) 2007-06-05

Similar Documents

Publication Publication Date Title
Hompes et al. Discovering deviating cases and process variants using trace clustering
Harenberg et al. Community detection in large‐scale networks: a survey and empirical evaluation
Teng Scalable algorithms for data and network analysis
JP2003228499A (ja) 構成要素分類方法、実装多重度評価方法、実装多重コード抽出方法、同時変更対象箇所抽出方法、クラス階層再構成方法、およびプログラム
Butts The complexity of social networks: theoretical and empirical findings
Li et al. Multicomm: Finding community structure in multi-dimensional networks
Wang et al. Locating structural centers: A density-based clustering method for community detection
Cilibrasi et al. A fast quartet tree heuristic for hierarchical clustering
Leigh et al. Evaluating phylogenetic congruence in the post-genomic era
Hamann et al. Structure-preserving sparsification methods for social networks
Aparício et al. Graphlet-orbit Transitions (GoT): A fingerprint for temporal network comparison
Ivanov et al. Understanding isomorphism bias in graph data sets
Nunes et al. GraphHD: Efficient graph classification using hyperdimensional computing
Christensen et al. Comparing community detection algorithms in psychometric networks: A Monte Carlo simulation
JP6451997B2 (ja) 演算実行装置、方法、及びプログラム
Garcia-Gasulla et al. Limitations and alternatives for the evaluation of large-scale link prediction
Chebotarev et al. How to choose the most appropriate centrality measure? A decision tree approach
KR101948235B1 (ko) 클러스터 앙상블을 통한 소프트웨어 아키텍처 모듈 뷰 복원 프레임워크 장치 및 방법
WO2022256922A1 (en) Method and system for explaining the rules of an artificial intelligence
Olsson et al. Hard cases in source code to architecture mapping using Naive Bayes
WO2018151619A1 (en) Network analysis tool testing
Zhong et al. Cluster ensemble based on iteratively refined co-association matrix
Sarkar et al. On rich clubs of path-based centralities in networks
Habib et al. Weight-based k-truss community search via edge attachment
Ferdowsi et al. Tscda: A novel greedy approach for community discovery in networks

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20051122

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060123

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20060314