システム/制御/情報，Vol. 66, No. 5, pp. 1-7, 2022

解説

機械学習を中心とした AI 活用によるソフトウェアの品質
保証
鷲崎

1.

3.

はじめに

弘宜*

要求における品質への AI 活用

社会の基盤としてソフトウェアシステムが大規模化お複雑な要求の文書が多く得られ続け，かつ変更されやよび複雑化し，繋がり，さらに極端に不確実な時代におすい状況で，特に機械学習に基づく自然言語処理を通じいては，探索的な開発や頻繁な変更，拡張，環境適応がた効率的で適応的な処理が有用である．[3]では，要求工求められる．そうした中では，品質の作り込みや検証・学全般における AI 活用の取組みが要求獲得，要求分析，

評価・改善・管理の活動も自ずと探索的および適応的な要求優先順位付けについて整理されている．特に要求分ものとなる．そこでは，汎化性能を備えた機械学習によ析では非機能要求の分類や検証，要約などにより要求のる新たな対象や状況へのデータ駆動の適応や，メタヒュ

一貫性や無あいまい性といった品質を高めるとともに，ーリスティ ク ス であ る 遺 伝 的アルゴリ ズ ム （ Genetic

以降において要求を正しく効率よく組み入れて検証可能

Algorithm; GA）による探索などの取組みが，最適化およとし，プロダクト品質の向上に寄与する．以降では要求び効率化の面で有用であり，要求から保守に至るまで，の品質評価と分類の取組みを解説する．

品質の活動に対する AI 活用が研究実践されつつある．

3.1

要求の品質評価

本稿では，AI の種類を主に機械学習および GA を中心

要 求 仕 様 の 代 表 的 な 品 質 と し て ， IEEE/ISO/IEC

として，最初にソフトウェアの品質全般に関連する AI 活

29148-2018 では次の品質特性があげられている: 各要用の全体を概観する．続いて，特に要求，設計・実装，

求個別の必要性，実装独立性，非あいまい性，一貫性，テスト，デバッグ，他の品質管理および保守のプロセス

完全性，単独性，実現可能性，追跡可能性，検証可能性，別に，広く品質にかかる AI 活用の取組みを解説する．

および，要求の集合の完全性，一貫性，満足可能性，定2.

義範囲の明確性．特に非あいまい性は，要求文書単独でAI 活用による品質活動の全体

自然言語処理により評価可能である．

[1][2]を参考に，プロセスおよび目的の観点から，プロ

例 え ば [4] で は ， 長 ・ 短 期 記 憶 （ Long Short-Term

ダクトの広く品質に関わる活動に対する主要な AI 活用

Memory; LSTM）をベースとした深層学習モデルの転移をまとめた結果を第 1 表に示す．AI 活用の目的につい学習と対象領域におけるファインチューニングにより，て，[1]における分類に基づき次の三つとした: 対象（リ

文法や問題領域上のあいまいさを自動判定している．こソース，プロセス，プロダクトあるいはデータ）の属性

第 1 表の予測や見積り，属性の特定や抽出，対象の変換や生成．

目

プロダクトの品質保証を直接に扱うプロセスとしてはプロダクト品質保証上の AI 応用が活発な活動

要求

設計・実

テスト・品

装

質管理

的

テストやデバッグおよび品質管理などが該当し，AI 活用
による検証や妥当性確認のためのテストの効率化を通じたプロダクトの品質改善や，プロダクトの欠陥予測，さ

保守

予

要求品

テスト工数

保守工数

測

質評価

予測

予測

欠陥予測

らには品質評価および欠陥報告管理の取組みがある．

品質評価

加えて，要求や設計・実装，保守のプロセスにおいても，AI 活用を通じた品質の効率的な作り込みや改善の取組みがある．

特

要求分

アーキテ

テスト優先

デザイン

定

類

クチャ 自

順位

パターン

要求検

己適応

欠陥限局

検出

証

再利用

脆弱性検出

追跡関係

欠陥報告管

特定

以降において筆者の成果も交えて，プロセス別に主要な AI 活用の取組みを解説する．
____________________________________________________* 早稲田大学／国立情報学研究所／システム情報／エクス
モーション
Key words :ソフトウェア品質保証，ソフトウェア品質評
価，ソフトウェアテスト，機械学習，人工知能

理

-1-

変

要求要

自動プロ

テスト生成

リファク

換

約

グラミン

自動プログ

タリング

グ

ラム修正

