マイクロサービスアーキテクチャ(MSA)は複数のマイクロサービスを組み合わせたシステムアーキテクチャである.MSAを採用するシステムではサービス間の複雑な呼び出し関係により,サービス間が正しく連動して動作するかを検証するサービス連動テストを網羅的に行うことが難しい.本研究では,各サービスのAPIを検証するサービス単体テストにおける各サービスに対する入出力を基に,サービス連動テストのテスト網羅度を測定しテスト漏れ候補を検出する方法を提案する.この方法を実際のシステムに適用し,ツールが検出したテスト漏れ候補から,システムの不具合を引き起こす可能性のあるテスト漏れを発見できた.
近年,デバッグ作業のコスト削減のために自動バグ修正の研究が行われている.自動バグ修正を行う際にはバグの箇所を特定するバグ限局を行う必要があるが,多くのバグ限局手法はテストケースの網羅性に依存した方法であり,テストケースが不十分で網羅性が低い場合に適用が難しい.そこで我々は,テストケースを必要としない行単位のバグ予測をバグ限局の代わりに用いることで,この問題の解決を目指している.行単位のバグ予測は,既存のバグ限局手法と同じ粒度のバグを対象とするため,バグ限局の代わりとして使用できると考えた.本論文では,行単位の脆弱性予測を行う既存手法LineVulを改良した手法LineVul+を構築・評価し,自動バグ修正への適用可能性について考察する.LineVul+はGitの差分で与えられるコード片(ハンク)に対してバグ予測を行い,バグと予測された場合,行レベルで予測を行う2段階のステップで構築されている.実験の結果,ハンクレベルの予測では,precisionは低いが,recallが高いモデルを構築できた.行レベルの予測では,Top-5 Accuracyが0.84,IFAの中央値が0と高い精度で予測することができた.一方,自動バグ修正へ提案手法を応用するためには,偽陽性を減らす必要があるという課題が明らかになった.
本稿の目的は,企業横断的に収集されたソフトウェア保守のデータを分析し,保守の作業効率に影響する要因を明らかにすることである.分析では是正保守などの保守種別と,テストなどの各工程の比率に着目し,Web系システムなどのシステム構成の種別で層別しつつ,それらが作業効率にどの程度影響しているかを明らかした.
ソフトウェア開発および保守活動を支援および調査するツールを構築する際,プログラム内の制御フローやデータフローに関する情報が必要になることが多い.しかしながら,既存のJavaプログラム用のソースコード解析ツールは,正確な情報を取得する十分な能力を備えていない.たとえバイトコード解析ツールが十分な情報を提供できるとしても,解析結果とソースコード要素との対応関係が明確ではないため,ソースコード操作の実装には不向きである.JxPlatformは、Javaソースコードに現れる文,式,変数に対応する節点で構成される制御フローグラフとプログラム依存グラフを構築し,既存のソースコード解析ツールよりも正確な情報を提供する.本論文では,JxPlatformの主要な機能,実装の詳細,評価結果を述べる.
UMLのステートマシン図教育では,学習者に正しい理解を促すために教育者が学習者の課題答案の誤りとその修正方法を解説することがあるが,多数の答案を早期に確認し終えることは教育者に大きな負担となる.そこで本研究は,教育者が課題答案となるUMLステートマシン図の誤りを効率的かつ正しく特定できるように,静的解析と動的解析によるUMLステートマシン図答案の誤り特定自動化手法を提案する.有効性評価では,実授業において情報系学生19人が5種類の課題を解くことで得られた計95個の答案を対象とし,授業の担当教員が当時に答案を手動分析して得た誤りと答案へ提案手法を適用した結果とを比較した.さらに,その比較詳細を当該教員が定性的に評価した.その結果,提案手法は,各誤答で必ず1つは誤りを適切に特定でき,また,正答すべてに“誤りが無い”と正しく判定できた.また,定性的な評価では,表現の冗長性や的確さに課題が残るものの,誤りを正確に整理できそうな面が見られた旨の前向きな意見があり,提案手法が答案評価の効率化に有効な見込みを得た.
ソフトウェアテストやレビューの効率化を目的として,バグを含む可能性の高いモジュールの予測が行われている.過去のバージョンのソフトウェアのバグデータを学習に用いて現在開発中のソフトウェアのバグ予測を行うバージョン間予測では,各バージョンでのバグ要因の違いから,必ずしも高い予測精度は得られないことが課題である.本研究では,過去のバージョンのソフトウェアのバグデータに加えて,開発中のソフトウェアにおける現在進行中のテスト結果を学習に使用する3つの手法(test手法,mix手法,select手法)を提案する.評価実験では,13件のオープンソースソフトウェアプロジェクトを対象とし,従来手法であるバージョン間予測と3つの提案手法を7つの評価尺度で比較した.その結果,各提案手法は,開発中のソフトウェアの10% 程度のモジュールのテスト結果を用いることで,従来のバージョン間予測よりも高い精度でバグ予測を行うことができ,特にselect手法が優れていることが示された.
ファジングはソフトウェアのセキュリティ脆弱性検出に有効であり,Linuxでは幅広いファジング実装(ファザー)が存在する.しかし,Windows用のファザーには選択肢が少なく,特にヒープを高速かつ正確に復元するプロセススナップショット型ファザーはWindowsには存在しない.そこで本研究ではヒープを含めメモリ領域全体を高速かつ正確に復元する,ファジングのための新しいプロセススナップショット方式を提案する.プロトタイプ実装を用いた予備実験の結果,5つの現実世界のソフトウェアを対象として,正確にメモリ領域を復元できた.また,Windows用の fork 型ファザーであるWinnieに比べて,平均で3.81倍の速度向上,カバレッジは平均で13% 増加という良い結果を得た.