• 検索結果がありません。

リファクタリング指標の構築に向けたオブジェクト指向システムの漸進的開発における進化メトリクスのケーススタディ

N/A
N/A
Protected

Academic year: 2021

シェア "リファクタリング指標の構築に向けたオブジェクト指向システムの漸進的開発における進化メトリクスのケーススタディ"

Copied!
8
0
0

読み込み中.... (全文を見る)

全文

(1)ソフトウェア工学 136−13 ( 2 0 0 2 . 3.  7 ). リファクタリング指標の構築に向けた オブジェクト指向システムの漸進的開発における 進化メトリクスのケーススタディ 吉田 正和 1 1. 蔵川 圭 1. 中小路 久美代 1,2,3. 神谷 年洋 3. 奈良先端科学技術大学院大学 情報科学研究科 2 3. SRA 先端技術研究所. 科学技術振興事業団 さきがけ研究 21. {masaka-y,kurakawa,kumiyo,kamiya}@is.aist-nara.ac.jp 概要 オブジェクト指向ソフトウェアの発展を理解する上でリファクタリングを認識することが重要であると考 えられる.ところがソースコードの履歴から自動的にリファクタリングを識別する方法はなく,現状では人 間がソースコードを読んで調べる必要がある.本研究ではソースコードの履歴からソフトウェアのバージョ ン間のソフトウェアメトリクスの変化を調べることによってリファクタリングを識別する手法の構築に向け たケーススタディを行った.ケーススタディではリファクタリングの徴候をとらえていると考えられるいく つかのメトリクスの変化パターンを同定することができた.. A Case Study on Object-Oriented Metrics for Identifying Refactoring Processes in An Evolutionally Development Project Masakazu Yoshida1, Kei Kurakawa1, Kumiyo Nakakoji1,2,3 , Toshihiro Kamiya3 1. Graduate School of Information Science, Nara Institute of Science and Technology 2 3. SRA Key Technology Laboratory Inc. Japan Science and Technology Corp.. {masaka-y,kurakawa,kumiyo,kamiya}@is.aist-nara.ac.jp Abstract Identifying refactorings is important to understand evolution of object-oriented software. Since refatctorings would be found only by hand, we conduct a case study on object-oriented metrics toward constructing a methodology to find refactorings by looking at the changes in metrics of available versions. In the case study, we figure out some interesting patterns of changes in metrics which capture the certain aspects of refactoring processes.. −95− 1.

