kuri8iveにいきてこ。

仮面ライダーになりたい。

ICSE2018論文から見るソフトウェア工学の最新研究動向

こんにちは。

当記事ではICSE 2018の論文をふわっと見ていくことで、ソフトウェア工学分野ではどんな研究がされているかをふわっと眺めていきましょう。

ICSEとは

そもそもICSEとは何かというと、

www.icse-conferences.org

International Conference on Software Engineering、一言で言えばソフトウェア工学分野における最も名誉ある会議ですね。採択率は15%程度。

テーマとしては、自動プログラム修正やOSS開発、バグ発見など開発に関連するものが中心となっています。

そんなICSEの2018年度版が先日開催されたので、acceptされた論文をふわっと眺めることで、この分野では今どんな研究がされているのかをふわっと見ていこうというわけです。

今回は5つほどピックアップしてみました。

Identifying Features in Forks

機能追加やバグ修正のプルリクエストをするにあたって、まずフォークしますよね。大きいプロジェクトになるとフォークの数増えますよね。

すると、 「バグ修正してプルリクエスト送ったらちょっと前に誰かがもうやってた…骨折り損…」 なんて事態も発生してしまうわけですね。

事実、プルリクエストの14%はそのせいで弾かれてしまっているそうです。

だがしかし、プルリクエストの一つ一つを追うのはしんどい。。。まじむり。。。

そこでこの研究では各フォークがどんな変更をしているか自動要約するツールを開発。

f:id:kuri8ive:20180728212527p:plain
論文 figure 1より

個人的には、要約というにはキーワードの羅列ではちょっと弱いかな感はあります。ただこの辺は自然言語処理の技術で改良できそう。

f:id:kuri8ive:20180728212534p:plain
論文 figure 2より

変更されたコード行から依存グラフを特定→クラスタ化→ラベル付けという3ステップで実現しているとのこと。

14%もの悲しきリジェクトを救うためにも、改良を重ねていい感じに仕上げてもらいたいものですね。

Self-Hiding Behavior in Android Apps: Detection and Characterization

うっかり悪質なアプリを入れてしまったばかりに、データ抜き取られたりすると当然まずいですよね。この研究は悪質なAndroidアプリ(マルウェア)を検出しようとするものです。

一般的なスキャンツールでは悪意のある動作そのものを検出しようとしますが、提案手法では「Self-Hiding Behavior」という、悪意がある動作をユーザから隠す振る舞いの方を検出します。

f:id:kuri8ive:20180728221935p:plain
論文 figure 2より

Self-Hidingでよく利用されるAPIがあるか、あったとしたらそれはユーザーが行うアクティビティか、メッセージの送信・削除と言ったペアがあるか、アクティビティがが表示される前に終了するか、ユーザを欺くような動作をしているかの5分析をベースに検出。

今回はマルウェアの検出に使われましたが、対象行為を隠したりする行為を検出することでより精度良く検出するやり方は応用が効くかもしれないですね。

Are Code Example on an Online Q&A Forum Reliable?

こちらは調査をした論文です。 対象は、おなじみStack Overflow。

Stack Overflowってみんなお世話になってると思うけど、実際どうなん?信頼して使っていいの?→うーん。。。という研究。

例えば、評価した投稿(にあるコードスニペット)のうち、なんと31%にクラッシュ等の予期せぬ動作を引き起こす可能性があるとのこと。

さらには、得票数と安全性には相関なし。これは気をつけないと。

f:id:kuri8ive:20180728220114p:plain
論文 figure 1より

例えば↑このコードスニペットでは例外処理をしてなかったり。

他にもセキュリティ関連の投稿は信用しちゃダメとか、不完全・不明瞭な箇所が多いとか、Stack Overflowは気をつけて使おうねという研究がチラホラ見受けられました。

Program Splicing

プログラムを書いている時、
「こここういう風に書けないかなぁ」→ググる→いい感じのコード片が見つかる→「おっ助かった!」→コピペ
ということがありますよね。それをコンピューターが勝手にやってくれるようにした研究です。

例えば、csvファイルから行列を読み込みたい時、

f:id:kuri8ive:20180728203356p:plain
論文 figure 1より

こういう形の、こういうテストをパスするコードがここに欲しい!って書いて、「??」でリクエストすると、

f:id:kuri8ive:20180728202202p:plain
論文 figure 1より

自動でそのコードが出てくる。えっすごい。

OSSから取得した大量のメソッドをデータベース化→類似コード片の検索→条件に見合うように改変
という手法により実現。

現時点では、計算量が指数的に増加したり合成に時間がかかったりと課題があるようですが、改良されIDEの機能になった際にはコーディングが劇的に変わるかもしれません…!

From UI Design Image to GUI Skeleton: A Neural Machine Translator to Bootstrap Mobile GUI Implementation

デザイナーがデザインしたUI画面スケッチを元に、エンジニアがそれを実装する。よくある流れですね。

この研究はそれをかなり楽にしてくれるかもしれません。

どう楽にしてくれるかというと、

f:id:kuri8ive:20180728204940p:plain
論文 figure 1より

「UIデザインのこの部分はTextViewだよ」というように、画像から自動で実装パーツの切り分けをしてくれます。

f:id:kuri8ive:20180728205342p:plain
論文 figure 2より

画像を入力とし、木構造を表すテキストを出力とする、機械翻訳の問題に落とし込んで実現。

デザインによっては上手く解析できないこともあるようですが、これもまた実用化されるとめちゃくちゃ便利ですね。




というわけで5本ほど軽く紹介してきました。

分野的に実際の開発現場の悩み解決を目指す研究が多くあるので、困っていることがあればソフトウェア工学研究者にお願いして研究してもらうのもありかもしれないですね(!?)