ソースコード変更波及解析の8カテゴリ - どのくらいご存知ですか?
変更波及解析は既存のソフトウェアに変更を加えたら、どの場所に影響を与えるかを調べる方法です。影響は本来の意図であるものや本来意図していない副作用も含みます。変更波及解析が不十分だとデグレードする場合があります。
Steffen Lehnert氏のA Review of Software Change Impact Analysisという文献調査をしたテクニカルレポートがここで公開されています。調査対象の文献が182件ある大きめの調査です。網羅性や調査方法に関しても客観的な基準を与え、洗練した上で論文として公開されるのかもしれません。
このテクニカルレポートで紹介されている影響波及解析のカテゴリの一覧は以下のとおりです。10カテゴリのうち9番目は組合せ、10番目は「その他」なので、実質的には8カテゴリあります。どのくらいのカテゴリをご存知ですか?
いずれも完璧とはいかないまでも、変更波及解析を支援してくれます。
- Call Graphs
- Dependency Analysis
- Program Slicing
- Execution Traces
- Explicit Rules
- Information Retrieval
- Probabilistic Models
- History Mining
- Combined Technologies
- Other Technologies
1, 2, 3はソースコード解析によるもので、プログラムを実行せずに解析します。1. Call Graphは関数、メソッド呼出し(制御構造)の依存関係を明らかにします。2. Dependency Analysisは制御、データ、継承(オブジェクト指向プログラミング言語の場合)による依存関係を明らかにします。3. Program Slicingは調べたいソースコードの一部を選択し、そこに関連する部分のみを抽出します。これらの方法は、ポインタ、ネットワーク、ファイルといった実行してみないと実行結果がわからないという制約があります。
4. Execution Tracesはプログラムの実行履歴を収集し、分析するものです。1. のCall Graphsと似ていますが、変更した後で実際に実行された部分に限定されます。
5. Explicit Rulesは設計、ドメイン、専門家の知識を明示的にルールとして記述し、変更がルールに関係すれば、そのルールに従って変更部分をさがします。ルールを網羅的に準備しておく必要があります。
6. Information Retrievalはソースコードを含むドキュメントに記載されている単語や表現が似ているものを探します。たとえば変更箇所に「出庫」という単語が含まれている場合、ドキュメント、ソースコードに「出庫」が含まれいればその場所に変更が波及する可能性があります。一般的な単語はドキュメントの様々な場所に現れるので単語の選択が難しいといった制約があります。
7. Probabilistic Models、8. History Miningは統計モデル、学習モデルに変更履歴やソースコードの作成者といった情報を与え、次の変更を予測します。7. の場合、モデルに与えるものに限定はなく、上述1のCall Graphsでもかまいません。
上述のサーベイ論文は、変更波及解析に限定したものですが、もう少し広い範囲で日本語のサーベイ論文もあります。大森氏、丸山氏、林氏、沢田氏による「ソフトウェア進化研究の分類と動向」です。ソフトウェア進化は保守・派生開発を対象とした研究分野です。