(2) 1. V c(c) Vi(c). はじめに. 現在,ソフトウェアはますます大規模化する一方. クラス c に定義されているクラスメソッドの 集合. Mi(c). クラス c に定義されているインスタンスメソッ ドの集合. re f mi (m, i). メソッド m が変数 i を参照するとき真,それ 以外は偽. re f cc (c, d). クラス c がクラス d を参照するとき真,それ 以外は偽. use(c, d). クラス c がクラス d のメソッドを使用してい るとき真,それ以外は偽. Locmeta (c). クラス c のメタクラス定義のソースコード行 数. 変更していく,いわゆる適応的あるいは発展的な開. 適応的に高品質のソフトウェアを開発する手法と して,オブジェクト指向ソフトウェア開発を対象 とした,スパイラル型開発 [1] や eXtreme Program-. ming(XP)[2] といった漸進的なソフトウェア開発 プロセスが注目されている.このような漸進的ソフ. loc(m) size(m). メソッド m のソースコード行数. calls(m). メソッド m に含まれるメソッド呼び出し演算 の回数. トウェア開発プロセスにおいてはリファクタリング. [3] — 従来のウォータフォールモデルでは非本質的 な後戻りの作業であるとみなされる小規模なソフト ウェアの内部設計の変更 — は,本質的な,繰り返. Call Sup(c). し発生しする作業である.従って,このような開発 プロセスにおいてソフトウェアの進化あるいは発展. クラス c の継承関係における上位クラスの集 合. child(c, d). クラス d がクラス c の継承関係における直接 の子であるとき真,それ以外は偽. Msg(c). クラス c で定義されているメソッドのメッセー ジセレクタ(シグネチャ)の集合. Odr(c). クラス c のトポロジカルソート順位:Call をク ラス間の参照による依存関係によって半順序 化したときの順位;最も多くのクラスから部品 として参照されているクラスを 1,どのクラス からも部品として参照されていないクラスを |Call | とする;定義より Odr は |Call | に依存す る. プロセスを観察するためにソースコードを人手で調 べる [4] には膨大な労力が必要となるため,何らか の自動化が必要である. そこで,本研究では,オブジェクト指向の漸進的 ソフトウェア開発プロセスを対象とした,オブジェ らリファクタリングを識別する手法の構築に向け. クラス全体の集合(システムクラスは除く). そのクラスの継承関係における下位クラスの 集合. しかしながら,ソフトウェアの進化あるいは発展. クト指向ソフトウェアメトリクスの時系列の変化か. メソッド m のバイトコードの大きさ(バイト 数). Sub(c). プロセスを理解するにはこれらのリファクタリング を認識することが重要であると考えられる.. クラス c に定義されているインスタンス変数 の集合. Mc(c). で,環境の変化や利用者の要求に応じてその機能を. 発プロセスが求められている.. クラス c に定義されているクラス変数の集合. Cot hers (c) = |Call − {c}| Msgothers (c) = ∪d∈C. others (c). Msg(d). て,ソフトウェアの内部設計の変化プロセスをメト 表 1: 記号の定義. リクスの時系列の変化から識別することを目的とし たケーススタディを行った. 本ケーススタディにおいては,大規模であるこ. いた.後で説明するように,これらのメトリクスが. と,ソースコードのバージョン履歴が管理されてい. 計測するソフトウェアの属性は異なっているため,. ること,漸進的なソフトウェア開発プロセスによっ. 併用することでより詳しくソフトウェアの変化を識. て開発されていること,オープンソースであるこ. 別することが可能になる.. と,などの理由から,Smalltalk/VisualWorks[5] で記. 2.1 定義. 述されたオブジェクト指向グラフィックスライブラ リである Jun[6] を対象として観察実験を行った.. 2. 表 1 にメトリクスの定義に使用する記号の定義を 示す. 基本メトリクス群は Smalltalk/VisualWorks のク. ソフトウェアメトリクス. ラスの基本的な規模を表す 7 個のメトリクスで,定. 本ケーススタディでは,オブジェクト指向ソフト. 義は表 2 のとおりである.. ウェアメトリクスとして,基本メトリクス,CK メ. CK メトリクス群は Chidamber と Kemerer [7] に. トリクス,青木メトリクスの 3 種のメトリクスを用. よる 6 個のオブジェクト指向複雑度メトリクスであ. 2 −96−.

(3) Locmeta (c). LOC(c). +. ∑mc∈Mc(c) loc(mc). +. ∑mi∈Mi(c) loc(mi) |V c(c)| + |Vi(c)| |V c(c)| |Vi(c)| |Mc(c)| + |Mi(c)| |Mc(c)| |Mi(c)|. NOA(c) NCV(c) NIV(c) NOM(c) NCM(c) NIM(c). 表 2: 基本メトリクス群の定義. ∑mc∈Mc size(mc)/128 + ∑mi∈Mi size(mi)/128 注:定数 128 は VisualWorks 2.5 のメソッドの. WMC(c). バイドコードサイズの平均値. |Sup(c)| |{d ∈ Call |d ∈ Cothers (c) ∧ child(c, d)}| |{x ∈ Call |x ∈ Cothers(c) ∧ (use(c, x) ∨ use(x, c))}| |Mc(c)| + |Mi(c)| + ∑mc∈Mc(c) calls(mc) + ∑mi∈Mi(c) calls(mi). DIT(c) NOC(c) CBO(c) RFC(c) LCOM(c). LCOM(c) = Tc (c) + Ti (c),ただし Pc(c) = {(mi, m j)|mi, m j ∈ Mc(c), {i V c(c)|ref mi (mi, i) ∧ re fmi (m j, i)))} = φ } Qc(c) = {(mi, m j)|mi, m j ∈ Mc(c), {i V c(c)|ref mi (mi, i) ∧ re fmi (m j, i)))} = φ } Pi(c) = {(mi, m j)|mi, m j ∈ Mi(c), {i Vi(c)|re fmi (mi, i) ∧ re fmi (m j, i)))} = φ } Qi(c) = {(mi, m j)|mi, m j ∈ Mi(c), {i Vi(c)|re fmi (mi, i) ∧ re fmi (m j, i)))} = φ }. ∈ ∈ ∈ ∈. 図 1: メトリクスの変化要因. と定義するとき. Tc (c) = |Pc(c)| − |Qc(c)| Ti (c) = |Pi(c)| − |Qi(c)| ただし Tc (c), Ti (c) < 0 ならば 0 とする. 2.2 ソフトウェアの発展とメトリクスの関連性. 表 3: CK メトリクス群の定義. リクスの変化に関係するかについて整理したものを. ソフトウェアのどのような属性の変化がどのメト 図 1 に示す. ソフトウェアの属性については,クラス単独の内. る.CK メトリクスを Smalltalk/VisualWorks に適. 部的な変化を表わすグループと他のクラスとの相互. 用する場合の定義を表 3 に示す.. 的な関係の変化を表わすグループに分類できる.こ. 青木メトリクス群は青木 [8] による Smalltalk で. のようにグループ分けをしたことにより,基本メト. 定義されたクラスのクラスライブラリ中の位置を数. リクス群のメトリクスはすべてクラス単独の属性の. 値化するメトリクスである.青木メトリクス群の定. みに基づくこと,青木メトリクス群のメトリクスは. 義を表 4 に示す.. すべて何らかのクラス相互の関係に基づいて決定さ れること,CK メトリクス群のメトリクスには,単 独の属性のみに基づくもの,単独の属性と相互の関. HF(c) RF(c). クラスの汎化−特化構造指標:. |Sup(c)|/(|Sup(c)| +1 + |Sub(c)|). 係の両者に基づくもの,相互の関係のみに基づくも. クラスの全体−部分構造指標:. の,の 3 種類があることがわかる.. Odr(c)/|Call (c)| PF(c). クラスのポリモルフィズム指標:. |Msg(c) ∩ Msgothers (c)|/|Msg(c)| CP(c). 3. クラスの人気度:. |{x|x ∈ Cothers(c) ∧ ref cc (x, c)}|. 表 4: 青木メトリクス群の定義. Jun の概要. Jun は,MVC(Model-View-Controller )アーキテ クチャに基く純粋なオブジェクト指向で設計され,. Smalltalk/VisualWorks で記述された 3D の幾何と 3 −97−.

