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

OSAIFU:プログラム理解支援のためのAndroid Studio プラグイン
秦 将裕

西本 匡志

西山 佳志

川端 英之

弘中 哲夫

アプリケーションソフトウェアは，一般的に複数の機能を組み合わせることで構成されている．中でもイベント駆動型スタイルのソフトウェアは各機能の記述がソースコード内に散在しがちで個々の機能を把握しづらい．これに対し
我々は，効率的なプログラム理解を支援するツール OSAIFU を提案する．OSAIFU は，Android のプロジェクトを自動的に解析し，データ依存関係等に基づいてソースコード内に実装された機能を抽出し，その要約をユーザに提示する．OSAIFU は我々が開発したプログラム理解支援ツール SAIFU の機能を， Android Studio のプラグインとして実装したものである．OSAIFU は，Android Studio との連携により，ソフトウェア開発の最中にユーザが任意のタイミングでプロジェクト中のソース記述の全体像の把握や個々の機能の実装の詳細確認を行うことを可能にする．OSAIFU はアプリケーション開発効率向上に大いに寄与すると期待される．

1 はじめに完全には一致しないため，各機能の記述箇所が散在しがちとなる．しかしながら，他のスタイルのプログラ

ソフトウェア開発における保守や拡張といった作業

ムに対応したツールはあるものの，イベント駆動型ス

では，機能の実装箇所や内容の詳細を把握することタイルで実装されたプログラムに対して有効なツーが必要不可欠である．しかしながら，ソースコード中

ルは，我々の知る範囲ではみられない．に実装されている機能の記述箇所が散在しているプ

これに対し，我々は，イベント駆動型スタイルでログラムは，ソフトウェア開発者の機能把握を困難に記述されたプログラムにおける，ソフトウェア開発し，プログラム理解の作業に多くの時間を費やす原因者のプログラム理解の負担を減らすことを目的との一つとなる．

し，プログラム理解支援ツール OSAIFU を提案する．

アプリケーションソフトウェアは，一般的に複数のOSAIFU は Android Studio 上で開かれているプロ機能を組み合わせることで構成されている．その中ジェクトに対し，クラスの継承関係を考慮したデータ

でも，Android や iOS などのスマートフォンアプリ依存解析を行い，プロジェクト内に実装された機能をケーションは，イベント駆動型スタイルで記述されて自動的に抽出する．抽出された機能を，選択可能な機いる．そのようなアプリケーションソフトウェアにお能の要約の一覧として表示する．そして，ユーザが把ける一部のメソッドでは，イベントハンドラと呼ばれ握したい機能の要約を選択すれば，OSAIFU はソーる発生したイベント（例えば，アプリケーションの起スコード中で対応する行を強調表示する．

動やボタン操作）に対して実行されるメソッドが存在

OSAIFU は，我々が開発しているプログラム理解する．イベント駆動型スタイルで実装されたプログラ

支援ツール SAIFU [10] を統合開発環境の一つであ

ムでは，メソッドは一般的なメソッドの機能の境界とる Android Studio のプラグインとして実現したもの

OSAIFU： Android Studio plugin for supporting program understanding
Masahiro Hata，Masashi Nishimoto，Keiji Nishiyama，Hideyuki Kawabata， and Tetsuo Hironaka, 広島市立大学, Hiroshima City University.

である．多くの Android アプリケーションは複数のソースファイルで構成される傾向にある. SAIFU では一度の解析で一つのファイルしか解析できなかったのに対して，OSAIFU ではアプリケーションのプロジェクトに含まれる複数ファイルを解析できるようする．この機能によって，ユーザが個々の機能に関すに，SAIFU の解析プログラムをソースファイル単位る把握だけではなく，大雑把にプロジェクト全体のプからプロジェクト単位に拡張した．

ログラム構造や振る舞いを把握できると期待される．

OSAIFU を使用することによって，ユーザは An-

なお，ユーザが何に関する機能であるかを直感的に把droid プロジェクトに実装されている特定の機能につ握できるように，データの可視化手法の 1 つであるいて，ソースコードの全体を追うことなくその内容とタグクラウドを用いている．

記述箇所を把握できるようになると期待される．An-機能 2 では，機能 1 によって提示されたタグクラ

