ソフトウェア変更支援パターン

 ソフトウェア進化を実現するために,ソフトウェア変更は必須である.このような観点から,OORP[7]の7章では,システムの移行戦略に関する12個のパターンが紹介されている(OORPパターン7.1〜7.12).さらに,9章と10章では,設計変更(責任の再分配と条件から多態性への変換)に関するパターンが紹介されている(OORPパターン9.1〜9.3,10.1〜10.6).これらは,リエンジニアリングにおける単一のソフトウェア変更を扱ったパターンである.

 これに対して,ソフトウェア進化において,変更は繰り返し,かつ,継続的に発生する.このため,ソフトウェア進化を想定した環境では,ソフトウェア構成管理システム(software configuration management system)や版管理システム(version control system)の利用が一般的である[18].また,IDE(Integrated Development Environment)や継続的インテグレーション(CI: Continuous Integration)[19]の普及も進んでおり,ソフトウェア変更を積極的に活用する技術が登場している.

 このような状況を受け,ソフトウェア変更を支援する5つのパターンを紹介する.

パターン 4.1

変更履歴を記録しよう
Record Change Histories

変更履歴を記録することで,変更すべき箇所を知りたい.

問題

解法

トレードオフ

-利点

-欠点

関連するパターン

 本パターンは,過去から学ぼう / Learn from the Past (OORP パターン5.5) を補うものである.頻繁に変更が行われるプロジェクト,もしくは長期間の記録があり,変更候補が多数提示される場合には,活動履歴を記録しよう/ Record Interaction Histories (パターン4.2)によって候補の順位付けを行うことができる.

パターン 4.2

活動履歴を記録しよう
Record Interaction Histories

活動履歴を記録することで,変更すべき箇所を知りたい.

問題

解法

トレードオフ

-利点

-欠点

パターン 4.3

粒度を調整しよう
Manage Granularity

ソフトウェア保守の際には,過去に行った変更の正しさを検証したり,また同チームの他の開発者が行った変更を分析したりする.こういった変更の利活用に役立つよう,変更の記録を行っておきたい.

問題

解法

トレードオフ

-利点

-欠点 -困難

根拠

問題よく知られた使い方

 オープンソースソフトウェアKDEでは,完了していない変更や原始的(atomic)でないコミットを構成しないよう,コミットポリシーに定めている[22].

関連するパターン

 本パターンの実現は,変更履歴を記録しよう / Record Change Histories (パターン4.1)の欠点である,記録に間違いがあると正しく変更を推薦できないことの防止に役立つ.また,本パターンは構成管理パターンランゲージ[23]における Task Level Commit と同種のものである.ただし,保守や進化のためのパターンランゲージとして再構成されている.

パターン 4.4

変更から意味的差分を抽出しよう
Extract Semantic Difference from Changes

過去に発生したソフトウェアの変更をなるべく容易に理解したい.

問題

解法

議論

 差分の表現形式に特に定型的なものはなく,技術/ツールによって様々なものがある.代表的なものを以下に挙げる.

トレードオフ

-利点

-欠点

問題よく知られた使い方

 意味的差分を抽出する技術は,知られたところではJacksonとLaddによって最初に提案され(semantic diff と呼ばれる)[7],その後も改良を加えた様々な技術が提案されている[24][25].

関連するパターン

 意味的に単一な変更でない場合,プログラム解析の結果も大きくなって得られる結果も取り扱いが難しくなる.粒度を調整しよう / Manage Granularity (パターン4.3)の適用により変更の粒度に関して注意を払えば,本パターンの効果は大きくなる.

パターン 4.5

変更作業の手順書を作成しよう
Make Instructions for Software Modification

変更作業を実施する前に手順書を作成することで,ソフトウェアを変更する際に発生する作業効率を高める.

問題

解法

トレードオフ

-利点

-欠点 -困難

根拠


参考文献
パターン集のトップへ戻る ページのトップへ戻る