日本ソフトウェア科学会第 38 回大会 (2021 年度) 講演論文集

機械学習を用いたソフトウェア安定性分析に関する研究
可知 敬朗

青山 幹雄

野呂 昌満

沢田 篤史

本研究では，ソフトウェアをモジュールとその依存関係に着目したグラフ表現によって抽象化し，機械学習を用いてその特性を抽出，可視化することでソフトウェアの安定性を分析する方法の提案をする．近年，OSS（Open SourceSoftware）開発は，不特定多数のユーザの参画により，開発実態の把握が困難であるという問題がある．要因の一つとして，モジュールへの変更が行われた際，依存関係にある他のモジュールに対する影響の範囲や度合が明確でないことが挙げられる．本研究では，変更による悪影響を受けにくいソフトウェアの性質を安定性と捉え，モジュール依存に着目したグラフ表現，および表現学習とクラスタリングを用いた定量的な分析を行うことで，ソフトウェアの特性を分析する．グラフデータベース Neo4j，機械学習アルゴリズム graph2vec を用いて，提案方法を支援するプロトタイプを実装する．

れまで困難であった．

1 研究の背景と課題

本稿では，モジュールとその依存関係の観点からソOSS（Open Source Software）は，通常複数のユーフトウェアをグラフとして抽象化し，大域的な特性をザによって頻繁に変更が加えられ，その結果，ソフト分析する新たな方法を提案する．提案方法は，抽象化ウェアの構造が複雑化し，変更による影響の理解がしたグラフモデルに対し表現学習を適用することで，困難になる．これを解決する一方法として，利用関ソフトウェアの特性を分散表現として獲得し，クラス係の観点からソフトウェア全体の構造を明らかにし，タリングによりメトリクスの特性を分析し，その時系変更による影響を安定性として分析する研究がある

列変化を観測することにより，ソフトウェア変更に伴[3] [4] [12]．

う安定性の変化を明らかにすることができる．

ソフトウェア全体の依存関係は，呼出し（Call）関係や利用（Use）関係に着目したグラフモデルで表現できる．グラフ構造の影響分析や変化の予測には，ソフトウェア構造をグラフでモデル化し，その特性を分析することが有用である [2] [6]．しかし，そのグラフ構造の大域的特性の時間的推移を分析することはこ
Analyzing Stability of Software Systems using Machine Learning.
This is an unrefereed paper. Copyrights belong tothe authors.
Takaaki Kachi, 南山大学大学院理工学研究科ソフトウェア工学専攻, Graduate Program of Software Engineering, Nanzan University.
Mikio Aoyama, Masami Noro, Atsushi Sawada, 南山
大学理工学部ソフトウェア工学科, Dept. of SoftwareEngineering, Nanzan University.

研究背景を踏まえ，本稿では次の 2 点を明らかにすることを研究課題とする．

RQ1: モジュールの利用関係を表す依存関係グラ
フモデルはどのように定義できるか

RQ2: 依存関係グラフの表現学習によりソフトウェ
アの安定性はどのように分析できるか

2 関連研究2. 1 ソフトウェア安定性
ソフトウェアの安定性に関する研究は継続的に行われてきた [4] [12]．Fayad ら [4] はソフトウェアの安定性に関して，変更に伴う問題の事例を紹介し，安定性に対する主張をしている．Ramirez ら [12] はソフ
トウェアアーキテクチャの安定性の定義を議論するた

めに，複数の関連研究から，安定性に寄与するソフト的に示すために有効であり，Constantinou らは，外ウェアの特性が何であるのかを調査した．

部安定性と内部安定性からソフトウェア全体の安定性

2. 1. 1 安定性の定義が定義できるものとしている．これらの指標をもとソフトウェア品質の国際規格である ISO/IEC 25010に，ソフトウェアの進化構造の定量的評価についても[7] とその JIS 規格の JIS X 25010 [8] の製品品質には，言及している．

ソフトウェアの安定性に直接対応する品質特性は定義されていない．一方で，保守性（Maintainability）

2. 2 グラフモデルに基づくソフトウェアの依存性と変更影響の分析の副特性である修正性（Modiﬁability）が「欠陥の取込みも既存の製品品質の低下もなく，効果的，かつ，ソフトウェアを構成するプログラムの利用関係は依

効率的に製品やシステムを修正することのできる度合

存グラフ（Dependence Graph）でモデル化され，ソい」と定義されている．一般に，ソフトウェアの安定