droid Studio との連携によって，ユーザは Androidウドの一覧のうち，ユーザによって選択された機能がStudio に組み込まれているデバッガ機能や，メソッ

実際にソースコードのどの場所に記述されているかドや変数などの定義場所や使用箇所に移動するジャンを強調表示された箇所で確認できる．ユーザは，プロプ機能（以下，ジャンプ機能と呼ぶ）を利用でき，プグラムの全体を見ずとも，強調表示されたコード記述

ログラム理解支援の効果が高まると期待される．

だけ読むことで，選択された機能の振る舞い等につい本発表では，OSAIFU を提案し，OSAIFU がユーて確認できる．

ザへのプログラム理解に及ぼす効果を示すために，提さらに，OSAIFU にはフィルタリングやタグクラ案ツールを用いていくつかの観点に基づいて行った評

ウドに対する文字列検索などの機能も組み込まれて価結果を示す．

いる．フィルタリング機能は，エディタの最前面に表以下，2 章では OSAIFU の概要を述べる．3 章で示されたソースコードに関するタグクラウドのみをは OSAIFU の設計と実装について詳説する．4 章で表示し，ユーザはプロジェクト内でのそのソースコーは OSAIFU の有用性について評価する．5 章では関ドの役割を把握しやすくなる．また，文字列検索機能連研究について述べる．最後に，まとめと今後の課題

は，タグクラウドの一覧から，ユーザが与えた単語集を述べる．

合を全て含むタグクラウドの一覧のみに絞り込むことができ，ユーザが求める機能を探しやすくする．

2 OSAIFU の概要

2. 2 OSAIFU の使用例

本章では，OSAIFU が持つ機能やその使用例を詳Android アプリケーションに関するサンプルプロ説する．

グラムが格納されている Google Samples1 の Ac-celerometerPlay を用い，OSAIFU の使用例につい2. 1 OSAIFU が持つ機能て述べる．

OSAIFU は Android プロジェクト内に実装されて図 1 は，OSAIFU に AccelerometerPlay を適用しいる機能の内容と記述箇所の把握を支援する 2 つのた時の実行画面を示したものである．まず，ユーザ機能を持つ．

は，図 1 右上に配置されている analyze ボタンを押機能 1 与えられたプロジェクト内に実装されてい下する．すると，OSAIFU はプロジェクトのディレる各機能の注釈をタグクラウドの一覧でユーザクトリに含まれる複数のソースファイルを解析し，図に提示する．

1 の右に示されているように機能ごとのタグクラウド

機能 2 ユーザによって選択されたタグクラウドの機能に関連するソースコード中の記述箇所を強調表示する．
機能 1 では，プロジェクトを構成する複数のソーの一覧を表示する．
ユーザはタグクラウドの一覧に表示された単語を確認し，プロジェクト内に実装された機能の大雑把な内容を把握できる．例えば，図 1 のタグクラウド

スファイルに実装されている各機能に対して，何に関するものであるかを表す注釈を一覧でユーザに提示

1 https://github.com/googlesamples

図1

OSAIFU の実行画面の一覧からは，AccelerometerPlay のアプリケーショインの 2 つの要素から構成されている．

ンには，画面描画や画面の傾きに関する情報取得，背SAIFU は，ソースコードを解析するための中心的景画面の設定，加速度センサの値取得などの機能で構な役割を果たす．つまり，プロジェクトのディレクト成されていると読み取れる．

リを入力とし，そのディレクトリ内に含まれるソースユーザが特定の機能に関する内容の詳細や記述箇所コードを解析することで，SAIFU は Android アプリを把握したい場合，その機能に関するタグクラウドをケーションから実装された機能を抽出する．OSAIFU選択することでソースコードの記述箇所を強調表示さの解析で使用される SAIFU は， [10] に記述されてせることができる．これにより，ユーザは強調表示さいる Web アプリケーション SAIFU のプログラム解れた記述箇所のみに集中してコードリーディング可能

析部をプロジェクトディレクトリ内の複数のソースになる．例えば，図 1 で選択された上から 4 番目のタファイルが同時に解析できるように機能拡張したもグクラウドに対応する加速度センサに関する機能は，のである．Android Studio で開かれている Android