システム/制御/情報，Vol. 66, No. 5, pp. 1-7, 2022

こで，深層学習ではデータの規模が重要なため，機械的

ここで機械学習の応用は特に，無数に存在するコンポーな逆翻訳（例えば英語→スペイン語→英語）を通じて訓ネント群のうちで要求や文脈に合致するものの検索や，練データを拡張している [4]．

再利用性の評価などに有用である [10]．

3.2

要求の分類

4.3

自動プログラミング（生成および合成）要求文書の特徴を機械学習により捉えることで，非機再利用と並び生成もまた，効率的かつ高品質な設計・能要求かどうか，さらにはセキュリティ要求やユーザビ実装に有用である．生成や合成を通じた自動プログラミ

リティ要求といった個別の品質要求へと自動分類し，大ングの取組みとして，GA による探索的な生成や，機械翻量の要求文書の効率的で誤りの少ない処理を支援できる．

訳を通じた生成などがある．

例えば [5] では，語彙や構文上の特徴量を用いてサポ

GA は，個々の解の候補を遺伝子として表現し，生物のートベクターマシン（Support Vector Machine; SVM）

進化に着想を得て適応度関数に基づき選択した遺伝子ににより自動分類している．[6] では，SVM を含む基本的ついて他の遺伝子との交叉や，突然変異などの操作を繰

な機械学習アルゴリズムの比較評価がまとめられている．

り返していくことで近似解を探索する．遺伝的プログラ

また自然言語処理では BERT（Bidirectional Encoder

ミング（Genetic Programming; GP）は，GA を拡張しRepresentations from Transformers）[7]の登場以来，トてプログラムの木構造による表現を遺伝子として扱い，

ランスフォーマーモデルを用いた大量の一般文書による解となるプログラムを進化的に生成させていく手法であ

言語表現の事前学習と対象領域におけるファインチュー

る．例えば [11]では，GA について対象プログラミング

ニングの取組みが活発であり，文脈を加味した分析が期

言語固有の遺伝子の構築や削除の仕組みを組み込み，さ待できることから要求文書へも応用されつつある．トラらに，プログラミング言語上で利用可能な命令を制限す

ンスフォーマーは，エンコーダ・デコーダとセルフアテることで探索空間を狭めて，簡単な要求仕様を満足するンションをあわせたニューラル機械翻訳モデルである．

コードを生成可能としている．GA に基づく取組みは，プ

BERT ではトランスフォーマーモデルを用い，ラベル付

ログラミング言語の特徴を正確に組み入れられるが準備けされていないテキストについて一部をマスクしてそのコストがかかり，また，制限された規模や内容を扱う．

箇所を推測するタスクと，入力文の連続性の判定タスク

機械翻訳による取組みは，トランスフォーマーを用いを訓練することを通じて，文脈や文の関係性を把握可能て大規模なプログラムソースコードの集合からコード表とする．例えば [8]では，BERT を用いて高精度な非機現の言語モデルを事前学習し，ファインチューニングを能要求文書の分類を実現している．

経て，要求文書からのコードの生成や補完，あるプログ

4.

設計・実装における品質への AI 活用

ラミング言語から他の言語へのコードの翻訳，さらにはプログラム修正，要約・理解支援，類似コード片特定な品質要求が複雑，大規模あるいは変更されやすい状況どを実現する．先駆的な取組みとして CodeBERT [12]おでは，設計・実装上の取りうる無数の選択肢の中で適切

よび CuBERT [13] が知られている．例えば CodeBERT

なものを人手で選択し続けることは困難であり，AI の支では，ソースコードとその内容を説明する自然言語記述援が有用である．以降では特に，自己適応，再利用，自のバイモーダル学習により，要求に基づくコードの検索

動プログラミングを通じた品質の確保や改善を解説する．

やコードの生成，さらには逆方向にコードから説明文書

4.1

アーキテクチャの自己適応組込みや IoT ソフトウェアシステムにおいて固定された設計および実装では，しばしば環境や状況の変化に応じて実行効率性やエネルギー効率性といった品質を著しく損なう．そこで AI により，望ましい品質を確保し続けるようにアーキテクチャを自己適応させる取組みがある．
例えば [9]では，IoT システムの特にエネルギー効率とデータトラフィックについて許容値を超えると予測できる場合に，強化学習により最適なアーキテクチャ適応パ
ターンを選択し適応させている．こうした自己適応の取組みは，適応保守の一環とみなすこともできる．

4.2

