【sqip 2014】継続的システムテストについての理解を深めるための...

50
継続的システムテストについての 理解を深めるための 開発とバグのメトリクスの分析 2014/09/11 荻野 恒太郎 [email protected] Search Platform Group, Search Section, Big Data Department, Rakuten Inc. http://www.rakuten.co.jp/

Upload: kotaro-ogino

Post on 24-May-2015

2.334 views

Category:

Technology


2 download

DESCRIPTION

ソフトウェア品質シンポジウム2014での経験発表のスライドです。 http://www.juse.jp/sqip/symposium/detail/day1/#session_A1-3 10/09追記:ブログ記事書きました http://kokotatata.hatenablog.com/entry/2014/10/08/111353 (色の表示がslideshare上で少し変になってますので、ダウンロードした方がよいかもしれません。) JaSSTではシステムテストを自動化するとバグ修正日数が改善するというメリットについてお話ししました。 http://www.slideshare.net/kotaroogino/jasst14-tokyo SQiPではメトリクスを分析する事で、テストの自動化にはどういった課題があるか問題提起を行ったり、我々が行っている改善の施策を客観的にお話ししました。

TRANSCRIPT

Page 1: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

継続的システムテストについての 理解を深めるための 開発とバグのメトリクスの分析 2014/09/11 荻野 恒太郎 [email protected] Search Platform Group, Search Section, Big Data Department, Rakuten Inc. http://www.rakuten.co.jp/

Page 2: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

2

アジェンダ

バックグラウンド

メトリクス

分析①

分析②

分析③

まとめと今後の課題

Page 3: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

3

バックグラウンド

メトリクス

分析①

分析②

分析③

まとめと今後の課題

Page 4: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

4

(ST) 設計 実装

システムテスト(ST)

分析

背景①:開発プロセスの変化とシステムテスト

設計

実装

要求(スコープ)

自動化前 自動化後

時間

要求(スコープ)

時間

分析

• ウォーターフォールからアジャイルへ 平鍋 健児, ”ソフトウェア工学の分岐点における、アジャイルの役割” SS2010.

• 早期からのシステムテストの実施 永田 敦, “アジャイル開発における品質保証部門によるシステムテストの アプローチ” JASPIC2013.

• 継続的システムテスト 荻野ら, ”システムテスト自動化による大規模分散検索プラットフォームの 開発工程改善” JaSST’ Tokyo 2014.

自動化により システムテストを日次で実行

Page 5: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

5

背景②:継続的システムテストのメリット

テスト自動化に関する通説 • 品質と、コストとデリバリーはトレードオフ  → 品質保証が開発プロセスから独立している事を仮定

継続的システムテスト • 自動化する事でシステムテストを開発プロセスに取り込む事が可能

Page 6: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

6

背景②:継続的システムテストのメリット

システムテストを開発プロセスに取り込む

JaSST’14 Tokyoの発表より

Page 7: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

7

背景②:継続的システムテストのメリット

バグ修正日数が改善

JaSST’14 Tokyoの発表より

Page 8: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

8

背景②:継続的システムテストのメリット

テスト自動化に関する通説 • 品質と、コストとデリバリーはトレードオフ  → 品質保証が開発プロセスから独立している事を仮定

継続的システムテスト • 自動化する事でシステムテストを開発プロセスに取り込む事が可能

バグ修正日数が減少  = コストとデリバリーも改善

Page 9: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

9

本発表の目的と手法

目的: 継続的システムテスト環境下での 開発とシステムテストへの理解を深める事 手法: 開発、プロダクトとバグのメトリクスの分析

疑問①: 自動化されたシステムテストは質が低い?

疑問②: システムテストを開発プロセスに取り込むって?

疑問③: 開発をうまく進めるのに必要な工夫は?

システムテスト自動化への疑問

Page 10: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

10

継続的システムテストの “ありのままの姿”

Page 11: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

11

バックグラウンド

メトリクス

分析①

分析②

分析③

まとめと今後の課題

Page 12: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

12

分析対象のメトリクス

開発メトリクス 日次の • コミット数 • コミットサイズ