(4) Evolution of Jun 700. 18000. JunOpenGL3dObject. number of classes 16000. number of instance methods. number of classes. number of class methods. 14000. 500 12000 400. 10000 8000. 300. 6000. number of methods. 600. 0. 50. 100. LOC. 150. 200. NOM. 250. NOA. JunOpenGL3dObject. 200 4000 100 2000 0. 50. WMC. 0 0. 50. 100. 150. 200. 250. 300. 100. DIT. NOC. 150 CBO. 200 RFC. 250 LCOM. 0 350 JunOpenGL3dObject. Jun version. 図 2: Jun の発展 0. 50 HF. 100 RF. 150 PF. 200. 250. CP. 位相,マルティメディアデータを扱うためのグラ フィックスライブラリである.Jun は,オープン ソースのフリーソフトウェアとして GPL(GNU. Public Licence )にしたがって配布されている [9]. Jun の各バージョンは, 「Jun999」のように,バー ジョンシリアル番号で識別される.本稿の執筆時点 の最新バージョンは Jun415 であり,Jun は過去 5 年間以上にわたりリリースを重ねて成長を続けてき ている.このように長期間にわたる Jun のリリース 記録はアーカイブに保存されており,Jun がオープ ンソースのソフトウェアであることから,誰でも自 図 3: メトリクス変化グラフの例. 由にソースコードを調べることが可能である.図 2 に,Jun005 から Jun345 までの Jun の発展の概観を クラス数,クラスメソッド数,インスタンスメソッ. 4.1 一般的なクラスの成長に従ってどのようにメ トリクスが変化するか. ド数の成長グラフとして示す.なお,グラフに不連 続な区間があるのは,Jun236 から Jun299 が欠番で あるためである.. 4. 一般的にバージョンアップに伴うクラスの成長 は,機能の追加によって生じる.その場合,WMC, すなわちクラスの重み付きメソッド数,RFC,すな わちクラスの反応,および LCOM,すなわちメソッ. ケーススタディ. 今回,Jun005 から Jun234 までの 227 個の各バー. ドの凝集の欠如,はいずれも増加する. メトリクスの変化パターン. ジョンについて,複数のバージョンにまたがって定. WMC (+). 義されている 467 個の全てのクラスのそれぞれに. RFC (+). LCOM (+). ついて,2 章で説明したメトリクスを適用しその数. この理由は,機能の追加は一般にそのクラスへの. 値の測定をおこなった.各クラスがバージョンアッ. メソッドおよび変数の追加だと考えられるからであ. プの時系列に従ってどのように発展してゆくかを分. る.メソッドの追加は,そのクラスの Mc, Mi 集合. 析するため,それぞれのメトリクスの変化を図 3 の. を増加させるので,これと関連をもつ WMC,RFC. ようなグラフとしてプロットした.. が増加する.また,メソッドや変数の変数の追加に. 本章では,これらのグラフをもとに,観察された 以下の変化の特徴について考察する.. ともなう Mc, Mi,V c,Vi 集合の増加により,これと 関連をもつ LCOM も変動することが多い.. −98− 4.