コンポーネント再利用

ソフトウェアの設計および実装における実証済みのデザインパターンやコンポーネント，ライブラリ，フレー
ムワークの再利用は，開発プロセスを効率化させるのみ
ならず，信頼性をはじめとする品質の向上にも寄与する．

の生成などを試みている．以降も短期間での発展が目覚ましい．例えば Code T5 [14]では，第 1 図に示すように，事前訓練において自然言語記述とコードの対応を学習す
るのみならず，識別子のマスクとその予測などの事前訓練を通じて，識別子を考慮した高精度なコード翻訳を実現している．また手法を比較評価するベンチマークデー
タセットも得られてきている [15]．こうした取組みは人手による特徴設計を要さず汎用のプログラミング言語を扱えるが，大規模かつ高品質なコードコーパスがカギとなる．例えば [16]では，GitHub 上の 5400 万リポジト
リから得た計 159GB のコードにより言語モデルを獲得
し，それを用いて関数名とコメントから関数の中身を自動補完するサービス GitHub Copilot を実現している．

5.

テストにおける AI 活用

複雑，大規模あるいは変更されやすい状況においてテ

機械学習を中心とした AI 活用によるソフトウェアの品質保証

元の説明文とコードを合わせた入力

精度な潜在欠陥（バグ）の予測が有用である．予測によ# recursive binary searchdef binarySearch(arr, left, right, x):
mid = (left + right) // 2
if arr[mid] == x:
return mid...

り重点的にテストすべき箇所の計画につながり，さらにバイモーダルの生成

SRGM）の二つに大別できる [19]．

は，テスト計画全体の見直しや設計や実装の再検討，機能の絞り込みといった対応も可能となる．欠陥予測のモ
デルは，欠陥密度モデル（Defect density model）と信頼度成長モデル（Software reliability growth model;
欠陥密度モデルは，コード行数や入出力といった主と# recursive binary search

してプロダクトの属性を用いて，機械学習アルゴリズムなどによりプロダクトのモジュールや部分ごとに潜在欠

def binarySearch(arr, left, right, x):...

陥の有無や多さを予測する．障害を含みやすいモジュー
ル予測（Fault-prone module prediction）とも呼ばれる．

マスクした識別子の予測

例えば [19]では，不均衡データを扱う上で有用なコスト# recursive binary searchdef MASK0(MASK1, MASK2, MASK3, MASK4):
MASK5 = (MASK2 + MASK3) // 2
if MASK1[MASK5] == MASK4:
return MASK5

考慮型学習（Cost-Sensitive Learning; CSL）に基づい第 1 図て拡張したラージマージン分布マシン（Large margin
Distribution Machine; LDM）を用いて，欠陥を持つモジ
ュールが全体の 7%～20%程度という不均衡なデータセッ
トにおいて高精度な予測に成功している．

事前訓練タスクの一部の様子 [14]

一方の信頼度成長モデルは，時系列上の欠陥検出デー
タを用いて，プログラム全体において主に未来の特定のストケースを用いたプログラムの動的な検証にあたり，

時刻までに発見される累積の欠陥数を予測する．代表的

以下のすべての活動について AI 活用による最適化や効な予測モデルとして，欠陥検出過程の非同次ポアソン過率化が取り組まれている．またセキュリティテストの一程（Non-Homogeneous Poisson Process; NHPP）によるモ環としての脆弱性検出についても AI 活用が活発である．
⚫

テストの計画: テスト工数や欠陥の高精度な予測⚫

テストの設計と実施:テストケース生成およびそれ

デル化やその拡張がある．検出欠陥数に加えてプロダク
トやプロセスの属性を入力とする予測モデルや，個々のモジュール別に予測するモデルもある [20]．さらに時系を組み入れた探索的なサーチベーストテスト⚫

列データ上で，より複雑な固有のパターンを特定する取テストの繰り返し: テストケース優先順位付けに組みはデータ駆動 SRGM と呼ばれ，SVM や GA，ニューラル

よる効率的なリグレッションテスト

5.1

ネットワーク（Artificial Neural Network; ANN）をは

テスト工数予測

じめとする AI 活用が活発である [21]．例えば筆者らはテストに費やされる工数や労力が，プロダクト品質を

第 2 図に示すように，クラスタリングで特定した過去の最も決定づける因子であるという報告がある [17]．そこ

