発表原稿 - 研究室

Download Report

Transcript 発表原稿 - 研究室

コンセプトを利用した
Traceabilityリンクの確立
海尻海谷研究室
M2 田中宏和
1
目次
●
背景
●
目的
●
検討手法
●
実験結果
●
考察
●
まとめ
2
背景
近年、ソフトウェアの利用が一般的となっている
ソフトウェアの開発が大規模化かつ複雑化している
それに基づき、ソフトウェアの仕様変更や機能拡張が頻繁に行われる
プロジェクトの内容、関係性を明示的に見る手段が必要
3
目的
大きな開発プロジェクトは開発過程の全てを把握するのが難しい.
→開発過程で作成される成果物の整合性や一貫性を保ちつつ適切に変更
を行うことは重要.
Traceability Linkと呼ばれる、各開発段階の成果物の関連づけをする技術が
ある.
図1 Traceability Link例
上流工程(仕様書)と下流工程(ソースコード)各々は必ず関連性を持つ.
関連性を求めることで、変更すべき点をすぐ見つけられる.
4
検討内容

既存手法との比較
労力
精度
粒度
備考
完全な人手
×
○
○
労力の面で非現実的
ルール照合
○
○
×
整構造であることが必要
単語類似度による照合
○
×
×
粒度を細かくすることが困難
編集作業の履歴
○
△
△
ログを取る為の環境が必要
○
未評価
○
システムを構築し、実験が必要
コンセプトを用いた
新手法
5
表1
Traceability確立の為の手法の特徴
研究手法
図2 手法の提案
改善前
(既存技術)
改善後
(新手法)
6
よりわかりやすい、意味に基づく関連付けをしたい
研究手法
1. ファイルの分割を行う.
2. 単語の抽出、削除する.
3. FCAを使い、コンセプトを求める.
4. コンセプト間の類似度を求める.
5. 類似度を加算し、ファイルベースに戻す.
6. その類似度を元にTraceability Linkを確立する.
上記の順序で手順を進めていく
- コンセプト : ソフトウェア成果物の概要や機能
- FCA : Formal Concept analysis(形式概念分析)
各オブジェクトがどの様な属性を持つかを定義する手法
7
研究手法

前処理
前処理において、Linkを結ぶ単位を決定する.
-ドキュメント : 章と節
-ソースコード : 各ファイル単位