開発者

コミット ソースコード レポジトリ

ビルド テスト

バグ レポート

プロダクトメトリクス 日次の • LOC      • 変更ファイル数 • 変更LOC • 追加ファイル数 • 追加LOC • 削除ファイル数 • 削除LOC • 変更なしファイル数 • 無変更LOC

バグメトリクス 日次の • 検出バグ数

Page 13: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

13

メトリクスの収集方法 グループ メトリクス名 収集方法 単位

開発メトリクス 日次のコミット数 git log (*1) 回数 日次のコミットサイズ git log (*2) 行数

プロダクトメトリクス 日次のLOC cloc (*3)  行数 日次の変更LOC 日次の追加LOC 日次の削除LOC 日次の変更無しLOC

cloc –diff (*4) 行数

日次の変更ファイル 日次の追加ファイル 日次の削除ファイル 日次の変更なしファイル

cloc –diff (*4) ファイル数

バグメトリクス 日次のプロダクトの 検出バグ数

- システムテストで発見されたバグ -バグ票の作成日で集計 - 同じ欠陥に由来する モノは新しい方を削除

回数

(*1) https://www.atlassian.com/ja/git/tutorial/git-basics#!log (*2) コメント等を含む (*3) http://cloc.sourceforge.net/ (*3)(*4) 開発言語はJava。コメント等を含まない

Page 14: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

14

分析対象のメトリクス(2013年度1/28~10/23)

0

5000

10000

15000

20000

25000

0

10

20

30

40 Commit

Commit size

0

50

100

150

200

0〜4 5〜9 10〜14

15〜19

20〜24

25〜29

30〜34

一日のコミット数

コミット数とコミットサイズ 日次のコミット数の分布

1日で見つかった検出バグ数

0

50

100

150

200

250

0 1 2 3 4 5

日次の検出バグ数の分布

変更 LOC

追加 LOC

削除 LOC

0

2000

0

2000

0

1000

2000

LOC

時間

時間

コミット数 コミットサイズ

行数

頻度

頻度

Page 15: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

15

分析対象の開発プロジェクトの開発フェーズ 大きな

機能要件 システム

リファクタリング 断続的な

小さな要件 受け入れ

テスト 受け入れ

テスト

• 継続的な開発とテストが特徴

0

200

400

600

800

1000

1200

1400

0

10

20

30

40

50

60

70

80

90

累積検出バグ数

累積コミット数

A B C

開発フェーズ

検出

バグ

コミ

ット

99日間 100日間 84日間

Page 16: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

16

継続的システムテストの特徴について考察

従来のシステムテスト 継続的システムテスト

STの位置 実装の後 実装と平行して同時 役割 品質の門番 (品質の門番)

リグレッションテスト テストの追加 信頼度成長曲線を

見ながらテスト工程で ユーザーストーリーと コードカバレッジを 見ながら実装工程で

テスト期間中の コード変更

バグ修正のみ ある

リファクタリング 少ない 多い

Page 17: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

17

バックグラウンド

メトリクス

分析①

分析②

分析③

まとめと今後の課題

Page 18: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

18

分析①: 自動化されたシステムテストの評価

3月 5月 7月 9月

累積検出バグ数

A B C

• 我々の開発プロセスを逐次的なミニウォーターフォールと考え   バグとテスト追加の安定している下記のA,B,C3点で計測

疑問①: 自動化されたシステムテストは質が低い?

分析①の目的 分析対象のプロジェクトのテストの質を調べるため テスト密度とバグ密度で業界標準と比較

Page 19: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

19

分析①:自動化されたシステムテストの評価

(*1) ”ソフトウェア開発データ白書 2012-2013 定量データ分析で分かる開発の最新動向”より

0

10

20

30

40

50

新規開発 改良開発 0

0.5

1

1.5

2

新規開発 改良開発

評価指標 • バグ密度とテスト密度 • IPAが提供する業界標準の値と比較 (*1) - 最小値、P25, 中央値、P75, 最大値 → P25 ~ P75の区間が一つの目安 - 主要言語Javaの値を使用 - 新規開発と改良開発