320，323，329 行目の 3 つの記述箇所が関係していプロジェクトに対して呼び出されると，SAIFU はプることが分かる．これらの関連箇所を読み進めれば，ロジェクト内のソースファイルに対応するタグクラウ

加速度センサに関する機能は，registerListener やドの集合を生成する．一度タグクラウドの準備が整う

unregisterListener，getDefaultSensor の 3 つのと，OSAIFU は SAIFU コンポーネントと対話をす

API メソッドを用いて実装されていることや，各 APIることはなく Android Studio 上のビューを制御する

メソッドを使うための具体的な記述例を把握することための独自の仕事を行う．ユーザが Android Studioなどが可能である．

を上でソースコードを変更した場合，SAIFU を再度3 OSAIFU の設計と実装呼び出してタグクラウドを更新する必要がある．
プラグインでは，SAIFU コンポーネントより得ら

3. 1 OSAIFU の構成れた情報をもとに，ユーザに選択可能なタグクラウド

図 2 に OSAIFU の構成図を示す．OSAIFU は，の一覧を提示する Android Studio の GUI 表示を提SAIFU と呼ばれる解析用のコンポーネントとプラグ供している．タグクラウドの一覧は，各ステートメン

OSAIFU

SAIFU

ステートメントセット

ステートメント

グラフ

データ依存

タグクラウド情報を付与した

抽出した

データ依存

セット

ステートメント

グラフ

セット抽出

生成

tag

タグ

stmt

クラウドstmt
set
stmt
setstmt
set

tag

stmt

生成

tag

stmt

tag

tag

set

tag

tag

tag

プラグイン

Android Studiosettagset

プロジェクトディレクトリ図2

OSAIFU の構成図

3. 2. 1 データ依存グラフの生成
used in

stopSimulationの依存関係に基づいて，データ依存グラフを生成す

arg

る．図 3 に図 1 のソースコードから得られるデータ

Activity.getSystemService

thisSimulationView

gen
arg

複数のソースファイルに対して解析されたデータ

Context.SENSOR_SERVICE

onCreate

used inSensor.TYPE_ACCELEROMETER

mSensorManager

points toused inpoints toarg

SensorManager.unregisterListener
SensorManager.getDefaultSensor

points to

genstartSimulation

mAccelerometer
thisused inargSensorManager.SENSOR_DELAY_GAME

arg
arg

SensorManager.registerListener

図3

図 1 のソースコードから得られるデータ依存グラフの一部依存グラフの一部を示す．データ依存グラフは，3 種類のノードや，それらの異なるノードを繋ぐ有向エッジからなる．各ノードは API メソッド，もしくはオブジェクト（クラスのインスタンス，または基本型の値）である．エッジには arg（引数），gen（戻り値の代入先），points to（クラスのインスタンスの使用箇所）とラベル付けされている．なお，点線で囲まれたノードとそのノードから出るエッジ（used in）は,API メソッドが呼び出されているメソッド定義を示している．

トセットを構成する要素数の降順で配置されている．

例えば，図 3 の SensorManager.getDefaultSensor

ユーザが選択したタグクラウドに関連するソースコーのノードから mAccelerometer のノードに gen とラド中での記述箇所が強調表示される．また，OSAIFUベル付けされた有向エッジは、図 1 の 320 行目のスのフィルタリングやタグクラウドに対する文字列検索テートメントを示すものであり．同様に，323 行目となどの機能を実現するための処理も行っている．

329 行目のステートメントに対応するノードと有向エッジを図 3 からそれぞれ確認することができる．

3. 2 SAIFU による機能抽出と要約

3. 2. 2 ステートメントセット抽出

SAIFU は，プログラム要素間の依存関係を分析す

3.2.1 節で述べたデータ依存グラフ生成で得られたることによって，ソースコードに実装された機能を抽グラフからステートメントを収集し，ステートメン出する．

トセットを抽出する．ステートメントセットには，スSAIFU は，データ依存グラフの生成，ステートメントセットの抽出，タグクラウドの生成の 3 つの処理を行う．以下の項で，それぞれの処理の詳細を述べる．

