この記事の目的は、ソース コードの中間表現を回避し、ソース コードを画像として表現し、コードの意味情報を直接抽出して欠陥予測のパフォーマンスを向上させることです。
まず、以下に示す志望動機の例をご覧ください。 File1.java と File2.java の両方の例には 1 つの if ステートメント、2 つの for ステートメント、および 4 つの関数呼び出しが含まれていますが、コードのセマンティクスと構造的特徴は異なります。ソースコードを画像に変換することで異なるコードを区別できるかどうかを検証するために、著者は実験を行いました。ソースコードを文字のASCII 10進数に従ってピクセルにマッピングし、それらをピクセルマトリックスに配置して画像を取得します。ソースコード。著者は、さまざまなソース コード イメージ間に違いがあると指摘しています。
図 1 動機の例
この記事の主な貢献は次のとおりです:
コードを画像に変換して抽出するそこから得られる意味情報と構造情報 ;
セルフアテンション メカニズムと転移学習を組み合わせて欠陥予測を実現するエンドツーエンドのフレームワークを提案します。
この記事で提案されているモデル フレームワークは図 2 に示されており、ソース コードの視覚化と深層転移学習モデリングの 2 つの段階に分かれています。
図 2 フレームワーク
この記事では、ソース コードを 6 つの画像に変換し、そのプロセスを示しています。図3に示されています。ソース コード文字の 10 進 ASCII コードを 8 ビットの符号なし整数ベクトルに変換し、これらのベクトルを行と列ごとに配置し、イメージ行列を生成します。 8 ビット整数はグレー レベルに直接対応します。元のデータセットが小さいという問題を解決するために、著者は記事の中で色強調に基づくデータセット拡張方法を提案しました。R、G、Bの3つのカラーチャネルの値が配置され、結合して 6 つのカラー画像を生成します。ここで非常に混乱しているように見えますが、チャネル値を変更すると、セマンティック情報と構造情報が変更されるはずです。しかし、図 4 に示すように、著者は脚注でそれを説明しています。
図 3 ソース コードの視覚化プロセス
図 4 記事の脚注 2
この記事では、DAN ネットワークを使用して、ソース コードのセマンティック情報と構造情報をキャプチャします。重要な情報を表現するモデルの能力を強化するために、作成者は元の DAN 構造にアテンション層を追加しました。トレーニングとテストのプロセスを図 5 に示します。conv1 ~ conv5 は AlexNet からのものであり、4 つの完全に接続された層 fc6 ~ fc9 が分類子として使用されています。著者は、新しいプロジェクトの場合、深層学習モデルのトレーニングには大量のラベル付きデータが必要であり、それが難しいと述べました。そこで、著者はまず ImageNet 2012 で事前トレーニングされたモデルをトレーニングし、事前トレーニングされたモデルのパラメータを初期パラメータとして使用してすべての畳み込み層を微調整することで、コード イメージと ImageNet 2012 のイメージ間の差を減らしました。
図 5 トレーニングとテストのプロセス
ソース プロジェクトのタグ付きコードとターゲットの場合プロジェクト内のラベルのないコードは、コード イメージを生成し、同時にモデルにフィードします。両方とも畳み込み層とアテンション層を共有して、それぞれの特徴を抽出します。完全接続層のソースとターゲット間の MK-MDD (マルチ カーネル バリアントの最大平均不一致) を計算します。 Target にはラベルがないため、クロス エントロピーは Source に対してのみ計算されます。モデルは、ミニバッチの確率的勾配降下法を使用して、損失関数に沿ってトレーニングされます。 500 エポックの
実験部分では、作成者は PROMISE データ ウェアハウス内のすべてのオープン ソース Java プロジェクトを選択し、そのバージョン番号、クラス名、バグ タグの有無を収集しました。バージョン番号とクラス名に基づいて、github からソース コードをダウンロードします。最終的に、10 個の Java プロジェクトからデータが収集されました。データセットの構造を図 6 に示します。
図 6 データセット構造
プロジェクト内の欠陥予測について、この記事では比較のために次のベースライン モデルを選択しています:
プロジェクト間の欠陥予測について、この記事では比較のために次のベースライン モデルを選択しています:
要約すると、この論文は 2 年前に書かれたものですが、そのアイデアは次のとおりです。まだ比較的目新しいものであり、AST などの一連のコード中間表現を回避し、コードを画像抽出機能に直接変換します。コードから変換された画像には、本当にソース コードの意味情報と構造情報が含まれているのでしょうか?あまり説明できないような気がします(笑)。後で実験的な分析を行う必要があります。
以上がソフトウェアの視覚化と転移学習をソフトウェア欠陥予測に使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。