単語ベースでの前処理
-①ドキュメント及びソースコードの単語抽出
-②一般的なstop wordと原型化(Doctermというソフトを使用)
-③共通単語のみを抽出
-④N割以上の両ファイル間で出現する単語を省く
-⑤マニュアルでのstop wordと思われる単語を省く
8
研究手法
①コンセプトの取り出し方(Concept Analysis)
ソフトウェア(FcaStone)使用
オブジェクト
属性
赤色
形が丸
木になる
りんご
×
×
×
なし
-
×
×
スイカ
-
×
-
ぶどう
×
-
×
りんご
なし
包含関係:りんご⊃なし⊃スイカ
りんご⊃ぶどう
コンセプト例 {りんご ぶどう}:{赤色 木になる}
属性:章名(上流)、ファイル名(下流)
オブジェクト:単語(上流)、関数(下流)
スイカ
ぶどう
単語全てがコンセプトとなりえる
全ての包含関係を割り出す
コンセプトをどれ程の個数を使うかにより精度、細かさが変化する
9
研究手法
②類似性分析
ドキュメントのコンセプトとソースコードのコンセプトのコサイン類似度の比較
ドキュメントのコンセプト
(単語)
(ファイルリスト)
ソースコードのコンセプト
(単語)
(ファイルリスト)
一意の値(α)
ファイルリストに挿入
上流(仕様書)のコンセプト
0<α<1
下流(ソース)
式1 コサイン類似度の計算式
1章
2章
3章
4章
A.class
α
α
α
0
B.class
0
0
0
0
α
α
α
0
これが
6200×1900個
作成される
0
0
0
0
全て加算する
のコンセプト C.class
D.class
10
研究手法
③コンセプト間の
Linkの接続
最も値が高い物をTraceability Linkを繋げることが出来ると定義する
1章
2章
3章
4章
A.class
2
5
8
1
B.class
4
4
5
3
C.class
1
3
6
5
D.class
0
9
2
1
関係性
走査
関連性がありそうだ
Linkを繋げよう
自動で行われる
1章
Class1.java
1節Scan
関数:scaning
目的:Linkの意味づけ
コンセプトの場所を特定出来る
精度の向上
11
実験対象
オープンソースでありC言語で作成されたFlexを対象に実
験した
-スキャナ(テキスト内の字句パターンを認識するプログラム)を生成する
ためのツール
●
ドキュメント分割数 : 28個
●
ソース分割数 : 20個
●
ドキュメントの単語数 : 100000個
-ドキュメントの異なった単語数 : 5500個
●
ソースコードの単語数 : 53000個
-ソースコードの異なった単語数 : 3200個
12
実験結果
●
前処理適応後のデータ
-使用した単語数 : 639個
-ドキュメントのファイル数 : 28個
-ソースコードのファイル数 : 20個
●
FCAで求めたコンセプト結果
コンセプト数
前処理前のドキュメント
約100000個
前処理前のソースコード
約5000個
前処理後のドキュメント
6219個
前処理後のソースコード
1763個
13
実験結果
●
コンセプト結果
実験に用いたソースコードのコンセプト例
103 {arrai creat declar def don flex function integ max num}:{dfa.c flexdef.h
gen.c initscan.c main.c parse.c scan.c skel.c sym.c tbcmp.c};
このままでは比較が出来ないので表記を0/1に変換する
103 {0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
00000100000000000000100000100000001000000000
00000010000010010000100000000001000000010011
10111000000000000000000111000000000100000000
00110000000000100000101000000000101000100000
00001000001000000100000000000100000000000001
01100101000000100100000000001000000000000000
00000100100000000000000000010010000000010000
00001000000000000100000000010000000000000000
00000000000000100000010000000001000000000000
10000000000010000000100000000000000000000000
00000000001000001001001000000100000000000000
01000000010000010000110000100100000000000010
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 1 0 0 1 0 0 0 0 1 0 0, 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0};
14
最初の数値はコンセプトの順番{}の前半が単語、後半のがファイル名を表している
実験結果
ソースコードのファイル
ド
キ
ュ
メ
ン
ト
の
フ
ァ
イ
ル
16
138
34
161
23
135
145
0
0
115
69
66
126
0
145
56
103
68
0
6
4,618
53,590
8,185
62,047
8,959
49,246
67,199
0
0
44,604
48,429
43,499
52,043
0
67,199
44,442
20,210
45,979
0
680
7,713
67,286
14,034
83,385
17,039
61,361
86,394
499
287
57,125
53,530
53,249
64,598
0
86,394
52,650
32,942
55,834
0
941
90
6,577
3,053
7,882
2,309
6,975
8,022
0
0
4,913
5,004
4,786
5,861
0
8,022
5,669
974
4,845
0
18
4,775
43,520
6,378
51,204
4,584
42,668
53,814
0
0
37,098
43,021
37,318
41,173
0
53,814
34,516
20,410
39,045
0
0
12,662
77,335
6,377
92,897
4,138
75,007
97,764
0
0
62,960
74,334
62,668
74,570
0
97,764
61,726
47,993
68,222
0
23
0
1,618
256
1,982
975
1,743
2,508
17
0
1,481
381
1,511
1,729
0
2,508
1,773
277
1,481
0
20
17,488
119,444
22,740
152,469
24,031
116,664
157,215
677
374
103,140
105,022
100,914
120,498
1
157,215
96,838
65,776
105,231
0
1,208
8,117
49,504
4,608
57,233
2,566
45,080
60,360
42
12
39,671
47,131
42,936
48,189
0
60,360
38,810
22,305
41,162
0
628
14,002
52,813
7,859
78,721
9,738
48,578
68,949
21
0
44,400
47,428
44,551
52,230
0
68,949
39,569
33,079
44,426
0
923
3,359
47,897
15,322
72,834
17,111
47,219
63,560
32
0
43,248
39,215
38,392
45,423
1
63,560
37,691
21,221
43,245
0
15
0
72
42
125
0
0
131
0
0
73
119
123
114
0
131
104
0
49
0
0
12,430
101,844
11,933
125,497
11,664
100,149
130,220
0
0
88,618
101,262
85,077
104,747
0
130,220
84,181
52,422
91,702
0
813
4,823
34,235
11,206
46,286
8,768
31,935
45,491
437
251
30,318
28,716
30,094
35,265
0
45,491
26,393
16,986
30,064
0
721
14,540
74,328
8,053
93,651
10,350
69,213
94,754
510
293
62,987
63,958
61,194
72,464
0
94,754
56,653
40,860
68,289
0
0
3,862
19,375
1,566
24,480
2,192
19,529
25,346
169
97
17,056
18,217
14,335
19,078
0
25,346
16,590
13,978
16,340
0
0
3,323
20,864
1,655
25,632
1,410
21,315
26,763
0
0
18,308
21,649
18,205
21,367
0
26,763
16,804
10,295
18,732
0
0
0
85
90
111
2
27
76
0
0
32
9
88
30
0
76
81
21
0
0
0
29,276
235,114
33,735
286,303
35,571
227,371
300,600
806
442
200,265
215,902
196,068
232,544
1
300,600
191,453
113,854
207,711
0
1,538
11,870
83,088
7,484
94,805
8,436
73,432
100,693
453
261
65,592
65,898
70,045
78,217
0
100,693
60,967
40,610
69,894
0
1,006
14,784
103,417
13,315
129,271
19,618
104,553
135,544
497
286
92,736
93,876
85,677
105,318
0
135,544
83,846
52,064
95,254
0
28
35
45
19
746
475
556
816
25
15
635
603
25
621
0
816
606
0
528
0
5
2,093
28,738
1,104
33,410
4,841
28,716
37,460
20
0
25,069
26,196
23,650
28,605
0
37,460
24,727
11,984
26,538
0
11
232
31,343
5,314
37,654
5,466
33,141
40,543
248
142
28,667
31,979
26,336
31,715
0
40,543
27,446
11,683
28,522
0
12
228
22,801
5,348
26,872
4,815
25,118
28,848
0
0
20,313
15,968
18,779
21,771
0
28,848
17,926
5,483
19,373
0
11
12,187
71,399
4,625
90,057
5,033
70,350
95,308
472
267
60,365
73,425
60,597
74,446
2
95,308
59,930
44,365
69,319
0
0
15,595
73,953
6,995
91,386
6,573
68,039
96,191
515
296
58,023
69,852
62,184
75,668
0
96,191
62,534
37,317
62,721
0
1,067
15,790
97,013
14,196
122,909
15,213
92,278
127,751
481
276
82,307
90,167
80,181
97,821
0
127,751
82,084
56,018
86,099
0
884
表1 新手法の結果
6200×1900個分加算
15
実験結果
ソースコードのファイル
ド
キ
ュ
メ
ン
ト
の
フ
ァ
イ
ル
0.083
0.069
0.067
0.055
0.055
0.068
0.057
0.000
0.000
0.069
0.038
0.043
0.088
0.000
0.031
0.136
0.108
0.000
0.129
0.187
0.288
0.136
0.305
0.162
0.200
0.297
0.000
0.000
0.202
0.311
0.250
0.317
0.000
0.265
0.169
0.284
0.000
0.058
0.189
0.267
0.199
0.302
0.252
0.248
0.424
0.041
0.059
0.235
0.280
0.224
0.267
0.000
0.388
0.201
0.205
0.000
0.088
0.076
0.111
0.092
0.202
0.152
0.203
0.223
0.000
0.000
0.094
0.123
0.098
0.121
0.000
0.184
0.031
0.083
0.000
0.059
0.080
0.210
0.129
0.265
0.124
0.229
0.285
0.000
0.000
0.176
0.234
0.178
0.216
0.000
0.258
0.044
0.196
0.000
0.000
0.180
0.172
0.167
0.249
0.189
0.223
0.285
0.000
0.000
0.182
0.215
0.213
0.182
0.000
0.280
0.169
0.168
0.000
0.040
0.000
0.077
0.151
0.170
0.093
0.076
0.129
0.102
0.000
0.077
0.086
0.096
0.115
0.000
0.104
0.076
0.061
0.000
0.072
0.131
0.312
0.145
0.491
0.238
0.377
0.424
0.105
0.111
0.469
0.292
0.307
0.403
0.064
0.409
0.185
0.300
0.000
0.129
0.140
0.328
0.170
0.349
0.093
0.317
0.327
0.077
0.054
0.247
0.235
0.252
0.309
0.000
0.320
0.129
0.236
0.000
0.027
0.191
0.214
0.186
0.273
0.420
0.243
0.323
0.126
0.000
0.285
0.230
0.177
0.222
0.000
0.335
0.094
0.116
0.000
0.089
0.150
0.236
0.135
0.339
0.278
0.227
0.318
0.147
0.000
0.284
0.255
0.172
0.336
0.090
0.293
0.151
0.225
0.000
0.052
0.000
0.045
0.087
0.071
0.000
0.000
0.074
0.000
0.000
0.045
0.099
0.111
0.114
0.000
0.080
0.000
0.047
0.000
0.000
0.109
0.258
0.148
0.322
0.182
0.292
0.340
0.000
0.000
0.272
0.228
0.272
0.335
0.000
0.307
0.194
0.206
0.000
0.057
0.190
0.253
0.138
0.322
0.165
0.219
0.348
0.042
0.059
0.220
0.255
0.215
0.315
0.000
0.312
0.233
0.248
0.000
0.029
0.183
0.290
0.149
0.384
0.159
0.294
0.317
0.040
0.057
0.251
0.280
0.217
0.323
0.000
0.247
0.195
0.303
0.000
0.000
0.049
0.213
0.099
0.268
0.179
0.251
0.329
0.054
0.076
0.233
0.181
0.101
0.241
0.000
0.301
0.160
0.117
0.000
0.000
0.059
0.171
0.048
0.264
0.078
0.193
0.224
0.000
0.000
0.244
0.177
0.182
0.249
0.000
0.187
0.121
0.141
0.000
0.000
0.000
0.049
0.095
0.137
0.078
0.048
0.041
0.000
0.000
0.073
0.027
0.061
0.062
0.000
0.066
0.048
0.000
0.000
0.000
0.183
0.497
0.247
0.580
0.238
0.477
0.555
0.077
0.081
0.434
0.428
0.400
0.557
0.047
0.521
0.243
0.443
0.000
0.095
0.173
0.253
0.141
0.317
0.116
0.207
0.258
0.076
0.108
0.194
0.257
0.196
0.324
0.000
0.214
0.100
0.249
0.000
0.162
0.143
0.259
0.090
0.377
0.287
0.308
0.419
0.035
0.050
0.331
0.288
0.263
0.372
0.000
0.399
0.157
0.194
0.000
0.074
0.088
0.018
0.036
0.160
0.088
0.036
0.076
0.096
0.272
0.145
0.081
0.090
0.062
0.000
0.098
0.000
0.095
0.000
0.136
0.134
0.201
0.087
0.223
0.072
0.188
0.269
0.177
0.000
0.178
0.199
0.235
0.218
0.000
0.211
0.088
0.163
0.000
0.083
0.049
0.164
0.140
0.254
0.066
0.182
0.264
0.054
0.076
0.133
0.217
0.178
0.226
0.000
0.230
0.121
0.225
0.000
0.076
0.092
0.283
0.164
0.313
0.074
0.250
0.299
0.000
0.000
0.183
0.264
0.218
0.286
0.000
0.227
0.166
0.248
0.000
0.057
0.171
0.183
0.119
0.276
0.147
0.221
0.329
0.161
0.152
0.182
0.226
0.214
0.259
0.131
0.319
0.200
0.265
0.000
0.000
0.186
0.267
0.192
0.338
0.135
0.278
0.374
0.037
0.052
0.203
0.250
0.313
0.275
0.000
0.348
0.125
0.220
0.000
0.052
0.219
0.232
0.194
0.299
0.173
0.246
0.358
0.044
0.062
0.215
0.240
0.216
0.267
0.000
0.365
0.180
0.251
0.000
0.062
表1 前手法の結果
16
実験結果
正しいLinkを各要素毎に一つのTraceability Linkを持つと考えた
正解数
・本手法 ソースコード 3/20 ドキュメント 4/28
・前手法 ソースコード4/20 ドキュメント 1/28
ランダムでサンプルでの複数のLink候補での評価
Concept Indexを参照
数値の上位5個を候補
参考項目-
2章(scan.c version.c) 5章(main.c flexlexe.c scan.c yylex.c libmain.c)
ccl.c(1章 16章 17章 28章) gen.c(12章)
2章 0/3
5章 2/5
ccl.c 1/4
gen.c 0/1
17
考察
Traceabilty Link確立の良い結果が出なかった
本手法
出力結果: 前手法を内包している結果で出力している
既存の
IR手法
様々な要因を含んだLinkを作成することは出来る
要因:単語の出現率、複数での単語同士の関係性
精度が高くなかった要因
この計算手法では相互の出現数が多い単語を持つファイルが関連性へ
の影響が大きすぎる
-① 加算方式の問題
-② 前処理での必要な単語の取捨選択
-③ コンセプトの数が大きすぎる
18
まとめ
●
これからやっていくこと
-重要な単語の発見手法の確立
-ファイル分割をバイト毎に決めて適応可能できるかの検証
-コンセプト(概念、機能)の数を減らす
精度の高いTraceability Linkを作成する為には、コンセプト間の比較中や
後に人の手でLinkを繋ぐ必要がある
-重要な概念、機能は数がそう多いはずがない
そこに具体的なラベリング(意味づけ)が出来れば精度や概念や機能が
具体的に容易に把握出来るようにしたい
19