テートメントが記述されているソースファイル名と行番号の情報も含まれている．
例えば，図 3 のデータ依存グラフより得られるステートメントセットには，図 1 で表示されている 範 囲 で は ，320 行 目 ，323 行 目 ，329 行 目 の ス
テートメントと行番号 (320, 323, 329)，ファイル

名 AccelerometerPlayActivity.java といった情報況を取得する記述を他のプログラムに流用する場面が格納されている．

について想定する．

3. 2. 3 タグクラウド生成

既存のプログラムの記述をたのプログラムに流用

3.2.2 節で述べたステートメントセット抽出から得する際に想定される大まかな手順は次の通りである．

られた各ステートメントセットに含まれる API メソッ

まず OSAIFU に表示されたタグクラウドの一覧からドとその所属クラスの名前から，(1) キャメルケース探したい記述に関連するタグクラウドを特定する．次やスネークケースなどの命名規則に基づいて単語をに，そのタグクラウドを選択することで強調表示され抽出して正規化し，(2) TF-IDF 法 [6] を用いてそのた記述箇所の内容を把握する．そして, 該当箇所を抜単語への重み付けを行うことによって，タグクラウドき出す．

を生成する．なお，(2) 単語の重み付けに TF-IDF 法OSAIFU で BasicNetworking のプロジェクトを解を用いるのは，特徴的な単語を見出すためである．

析したとき 16 個のタグクラウドが表示される．次に，

OSAIFU の検索機能を用いて，タグクラウドの一覧
3. 3 OSAIFU の実装に表示されたタグクラウドの数を絞る．今回の場合

OSAIFU は，Android Studio のプラグインとしてでは，Wifi の接続状況を取得する記述で関連のあるJava 言語で実装されている．SAIFU コンポーネンと思われる “connect” で検索することで図 4 のようトも Java 言語で書かれており，Java のソースコーなタグクラウドが表示される．図 4 より，元々16 個ドを解析するために Eclipse Java development tools

あったタグクラウドのリストが 1 個になったことがわの Java 用の構文解析ライブラリ

かる．

2を用いた．また，タグクラウド生成時の単語の正規化には Stanford

次に，ユーザは検索した単語以外のタグクラウド

CoreNLP を用いた．ソースコード解析とタグクラの情報を見る．すると，“network” や “info”，“get”

ウド生成は SAIFU コンポーネントに含まれる．An-といった単語から，表示されたタグクラウドがネット

droid Studio プラグインの GUI を構築するために，ワークの接続状況を取得する機能に関連しているとIntelliJ PlatformSDK を用いた．

理解できる．

3

4

また，ユーザがタグクラウドを選択することで，そ4 評価の機能に関する記述箇所が強調表示される．ユーザは，本章では，OSAIFU がプログラム理解に対して効強調表示された行だけに集中してコードリーディング果的に支援できるか，いくつかのユースケース行い，することでその機能の詳細な内容を把握できる．もし，機能拡張によるツールの変化を主観的に評価し考察ユーザが強調表示された行だけでは振舞いが把握でする．

きないならば，Android Studio の機能のジャンプ機
能や型情報表示機能も活用できる．強調箇所の振る舞

4. 1 ユースケース

いを把握すると，ConnectivityManager.TYPE WIFI

4. 1. 1 ソフトウェア開発における拡張や保守に対が Wifi の接続状況を取得する記述であると確認でき，して及ぼす効果
本節では，ソフトウェア開発における保守における95，96，97，99 行目を流用することで他のプログラムで使用できると容易に判断できる．

OSAIFU の使用感を確かめる．BasicNetworking の4. 1. 2 Android Studio との連携による効果

プロジェクトにおいて実装されている Wifi の接続状

OSAIFU は，Android Studio のプログラム理解を支援する機能との併用によりソフトウェア開発に役立

2 https://www.eclipse.org/jdt
3 https://stanfordnlp.github.io/CoreNLP
4 https://www.jetbrains.org/intellij/sdk/docs/
welcome.html

つ多くのケースがあると考えられる．
デバッガ機能との併用で，特定の機能におけるプログラムの実行経路や変数の値の変化を確認する．例え図4

OSAIFU に対して BasicNetworking のプロジェクトを適用した実行画面

