ソフトウェアの「部品」同士の
関係性を明らかに
ソフトウェアは一度世の中に出ると10年や20年、長い場合は50年を超えて使われます。その間には不具合対応や機能変更・追加といった更新のため、プログラムのソースコードを書き加える「保守」が必要となります。スマートフォンアプリでたびたび行われるバージョンアップも、保守の一種です。私の研究は、新人技術者でも、何十年も使われているソフトウェアの全体像を的確に把握し、間違いのない保守ができることを目指すものです。
もう少し詳しく説明しましょう。ソフトウェアが動作する際には、その構成部品(ある機能を持つソースコードのひとまとまり)が、ソフトウェア内の他の部品を使ったり、ソフトウェアの外にあるライブラリと呼ばれるプログラムを利用したりします。そこで、「ある部品が、他のどの部品やライブラリを使っているか」という利用関係の類似度を分析し、同じような部品を利用することが多い部品同士にグループ分けします。すると、例えば3D描画ソフトなら、図形を横や上から見る、回転やズームをするといった、表示という共通の機能を持つ部品が、樹形図上で類似部品群としてひとまとまりになります。文字で書かれたソースコードを見ただけでは分からないこうした関係性を、一目で分かるデータとして提示することで、人の理解を助け不具合のない効率的な保守を支援できるものとなるよう、有効な分析手法を探っています。

ソフトウェア部品を分類。
樹形図(右図)の下部でつながるほど、類似度が高い部品群となる
ソフトウェア開発の
重要問題に貢献したい
想定通りの結果が得られることが研究の醍醐味ですが、そうならなかった場合でも、別の観点から分析を行うことで新しい知見が得られるのが研究の魅力です。例えば、「ソフトウェア内のどの部品を使うか」という観点で分類した場合には関連性が低かった部品同士が、「外部のどのライブラリを使うか」で分類すると同じ機能群になることがあるのです。また、ソフトウェアにはバージョンアップがつきものですが、バージョンアップのたびにどんな機能群が増大しているかという傾向を見える化できれば、「将来の機能拡張に備えて、この機能の設計を柔軟にしておこう」といった対策に役立つ可能性があります。機能追加を繰り返してツギハギ状態になるのをいかに防ぐかはソフトウェア開発における重要問題の一つですが、その解決に貢献できるかもしれないと期待して研究に取り組んでいます。
この他に、スマートフォンのアプリストアにおけるユーザーレビューの自動分類システムの研究にも取り組んでいます。☆の数とコメント内容をAIで分類し、「アプリが操作しづらい」という内容なら開発部門、「面白くない」という内容なら企画部門というように、アプリ提供企業のどの部署で対応すべきかを自動判別するシステムです。ソフトウェアそのものの分析ではありませんが、この研究も「見える化してデータを提供する」ことで、ユーザーの声を反映したソフトウェアの保守や開発支援につなげるという目的は同じです。ちなみにどちらの研究も学生と一緒に行っていて、一つめの研究では機能群に分ける際に階層的クラスター分析という手法を使い、二つめの研究ではAIの機械学習を行うなど、データサイエンスの知識を駆使しています。もちろん研究室でも学べますが、データサイエンス学科を副専攻に選んで学べば、より深く理解できるでしょう。

AIで分類する研究に、学生も参加
興味から出発して
社会へジャンプしよう
私は中学生のときにPC9801を買ってもらったことがきっかけで、雑誌に載っていたBASICのプログラムを打ち込み、ゲームをすることに熱中しました。たった1文字間違えただけでプログラムが動かず、原因を探し出すデバッグの苦労を味わいましたが、それが保守に興味を持つきっかけになりました。大学で情報系の学科に進んでからは、ある特定の文(や変数)に影響を与えうるソースコードを取り出す「プログラムスライシング」の技術を知り、ソフトウェアの部品間の関係に関心を持ちました。ポスドク時代に参加したプロジェクトでは、「見える化」による進捗管理を経験。振り返れば、これまでに興味を持った一つひとつが現在の研究につながっています。
高校生のみなさんには、ぜひ興味のあることや「何だろう」と思ったことをスタート地点にして、大学を「踏み台」として活用し、社会へジャンプしてほしいですね。大学の中でも特に理系は、関心分野ごとに学科が分かれ、選べるようになっていますし、南山大学では、機械システム工学科や電子情報工学科の授業を副専攻として学び、ソフトウェアが使われる先の機械やシステムについても理解することができます。またPCやプログラミングを学べる学科の中でも、南山大学のソフトウェア工学科は、単にプログラミングのスキルを学ぶだけではなく、ソフトウェア全体を見渡す視野を得られる学科です。ここで基本から学び、広い視野を手に入れて、社会で本領発揮してくれることを願っています。

Profile
ソフトウェア工学科 教授横森 励士
専攻分野/ソフトウェア工学(プログラム解析、ソフトウェアの再利用、ソフトウェア検索)