類似プロジェクト群の時系列の欠陥検出データを用いてでテストの計画にあたり，プロジェクトの種別や要求，規模に応じた適切な工数の予測は重大な研究課題である．
一般に，一定量の過去のプロジェクトデータがある状況

LSTM モデルを訓練することで，新たな進行中のプロジェ
クトの将来の欠陥数を高精度に予測している [22]．

5.3において，機械学習に基づく予測は機械学習に基づかなテストケース生成

無限に近い実行領域から，欠陥検出に役立つテストケ

い予測（例えば単回帰分析）よりも優れていることが知ースの有限の集合を適切に選択するにあたり，ランダムられている．こうしたテスト工数予測は，特にプロジェ

テスト，記号実行，サーチベーストテスト（Search-Based

クト全体のコストやスケジュールを計画する際や，テスTesting; SBT ）， 組 み 合 わ せ テ ス ト （ Combinatorial

トチームを構成するにあたり有用である．
例えば [18] では公開データセットに対するテスト工
数予測にあたり機械学習アルゴリズムとして事例ベース
推論（Case-Based Reasoning; CBR），多層パーセプトロ

プロジェクト群ン（Multilayer Perceptron; MLP），サポートベクター回

クラスタリング

帰 （ Support Vector Regression; SVR) ， GP ， 決 定 木

類似プロジェ
クト選択（Decision Tree; DT）を比較し，特に SVR，GP，DT が進行中のプロジェクト

優れていることを報告している．

5.2

欠陥予測（バグ予測）

当該時点までの欠陥データテストプロセスの実行中に必要な労力や活動を適切に第 2 図管理するうえでは，対象プロダクトに対する適時かつ高-3-

当該時点以降
の予測結果

予測モデル（LSTM）

類似プロジェクトによる欠陥数予測 [22]システム/制御/情報，Vol. 66, No. 5, pp. 1-7, 2022

Testing; CT）などの入力値生成手法がある [23]．特に遺伝子
振幅: 5.0
時間幅: なし
変化: なし

SBT について，有用な入力値の評価や探索にあたり AI の応用が活発である．

-4.0
0.5
ステップ

2.0
1.5
sin

-1.0
0.5
線形

…

SBT とは，達成したい要件に対する達成度合いを定量的に評価できるように設計した評価関数に基づいて，ヒ5.0ューリスティック探索アルゴリズムを用いて達成したい
要件を満足するテストケースの集合を生成する方法であ

ステップ
線形

振幅 0.0る（第 3 図参照）．主に以下の手順 A～D を踏む [23]．
A)

-4.0

要件の達成度合いを定量的に評価する評価関数sinを設計（例: プログラム経路網羅率，実行時間）
B)

用意したテストケース集合としてのテストスイ

時間

第 4 図

ートを入力実行し，評価関数の値を取得
C)

D)

遺伝子に基づく入力信号列の例 [24]評価関数の値が優れているテストスイートを元に，ヒューリスティック探索アルゴリズムによっテストする CT についても，組み合わせを網羅かつ数を抑て新規にテストスイートを生成（アルゴリズムのえたテストケース群を得るうえで AI 応用の取組みがあ

例: GA/GP，粒子群最適化，機械学習など）る．例えば [27]では GA を用い，[28]では他のメタヒュ

探索打ち切り条件を満たすまで，B，C を繰り返しーリスティクスアルゴリズムと強化学習を併用している．

5.4

実行（例: 網羅率 ≧ 90%）

テスト優先順位付け

SBT は連続系の制御システムのテストについて活発にリグレッションテストは，プログラムの変更が既存機応用されている．例えば [24]では第 4 図に示すように，能に悪影響を与えていないことを，変更前に成功してい遺伝子を信号の振幅，時間幅，変化（例えばステップ関た既存テストケース群の実行により確認することである．

数や sin 関数など）により構成し，それらの連結により開発の大規模化や，アジャイル開発の中で頻繁なビルド

信号列を生成している．そして GP の適用により，遺伝子を 繰 り 返 す 継 続 的 イ ン テ グ レ ー シ ョ ン （ Continuous

を組み替えていくことで様々な信号列を自動生成する．

Integration; CI）が採用されるにつれ，一度のビルドとSimulink のようなモデルベース開発の仕組みとの連

リグレッションテストにかけられる工数や時間は限られ動も活発である．[25]では，Simulink モデルテストの多つつある．そうした中でテストケース群を優先順位付け

様性を考慮した SBT によるテスト入力値の自動生成を実して順位の高いものから優先テスト実行する取り組みが現している．具体的には，Simulink モデルの構造上の網