ば，図 1 右の一番目のタグクラウドは単語数が多く，することで取得間隔を決める定数やどのような振る複数の機能が混在していることが見て取れる．その混舞いをするのかを定義箇所のコメントから把握する在した機能の詳細把握を試みる手段として，デバッガことが出来る．

機能との併用が挙げられる．ソースコード内に散在した各記述箇所で逐次停止させることで，画面サイズ情4. 2 複数ソースファイルへの対応

報 “display”，“metrics” と加速度センサ値 “sensor”，OSAIFU によって複数のソースファイル解析を行っ“accelerometer” の 2 つの値を使用して，ビューの座た際に得られる機能やそのタグクラウドの妥当性に標を指定する “view”，“x”，“y” というデータの流れついて，それぞれ，単ソースファイル解析で得られを把握することが出来る．

る結果との違いを比較する．なお，本節の評価では，ジャンプ機能との併用で，特定の機能の詳細な内容を把握する．例えば，図 1 の 320 行目の記述は，2.2

2017 年 1 月に Google Samples から取得したサンプルプログラムを用いた．

節で先述したように OSAIFU を用いることで，加速度センサに関連する機能であるとすぐに理解でき観点 1 ソースコードからの機能抽出る．そして，ソースコード中のコメントを読むこと

解析単位の変更によってソースコードから抽出したで，SensorManager.SENSOR DELAY GAME がセンサの機能にどのように変化したか調査する．図 5 に Google取得間隔を決める定数であることが把握できる．しSamples の 158 プロジェクトに含まれる Java 言語でかし，ソースコード中のコメントだけでは，センサ記述されたソースコード全てを SAIFU で解析した時の取得間隔を決める定数が何種類あるのか．また，に得られる機能ごとに関連するステートメント数のどのような時にどの定数を使うべきかは把握するこ分布を示す．図 6 に Google Samples の 158 プロジェとができない．そこで，把握できていない内容を知クトを OSAIFU で解析した時の機能ごとに関連するる手段として，ジャンプ機能との併用が挙げられる．

ステートメント数の分布を示す．なお，各分布図にはSensorManager.SENSOR DELAY GAME の定義場所であ重複しているステートメントセットを含んでいる．

る android.hardware.SensorManager クラスに移動

図 5，図 6 より，2 つの図に大きな変化は見受けら10000

1000

100101

図5110100

1000

10000

単ソースファイル解析時の各機能におけるステートメント数の分布

図8

実行例 2

存関係が新たに接続され，結果的に複数のファイルを跨いだ巨大なステートメントセットが抽出されるようになったためと考えられる．

10000

次に，OSAIFU で解析することで得られた実行例を図 7，図 8 に示す．

1000

図 7 より選択されたタグクラウドは複数ファイルに関連していることが緑色のポップアップからわかる．

100

そして，複数ソースファイル間でネットワークの接続

101

図6

状況を表示する機能を成していることが記述箇所を110100100010000

複数ソースファイル解析時の各機能におけるステートメント数の分布確認することで把握できた．
一方，図 8 も図 7 と同様に選択されたタグクラウドは複数ファイルに関連している．しかし，図 8 の実行例で強調表示された行を見ると多くの行に色付けされている．これは，図 8 の選択されたタグクラウドのステートメントセットが 1 つの機能を成しているわ
けではなく，Bluetooth と接続する機能，Bluetoothの接続状況を確認する機能，接続状況を出力する機能といった関係性の近い複数の機能が繋がって一つの巨大なステートメントセットとなったことが原因の一つであると考えられる．
観点 2 機能の注釈としてのタグクラウド表現
機能の要約を構成する単語が解析単位の変更によりどのように変化したか調査する．図 9 に Google

図7実行例 1Samples の 158 プロジェクトに含まれる Java のソースコード全てを SAIFU で解析した時のタグクラウれないが，単一ファイル解析に比べ，複数ファイル解ドを構成する単語数の分布を示す．図 10 に Google

析の方が出現回数は少ないが大きなステートメント

Samples の 158 プロジェクトを OSAIFU で解析したセットを抽出する傾向にあると言える．これは，ソー時のタグクラウドを構成する単語数の分布を示す．

スコードの解析単位をファイル単位からプロジェクト