(5) JunLoop. JunMatrix. 45. 45 WMC. 6. 6. 5. 5. 4. 4. 3. 3. 40. 35. 35. 30. 30. 25. 25. 20. 20. 15. 15. 10. 10. 5. DIT. WMC. 40. 2. 2 DIT. 1. 1. 5. 0 0. 50. 100 150 Jun version. 200. 0 250. 0 0. 50. (a) WMC. 100 150 Jun version. JunMatrix 70. 70. 120. 60. 60. 100. 50. 50. 80. 80. 40. 40. 60. 60. 40. 40. 20. 20. 20. 10. RFC. 100. 0 0. 50. 100 150 Jun version. 200. WMC. 140. 120. RFC. 0 250. (a) DIT. JunLoop 140. 0 250. 30. 30 20. WMC. 10. 0 0. 50. (b) RFC. 100 150 Jun version. 700. 120. 120. 600. 100. 100. 500. 500. 400. 400. 300. RFC. LCOM. 300. 200. 200. 100. 100. 0 0. 50. 100 150 Jun version. 0 250. JunMatrix. 700 600. 200. (b) WMC. JunLoop. LCOM. 200. 200. 80. 80. 60. 60. 40. 40 RFC. 20. 0 250. 20. 0 0. 50. (c) LCOM. 100 150 Jun version. 200. 0 250. (c) RFC JunMatrix 200. 200. 150. 150. 100. 100. LCOM. 図 4: JunLoop のメトリクス変化. このパターンの具体例として JunLoop クラスの. 50. 50 LCOM. WMC,RFC,および LCOM の変化グラフを図 4 に. 0 0. 50. 示す.. 100 150 Jun version. 200. 0 250. (d) LCOM. 4.2 クラス階層の上位にクラスを挿入した場合の 変化. 図 5: JunMatrix のメトリクス変化. あるクラスの上位に新しいスーパクラスを挿入し た場合には,DIT,すなわちクラス階層におけるそ のクラスの深さが増加する.これに伴い,WMC,. RFC,および LCOM が減少する場合が多く見ら れる.. DIT (+). これと関連をもつ LCOM が変動することも多い. このパターンの具体例として JunMatrix クラスの. WMC,RFC,および LCOM の変化グラフを図 5 に 示す.この例では,グラフ上の矢印で示す Jun177. メトリクスの変化パターン. から Jun178 へのバージョンアップにおけるメトリ. WMC (−). クスの変化がこのパターンによるものである.. RFC (−). LCOM (−). 4.3 上位クラスを削除した場合の変化 この理由は,クラスの上位に新しいスーパークラ スが追加されることにより,そのクラスに定義され ていた変数やメソッドの一部が新しい上位クラスに 移動するためである.メソッドの移動はそのクラス. あるクラスの上位クラスを削除した場合には,. DIT,すなわちクラス階層におけるそのクラスの深 さが減少する.これに伴い,WMC,RFC,および. LCOM が増加する場合が多く見られる.. の Mc, Mi 集合を減少させるので,これと関連をも つ WMC,RFC が減少する.また,変数やメソッド の移動にともなう V c,Vi, Mc, Mi 集合の減少により,. 5 −99−. メトリクスの変化パターン. DIT (−). WMC (+). RFC (+). LCOM (+).

