SiCデバイスプロロセスに起因する 結晶欠陥の検出 …...SiCデバイスプロ 結晶欠陥の 材料科学研究所先進機能材料 研究の目的(本研究の一部はNEDOプロジェク
コードクローンに対する一貫性のない変更に起因する欠陥の検出
-
Upload
kylie-garza -
Category
Documents
-
view
17 -
download
4
description
Transcript of コードクローンに対する一貫性のない変更に起因する欠陥の検出
Department of Computer Science, Graduate School of Information Science & Technology,Osaka University
コードクローンに対する一貫性のない変更に起因する欠陥の検出
井上研究室博士前期課程2年
Yii Yong Lee
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
2
概要
複製されたソースコード片の間で識別子の変更による不整合を検出し、欠陥の候補として提示する手法を提案
発表構成 研究背景 研究動機と目的 提案手法 評価実験 まとめと今後の課題
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
3
コードクローン
ソースコード中に存在する、同一または類似したコード片を持つコード片
コードの再利用のために、コピーアンドペーストにより生成
クローンペアコード片
コード片
コード片
ソースファイル
ソースファイル
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
4
再利用の際に発生する不整合
コピーアンドペーストによる再利用の手順実装したい機能と似ているコードを複製するそのコードを編集する
修正の不整合による欠陥を招く 原因となるコードクローンとなっているコード片に識別子
の名称の修正を行う修正漏れにより不整合が発生
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
5
欠陥の作り込み例File: Linux-2.6.6/drivers/pci/hotplug/shpchp_ctrl.c
1497: rc = p_slot->hpc_ops->check_cmd_status(ctrl);1498: if (rc) {1499: err("%s: Failed to enable slot, error code(%d)\n", __FUNCTION__, rc); .....1501: up(&ctrl->crit_sect);1502: return rc; 1503: } ......
1573: retval= p_slot->hpc_ops->check_cmd_status(ctrl);1574: if (retval) {1575: err("%s: Failed to disable slot, error code(%d)\n", __FUNCTION__, rc);1576:1577: up(&ctrl->crit_sect);1578: return retval; 1579: }
Retval に変更すべき
コード片 1
コード片 2
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
6
研究動機と目的
大規模ソフトウェアにはコードクローンが多く存在する Linux ファイルシステムの12%のコードはクローンと
なっている 修正漏れによる欠陥は実際のシステムに多く存在し
ている 大量のソースコードを精査するには労力がかかる
一貫性のない識別子の修正による欠陥を検出 特定の範囲のみコードを精査 大規模ソフトウェアに適用できる
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
7
提案手法
クローン検出ツール
クローン位置情報ファイル
字句解析マッピング
解析
ソースファイル
クローンペアの
トークン列
修正の不整合
欠陥候補
メトリクス計算
不整合のフィルタリ
ング
欠陥候補の絞り込み
クローン検出ツールを用いてソースファイルに存在するコー
ドクローンを検出
検出されたコードクローンをトークンに分割クローンペア間で対応する識別
子のマッピングを行い、識別子間の不整合を検出
メトリクスを用いて欠陥の可能性が低い不整合を取り除く
不整合が検出された識別子を欠陥候補として出力
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
8
字句解析127: o_count = v_count;128: o_var = variables;129:130: v_count += STORE_INCR;131: variables = (char **) malloc (v_count*sizeof(char *));132:133: for (indx = 3; indx < o_count; indx++)134: variables[indx] = o_var[indx];135:136: for (; indx < v_count; indx++)137: variables[indx] = NULL; ......
161: o_count = a_count;162: o_ary = arrays;163:164: a_count += STORE_INCR;165: arrays = (char **) malloc (a_count*sizeof(char *));166:167: for (indx = 1; indx < o_count; indx++)168: variables[indx] = o_ary[indx];169:170: for (; indx < v_count; indx++)171: lists[indx] = NULL;
;o_var varse=
o_count = ;v_count
+= STORE_INCRv_count
( char ) (**varse = malloc v_count * sizeof ( )char * ) ;
for indx( )= 1 ; indx < o_count ; indx ++
varse ][ indx = o_var ][ indx ;
for ( ); indx < v_count ; indx ++
varse ][ indx = NULL ;
;o_ary arrays=
o_count = ;a_count
+= STORE_INCRa_count
( char ) (**arrays = malloc a_count * sizeof ( )char * ) ;
for indx( )= 1 ; indx < o_count ; indx ++
varse ][ indx = o_ary ][ indx ;
for ( ); indx < v_count ; indx ++
lists ][ indx = NULL ;
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
9
マッピング解析
;o_var varse=o_count = ;v_count += STORE_INCRv_count ( char )**varse =; ・・・・・・
コード片1
;o_ary arrays=o_count = ;a_count += STORE_INCRa_count ( char )**arrays =; ・・・・・・
コード片2
コード片1 コード片2 回数
varse arrays 2
lists 1
varse 1
v_count a_count 4
v_count 1
o_count o_count 2
o_var o_ary 2
識別子変更テーブル
一貫性のある修正
一貫性のない修正 = 不整合
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
10
欠陥候補の絞り込み
全ての不整合は必ずしも欠陥ではない 2 つの可能性がある
修正漏れによる欠陥である場合意図的に変更されていない場合
メトリクスを用いて修正漏れによる欠陥の可能性の度合を数値化するUnchangedRatioConflict
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
11
UnchangedRatio
クローンとなっているコード片にある識別子の変更されていない比率 仮定:識別子がほとんどの箇所で変えられて、あるいくつかの箇
所だけで変えられていない場合、変えられていない識別子は大抵の場合、欠陥である
UnchangedRatio が0に近い場合、変更されていない識別子は欠陥の有力な候補となる 変更漏れの可能性が高い
UnchangedRatio が0、または1の場合、不整合が発生しないことを示す UnchangedRatio=0 の時、全ての識別子が変更されている UnchangedRatio=1 の時、全ての識別子が変更されていない
NumOfUnchangedIDUnchangedRatio = TotalNumOfID
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
12
UnchangedRatio の計算例
v_count の UnchangedRatio は 0.20 となるこの変数名は 5 回出現しているコード片2で1回変更されていない
コード片1 コード片2 回数 UnchangedRatio
v_counta_count 4
0.20v_count 1
varse
arrays 2
0.25lists 1
varse 1
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
13
Conflict
元の識別子と異なる複数の識別子に対応する場合 : Conflict = true
機能を実装するために、意図的に複数の識別子の名称に変更する可能性が高い
欠陥の候補から取り除く
コード片1
コード片2 回数 UnchangedRatio Conflict
v_counta_count 4
0.20 Falsev_count 1
varse
arrays 2
0.25 Truelists 1
varse 1
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
14
出力される欠陥候補
コピー元のコード片
コピー先のコード片 識別子 UnchangedRatio
コード片1 コード片2 v_count 0.20
コード片1 コード片2 回数 UnchangedRatio Conflict
v_counta_count 4
0.20 Falsev_count 1
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
15
提案手法の実装
対象言語:Cと Java ツールの記述言語: Java クローン検出部には既存のコードクローン
検出ツール CCFinder を利用 字句解析部は字句解析器生成ツール JFLEX
を用いて構築 検出された欠陥候補を可視化するため
に、 GUI で提示
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
16
ツールのGUI
欠陥候補リスト
識別子変更テーブ
ル
ソースコードビュー
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
17
適用実験
目的:識別子の修正不整合による欠陥を検出できているかを確認
対象: Linux kernel 2.6.6ファイル数 : 6,491LOC: 約 400 万
実験設定クローンの最小トークン数: 30UnchangedRatio の閾値: 0.4
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
18
欠陥候補の検出
arch モジュールでは 87 個、 drivers モジュールでは 120 個の欠陥候補が検出された
欠陥候補を含むクローンの総行数はモジュールの総行数の 0.25 %未満
モジュール ファイル数
総行数 欠陥候補数 欠陥候補を含むクローンの総行数
Linux-2.6.6/arch 2,355 724,858 87 1,615
Linux-2.6.6/drivers 2,323 2,344,594 120 3,637
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
19
欠陥候補の検証
検証方法: Linux の変更記録や Linux-2.6.6以降のバージョンと確認
修正された欠陥は 3 件 欠陥の可能性が高い候補は 5 件 僅かなコードを調べることで 8 件もの欠
陥を検出できた
モジュール
証明された欠陥数
可能性の高い欠陥数 合計
arch 3 5 87
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
修士論文発表会 2008/02/15
20
まとめと今後の課題
まとめソフトウェアに多く存在しているコードクロー
ンに着目クローンとなっているコード片の間で識別子に
対する修正の不整合を検出する手法を提案修正の不整合を絞り込み、欠陥候補を提示
今後の課題より多くのクローンパターンに適用他の手法との比較