図 9，図 10 より，2 つの図には大きな変化が得ら単位に変更したのに伴い，複数ファイル間のデータ依れない．しかし，機能を構成する単語数は，単一ファ

10000

1000

100101

図9110

100


1000

単ソースファイル解析時のタグクラウドを構成する単語数の分布
図 11

解析単位変更によるタグクラウドの変化10000考えられる．また，図 11 で選択されたタグクラウドは，同じ機能を示すタグクラウドであり，使用して1000いるデバイスが Bluetooth と接続できるか確認する機能であることがソースコード中の説明から確認で100きた．図 11 の右のタグクラウドより，“bluetooth”，

101

図 10“adapter”，“support” といった機能に関連する単語
110

100

1000

複数ソースファイル解析時のタグクラウドを構成する単語数の分布から Bluetooth に関連する機能であることは把握できるが実際の機能を特定することはできない．一方，図11 左のタグクラウドでは，“bluetooth”，“adapter”，“support”，“scan” といった単語から Bluetooth をサポートしているか調べる機能であると把握でき，コ

イル解析に比べ，複数ファイル解析の方が出現回数はメントから読み取った実際の機能とさほど違いがな

少ないが単語数の多いタグクラウドを生成する傾向いと言える．これは，複数ファイル解析で，単一ファにあると言える．これは，複数ファイル解析によってイル解析時には得られなかった情報が得られるようにステートメントセットが巨大になり，ステートメントなったからである．したがって，複数ファイル解析にで呼び出される API メソッドも増加したためである

よってさらに詳細な機能の内容把握ができるようにと言える．

なったと言える．

次に，単一ファイル解析によって得られたタグクラウドと複数ファイル解析により得られたタグクラウドについて比較する．

5 関連研究ソフトウェア開発者にとって feature location はソ

図 11 の右は，BluetoothAdvertisements プロジェ

フトウェアの保守や開発を行う際の重要な作業であクトの MainActivity.Java を SAIFU で解析した時

る [3]．OSAIFU は，強調表示により機能の記述箇所に表示されるタグクラウドであり，図左は OSAIFUを示す点で，feature location を支援するためのツーで解析した時に表示されるタグクラウドである．図ルと見なすことができる．

11 より，左右のタグクラウドを構成する単語に大きそして，ソースコードの要約もソフトウェアの保な差がある．複数ファイル解析によって比較的大きな守における重要な作業の一つである．OSAIFU はステートメントセット同士が繋がったためであるとソースコードから機能を抽出し要約として提示する

点で，コード要約のためのツールであると言える．

述箇所を強調表示すること．また，AndroidStudio とTASSAL [4] は，ユーザの任意の尺度でソースコードの連携により AndriodStudio のプログラム支援機能を要約し，コードの畳み込みと展開によって要約をとの併用で，アプリケーション開発効率向上に大いに示す．

寄与すると期待される．

コードやデータを視覚化することによってプログ

主観的な評価により提案ツールを用いることで，ラム理解を支援するツールも何十年も研究されてきAndroid Studio 上でプログラム内の実装機能や機能た [9]．SHriMP [12] と Wholf [1] は，静的なコードの記述箇所の把握が容易となり，プログラム理解に要可視化ツールである．SHriMP は，階層的な表示の仕する負担を軽減できる可能性があることを明らかに組みを導入し，ソースコードから関数や変数などのソした．今後の課題として，機能抽出の正確さの向上，フトウェアの要素を抽出して，それらの関係を可視化

OSAIFU を用いた被験者実験等が挙げられる．

する．Wholf は，複数のビューを用いることでソフトウェアの要素間の情報を提示する．OSAIFU もまた静的なコード可視化ツールであるが，イベント駆動型プログラムをサポートしている点や Android Studioとの連携，機能要約といった点でそれらのツールと異なる．

Code Crawler [5] や Pinzer ら [11] は，オブジェクト間の依存関係やクラスのパッケージ間の関係を可視化している．Jeliot3 [8] はプログラムの実行中にプログラムで使用されるデータの変化を視覚化する．

OSAIFU は，動的な情報を使うのではなく，プログラムの振る舞いを把握することに役立つ可能性がある一種のプログラムスライスを表示することができる．