(6) JunVrmlCubeNode 5. 5. り,削除された上位クラスに定義されていた変数や. 4. 4. メソッドの一部がそのクラスに移動するためであ. 3. 3. 2. 2. DIT. この理由は,上位クラスが削除されることによ. る.メソッドの移動はそのクラスの Mc, Mi 集合を. 1. 増加させるので,これと関連をもつ WMC,RFC が. 1. DIT. 0 0. 50. 増加する.また,変数やメソッドの移動にともなう. 100 150 Jun version. 200. 0 250. (a) DIT. V c,Vi, Mc, Mi 集合の増加により,これと関連をも. JunVrmlCubeNode 10. つ LCOM が変動することも多い. WMC. このパターンの具体例として JunVrmlCubeNode クラスの WMC,RFC,および LCOM の変化グラ. 10. 8. 8. 6. 6. 4. 4. 2. フを図 6 に示す.この例では,グラフ上の矢印で示. 2 WMC. 0 0. す Jun108 から Jun109 へのバージョンアップにお. 50. 100 150 Jun version. 200. 0 250. (b) WMC. いて,JunVrmlCubeNode の上位にある 2 つの抽象. JunVrmlCubeNode. クラスが削除され,メソッドが JunVrmlCubeNode RFC. へ移動されている.. 4.4 メソッドの追加による変化 あるクラスにメソッドを追加した場合には,. 40. 40. 35. 35. 30. 30. 25. 25. 20. 20. 15. 15. 10. 10 RFC. 5. WMC が増加し,これに伴い,RFC,および LCOM. 5. 0 0. 50. が増加する場合が多く見られるが,PF,すなわちク. 100 150 Jun version. 200. 0 250. (c) RFC. ラスのポリモルフィズム指標の変化は増加する場合. JunVrmlCubeNode. と逆に減少する場合の 2 つのパターンがあることが LCOM. わかった. まず,メソッドを追加した場合に WMC,RFC,. 60. 60. 50. 50. 40. 40. 30. 30. 20. 20. 10. および LCOM が増加し,PF が減少するパターン. 10. LCOM. 0 0. 50. は,ソフトウェアに新しい機能を導入する場合に観. 100 150 Jun version. 200. 0 250. (d) LCOM. 察された.. 図 6: JunVrmlCubeNode のメトリクス変化. メトリクスの変化パターン. WMC (+). RFC (+). LCOM (+). PF (−). JunOpenGL3dObject. WMC. この理由は,新機能を導入する場合には,クラス に追加されるメソッドのメッセージセレクタ(シグ. 200. 200. 150. 150. 100. 100. 50. 50. ネチャ)は他のクラスで既に定義されているメソッ. WMC 0 0. ドのどれにも一致しないことが多いからである.こ. 50. 100 150 Jun version. 200. 0 250. (a) WMC. のような場合には,Msg,すなわち,そのクラスで. JunOpenGL3dObject. 定義されているメッセージセレクタの集合は増加す. 1. るが,Msg ∩Msg others ,すなわち,他のクラスで定. 0.8. 1 0.8 0.6. PF. 0.6. 義されているメッセージセレクタとの共通集合は変. (A). 0.4. 化しないので,PF が減少する.. 0.4. 0.2. 0.2 PF. 図 7 に JunOpenGL3dObject クラスの WMC およ. 0 0. び PF の変化グラフをこのパターンの具体例として. 50. 100 150 Jun version. 200. 0 250. (b) PF. 示す. 図 7: JunOpenGL3dObject のメトリクス変化. 興味深いことに,図 7(b) の矢印 (A) のように,メ. −100− 6.

