Download
1 / 29

同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築 - PowerPoint PPT Presentation


  • 104 Views
  • Uploaded on

同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築. 海尻・海谷研究室 07TA595J  本田 俊光. 研究の背景(1). ソフトウェア開発において、開発目的によって   作業の分岐や、システムの統合が行われている。   例えば、新機能の開発と既存機能の保守を分担して作業する場合。   一度変更されてしまったソフトウェアは、違いを見つけて統合するのは困難。 Subversion などのバージョン管理ツールの支援が必要になる。. 研究の背景(2). バージョン管理ツールを使用しても、変更があった一部の機能に関係するコードのみを統合することは困難。

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築' - avel


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

海尻・海谷研究室

07TA595J

 本田 俊光


研究の背景(1)同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

  • ソフトウェア開発において、開発目的によって

      作業の分岐や、システムの統合が行われている。

      例えば、新機能の開発と既存機能の保守を分担して作業する場合。  

  • 一度変更されてしまったソフトウェアは、違いを見つけて統合するのは困難。Subversion などのバージョン管理ツールの支援が必要になる。


研究の背景(2)同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

  • バージョン管理ツールを使用しても、変更があった一部の機能に関係するコードのみを統合することは困難。

      例えば、開発者用のバージョンの一部機能を安定化バージョンに追加するような場合。


研究の目的同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

  • 同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築。

  • 開発経験を利用して、システムの機能の一部を、他のシステムに追加することを支援する。


支援システムの機能同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

  • 二つの異なるシステムの機能について、

      メソッド呼出の単位で、違を確認できる

      機能。

  • 機能に関係するファイルの差分について、

      確認できる機能。


用語の説明同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

  • 機能に関するテスト

      入力データに対する出力結果が仕様どうりか検証すること。

  • コールグラフ

      コールグラフとはメソッド間の呼び出し関係を表現

      した有向グラフ。プログラム中のメソッドをノードで、

      呼び出し関係をエッジで表現する。


支援システムの概要(1)同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

  • 元は同じシステムで、それぞれに変更が加えられた

    システム1とシステム2がある。

システムのメソッド構成と呼出関係の図:

M1

M2

M3

システム1

M4

M1

M2

システム2


支援システムの概要(2)同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

システム1の一部の機能を、システム2に追加する

場合の動作。

  • システム1で機能に関係するテストを実行する。

  • 実行の記録を解析する。

  • コールグラフを生成する。

  • 差分リスト表を生成する。


支援システムの構成同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

Java言語

CUI画面

Java言語

AspectJ

差分リスト

システム1

解析システム

システム2

Graphviz


支援システムの動作同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築(コールグラフの動的生成)

  • AspectJ を使ってメソッド呼出を記録する。

  • 記録を辿って呼出の関係をグラフにする。

アスペクト

プログラム

コールグラフ

呼出先

アドバイス:

ファイルにログを書く

メソッド呼出

0

1

0

0

0

0

0

0

呼出元

0

1

0

1

1

0

0

0


支援システムの動作同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築 (ファイル差分表の生成)

  • 実行ログからメソッド名を抽出。

  • クラスファイルからメソッド名を抽出(Bcel を使用)。

    Bcel: Javaのbytecode操作ライブラリ

  • 対応関係を調べる。

実行ログ(メソッド名)

ファイルの保持するメソッド名

対応関係をとる


システムの動作(ファイル差分表の生成)同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

  • ファイルのDiff(プログラムの行ごとの差分)をとる。

  • 差分からメソッドに関する変更を抽出。

システム1

システム2

ファイル差分表

ファイル1 ファイル2

・メソッドの内容が容等しい

・メソッドの内容が異なる

・メソッドがない

・メソッド以外の変更がある

・ファイルがない

ファイル2

ファイル1

Diff


支援システムの動作(メソッドの差分)同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

  • Bcelを使用して、メソッドの先頭と終わりの行をみつけて、

       ソースコードの差分(Diff)をとる。

