近年,深層学習技術の発展に伴い,自然言語処理の分野で事前学習済み言語モデルの精度が大幅に向上している.これらの言語モデルは,大量のソースコードを事前学習することでソフトウェア開発支援に活用できると期待されている.実際,ソースコードで事前学習されたCodeT5モデルでは,コード生成,コード要約,コード分類など,様々なソフトウェア開発タスクの大幅な性能向上が確認されている.しかし,最初から事前学習によってモデルを構築するには膨大な計算資源が必要になる.我々は,自然言語処理用に構築されたMultilingual T5モデル(mT5)から,追加的なソースコードの学習によって,ソースコードの事前学習済み言語モデルを構築する手法を提案する.具体的には,自然言語を事前学習済みであるmT5に,さらにPythonコードを与えて追加的に事前学習を行い,新たにPythonに適用した事前学習済み言語モデルを構築する.提案手法によって,コード生成やエラー診断などのタスクにおいて,性能向上が見られることを報告する.
ソフトウェア開発において,バグを含む可能性の高いモジュール(fault-proneモジュール)を高い精度で予測することができれば,テストやデバッグの効率化に繫がる.予測精度の向上を目的として,予測モデルの訓練データに含まれる,予測に悪影響を与えるような外れ値データの除去が取り組まれている.本稿では,バージョン間予測を対象とし,よりロバストな外れ値除去手法として,予測対象とは異なるプロジェクトから得られた第三者データセットを用いて,訓練データ中の外れ値を特定・除去する手法を提案する.評価実験の結果から,提案手法は大多数のプロジェクトで予測精度を向上でき,また代表的な既存の外れ値除去手法であるMOAやCC-MOAよりも高い効果を持つことが示された.
プログラミング演習において,学習者のプログラムの誤り範囲を特定する方法を提案する.学習者の解答プログラムと模範解答のプログラムをセグメントと呼ぶコード片に分割し,用意したテストケースをパスするまで学習者プログラムのセグメントを模範解答プログラムのセグメントで置き換えて,誤り範囲を特定する.本論文におけるセグメントは分岐のない連続した文であり,制御文を基にプログラムをセグメントに分割する.ツールを試作し,実用的な時間で誤り範囲を特定できることを確認した.
This study proposes a framework to evaluate the reliability of obfuscating transformations in program code. The reliability of an obfuscating transformation can be evaluated by whether the transformation makes program code harder to analyze while preserving the functionality. The proposed framework applies obfuscating transformations to a collection of program code, executes the test cases, and measures the ratio of obfuscated program code that pass the test cases and the mean of the distance of opcode sequences before and after obfuscation. Two experiments have been conducted to evaluate the reliability of existing 43 obfuscating transformations implemented in well-known obfuscation tools, Tigress and Obfuscator-LLVM. The proposed framework revealed that there were combinations of obfuscating transformations which did not preserve the functionality of programs, even though each of the transformations worked properly for the programs.
IoTの開発では,通信プロトコルやデバイスの操作などのための定型的な実装が頻出する.そのため,ある欠陥のためのパッチを用意すると,類似したパッチを他のコード片に対しても適用することがある.そこで本研究では,欠陥に対するパッチを1つ与えると,その欠陥のコードクローンを検出し,パッチを生成する手法を提案する.ケーススタディでは,IoTの欠陥を収集したデータセットの中から,その欠陥のコードクローンが存在する事例を26個抽出し,提案手法を適用した.その結果,26事例すべてについてパッチ生成に成功した.
JavaScriptをはじめとする動的型付け言語では,静的型付け言語と比べ,多くのメモリが要求される.これは,動的型付け言語は実行時にデータ型を決定するため,値とともにデータ型もメモリに保存しておく必要があるためである.しかし,動的型付け言語においても,配列などのコレクションは,同じ型の値を格納するために用いられることが多い.本研究では,同じ型の値だけが格納されたコレクションに対して,データではなくコレクションにデータ型の情報を持たせるストレージストラテジーという手法を,配列に適用してメモリ使用量を削減する.さらにメモリ使用量を削減するために,配列のデータ型には 1バイト整数のような1ワードより小さいデータ型を導入する.これを組み込み向けシステム向けJavaScriptバーチャルマシンに実装して評価した.
We propose a subsystem of concurrent separation logic with fractional permissions introduced by Brotherston et al. Separation logic is an extension of Hoare logic that reasons about programs using shared mutable data. Separation logic has separating conjunction asserting that its subformulas hold for separated (disjoint) parts in the heap. Fractional permissions manage access permission of shared resources between concurrent threads. Brotherston et al. introduced an extension of concurrent separation logic with fractional permissions, but they still need to discuss the decidability of logic. The heart of this paper is restricting the formulas of the system to symbolic heaps. We present examples to illustrate that our system is appropriate to prove the entailment for data structures, such as list segments with cycles. We eliminate permissions by normalization, and therefore we can reduce the entailment checking problem to the existing decidable entailment checking.