Code Canvas [2] は様々な相互関係によって関連のあるソースコード間をスムーズに移動できるような効果的な視覚化を提示するために，複数のソースコードエディタの配置を調整できる．CodeCity [13]や CodeForest [7] は，ソースコードのクラスやメソッドの数などのソフトウェアメトリクスを可視化するツールである．これらの研究では，プログラムの構造と特性を把握するのに役立つ 3 次元のグラフィック表
現を使用している．それらの機能の統合は OSAIFUをさらに使いやすくするだろう．

6 まとめと今後の課題
本稿ではソフトウェア開発者の開発における負担軽減を目的に Android Studio のプラグインとして設計したプログラム理解支援ツール OSAIFU を実装し主観評価を行った．

OSAIFU は，プロジェクト内の機能を表示し，記参 考 文 献[ 1 ] Brade, K., Guzdial, M., Steckel, M., andSoloway, E.: Whorf: a visualization tool for software maintenance, Proceedings IEEE Workshop on
Visual Languages, Sep. 1992, pp. 148–154.
[ 2 ] DeLine, R. and Rowan, K.: Code Canvas:
Zooming Towards Better Development Environments, Proceedings of the 32Nd ACM/IEEE International Conference on Software Engineering - Volume 2, ICSE ’10, New York, NY, USA, ACM, 2010,
pp. 207–210.
[ 3 ] Dit, B., Revelle, M., Gethers, M., and Poshyvanyk, D.: Feature location in source code: a taxonomy and survey, Journal of Software: Evolution
and Process, Vol. 25, No. 1(2013), pp. 53–95.
[ 4 ] Fowkes, J., Chanthirasegaran, P., Ranca, R., Allamanis, M., Lapata, M., and Sutton, C.: TASSAL:
Autofolding for Source Code Summarization, 2016
IEEE/ACM 38th International Conference on Software Engineering Companion (ICSE-C), May 2016,
pp. 649–652.
[ 5 ] Lanza, M., Ducasse, S., Gall, H., and Pinzger,
M.: CodeCrawler: An Information Visualization
Tool for Program Comprehension, Proceedings ofthe 27th International Conference on Software Engineering, ICSE ’05, New York, NY, USA, ACM,2005, pp. 672–673.
[ 6 ] Manning, C., Raghavan, P., and Schütze, H.:
Introduction to information retrieval, Natural Language Engineering, Vol. 16, No. 1(2010), pp. 100–103.
[ 7 ] Maruyama, K., Omori, T., and Hayashi, S.:
A Visualization Tool Recording Historical Data ofProgram Comprehension Tasks, Proceedings of the22Nd International Conference on Program Comprehension, ICPC 2014, New York, NY, USA,ACM, 2014, pp. 207–211.
[ 8 ] Moreno, A., Myller, N., Sutinen, E., and BenAri, M.: Visualizing Programs with Jeliot 3, Proceedings of the Working Conference on Advanced

Visual Interfaces, AVI ’04, New York, NY, USA,ACM, 2004, pp. 373–376.
[ 9 ] Myers, B. A.: Visual Programming, Programming by Example, and Program Visualization: A
Taxonomy, Proceedings of the SIGCHI Conferenceon Human Factors in Computing Systems, CHI ’86,
New York, NY, USA, ACM, 1986, pp. 59–66.
[10] Nishimoto, M., Nishiyama, K., Hideyuki, K.,
and Hironaka, T.: Supporting program understanding by automatic indexing of functionalities insource code, SERA 2019, May 2019, pp. 13–18.
[11] Pinzger, M., Graefenhain, K., Knab, P., andGall, H. C.: A Tool for Visual Understanding ofSource Code Dependencies, 2008 16th IEEE International Conference on Program Comprehension,June 2008, pp. 254–259.
[12] Storey, M. . D. and Muller, H. A.: Manipulating
and documenting software structures using SHriMP
views, Proceedings of International Conference on
Software Maintenance, Oct 1995, pp. 275–284.
[13] Wettel, R., Lanza, M., and Robbes, R.: Software
Systems As Cities: A Controlled Experiment, Proceedings of the 33rd International Conference on
Software Engineering, ICSE ’11, New York, NY,USA, ACM, 2011, pp. 551–560.