活発化しつつある．最適解の探索はしばしば NP 困難な

羅性では，欠陥発見にあたり不十分であるため，出力信問題であるなかで，機械学習による優先順位付けと選択号間の距離や特徴の違いに基づき出力が多様となるよう支援の取り組みが活発である [29]．

に生成している．

5.4

脆弱性検出

SBT の実運用にあたり，探索効率の向上が課題となりセキュリティ上の既知の脆弱性を機械学習により大規

様々な工夫が試みられている．例えば [26]では自動車制

模なコード上で自動的に検出する取り組みが活発である．

御システムの SBT にあたり，現実的ではない入力信号の例えば [30]では第 5 図に示すように，畳み込みニューラ

組み合わせ（シナリオ）に基づいたテストを防ぐため，

ルネットワーク（Convolutional Neural Network; CNN）

実走行データより得られる実走行条件分布に基づいてシ

お よ び 回 帰 型 ニ ュ ー ラ ル ネ ッ ト ワ ー ク （ Recurrent

ナリオを評価し，探索空間を重点化することで探索効率

Neural Network）を用いてコードの分散表現上で特徴をの向上を図っている．

特 定 し ， 共 通 脆 弱 性 タ イ プ 一 覧 （ Common Weakness

また，複数のパラメータに割り当てる値の組み合せを

Enumeration; CWE）の脆弱性をラベル付けし，ランダム
フォレストにより検出している．ここで機械学習では訓テストスイート群 第n世代
探索アル
ゴリズム

生成

テスト
ケース

実行

…

テスト対象ソフトウェア

練データの質と量が課題となるため，[30]では，ルールベースの静的解析ツールにより得られる警告や問題を個々の CWE と紐づけておき，同ツールの適用結果に基づいて脆弱性を含む箇所の正解データを大規模に得ている．

入力

…

出力

6.

デバッグにおける AI 活用

テストスイート群 第n+1世代
評価関数

第 3 図

主としてテスト結果を活用してコード上で欠陥の原因

入力・更新

サーチベーストテストの概要箇所を特定する欠陥限局や，その結果を応用した自動プ
実行結果

ログラム修正について AI の応用が活発である．

機械学習を中心とした AI 活用によるソフトウェアの品質保証
マックス
プーリング

int * data = new int[10];
字句解析

ソースコード

?

全結合層

int

欠陥（バグ）
欠陥
限局

パッチ候
補生成

*
id

修正
…

パッチ
検査

new
コード
の特徴
の学習