(7) Jun2dPoint. ソッドの追加によって PF が減少した後に,WMC. 50. や RFC が一定,すなわち,そのクラスに対するメ. 50 WMC. 45. WMC. ソッドの変更がないにもかかわらず,PF の漸進的. 45. 40. 40. な増加が観察されることが多い.この理由は,もし. 35. 35. 導入された新機能がソフトウェアの発展に適合的. 30 0. 50. 100 150 Jun version. であったときには,その機能は他のクラスにも取. 30 250. 200. (a) WMC. り込まれていくからだと考えられる.このような. Jun2dPoint 1. 場合には,Msg,すなわち,そのクラスで定義され. 0.98. ているメッセージセレクタの集合は一定であるが,. 0.96. 1 0.98. PF. 0.96. Msg ∩ Msg others ,すなわち,他のクラスで定義され. 0.94 0.94 0.92 PF. 0.92. ているメッセージセレクタとの共通集合は大きくな. 0.9. 0.9 0. るので,PF が増加する.. 50. 100 150 Jun version. (b) PF. 次に,メソッドを追加した場合に WMC,RFC, および LCOM が増加し,PF も増加するパターン. 図 8: Jun2dPoint のメトリクス変化. は,メッセージの共通化のためにクラスにメソッド. JunVrmlBoxNode. を追加した場合に観察された.. JunVrmlCompiler. 1. 1. LCOM (+). 1 RF. 0.8. 0.8. 0.8. 0.6. 0.6. 0.6. 0.6. 0.4. 0.4. 0.4. 0.4. 0.2. 0.2. 0.2. PF (+). RF. 0.8. RF. RFC (+). 1. RF. メトリクスの変化パターン. WMC (+). 0.88 250. 200. 0 100. 0 120. 140. 160. 180. 200. 220. 0 100. 240. 0.2 0 120. 140. Jun version. 180. 200. 220. 240. Jun version. (a) JunVrmlBoxNode. (b) JunVrmlCompiler. JunVrmlKeywordTable10. この理由は,あるクラスにメッセージの共通化の. 160. JunVrmlGenerator. 1. 1. 1. 1. RF 0.8. 0.8. 0.6. 0.6. 0.6. 0.6. 0.4. 0.4. 0.4. 加されるメソッドのメッセージセレクタ(シグネチ. 0.2. 0.2. 0.2. RF. 0.8. RF. ためにメソッドを追加する場合は,そのクラスに追. 0.8. 0.4 0.2 RF. 0 100. ャ)は他のクラスで既に定義されているメソッドと. 0 120. 140. 160. 180. 200. 220. 240. Jun version. (c) JunVrmlKeywordTable. 0 100. 0 120. 140. 160. 180. 200. 220. 240. Jun version. (d) JunVrmlGenerator. 共有されるからである.このような場合には,Msg, 図 9: RF の変化パターン. すなわち,そのクラスで定義されているメッセージ セレクタの集合は増加するが,Msg ∩Msg others ,す なわち,他のクラスで定義されているメッセージ. ところが,多数のクラスについて RF の変化を観. セレクタとの共通集合も増加するので,PF が増加. 察したところ,RF の変化パターンの類似によって. する.. クラスをグループ化できる可能性があることがわ. 図 8 に Jun2dPoint クラスの WMC と PF の変化. かった.図 9 に示す例のように,クラス名の参照に. グラフをこのパターンの具体例として示す.. よって「部品と部品の使用者」の関係にあるクラス. 4.5 RF の変化 パターンによるクラスの グルー. (a)(b)(c) では RF の変化パターンに類似性があるの. プ化. に対し,類似する(同じプリフィックスで始まる). RF は,Odr,すなわちクラス名の参照関係で決定 される順序の変化を反映するので,そのクラスに変. クラス名をもつが関連性が低いクラス (d) では RF は異なる変化パターンをとっている. この理由は,Odr によるクラスの順序付けでは,. 化がない場合でも,他のクラスからの参照の追加や 削除,または,そのクラスが参照している他のクラ. 上に述べた「部品と部品の使用者」の関係にあるク. スの順序に変動があると,それらの影響を受けて大. ラス群,すなわちクラス名による参照関係があるク. きく変化する.この RF の性質は,メトリクス変化. ラス群は近いところに並び,クラスの順序が変化す. とソフトウェアの変化の関連性を認識することが困. るときには一緒に移動する傾向があるからだと考え. 難であるので,ソフトウェアの発展プロセスを分析. られる.. RF の変化パターンによるクラスのグループ化は,. するのには適さないと考えられる.. 7 −101−.

