既存ソフトウェアを解析し
将来のバグの発生を防ぐ
ソフトウェアの不具合やシステム障害のニュースを、みなさんもたびたび見かけることでしょう。開発やテストの段階でいくら問題が出ないよう対策しても、実際にリリースされ運用が始まってから問題が起きることは多々あります。そんな場合に、いかに手間をかけず問題を特定するか、またその前段階で、いかに問題を発生させず楽にソフトウェアを開発できるようにするかを目的に研究しています。
一例として、スマートフォンの音楽アプリやゲームアプリには、着信状態や電波状態といった、状態の変化が起きた場合に対応するためのプログラムコードが記述されており、そのようなプログラムコードを実装し忘れると予期せぬ問題が発生することがあります。もし、着信時に音楽やゲームを自動的に停止するようなプログラムコードを実装し忘れたならば、着信があっても音楽再生やゲームの実行が自動で中断せず、使いにくいアプリになることは想像できるでしょう。そこで「AやBの機能がだいたいいつも実装される」という関係を明らかにできれば、実装し忘れをリリース前に自動的に検出できます。そして、それによってリリース前にコードを書き足してバグの発生を防止できる可能性があります。私は、過去に開発された多数のAndroidアプリケーションから実装されているかどうかに関する特徴量を抽出・分析し、実装漏れ検出を行う手法を提案しました。また、コードの書き方には「入れ子構造になる箇所では字下げをする」などのコーディング規約と呼ばれるマナーがあります。これが守られていない「きたない」ソフトウェアは、人が読みたくないため間違いが見過ごされがちです。そのような、きたないコードの特徴を分析し、バグの発生リスクを予測する研究も行っています。

との思いがモチベーション
開発現場での経験が
研究の強い動機に
私はプログラミングが好きで、将来はそれを生かせるような職業に就職するつもりで、大学ではそのような系統の学問を修得するようにしました。その中で「ソフトウェア工学」について、何となく「どうすれば思った通りのソフトウェアを簡単に作れるか」を考える学問だと知りました。しかし当時はその重要性についてあまり実感がわかず、大学院修了後はメーカーに就職しました。ところが実際の現場では、自分も含め誰もがプログラミングに苦労していて、ソフトウェア工学の価値を考え直し、博士課程へ。その後、もっと現場を知ろうと入社した別の企業で、数々のきたないコードを目の当たりにし、ソフトウェアをどう作るのがよいかが分かる人材の教育や、きれいなコードを誰もが作れるための研究の必要性を感じて、現在の研究分野を選びました。
先に紹介した内容以外にも、きたないコードに関する研究としては、守られるマナーと守られないマナーの分析を行っています。例えば、経験の浅い人が無視しがちなマナーを明らかにできれば、技術者教育に反映できます。また、ソフトウェア開発の現場では、きたないコードがあっても、機能作り込みの段階やリリース直前など、ある段階まではあえてそのままにしておく場合があります。そこで企業と共同で、コーディング違反の特徴量を時系列で分析し、「どの段階までに何をきれいにしなければバグの発生につながるか」を明らかにしようとしています。分析にはデータサイエンス学科で学ぶ知識が応用でき、みなさんも副専攻でその知識を学べば、こうした研究に役立てられます。

ソフトウェア工学の価値を実感したと言う
技術者が開発に専念できる
世界を実現したい
将来的に私が叶えたいのは、技術者が開発に注力できる環境の実現です。バグの発生を防ぐことは技術者の関心事ではありません。システムを作りたい人が、そのことだけを考えられる世界を実現できればとの思いで、研究に取り組んでいます。ソフトウェア開発は多くを人の力に頼る世界ですが、最近では部分的にAIにコードを作成させることもできます。しかし、人でなければ作れない部分があることも確か。今後はそれを明らかにして、人をうまく支援する方法も探りたいと思っています。
思い起こせばコンピュータと出会ったのは小学生時代、流行していたファミコンを親が買ってくれず、代わりに近所の人からPCをもらってきたことでした。ボタンを押すと鳴る警告音に驚きながら、あちこちいじるうちに、マニュアルに載っていたプログラムコードを入力して簡単なゲームが動く達成感を味わいました。その後、動かない原因が案外つまらないことだったりすることも経験して、そういう状態をなくしたいとも思いました。ただ好きなことをやってきただけですが、その経験がなかったら、今ここにいないかもしれません。みなさんも何か好きなことを見つけて、ぜひコツコツ続けてください。それがもしソフトウェアだったら、とてもうれしいです。

- 研究室動画を見る
Profile
ソフトウェア工学科 教授名倉 正剛
専攻分野/ソフトウェア工学
(特に保守・運用)