int
[
...

埋め込み

第5図

6.1

畳み込み

ラベル

順位
付け

…

=

パッチ候補

修正
パッチ

ランダム
フォレスト

第 6 図

コード上の特徴の学習と脆弱性検出 [30]自動プログラム修正の概要（[31]より改変）

現状の APR 手法の多くは，原因箇所が限定された単純な欠陥の修正にとどまるが，十分な量と質のテストケー

欠陥限局（バグ局所化）

欠陥限局（Fault Localization; FL）では，動的なテスを準備することで，単純な欠陥の修正を AI に委ね，開スト実行結果や静的なコード解析結果，欠陥報告に対す発者は複雑な問題に取り組む形態を期待できる．[34]でるコードの類似度などを用いて，ステートメントや関数は，オープンソースソフトウェアの開発において AI によといったコード中の各プログラム要素の単位で欠陥の原る自動修正案を提出して，他の開発者が AI 由来と気付か因としての疑わしさ（Suspicious）を計算する．例えばずに受け入れられる場合があることを報告している．こ

テスト実行結果に基づくと，失敗したテストケースによれは，AI と人間による価値共創の姿といえる [35]．

り実行された要素ほど疑わしい．また静的な解析結果に7.

基づくと，複雑な要素ほど疑わしい．こうした疑わしさ

その他の品質管理における AI 活用

品質管理においてテストやデバッグ以外では，品質特による順位付けに基づき，人手あるいは後述の自動的な性の評価や欠陥報告管理に AI 活用の取組みがある．

プログラム修正を効率よく進めることを目的する．
しかしあらゆる状況に適した単一の FL 手法は得られ

7.1

品質評価および予測ていない．そこで，異なる特徴量に基づく様々な疑わし

欠陥の扱いに基づく機能適合性や信頼性以外にも，機さの値を組み合わせて，教師あり学習により効果的な順

械学習による様々なプロダクト品質特性の評価や将来の位付けを学習するランク学習（Learning-to-Rank）によ予測が研究実践されている [36]．機械学習は，品質の評る FL の取組みが研究されている．例えば [31]では，拡価基準の調整や適応にも有用である．筆者らは保守性評張した MLP を用いて，テスト実行結果や複雑さ，類似度

価にあたり，開発者によるレビュー結果に基づく DT によなどの様々な特徴量により高精度な FL を実現している．

る教師あり学習により，問題領域やプラットフォーム固6.2

自動プログラム修正

有の特徴を基準へ組み入れる手法を実現している [37]．

自動プログラム修正（Automated Program Repair; APR）

7.2

欠陥報告管理は，テストなどで検出された欠陥を自動修正する技法で欠陥報告（バグレポートや不具合票）が数多く得られある．典型的には第 6 図に示すように，コードに対して続ける状況において，要求文書の扱いと同様に，機械学

FL 等により欠陥の位置を特定したうえで，修正パッチ候習に基づく自然言語処理を通じた処理が有用である．例

補群を生成し，機械学習などにより順位付けし，テスト

えば筆者らは BERT の応用により，重複する欠陥報告をにより正しさを検査の上で最終的に修正パッチを得る．

特定する手法を実現している [38]．

修正パッチ候補の生成は，過去の修正傾向に基づいて

また，特に深層学習の活用において説明性が意思決定

人手で準備した変換パターン・ルールやテンプレート，のカギを握る．筆者らは第 7 図に示すように，CNN によ過去の修正実績への機械学習適用により自動的に学習しり欠陥報告群を短時間で修正されるものと長時間かかる

た変換，GA/GP による探索的な変換，およびそれらの組合

ものへと分類するにあたり，可視化手法を適用して分類せなどにより実現される．例えば [32]では，変数の型のモデルにおいて欠陥報告の表現の具体さを根拠としてお拡大変更や条件文の変形，メソッド実行の変更・挿入とり，具体的であると修正時間が短く（例: “using 19990914

いった種々の変換ルールを用いてパッチ候補群を生成しbuild”），抽象的であると長い傾向を特定している [39]．

たうえで，事前に訓練済みのロジスティック回帰モデル

欠陥報告により順位付けている．[33]では，エンコーダ・デコー

可視化
深層学習
CNN

ダの組合せにより，過去の欠陥修正時の修正前後のプロ
グラム抽象構文木の対応関係を周囲の文脈を含めて学習

修正時間・短.. using 19990914 build
on win98 using ..
修正時間・長.. this mean the problem
was with their web ..

しておき，その適用により新たなコードについてパッチ候補を生成し，CNN により順位付けている．

第7 図

-5-

欠陥報告の分類における判断根拠の可視化 [39]システム/制御/情報，Vol. 66, No. 5, pp. 1-7, 2022

8.

参 考 文 献保守における品質への AI 活用

ソフトウェアの保守は ISO/IEC 14764:2006 に基づき

[1]

D.

Zhang, et al., “Machine Learning Applications

是正保守，予防保守，適応保守，完全化保守，緊急保守

in Software Engineering,” Series on Softwareに分類できる．上述の APR は，是正保守の支援手法とも

Engineering and Knowledge Engineering, 16, 2005.

捉えられる．また予防保守にあたっては，設計・実装上[2]の好ましい形や好ましくない形を検出し，それを改善しMachine Learning in Software Development Lifeていくことが重要である｡それらについて AI 活用がある．

8.1

デザインパターンなどの検出

Cycle Stages,” IEEE Access, 9, 2021.
[3]

K. Kaur, et al., “A Review of Artificial Intelligence
Techniques

頻出する設計上の問題を解決する典型的な好ましい設

for

Requirement

Engineering,”

Computational Methods and Data Engineering,

計の形はデザインパターンと呼ばれ，その適用結果をコ2021.

ード中に検出することで，設計意図や品質を把握し，以降の保守を効果的に進められる．ただし具体的な適用のS. Shafiq, et al., “A Literature Review of Using[4]

I. M. Subedi, et al., “Application of Back-translation

形は，対象の制約や要求に応じて様々であり，しばしば-ルールベースでの検出は困難である．そこで筆者らは，

Ambiguous Software Requirements,” ACMSE 2021.

既知のデザインパターンの複雑さや規模といった特徴量[5]

Learning

ApproachtoIdentify

Z. Kurtanović, et al., “Automatically Classifying
Functional and Non-functional Requirements Usingの測定値の ANN による学習を通じて多様な適用結果からSupervised Machine Learning,” RE 2017.

高精度に自動検出する手法を実現している [40]．
類似の検出の取組みとして，保守上の問題となる複雑

A Transfer[6]

P. Talele, et al., “Classification and Prioritisation of

さおよび暫定的な好ましくない設計など（デザインスメ

Software Requirements using Machine Learning – Aルやコードスメル，技術的負債などと呼ばれる）を AI 活

Systematic Review,” Confluence 2021.

用による自動検出する取り組みも活発である [41][42]．

8.2

[7]

bidirectional

設計や実装の改善と追跡
[8]

for

language

T. Hey, et al., “NoRBERT: Transfer Learning for
Requirements Classification,” RE 2020.

が有用であり，AI が活用されている [43]．改善にあたりしばしばコードに限らず様々な成果物を辿って扱う必transformers

understanding,” arXiv:1810.04805, 2018.

スメルや技術的負債の解消に向け，外部への振る舞いを保ったまま内部を改善するコードのリファクタリング

J. Devlin, et al., “BERT: Pre-training of deep

[9]

H. Muccini, et al., “Leveraging Machine Learning

要があるため，成果物間の追跡関係（トレーサビリティ

Techniques

リンク）の特定についても AI 活用が活発である [44]．

Systems,” SMARTCOMP 2020.

forArchitecting

Self-Adaptive

IoT[10] D. P. Wangoo, “Artificial Intelligence Techniques in

9.

Software Engineering for Automated Software

おわりに

本稿では，品質保証に関する AI 活用の全体を概観し，特に応用の進展が目覚ましい品質保証活動を解説した．
データに基づく帰納的な技術的活動を進めるうえでは，データの質や量を確保する基盤，それにより訓練されるモデルの品質（特に予測性能や頑健性，説明性），さらには，得られる結果の目標への適合性が成功のカギとなる．
そこで，頑健性や説明性の向上といった機械学習・AI の品質保証技術の併用も必要であり，AI による品質保証と，AI の品質保証を車の両輪として相乗効果を発揮させながら発展的に取り組む必要がある．例えば筆者らは，機械学習デザインパターンの体系化 [45]や高信頼化に向けた要求分析 [46]に取り組んでおり，そうした成果とAI 応用の取組みとの接続を展望している．

謝 辞
一 部 成 果 は 次 の 助 成 を 受 け た : JST 未 来 社 会
JPMJMI20B8 eAI, JSPS 二国間交流事業 120209936, 科研
費 国際共同研究加速基金 21KK0179，enPiT-Pro Smart SE.

Reuse and Design,” ICCCA 2018.
[11] K. Becker, et al., “AI Programmer: Autonomously
Creating

Software

Programs

Using

Genetic

Algorithms,” GECCO 2021.
[12] Z. Feng, et al., “CodeBERT: A Pre-Trained Model for
Programming

andNaturalLanguages,”

arXiv:2002.08155, 2020.
[13] A. Kanade, et al., “Learning and evaluating
contextual embedding of source code,” ICML 2020.
[14] Y. Wang, et al., “CodeT5: Identifier-aware Unified
Pre-trained

Encoder-Decoder

Modelsfor

Code

Understanding and Generation,” EMNLP 2021.
[15] S. Lu, et al., “CodeXGLUE: A Machine Learning
Benchmark Dataset for Code Understanding andGeneration,” arXiv:2102.04664, 2021.
[16] M. Chen, et al., “Evaluating Large Language Models
Trained on Code,” arXiv:2107.03374, 2021.
[17] M. Grover, et al., “Estimating Software Test Effort
Based

on

Revised

UCP

Model

Using

Fuzzy

機械学習を中心とした AI 活用によるソフトウェアの品質保証
Technique,” ICTIS 2017.

Intelligence-Enhanced Software Engineering, 2022.

[18] C. López-Martín, “Machine learning techniques for[36] H. A. Al-Jamimi, et al., “Machine Learning-based

software testing effort prediction,” Software Quality

Software Quality Prediction Models: State of the

Journal, 2021.

Art,” ICISA 2013.

[19] C. Jin, “Software defect prediction model based on[37] N. Tsuda, et al., “Machine Learning to Evaluate

distance metric learning,” Soft Computing, 25, 2021.

Evolvability Defects: Code Metrics Thresholds for a[20] 土肥正ほか, “次世代ソフトウェア信頼性評価技術のGiven Context,” QRS 2018.

開発に向けて”, SEC journal, 10(6), 2015.

[38] H. Isotani, et al., “Duplicate Bug Report Detection[21] D. D. Hanagal, et al., “Literature Survey in Software

by Using Sentence Embedding and Fine-tuning,”

Reliability Growth Models,” Software Reliability

ICSME 2021.

Growth Models, 2021.

[39] Y. Noyori, et al., “Extracting features related to bug[22] K. K. San, et al., “Deep Cross-Project Software

fixing time of bug reports by deep learning andReliability Growth Model using Project Similarity

gradient-based visualization,” ICAICA 2021.

Based Clustering,” Mathematics, 9(22), 2021.

[40] S. Uchiyama, et al., “Design Pattern Detection using[23] 丹野治門ほか, “テスト入力値生成技術の研究動向”,

Software Metrics and Machine Learning”, SQM 2011.

コンピュータソフトウェア, 34(3), 2017.

[41] K. Alkharabsheh, et al., “A comparison of machine[24] A. Windisch, et al., “Signal Generation for Search-learning algorithms on design smell detection using

Based Testing of Continuous Systems,” ICSTW 2009.

balanced and imbalanced dataset,” Information and[25] R.

Matinnejad,

Automated

Test

et

al.,

“Thomas

Bruckmann

Suite

Generationfor

Software Technology, 143, 2022.

Time-[42] E. S. Maldonado, et al., “Using Natural Language

continuous Simulink Models,” ICSE 2016.

Processing to Automatically Detect Self-Admitted[26] 西谷一平ほか, “実走行データを活用した制御システム

Technical Debt,” IEEE Transactions on Software

自動 検証 手 法 の開 発 ”, 自 動 車技 術会 論 文 集 , 49(1),Engineering, 43(11), 2017.

2018.

[43] M. Aniche, et al., “The Effectiveness of Supervised[27] T. Shiba, et al., “Using Artificial Life Techniques to

MachineLearning

Algorithms

Generate Test Cases for Combinatorial Testing,”

SoftwareRefactoring,”

COMPSAC 2004.

Software Engineering, 2020.

IEEE

in

Predicting

Transactions

on[28] K. Z. Zamli, et al., “A hybrid Q-learning sine-cosine-[44] C. Mills, et al., “Automatic Traceability Maintenancebased strategy for addressing the combinatorial test

via Machine Learning Classification,” ICSME 2018.

suite minimization problem,” PLoS ONE, 13(5), 2018.

[45] H. Washizaki, et al., “Software Engineering Design[29] R. Pan, et al., “Test case selection and prioritization

Patterns for Machine Learning Applications,” IEEE

using machine learning: a systematic literature

Computer, 55(3), 2022.

review,” Empirical Software Engineering, 27, 2022.
[30] R.

Russell,

Detection

et
in

al.,

“AutomatedSourceCode[46] J. H. Husen, et al., “Goal-Oriented Machine

Vulnerability

Learning-Based Component Development Process,”

Using

MODELS-C, 2021.

Deep

Representation Learning,” ICMLA 2018.

著 者 略 歴[31] X. Li, et al., “DeepFL: Integrating Multiple Fault
Diagnosis Dimensions for Deep Fault Localization,”
ISSTA 2019.
Oriented Program Repair,” ASE 2017.
Li,

et

al.,

“DLFix:Context-based

CodeTransformation Learning for Automated Program
Repair,” ICSE 2020.
[34] M.

Monperrus,

et

al.,

“Repairnator

Patches

Programs Automatically,” ACM Ubiquity, 2019.
[35] H. Washizaki, “Towards Software Co-Engineering byAI

andDevelopers,”

Handbook

on

ひろ のり

鷲崎

弘 宜

早稲田大学グローバルソフトウェア
エンジニアリング研究所所長・教授，国立情報学研究所客員教授，システム情報取締役（監査等委員），エクスモーション
社外取締役．IEEE Computer Society 副会長，ISO/IEC/JTC1 SC7/WG20 議長，
情報処理学会ソフトウェア工学研究会主査，リカレント教
育 スマートエスイー代表．著書・訳書に『機械学習デザイ
ンパターン』『ソフトウェア品質知識体系ガイド SQuBOKGuide』『演習で学ぶソフトウエアメトリクスの基礎』ほか．

[32] R. K. Saha, et al., “ELIXIR: Effective Object[33] Y.

わし ざき

Artificial-7-