テスト密度 バグ密度

テスト密度 = テストケース数 ÷ KLOC

バグ密度 = 検出バグ数 ÷ KLOC

IPAが提供する業界標準の値

Page 20: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

20

分析①:テスト密度の業界標準との比較

考察: - テスト件数は規模に対して標準的 - テスト密度が継続して上昇 → フレームワークやDSLの完成後テスト追加が容易に - Cの期間ではテスト密度が若干業界標準より高い → システムテストの件数やカバレッジのための指標が必要

0

10

20

30

40

50

A B C 0

10

20

30

40

50

新規開発 改良開発

テスト密度

業界標準 本プロジェクト

(18.64)

(28.71)

(38.76)

Page 21: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

21

分析①:バグ密度の業界標準との比較

考察: - 断続的な小さい要件のBの期間で小さいバグ密度 - 機能追加のないシステムのリファクタリングのCの期間でもバグを検出 → リファクタリングによるリグレッションを自動テストが検出 - 全体を通し業界標準のバグ密度 → バグカーブが収束するようなリグレッションテストと推察

0

0.5

1

1.5

2

新規開発 改良開発 0

0.5

1

1.5

2

A B C

バグ密度

業界標準 本プロジェクト

(0.74)

(0.08) (0.31)

Page 22: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

22

バックグラウンド

メトリクス

分析①

分析②

分析③

まとめと今後の課題

Page 23: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

23

分析②:開発メトリクスとバグの関係

開発メトリクス

コミット ソースコード レポジトリ

バグ レポート

プロダクトメトリクス バグメトリクス

ビルド テスト

先行研究: プロダクトメトリクスとバグの関係を評価 - S Syedら, “Open Source, Agile and reliability Measures”, ISQI, 2009 - 下村ら, “ソフトウェアメトリクスを用いた単体テストの品質リスク評価”, SQiP2013.

疑問②: システムテストを開発プロセスに取り込むって?

分析②の目的 プロダクトメトリクスだけでなく、開発メトリクスも バグの見つかり方と関係があるか調査する事

Page 24: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

24

分析②:開発メトリクスとバグの関係

開発メトリクス プロダクトメトリクス バグメトリクス

分析手法 • バグメトリクスとの相関を調査 - 日次の開発メトリクス、プロダクトメトリクス - 週次の積算開発メトリクス、プロダクトメトリクス

時間

コミ

ット

時間

変更

LOC

時間

検出

バグ

時間

コミ

ット

日次データ

週次の 積算データ

時間

検出

バグ

時間

変更

LOC

Page 25: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

25

分析②:日次データでの相関

グループ 説明変数 相関係数 開発メトリクス コミット数

コミットサイズ 0.19 0.06

プロダクトメトリクス

変更LOC 追加LOC 削除LOC 無変更LOC 変更ファイル 追加ファイル 削除ファイル 変更なしファイル

0.36 0.17 0.19 -0.17 0.20 -0.09 0.06 -0.19

0

2

4

6

0 20 40 コミット数

検出

バグ

コミット数と検出バグ数の散布図

600

700

800

900

0

50

100

 累積バグ数 変更無しファイル数

累積検出バグ数と変更無しファイル数の 時系列データ

考察: - すべてのメトリクスで相関は弱い→結合バグ発見までの潜在期間 - ファイルに変更を加えない事には意味がある?

累積検出バグ数 変更無しファイル数

Page 26: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

26

分析②:週次の積算データでの相関

グループ 説明変数 相関係数 開発メトリクス 週次コミット数

週次コミットサイズ 0.47 0.33

プロダクトメトリクス 週次変更LOC 週次追加LOC 週次削除LOC 週次無変更LOC 週次変更ファイル 週次追加ファイル 週次削除ファイル 週次変更なしファイル

0.56 0.42 0.61 -0.29 0.66 0.20 0.33 -0.31

0

5

10

15

0 100 200

積算変更ファイル数と 検出バグ数の散布図

積算変更ファイル数

検出

バグ

0

5

10

15

100以上 100以下

積算変更ファイルの 層別分析による検出バグ数

検出

