ソフトウェアの欠陥予測のためのソフトウェア可視化と転移学習の活用

ソフトウェアの欠陥予測のためのソフトウェア可視化と転移学習の活用
論文のデータセットとコードはオープンソース化されています: https://zenodo.org/record/3373409#.YrpiEBVBxHW。

この論文の目的は、ソースコードの中間表現を回避し、ソースコードを画像として表現し、コードの意味情報を直接抽出して、欠陥予測のパフォーマンスを向上させることです。

まず、以下に示す動機の例をご覧ください。 File1.java と File2.java の両方に 1 つの if ステートメント、2 つの for ステートメント、および 4 つの関数呼び出しが含まれていますが、コードの意味と構造上の特徴は異なります。ソース コードを画像に変換すると、異なるコードを区別するのに役立つかどうかを検証するために、著者らは実験を行いました。ソース コードを文字の ASCII 10 進数に従ってピクセルにマッピングし、ピクセル マトリックスに配置して、ソース コードの画像を取得しました。著者らは、ソースコードイメージ間に相違点があることを指摘しています。

図1 動機の例

この記事の主な貢献は次のとおりです。

コードを画像に変換し、そこから意味情報と構造情報を抽出します。

自己注意メカニズムと転移学習を組み合わせて欠陥予測を実現するエンドツーエンドのフレームワークが提案されています。

この記事で提案されているモデル フレームワークは図 2 に示されており、ソース コードの可視化とディープ トランスファー ラーニング モデリングの 2 つの段階に分かれています。

図2 フレームワーク

1. ソースコードの視覚化

この記事ではソースコードを 6 つの画像に変換しており、そのプロセスは図 3 に示されています。ソース コード文字の 10 進 ASCII コードを 8 ビットの符号なし整数ベクトルに変換し、これらのベクトルを行と列に配置して、画像マトリックスを生成します。 8 ビットの整数はグレースケール レベルに直接対応します。元のデータセットが小さいという問題を解決するために、著者は記事の中で、色の強調に基づくデータセット拡張方法を提案しました。R、G、Bの3つの色チャネルの値を並べて組み合わせ、6つのカラー画像を生成します。これはかなり混乱します。チャネル値を変更すると、意味情報と構造情報が変更になるはずですよね?しかし、著者は図 4 に示すように脚注でそれを説明しています。

図3 ソースコードの可視化プロセス

図4 記事脚注2

2. 深層転移学習モデリング

この記事では、DAN ネットワークを使用して、ソース コードの意味情報と構造情報を取得します。モデルの重要な情報を表現する能力を強化するために、著者らは元の DAN 構造に注意レイヤーを追加しました。トレーニングとテストのプロセスを図 5 に示します。ここで、conv1 ~ conv5 は AlexNet からのものであり、4 つの完全接続層 fc6 ~ fc9 は分類器として使用されます。著者は、新しいプロジェクトではディープラーニング モデルのトレーニングに大量のラベル付きデータが必要であり、これは難しいと述べました。そこで、著者はまずImageNet 2012で事前学習済みモデルを学習し、その事前学習済みモデルのパラメータを初期パラメータとしてすべての畳み込み層を微調整し、コード画像とImageNet 2012の画像の差を小さくしました。

図5 トレーニングとテストのプロセス

3. モデルのトレーニングと予測

ソース プロジェクトのラベル付きコードとターゲット プロジェクトのラベルなしコードのコード イメージを生成し、それらを同時にモデルに入力します。2 つのプロジェクトは畳み込み層と注意層を共有して、それぞれの特徴を抽出します。完全に接続されたレイヤーでソースとターゲット間の MK-MDD (マルチカーネルバリアント最大平均不一致) を計算します。ターゲットにはラベルがないため、ソースのクロスエントロピーのみが計算されます。モデルは、損失関数に沿ったミニバッチ確率的勾配降下法を使用してトレーニングされます。各 <ソース、ターゲット> ペアについて、500 エポックのうち、最良の F 値に基づいて 1 つのエポックが選択されます。