フトウェアの理解支援や静的解析の基礎として研究さとは，変更の影響把握が容易かつ，変更による悪影響れてきた [6]．このグラフモデルは保守において変更が伝播しにくいことに起因すると言える．この点で，影響分析（Change Impact Analysis）の基盤として修正性は我々が分析の対象としたい OSS の安定性を広く利用されている [2]．これらの研究で実施される含む品質特性であると言える．

方法としては，グラフの特定のノードを起点とする，

2. 1. 2 外部安定性と内部安定性局所的なグラフ探索が中心である．

我々は，安定性が変更に起因するものであると捉える．この観点は，先行研究等でも広く了解されている

2. 3 グラフ／ネットワーク表現学習ものであり，その対象は，コードレベルからアーキテグラフ／ネットワーク表現学習（Graph/Networkクチャ，要求レベルまで異なる抽象度にわたる．ここRepresentation Learning）[1] [5] とは，グラフ構造ので，主要な課題の一つはアーキテクチャの安定性であ特性を分散表現（特徴ベクトル）として獲得する方法

る．Constantinou らは進化再利用の観点から，パッである．代表的アルゴリズムとして graph2vec [10] がケージ利用関係の変化に基づき，アーキテクチャ安定ある．

性に関して次の 2 つの尺度を定義した [3]．

• 外部安定性 (ES: External Stability)：graph2vec は，ニューラルネットワークを用いたグラフサンプリングを実現するためのシステムであソフトウェアのある連続したバージョン間で，削り，word2vec や doc2vec と同様の設計思想を持つ．

除されたパッケージの個数と再利用されたパッdoc2vec における文書に相当するものがグラフ全体ケージの個数により算出される値．取り得る値のであり，文章中の出現単語に相当するものがサブグラ

範囲は [0, 1] であり，0 の場合は全てのパッケーフである．サブグラフにラベルを割り当て，（グラフ）ジが削除された場合，1 の場合は全てのパッケーコーパスを生成することにより，Skip-gram モデルをジが再利用された場合を意味する．

適用する特徴を持つ．これらの設計思想により，意味• 内部安定性 (IS: Internal Stability)：
ソフトウェアのある連続したバージョン間で，的に類似したサブグラフはベクトル空間の近い位置に特徴ベクトルとして生成される．

パッケージ間の利用関係の削除と追加の個数によ

さらに，Narayan ら [10] は，graph2vec で獲得されり算出される値．取り得る値の範囲は [0, 1] であた特徴ベクトルに対し，k-means 法に代表されるクり，0 の場合は前のバージョンの全ての利用関係ラスタリングを適用することで，有効な分類タスクをが削除されて新しい利用関係だけが次のバージョ行うことが出来ると述べている．

ンに残っている場合を意味し，1 の場合は全ての利用関係が変更されていない場合を意味する．
これら 2 つの尺度はソフトウェアの安定性を定量

2. 4 グラフ表現学習による OSS コミュニティ分析類タスクを実行する．この操作により特徴ベク

加藤らは OSS 開発コミュニティにおける開発者，及トルを獲得する．また，ベクトル空間において，びその活動を SCGM（Software Community Graph

意味的に類似したベクトル同士が近くにマッピンModel）として定義し，グラフ表現学習を用いて開発グされていることが期待される．

者の活動に関する特徴ベクトルを獲得している [9]．特3. 特徴ベクトル分析

徴ベクトルをクラスタリングして，OSS 開発コミュ(2) において獲得された特徴ベクトルをクラスタ

ニティにおける開発者の成長パターンとその進化構リングし，その構造を分析する．特徴ベクトルが造を明らかにしたが，ソフトウェア構造は分析対象にどの点に集合しているかを調べるため，k-meansなっていない．

法を用いることで特徴ベクトルの重心を求める．
また，この操作により分析対象となったモジュー

3 グラフモデルの表現学習を用いた安定性分析
本研究では，表現学習による特徴ベクトルの獲得，クラスタリングによる分析を経ることにより，安定性ルを意味的に類似するクラスタに分離できる．この処理を (2) における外部安定性，内部安定性のそれぞれの特徴ベクトルに対し実施する．

4. ソフトウェア安定性分析の定量的分析を行う．この方法により，Constantinou

ソフトウェア安定性の変化を観測するため，(3)らの定義した外部安定性と内部安定性を，[0, 1] の範で得られた特徴ベクトルの重心について，時系列囲よりも詳細に定量化することを目指す．