Java ソース

Java Bytecode

0:   iconst_01:   istore_22:   iload_23:   bipush  1005:   if_icmpge    8:   invokestatic 

public void M1() {

i++;

..

..

}

Bcel


支援システムの使い方(1)同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

  • システム1でAspectJのプログラムをコンパイル。

  • システム1で機能に関するテストを使ってログを記録。

  • ログからシステム1のコールグラフを生成。

  • システム1とシステム2のファイル差分表を生成。

システム1の機能の一部をシステム2へ移す場合

システム1

システム2


支援システムの使い方(2)同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

  • 実装: システム2でM3を定義して、M2を変更する。

システム1

M2

M3

ファイル差分表

システム1、2で

M2は内容が異

なる

システム2で

M3は未定義

システム2

M2

M3


コールグラフ複雑化の問題同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

  • 機能に関係するメソッド数が増えると、コールグラフが複雑化して、理解が困難になる。

  • 追加したい機能に関係する変更点は、少ない場合が多い。


有効グラフの任意のノードの近傍表示同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築


深さ優先探索同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

あるノードから移動できる全方向に、探索を行い、一定距離で探索を打ち切る。

探索結果を保存(1)


有効グラフの転置同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

有効グラフは二次元の行列に

より表されている。

行列の転置行列を逆向きの有効

グラフを作成することができる。


逆方向深さ優先探索同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

転置により逆向きに

なった有効グラフを深さ優先探索を行うことにより、任意のノードより逆方向グラフを求めることができる。

探索結果を保存する(2)

探索を打ち切ったノードを

記録しておく。


有効グラフの任意のノードの近傍表示同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

(1)と(2)の結果を合わせる


評価方法同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

  • システムを開発する。

  • 完成したシステムの一部を変更する。

  • 一部の機能を実装開始から単体テストが

       合格するまでの時間を計る。

    支援システムを使った場合と使わない場合の開発時間の

    差比較する。


評価システム同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

出力

機能

  ・中値記法の式の計算。

  ・逆ポーランド記法の計算。

  ・プログラムリストの表示。

  ・時刻の表示。

  ・日付の表示。

  ・ホスト名の表示。

  ・ディレクトリのファイル数を表示。

クラス数: 8

メソッド数: 54

総行数: 663

入力

コントローラ

処理


評価システムに追加する機能同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

  • 1970年からのマイクロ秒を日付に変更。 (メソッド数1)

  • プログラムリストに行番号を表示させる。 (メソッド数1)

  • ホスト名を取得。 (メソッド数1)

  • ディレクトリのファイルの表示する。 (メソッド数2)

  • 中値記法に関するエラー処理をつける。(メソッド数3)


結果同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

実験者数4人

支援システム使用

(単位 秒)

支援システム未使用


まとめ同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

  • 機能の異なるシステム追加する支援システムを構築した。

  • 評価を行い、有効性を確認した。

今後の課題

  • 大規模なシステムの適応した場合の検証を

      行う。

  • 機能追加による影響解析を行う。


コールグラフの遠近表示同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

  • グラフのノードはクラス名とメソッド名で構成されている。

  • クラスとメソッドの関係がわかりにくい。

org.apache.log4j.Layout.getFooter

org.apache.log4j.Logger.trace

org.apache.log4j.Layout.format


コールグラフの遠近表示同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

Sample.log.trace

Sample.Level.info

Sample.log.getLog

Sample.log.getLog

Sample.log.isTrace

  • あるノードから一定以上にある、ノードをクラスとしてまとめる。


新しいグラフの生成(深さ優先探索)同種の異なる機能を持つプログラムに共通機能を追加する支援システムの構築

Sample.log

0

1

0

0

Sample.log

0

0

0

0

Sample.log.getLog

0

1

0

1

1

0

0

0

Sample.log

  • 新しくノードを追加しながら、グラフを作成

  • あるノードから一定以上にある、ノードをクラスとしてまとめる。


ad