実験部分では、著者は PROMISE データ ウェアハウス内のすべてのオープン ソース Java プロジェクトを選択し、そのバージョン番号、クラス名、およびバグがあるかどうかを示すラベルを収集しました。バージョン番号とクラス名に従って、GitHub からソースコードをダウンロードします。最終的に、10 個の Java プロジェクトからのデータが収集されました。データセットの構造を図 6 に示します。

図6 データセットの構造

プロジェクト内の欠陥予測については、この記事では比較のために次のベースライン モデルを選択します。

プロジェクト間の欠陥予測については、この記事では比較のために次のベースライン モデルを選択します。

まとめると、この論文は 2 年前に発表されましたが、そのアイデアはまだ比較的新しいものです。AST などの一連のコード中間表現を回避し、コードを直接画像抽出機能に変換します。しかし、まだ混乱しています。コードから変換された画像には、ソースコードのセマンティクスと構造情報が本当に含まれているのでしょうか?あまり説明できない気がします、ハハハ。後で実験分析を行う必要があります。

<<:  人工知能は医療の未来をどう変えるのか

>>:  あなたは本当に3Dプリントを理解していますか?

ブログ    

推薦する

市場動向 | 人工知能が光接続の需要を急増させる

世界のデジタル経済が急速に発展するにつれ、クラウド コンピューティングによってデータ転送速度に対する...

ヘルスケアにおける機械学習の悪影響

Marzyeh Ghassemi 助教授は、医療データに隠れたバイアスが人工知能のアプローチにどのよ...

ソニー、AI製品の倫理審査を実施へ

日経新聞によると、ソニーは早ければ2021年春にも、倫理的リスクのスクリーニングに人工知能を活用した...

人工知能が幼稚園のキャンパスに参入し、あらゆる面でキャンパスの安全を確保

近年、幼児教育のスマート化を導き、子どもたちの学習と成長をサポートするスマート幼稚園環境を総合的に構...

2021年6月の人工知能分野における重要な進展の概要

人工知能は、人間の理論、方法、技術、アプリケーション システムをシミュレート、拡張、拡大するために使...

順序保存回帰: リソース利用を最大化するアルゴリズム

[[205069]] 1. 数学的な定義順序保存回帰は回帰アルゴリズムの一種です。基本的な考え方は、...

シテチがスマートシティ建設に新たな活力を注入

[51CTO.comからのオリジナル記事] モノのインターネットの台頭により、スマートハードウェアと...

国内チームが新たなRLTFフレームワークを提案し、SOTAをリフレッシュしました!大規模なモデルはバグが少なく、より高品質なコードを生成します

「プログラム合成」または「コード生成」タスクの目標は、与えられた記述に基づいて実行可能なコードを生成...

AIが書いたコンテンツは判別が難しく、言語の専門家でさえ無力である

9月10日のニュース、2023年は人工知能の年です。チャットボットChatGPTから、グラミー賞に参...

パニックになってるんですか?ロボットは共感の兆しを発達させ始めており、ロボットパートナーの次の動きを予測することができます。

[[375354]] 2 匹の霊長類が長期間一緒に飼育されると、同居人、同僚、家族の即時の行動をす...

...

...

2030年までに、仕事の70%が人工知能に置き換えられるでしょう。子どもたちが競争力を維持できるよう、私たちはどう支援できるでしょうか?

10年前は多くの人が必死に五線譜を練習していましたが、今ではほとんど誰も使っていません。 5年前は...

投資管理と AI: 顧客関係と投資収益の向上

正直に言うと、顧客はおそらく、投資マネージャーが使用する高度な AI ツールを気にしていないでしょう...

Linux の割り込み処理メカニズムを使用してシステムパフォーマンスを向上させる

Linux 割り込み処理メカニズムを使用すると、システム パフォーマンスが大幅に向上します。割り込み...