で視覚化する．重心の時間的変化により，安定性フレームワークは以下である．

を推測する．

1. 依存関係グラフモデル定義
ソフトウェアの変更の影響を安定性として分析するために，モジュールの利用関係に基づくグラフモデルへの抽象化を行う [3] [4]．実際のグラフの生成に関して，グラフ管理データベース（GDBMS）である Neo4j [11] を利用する．Neo4j を利用する理由としては，

4 分析プロセスとプロトタイプシステムの実装
4. 1 分析プロセス
分析プロセスは以下の 5 つのステップから成る．また，図 1 に示す．

1. 仮説，分析内容設定• プロパティグラフを管理できる点

設定した仮説に基づいて，仮説ごとに明らかにす• クエリによるグラフの探索が容易である点

るべき分析項目を設定する．

が挙げられる．実際のグラフインスタンスの生成に関しては 4. 2 節で記述する．

2. 特徴ベクトル獲得
依存関係グラフによって表現される安定性を，定量的なメトリクスとして抽出するために，グラフ表現学習によってソフトウェア全体の構造変化に関する特徴ベクトル（Feature）を獲得する．

2. Graph Database（GraphDB）実装
本ステップは，3 節における「依存関係グラフモデル定義」に対応し，以下の 2 つのサブステップから成る．

• GitHub からのデータ収集• GraphDB インスタンス生成
3. フィーチャ分析

graph2vec [10] を学習アルゴリズムとして利用し，本ステップは，3 節における「特徴ベクトル獲連続するバージョンにおけるモジュールの削除／得」，「特徴ベクトル分析」に対応し，以下の 2 つ追加の個数，モジュール間の利用関係の削除／追のサブステップから成る．

加の個数に基づいて学習のラベリングを行うことで，外部安定性と内部安定性それぞれにおいてモジュールの変更と利用関係の変更に関する分• graph2vec によるフィーチャ獲得• k-means 法によるクラスタリング
4. 安定性分析

4. 3 安定性分析
Constantinou らの安定性分析の定義に基づき，外部安定性，内部安定性，ソフトウェア全体の安定性について分析する．

• 外部安定性
Constantinou らの外部安定性の定義に基づき，モジュールの変更を元にソフトウェアの安定性を分析する．ソフトウェアの連続するバージョンにおいて，削除されたモジュールと再利用されたモ
図1

本研究の分析プロセス

ジュールの個数をラベルとし，生成したグラフインスタンスに対し表現学習を適用する．学習の入本ステップは，3 節における「ソフトウェア安定力は，あるバージョンにおけるモジュール依存関性分析」に対応する．分析結果から，ソフトウェ係グラフの分割されたサブグラフであり，出力さアの外部安定性，内部安定性を求め，ソフトウェれる特徴ベクトルついては，意味的に近いサブグア全体としての安定性を分析する．また，ソフトラフがベクトル空間にマッピングされていること

ウェアの安定性をバージョンごとに時系列で視覚を期待する．

化することにより，多期間にわたるソフトウェアの安定性の変遷を観測する．

5. 仮説検証• 内部安定性
Constantinou らの内部安定性の定義に基づき，モジュールの利用関係を元にソフトウェアの安定分析結果，評価結果から，設定した仮説を検証性を分析する．ソフトウェアの連続するバージョする．必要に応じ，得られた結果に基づいて，仮ンにおいて，利用関係に対する削除，追加などの説の追加や変更を行い，一連のプロセスを繰り変更の回数をラベルとし，生成したグラフインス返す．

タンスに対し表現学習を適用する．学習の入力は，外部安定性と同様に，モジュール依存関係グ

4. 2 GraphDB 実装

ラフの分割されたサブグラフであり，出力される

3 節における依存関係グラフモデル定義に基づき，特徴ベクトルついては，意味的に近いサブグラフ

Neo4j にてグラフインスタンスを生成する．依存関係がベクトル空間にマッピングされていることを期

グラフはノードとエッジに属性集合を定義できるプロパティグラフ [13] を用いる．ノードのプロパティ定義とエッジの型定義を表 1 に示す．

待する．

• 安定性
外部安定性と内部安定性の 2 つの指標より，ソフ分析対象は，Python のプログラム及び，Pythonトウェア全体の安定性を分析する．具体的には，のプログラムが含まれるディレクトリとする．自モ獲得した特徴ベクトルに対し，k-means 法を用ジュールでソフトウェア内の他モジュールを「import」