バグ

考察: - 開発メトリクスも中程度の相関があるがプロダクトメトリクスより弱い - 積算変更ファイル数が一番高い相関

100未満

Page 27: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

27

バックグラウンド

メトリクス

分析①

分析②

分析③

まとめと今後の課題

Page 28: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

28

分析③:バグ曲線が緩やかに収束しなかった理由の考察

信頼度成長曲線 • テスト時間と発見した欠陥数に着目。潜在障害数を予測。

【ソフトウェア信頼性モデル, 山田茂, 1994】

継続的システムテスト 従来のシステムテスト

分析 設計 実装 システムテスト 従来の開発工程 継続的システムテストの

開発工程 時間

累積

検出

バグ

疑問③: 開発をうまく進めるのに必要な工夫は?

分析③の目的 継続的システムテスト環境下で早くバグを見つけるには? バグ曲線が緩やかに収束しなかった理由を考察

Page 29: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

29

分析③:継続的システムテストでのバグ曲線

0

10

20

30

40

50

60

70

80

90 検

出バ

グ数

時間

A B

C

• 一定の傾きでバグが増えている • フェーズの終了とともに急速に収束

累積検出バグ数

Page 30: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

30

0

20

40

60

80

100

分析③:バグ曲線が緩やかに収束しなかった理由の考察

累積コミット数

時間

0

20

40

60

80

100

0 200 400 600 800 1000

A B

C

分析手法① • 累積コミット数に対するバグ曲線による分析

A B

C

(検出

バグ

数)

(検出

バグ

数)

Page 31: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

31

0

20

40

60

80

100

分析③:バグ曲線が緩やかに収束しなかった理由の考察 (検

出バ

グ数

)

時間

0

20

40

60

80

100

0 200 400 600 800 1000

A B

C

分析手法① • 累積コミット数に対するバグ曲線による分析

考察: - A,B,C開発期間は同じ位 コミット数が大きく異なる

- 時間を横軸にとると フェーズ終了前で急に収束

- コミットを横軸によると なだらかに収束

- 小さい収束が大きな収束

A B

C

(検出

バグ

数)

累積コミット数

Page 32: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

32

0

20

40

60

80

100

分析③:バグ曲線が緩やかに収束しなかった理由の考察 (検

出バ

グ数

)

時間

0

20

40

60

80

100

0 200 400 600 800 1000

A B

C

分析手法① • 累積コミット数に対するバグ曲線による分析

A B

C

(検出

バグ

数)

累積コミット数

考察: - A,B,C開発期間は同じ位 コミット数が大きく異なる

- 時間を横軸にとると フェーズ終了前で急に収束

- コミットを横軸によると なだらかに収束

- 小さい収束が大きな収束

Page 33: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

33

0

20

40

60

80

100

分析③:バグ曲線が緩やかに収束しなかった理由の考察 (検

出バ

グ数

)

時間

0

20

40

60

80

100

0 200 400 600 800 1000

A B

C

分析手法① • 累積コミット数に対するバグ曲線による分析

A B

C

(検出

バグ

数)

累積コミット数

考察: - A,B,C開発期間は同じ位 コミット数が大きく異なる

- 時間を横軸にとると フェーズ終了前で急に収束

- コミットを横軸によると なだらかに収束

- 小さい収束が大きな収束

Page 34: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

34

0

20

40

60

80

100

分析③:バグ曲線が緩やかに収束しなかった理由の考察 (検

出バ

グ数

)

時間

0

20

40

60

80

100

0 200 400 600 800 1000

A B

C

分析手法① • 累積コミット数に対するバグ曲線による分析

A B

C

(検出

バグ

数)

累積コミット数

考察: - A,B,C開発期間は同じ位 コミット数が大きく異なる

- 時間を横軸にとると フェーズ終了前で急に収束

- コミットを横軸によると なだらかに収束

- 小さい収束が大きな収束

Page 35: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

35

0

20

40

60

80

100

分析③:バグ曲線が緩やかに収束しなかった理由の考察 (検

出バ

グ数

)

時間

0

20

40

60

80

100

0 200 400 600 800 1000