(8) 単独ではリファクタリングにより生じるメトリクス. グの評価に使えるようにしたいと考えている.. の変化を認識する手法につながるものではないが, 単一のクラスより大きな粒度でメトリクスの変化を. 本研究のために Jun のソースコードアーカイブを. 観察,分析するときの補助的な手段として利用でき. 快く提供していただいた SRA 先端技術研究所の青. る可能がある.. 5. 謝辞. 木淳氏に感謝する.. 考察. 参考文献. 今回のケーススタディでは膨大なソースコード履 歴の中から人手で面白そうなパターンを発見するの. [1] Boehm, B.W., A Spiral Model of Software De-. には多大な労力が必要であった.また,リファクタ. velopment and Enhancement, IEEE Computer,. リングを識別するためのパターンを網羅できたとい. Vol.25 No.5, pp.61-72, 1988. [2] Beck, K., eXtreme Programming eXplained:. う確証も得られにくい.開発者の作業イベントやソ. Embrace Change, Addison-Wesley, 2000.. フトウェアの発展に影響を与えた外部イベントの情. [3] Fowler, M., Beck, K., Brant, J., and Opdyke, W.,. 報を利用してリファクタリングの候補を絞り込むと. Refactoring: Improving the Design of Existing. いうアプローチが必要であろう.. Code, Addison-Wesley, 1999.. Jun には,多くのオープンソースソフトウェアと 同様に,開発者メーリングリストが存在するので,. [4] Demeyer, S., Ducasse, S., and Niertrasz, O.,. このメーリングリストの情報を使って開発者がリ. Finding Refactorings via Change Metrics, Pro-. ファクタリングを行った状況を把握することが可能. ceedings OOPSLA’2000, ACM Press, 2000.. である.また,Jun は独立したアプリケーションで. [5] http://www.cincom.com/smalltalk/. はなく,ライブラリであるので,Jun の発展は Jun. [6] Aoki, A., Free Software: Jun for Smalltalk. を利用する他のシステムの開発の影響を強く受けて. –. いる [9].したがって,Jun とこれらのシステム開発. that. との関連も調べていく必要があると考えられる.. http://www.sra.co.jp/people/aoki/Jun/. 6. A. 3D. Graphic. supports. Multi-Media. Topology. and. Library. Geometry,. [7] Chidamber, S. R., and Kemerer, C. F., A Metrics. まとめ. Suite for Object Oriented Design, IEEE Transactions on Software Engineering, Vol.20 No.6,. 本研究では,ソフトウェアメトリクスの時系列の. pp.476-493, 1994.. 変化からリファクタリングを識別する手法の構築. [8] 青木淳,オブジェクト指向システム分析設計. に向けて,Smalltalk/VisualWorks で記述されたオブ ジェクト指向グラフィックスライブラリである Jun. 入門,ソフト・リサーチ・センター,1993.. の 227 個の各バージョンについてメトリクスを計測. [9] Aoki, A., Hyashi, K., Kishida, K., Nakakoji,. し,ソフトウェアの内部設計の変化プロセスをメト. K., Nishinaka, Y., Reeves, B., Takashima, A.,. リクスの時系列の変化から識別することを目的とし. and Yamamoto, Y., A Case Study of the Evo-. たケーススタディを行い,観察されたメトリクスの. lution of Jun: an Object-Oriented Open-Source. 変化の特徴のいくつかについて分析した.しかし,. 3D Multimedia Library, Proceedings of Inter-. 今回論じたメトリクスの変化パターンが起り得るパ. national Conference on Software Engineering. ターンのうちで意味があるもののすべてであるとは. (ICSE2001), IEEE Computer Society, pp.524-. いえない.今後は,考察で述べたアプローチも含め. 533, 2001.. たケーススタディを進め,分析を深めることで,最 終的には,同定されたパターンを満す変化がリファ クタリングを正しく識別することを統計的に検証し て,メトリックスの変化パターンをリファクタリン. 8 −102−.

(9)

図 2: Jun の発展 位相,マルティメディアデータを扱うためのグラ フィックスライブラリである. Jun は,オープン ソースのフリーソフトウェアとして GPL ( GNU Public Licence )にしたがって配布されている [9] . Jun の各バージョンは, 「 Jun999 」のように,バー ジョンシリアル番号で識別される.本稿の執筆時点 の最新バージョンは Jun415 であり, Jun は過去 5 年間以上にわたりリリースを重ねて成長を続けてき ている.このように長期間にわたる Ju

参照

関連したドキュメント

1、研究の目的 本研究の目的は、開発教育の主体形成の理論的構造を明らかにし、今日の日本における

取り組みの進捗を測る指標(施策指標) 指標の名称 市内での産業活動が活発 に行われていると感じて いる市民の割合

指標の名称 指標の説明 方向 目標値(R5) 単位

5.本サービスにおける各回のロトの購入は、当社が購入申込に係る情報を受託銀行の指定するシステム(以

学術資源リポジトリにおけるLightweight Information Describing ObjectLIDOの検討 A study of Lightweight Information Describing Object LIDO in Academic Resource

11) 青木利晃 , 片山卓也 : オブジェクト指向方法論 のための形式的モデル , 日本ソフトウェア科学会 学会誌 コンピュータソフトウェア

概要・目標 地域社会の発展や安全・安心の向上に取り組み、地域活性化 を目的としたプログラムの実施や緑化を推進していきます

北区では、外国人人口の増加等を受けて、多文化共生社会の実現に向けた取組 みを体系化した「北区多文化共生指針」