いることでその重心を求め，重心の位置を数値グすることを本研究では「USE」エッジとして表現し，ラフとして可視化し時系列に観測する．この操分析における利用関係に該当するものとする．また，作により，外部安定性と内部安定性の時間的変化「CONTAIN」エッジは利用関係ではなく，視覚化しを確認でき，ソフトウェア全体の安定性を分析でたグラフの全貌の理解を容易にするために導入してきる．

いる．

表1

ノードのプロパティとエッジの型の定義

属性/型
ノード

エッジ

記述項目

name

ディレクトリ名 or モジュール名

def

ディレクトリ形式 or ファイル形式

path

分析対象ルートディレクトリからのパス

CONTAIN
USE

あるディレクトリ下に他のディレクトリ，プログラムが存在あるプログラムが他のプログラムを import

5 考察
Constantinou らはソフトウェアの安定性を，モジュールとモジュール間の利用関係における変更に基づく数理モデルを定義して分析している．対して本研
究では，外部安定性と内部安定性を依存関係グラフモデルと graph2vec を用いることで，先行研究における [0, 1] の定量表現をニューラルネットワークによって再定義した．本提案により，安定性の推移のより詳細な観測を行うことが可能となる．

6 まとめ
本研究では，Constantinou らのソフトウェア安定性の定義に基づき，依存関係グラフモデルと graph2vecによる特徴ベクトル獲得を用いた分析を提案した．今後の課題として，前節に述べた Constantinou らの研究との比較，及び提案を支援するプロトタイプの実装が挙げられる．GitHub 上の実際の OSS に対し本研究の提案を適用し，その有効性，及び妥当性を示す必要がある．
謝 辞 本 研 究 の 一 部 は ，科 研 費（ 基 盤 研 究（C）20K11759），および 2021 年度南山大学パッヘ奨励金
I-A の助成による．
参 考 文 献[ 1 ] 浅谷公威, 他: ネットワーク表現学習によるネットワークの成長可視化, 情報処理学会第 186 回知能シス

テム研究会, Vol. 2017-ICS-186, No. 6, 情報処理学会,
Mar. 2017, pp. 1–6.
[ 2 ] Bohner, S. A.: Software Change Impacts: AnEvolving Perspective, Proc. of ICSM 2002, IEEE
Computer Society, Oct. 2002, pp. 263–271.
[ 3 ] Constantinou, E. et al.: Architecture Stabilityand Evolution Measure for Software Reuse, Proc.
of SAC 2015, ACM, Apr. 2015, pp. 1580–1585.
[ 4 ] Fayad, M. E. et al.: An Introduction to Software Stability, Vol. 44, No. 9, CACM, Sep. 2001,
pp. 95–98.
[ 5 ] Hamilton, W. L. et al.: Representation Learningon Graphs: Methods and Applications, Apr. 2018,
pp. arXiv:1709.05584v3.
[ 6 ] Horwitz, S. et al.: The Use of Program Dependence Graphs in Software Engineering, Proc. ofICSE 1992, ACM, Jun. 1992, pp. 392–411.
[ 7 ] ISO/IEC 25010:2011: Systems and Software Engineering - Systems and Software Quality Requirements and Evaluation (SQuaRE) - System and Software Quality Models, (2011).
[ 8 ] JIS X 25010:2013: システム及びソフトウェア製品の品質要求及び評価（SQuaRE） - システム及びソフトウェア品質モデル, 日本規格協会, (2013).
[ 9 ] 加藤聖也: 機械学習によるグラフモデル OSS 開
発コミュニティ構造の特徴量分析方法の提案と評価,
No. 6N-03, 情報処理学会, Mar. 2019, pp. 281–282.
[10] Narayanan, A. et al.: graph2vec: Learning Distributed Representations of Graphs, Proc. of MLG
2017, Mining and Learning with Graphs, Jul. 2017.
https://arxiv.org/abs/1707.05005/.
[11] Neo4j.Inc: Neo4j. https://neo4j.com.
[12] Ramirez, S. M. et al.: Software Stability: A
Systematic Literature Review, Proc. of CONISOFT
2018, IEEE Computer Society, Oct. 2018, pp. 109–115.
[13] Robinson, I. et al.: Graph Database, 2nd Edition, O Reilly, 2015.