A B

C

分析手法① • 累積コミット数に対するバグ曲線による分析

A B

C

(検出

バグ

数)

累積コミット数

考察: - A,B,C開発期間は同じ位 コミット数が大きく異なる

- 時間を横軸にとると フェーズ終了前で急に収束

- コミットを横軸によると なだらかに収束

- 小さい収束が大きな収束

→ コミットに含まれる バグの減少を示唆

Page 36: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

36

0

20

40

60

80

100

分析③:バグ曲線が緩やかに収束しなかった理由の考察 (検

出バ

グ数

)

時間

0

20

40

60

80

100

0 200 400 600 800 1000

A B

C

分析手法① • 累積コミット数に対するバグ曲線による分析

A B

C

(検出

バグ

数)

累積コミット数

考察: - A,B,C開発期間は同じ位 コミット数が大きく異なる

- 時間を横軸にとると フェーズ終了前で急に収束

- コミットを横軸によると なだらかに収束

- 小さい収束が大きな収束

→ コミットに含まれる バグの減少を示唆

Page 37: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

37

0

20

40

60

80

100

分析③:バグ曲線が緩やかに収束しなかった理由の考察 (検

出バ

グ数

)

時間

0

20

40

60

80

100

0 200 400 600 800 1000

A B

C

分析手法① • 累積コミット数に対するバグ曲線による分析

A B

C

(検出

バグ

数)

累積コミット数

考察: - A,B,C開発期間は同じ位 コミット数が大きく異なる

- 時間を横軸にとると フェーズ終了前で急に収束

- コミットを横軸によると なだらかに収束

- 小さい収束が大きな収束

→ コミットに含まれる バグの減少を示唆

→ 開発者がコミット直後に   バグに気づき修正

Page 38: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

38

分析③:バグ曲線が緩やかに収束しなかった理由の考察

コミット数

0

20

40

60

80

100

0 200 400 600 800 1000

累積バグ 累積バグ in スモークテスト 累積バグ in その他テスト

A

B C

分析手法② • テスト種別ごとのバグ曲線による分析

(検出

バグ

数)

バージョン

スモークテスト

その他テスト

 システムテスト 累積検出バグ数

累積検出バグ数 in スモークテスト

累積検出バグ数 in その他テスト

Page 39: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

39

分析③:バグ曲線が緩やかに収束しなかった理由の考察

コミット数

0

20

40

60

80

100

0 200 400 600 800 1000

累積バグ 累積バグ in スモークテスト 累積バグ in その他テスト A

B C

分析手法② • テスト種別ごとのバグ曲線による分析

考察: - スモークテストを壊すようなコミットがAの期間では一度に集中 - Cでは2回 (見つかったバグの数はともに10) - Cではスモークテストが収束した後、すぐに全体も収束

(検出

バグ

数)

バージョン

スモークテスト

その他テスト

 システムテスト

A

累積検出バグ数

累積検出バグ数 in スモークテスト

累積検出バグ数 in その他テスト

Page 40: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

40

分析③:バグ曲線が緩やかに収束しなかった理由の考察

コミット数

0

20

40

60

80

100

0 200 400 600 800 1000

累積バグ 累積バグ in スモークテスト 累積バグ in その他テスト A

B C

分析手法② • テスト種別ごとのバグ曲線による分析

考察: - スモークテストを壊すようなコミットがAの期間では一度に集中 - Cでは2回 (見つかったバグの数はともに10) - Cではスモークテストが収束した後、すぐに全体も収束

(検出

バグ

数)

バージョン

スモークテスト

その他テスト

 システムテスト

A

累積検出バグ数

累積検出バグ数 in スモークテスト

累積検出バグ数 in その他テスト

Page 41: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

41

分析③:バグ曲線が緩やかに収束しなかった理由の考察

コミット数

0

20

40

60

80

100

0 200 400 600 800 1000

累積バグ 累積バグ in スモークテスト 累積バグ in その他テスト A

B C

分析手法② • テスト種別ごとのバグ曲線による分析

考察: - スモークテストを壊すようなコミットがAの期間では一度に集中 - Cでは2回 (見つかったバグの数はともに10) - Cではスモークテストが収束した後、すぐに全体も収束

(検出

バグ

数)

バージョン

スモークテスト

その他テスト

 システムテスト

A

累積検出バグ数

累積検出バグ数 in スモークテスト

累積検出バグ数 in その他テスト

Page 42: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

42

分析③:バグ曲線が緩やかに収束しなかった理由の考察

コミット数

0

20

40

60

80

100

0 200 400 600 800 1000

累積バグ 累積バグ in スモークテスト 累積バグ in その他テスト A

B C

分析手法② • テスト種別ごとのバグ曲線による分析

考察: - スモークテストを壊すようなコミットがAの期間では一度に集中 - Cでは2回 (見つかったバグの数はともに10) - Cではスモークテストが収束した後、すぐに全体も収束

(検出

バグ

数)

バージョン

スモークテスト

その他テスト

 システムテスト

A

累積検出バグ数

累積検出バグ数 in スモークテスト

累積検出バグ数 in その他テスト

Page 43: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

43

分析③:バグ曲線が緩やかに収束しなかった理由の考察

コミット数

0

20

40

60

80

100

0 200 400 600 800 1000

累積バグ 累積バグ in スモークテスト 累積バグ in その他テスト A

B C

分析手法② • テスト種別ごとのバグ曲線による分析

考察: - スモークテストを壊すようなコミットがAの期間では一度に集中 - Cでは2回 (見つかったバグの数はともに10) - Cではスモークテストが収束した後、すぐに全体も収束 → スモークテストを壊すような開発をイテレーションで分割 コミットを小規模化し、バグを早期に発見、修正出来る

(検出

バグ

数)

バージョン

スモークテスト

その他テスト

 システムテスト

A

累積検出バグ数

累積検出バグ数 in スモークテスト

累積検出バグ数 in その他テスト

Page 44: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

44

バックグラウンド

メトリクス

分析①

分析②

分析③

まとめと今後の課題

Page 45: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

45

まとめ:システムテスト自動化に関する疑問

まとめ:   継続的システムテストへの理解を深めるため  開発、プロダクトとバグのメトリクスの分析

疑問①: 自動化されたシステムテストは質が低い?

疑問②: システムテストを開発プロセスに取り込むって?

疑問③: 開発をうまく進めるのに必要な工夫は?

Page 46: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

46

まとめ:疑問①への答え

答え(分析①より): 自動化されたシステムテストは“質が低い”と いう事はない

• ただし、自動化した環境ではテスト密度は 上がりやすいので、 システムテストの カバレッジの指標が必要

0

50

A B C

テスト密度

疑問①: 自動化されたシステムテストは質が低い?

Page 47: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

47

まとめ:疑問②への答え

答え(分析②より): システムテストを開発プロセスに取り込むと プロダクトメトリクスだけでなく 開発メトリクスもバグの発見の仕方と関係

• バグの混入のされ方は、  変更無しファイル数や  変更したファイル数等と関係

0 5

10 15

100以上 100以下

積算変更ファイルの 層別分析による検出バグ数

検出

バグ

疑問②: システムテストを開発プロセスに取り込むって?

Page 48: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

48

答え(分析③より): 自動化した環境では開発者に早期に フィードバックする事が重要

• コミットのタイプが機能追加からバグ修正へ • スモークテストを失敗させるような コミットをイテレーションで  分割する事でバグを早期に 発見する事が出来る

まとめ:疑問③への答え

コミット数

0

50

100

0 500 1000 (検出

バグ

数)

疑問③: 開発をうまく進めるのに必要な工夫は?

Page 49: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

49

今後の課題

• システムテストの評価指標  → 継続的システムテスト下でのテストの改善    - テストケースの優先順位付け    - テストの作り過ぎを防ぐ • 開発メトリクスの品質管理への利用 • 開発プロセスと品質保証の 相互作用的な変化

Page 50: 【SQiP 2014】継続的システムテストについての理解を深めるための 開発とバグのメトリクスの分析 #SQiP #SQuBOK

50

Long live testing