マジカルスプーンを対象マジカルスプーンを対象とした対象としたテスト構成管理
テスト構成管理の構成管理の実例－多品種ソフトウェアテストの多品種ソフトウェアテストのケーススタディ－
ケーススタディ－JaSST’
JaSST’10 Tokyo
株式会社東陽テクニカ
株式会社東陽テクニカ
ソフトウェアソリューション
北條 哲

Copyright 2010 Toyo Corporation, All
rights reservedアジェンダ マジカルスプーンとは マジカルスプーンの開発とテスト
 テストケースの劣化現象
 テストケースの劣化対策
 ベースラインの適正化
 今後に向けて

Copyright 2010 Toyo Corporation, All
rights reserved2マジカルスプーンとは
 SESSAMEが開発した「子供達にソフトウェア開発とは何なのかを」を伝える、遊びながら学べる教材
 スプーンの超音波を飛行船のコントロール信号に変換
 日本全国はもとより、米国においても実地教育
 MDDロボットチャレンジに端を達して開発された

Copyright 2010 Toyo Corporation, All
rights reserved

3マジカルスプーン教育の歴史

米国高校向けMDDロボットチャレンジ

マジカルスプ－ン

UML教育向け

大学向け

MagicalBOX2-Sim

2005年

2008年
Copyright 2010 Toyo Corporation, All
rights reserved

2009年
4

マジカルスプーンの構造
テストプログラム

テストリソース

共有ライブラリ

共有ライブラリ
実機向け

基本パッケージ

シミュレータ向け
UML教育向け
大学向け

各実地教育カスタマイズ

米国高校向けCopyright 2010 Toyo Corporation, All
rights reserved5マジカルスプーンの開発とテスト
 基本パッケージのアップデート
コード変更

リグレッショ
ンテスト

 実地教育向けのカスタマイズ
基本パッ
ケージからブランチ仕様追加・変更

コード変更

リグレッショ
ンテスト

基本パッケージへ統合

Copyright 2010 Toyo Corporation, All
rights reserved6マジカルスプーンの開発とテスト
 基本パッケージのアップデート
 派生バージョンと共有する共有ライブラリをリファクタリング 共有ライブラリの外部インタフェースの変更は行わない
共有ライブラリ

Magical_common common

Copyright 2010 Toyo Corporation, Allrights reserved7マジカルスプーンの開発とテスト
 実地教育向けのカスタマイズ 基本パッケージから派生
 基本的に共有ライブラリの修正は行わない
 実地教育向けの特有処理を実装

各実地教育カスタマイズ
MagicalBox2
UML

US_twins

Project21

UML教育向け

米国高校向け大学向け

Copyright 2010 Toyo Corporation, All
rights reserved8マジカルスプーンの開発とテスト
 コードセットとテストリソースのトレーサビリティが確保されることで、品質が保証されるはずだが&基本パッケージ

コードセットの履歴
テストリソースの履歴
コードセットの履歴

米国高校向けテストリソースの履歴
コードセットの履歴
大学向け
テストリソースの履歴
Copyright 2010 Toyo Corporation, All
rights reserved9マジカルスプーンの開発とテスト
 開発担当F氏による開発の詳細
 マクロスイッチでステータス管理 同時並行で派生バージョン作成
 派生バージョンの修正は他との整合性を考えない
 必要に応じてリファクタリング

 テスト担当F氏によるテストの詳細
 リグレッションテストの範囲がわからない 動作しないリグレッションテストは黙殺する
 新機能のテストは実行する

Copyright 2010 Toyo Corporation, All
rights reserved

10テストケースの劣化現象
 リファクタリングによって変更されたファイルが見つからない

Copyright 2010 Toyo Corporation, All
rights reserved

11テストケースの劣化現象
 スイッチの状態によってテストプログラムをコンパイルできない

Copyright 2010 Toyo Corporation, All
rights reserved

12テストケースの劣化現象
派生

派生

Magical_common

Magical_common

Magical_common

MagicalBox2 REAL用

MagicalBox2 SIM用

MagicalBox2 UML用

互換性あり

互換性なし
互換性なし

piece_a_cake
Test

派生

派生

Magical_common

Magical_common

US_twins用

Project21用

互換性なし

互換性なし

Copyright 2010 Toyo Corporation, All
rights reserved

13テストケースの劣化現象


プログラマはプログラムを変更する
プログラマ ユニットテストケースの整合性チェックは後回し

ユニットテストケースの管理の不徹底 不適切な作業工程の優先順位


テストエンジニアがいたとしてもテストを復旧できない
テストエンジニアがいたとしても 既存のテストケースが実行できず、劣化が判明する

テストプロジェクトは製品プログラムとは別プロジェクト
 テストプロジェクトの仕様が不明瞭

横串チェック
横串チェックがテストケースの劣化を予防する
チェック
 実作業担当者にリグレッションテストの範囲を任せない 特定のプロジェクトに依存しない定量的な基準を作成

環境プロセス改善スペシャリスト
 開発環境エンジニア


Copyright 2010 Toyo Corporation, All
rights reserved

14テストケースの劣化対策はどんな方法があるのか？
 コンセプトは、現場の勘に任せない仕組み
 エンフォーシング
 ディフ・ディテクション
 ステータス・アカウンティング
 ベースライニング

Copyright 2010 Toyo Corporation, All
rights reserved

15テストケースの劣化対策はどんな方法があるのか？
 エンフォーシング
 テストプロジェクトがビルドできなければ登録できないようにすれば、テストプロジェクトを修正せざるを得ない

成功した
成功した場合した場合ベースラインを更新
ベースラインを更新失敗した
失敗した場合した場合前のバージョンに戻のバージョンに戻す

構成管理サーバに登録
テストプロジェクトをビルド

Magical_common

piece_a_cake
Test
Copyright 2010 Toyo Corporation, All
rights reserved

16テストケースの劣化対策はどんな方法があるのか？
 ディフ・ディテクション
 構成管理システムの差分検知によってリグレッションテストの範囲を検出

リグレッションテストの対象関数

Copyright 2010 Toyo Corporation, All
rights reserved

17テストケースの劣化対策はどんな方法があるのか？
 ディフ・ディテクション
 構成管理システムは変化を管理するシステムであるので、テストケースに問題のある変化を検出する
ファイル名変更の履歴から検出＞プロジェクトオープンエラーの防止//depot/Main/コード/common/timer_handler.c... #1 change 33 branch on 2009/10/27 by p4@MagicalBox2_REAL_RelWS (unicode) 'Ma
gicalBox2_REAL_release2更新'... ... branch from //depot/Release/MagicalBox2_REAL/コード/common/timer_IO.c#1

特定の#defineの変更から検出＞ビルドエラーの防止
17a19,22> #ifndef USE_SERIAL_IO> ifdef Ilogical_compilation_of_serialIO.
> #endif>
Copyright 2010 Toyo Corporation, All
rights reserved

18テストケースの劣化対策はどんな方法があるのか？
 ステータス・アカウンティング
 構成管理自体のメリットであるステータス・アカウンティン

グによって、テストが必要なモジュールを予測できるC:¥>p4 files //depot/Develop/MagicalBox2_REAL/コード/common/...@プログラム完了//depot/Develop/MagicalBox2_REAL/コード/common/sw1_handler.c#1 - branch change 23 (text)//depot/Develop/MagicalBox2_REAL/コード/common/sw1_handler.h#1 - branch change 23 (text)//depot/Develop/MagicalBox2_REAL/コード/common/sw2_handler.c#1 - add change 24 (text)//depot/Develop/MagicalBox2_REAL/コード/common/sw2_handler.h#1 - add change 24 (text)C:¥>p4 files //depot/Develop/MagicalBox2_REAL/コード/common/...@単体テスト完了//depot/Develop/MagicalBox2_REAL/コード/common/sw1_handler.c#1 - branch change 23 (text)//depot/Develop/MagicalBox2_REAL/コード/common/sw1_handler.h#1 - branch change 23 (text)

Copyright 2010 Toyo Corporation, All
rights reserved

19テストケースの劣化対策はどんな方法があるのか？
 ベースライニング
 確実にテストができるように作業工程の基準となるベースラインを常に磨いておく 仕様変更、設計変更、コード変更、テストのベース

 マジカルスプーンで起きたベースラインでのテストケースの劣化 仕様、コード、テストケースの設計トレーサビリティが確保されない ベースラインの基準が曖昧なため、テストを基準としたベースラインの差分追跡ができない
 テストの品質が低下する（ベースラインの基準が下げられる）

Copyright 2010 Toyo Corporation, All
rights reserved20適切なベースライン
ベースライン 設計トレーサビリティが確保されている単位
プログラマ

アーキテクトVer2.0

仕様完了
アウトプット

テストエンジニア

ビルド完了
インプット

アウトプット

テスト完了
インプット

アウトプットMagicalBox2
SIM
コードセット
テストケース
コード変更のベースのトレーサビリティ

コードセット
テストケース

仕様

テストのベースのトレーサビリティ

コードセット
テストケース仕様

Copyright 2010 Toyo Corporation, All
rights reserved

テスト結果

仕様

21

テストケースの劣化が乱すベースライン
ベースライン
プログラマ

アーキテクトVer2.0

仕様完了
アウトプット

テストエンジニア

ビルド完了
インプット

アウトプット

テスト完了
インプット

アウトプットMagicalBox2
SIM
コードセット
テストケース

コードセット
テストケース仕様

Ver1.0用

コードセット
テストケース仕様

Copyright 2010 Toyo Corporation, All
rights reserved

テスト結果

仕様

22

ベースラインの適正化
コードセットのベースライン
仕様完了

ビルド完了

テスト完了

リリース完了テストケースのベースライン
追加したベースライン
ビルド完了

テスト完了

ビルド完了
ビルド完了のベースラインに完了のベースラインに、のベースラインに、テストケースの実行可能品質を実行可能品質を確立条件に確立条件に含める
Copyright 2010 Toyo Corporation, All
rights reserved

23ベースラインの適正化

関数定義ファ
イルの更新
ファイルのリ
ネーム・移動テストケースの修正

テストエンジニア

テストプロジェクトファイルのリストアップ
テストプロジェクトファイルの整合性チェック
テストケースの修正ブランチ作
成Copyright 2010 Toyo Corporation, All
rights reserved

テストケースのベースライン

プログラマ

コードセットのベースラインベースラインを拡張
ベースラインを拡張したテストケースとコードセットの拡張したテストケースとコードセットの構成維持したテストケースとコードセットの構成維持の構成維持のワークフロー

24ベースラインの適正化

プログラマとテストエンジニアによる協調作業
プログラマ

エンフォーシング

テストエンジニア

ディフ・ディテクション
ベースライニング
環境

テストケース修正

ステータス・アカウンティング
Copyright 2010 Toyo Corporation, All
rights reserved25

今後に向けて テストケース劣化予防の展開
 コードセットとテストケースを合わせたベースラインの方法論を充実させる予定
 短縮工数の定量分析と動機付け
 プロセスとして整備-IPA/SECのESPRとの対応付け

Copyright 2010 Toyo Corporation, All
rights reserved

26

皆さんがんばりましょう！
 環境整備側からプロジェクトへの積極参加
 プロジェクトを横断する立場から不具合修正しましょう 環境プロセス改善スペシャリスト
 開発環境エンジニア

Copyright 2010 Toyo Corporation, All
rights reserved27プロフィール
 所属
 株式会社東陽テクニカ

ソフトウェアソリューション

 職種 技術サポート・コンサルティング

 担当分野 構成管理、単体テスト

 問い合わせ先 hojoa@toyo.co.jp

 謝辞
 Sessame、株式会社東陽テクニカ
Copyright 2010 Toyo Corporation, All
rights reserved

二上貴夫さん28

Appendix

Copyright 2010 Toyo Corporation, All
rights reserved

29テストケースの劣化
なぜすぐに問題が発覚しないか？


実際に修正作業を行っているプロジェクトとは別のテストプロジェクトでエラーが起きる

修正自体のボリュームが少ないため、テストプロジェクトを確認しようとしない

だんだんと変更が蓄積されるボリュームの少ない修正に対して、リグレッションテストの範囲がわからない

テストプロジェクトの修正作業がタスクリストにあればよいだろうが、プロジェクト管理がされていない

修正内容と検証の妥当性不足

ベースラインという考えが無いので、依存関係の更新が不明瞭
リリース後に変更するチェンジコントロールの概念がないので、変更前に影響度を把握できない

Copyright 2010 Toyo Corporation, Allrights reserved

30構成管理システム≠ベースライン
管理されないベースラインによる悪影響
 すぐに戻らない安定状態
 ベースから安定に向けて繰り返す作業によるロス

 すぐにテストを開始できないテスタ
 基準が無いので省略するリグレッションテスト
 行き来を繰り返す連絡作業 共有ライブラリに特有な問題
 拡散する不適切なベースライン 複雑な乱れたベースラインの適正化

Copyright 2010 Toyo Corporation, All
rights reserved

31ベースラインの適正化
 構成管理履歴で見つかるテストケース劣化
 ファイルのリネーム・移動の可視化

Copyright 2010 Toyo Corporation, All
rights reserved

32ベースラインの適正化
 構成管理履歴で見つかるテストケース劣化
 マクロスイッチによる変更管理の限界

Copyright 2010 Toyo Corporation, All
rights reserved

33ベースラインの適正化 エラーによって顕在化するテストケース劣化
 ファイルのリネーム・移動の可視化
E1023: いくつかのﾌｧｲﾙが見つかりません。
ﾌｧｲﾙが存在するか確認してください。
C:¥MagicalBox¥090900_78Kcore¥common¥sw1and2_handler.c
C:¥MagicalBox¥090900_78Kcore¥common¥SW1and2_handler.hE1023: いくつかのﾌｧｲﾙが見つかりません。
ﾌｧｲﾙが存在するか確認してください。
C:¥MagicalBox¥090900_78Kcore¥common¥sw3_handler.c
C:¥MagicalBox¥090900_78Kcore¥common¥sw3_handler.h マクロスイッチによる変更管理の限界..¥..¥..¥common¥serial_handler.c(20) : F301 Syntax error..¥..¥..¥common¥serial_handler.c(20) : F701 External definition syntax..¥..¥..¥common¥serial_handler.c(20) : F701 External definition syntax
Copyright 2010 Toyo Corporation, All
rights reserved34ベースラインの適正化
 ベースラインの確立条件は定量的
 ツールによる自動化が可能

 アーキテクトによる作業から横串による作業へ
 構成管理システムのトリガによる自動チェック

Copyright 2010 Toyo Corporation, All
rights reserved35ベースラインの適正化
 テストプロジェクト登録時のトリガ
プロジェクトファイルの更新
ファイルの更新

プロジェクトファイルからソース検索
ソース検索

ラベルを作成ラベルを作成最新バージョン
最新バージョンのソースにラベルをタグ付
ルをタグ付けCopyright 2010 Toyo Corporation, All
rights reserved36タグ付けされたコードセット
コードセット

テストケース

Ir_Emission1テスト用
コードセット＋テストケース

タグ付けされたコードセットに変更があれば、整合性チェックが起動される

Copyright 2010 Toyo Corporation, All
rights reserved37ベースラインの適正化 ファイルのリネーム・移動時のトリガ
ファイルのリネーム・移動
ネーム・移動

ファイル名
ファイル名リストを出力
トを出力

ファイル名
ファイル名からラベルを逆引
ラベルを逆引き
逆引き
テストプロジェクトファイルのチェックアウト

整合性チェック
整合性チェック
Copyright 2010 Toyo Corporation, All
rights reserved38ベースラインの適正化 関数定義ファイルの変更時のトリガ関数定義ファイ
関数定義ファイ
ルの変更
ルの変更
変更差分を変更差分を出力

ファイル名
ファイル名からラベルを逆引
ラベルを逆引き
逆引き
テストプロジェクトファイルのチェックアウト

整合性チェック
整合性チェック
Copyright 2010 Toyo Corporation, Allrights reserved39整合性チェック
 バッチプログラムによるテストプロジェクトのビルド
C:¥MagicalBox¥_piece_a_cakeTest¥Ir_emission¥work>nmake.exe -f Ir_Emission4.makIr_emission4.lmf
C:¥NECTOOLS32¥bin¥cc78k0s.exe -fIr_emission4.pcc
78K/0S Series C Compiler W1.50 [20 May 2003]
Copyright (C) NEC Electronics Corporation 1996,2003..¥Ir_emission4.c(20) : F810 Cannot find include file '..¥..¥common¥SW3_handler.h'..¥Ir_emission4.c(48) : W745 Expected function prototype..¥Ir_emission4.c(49) : W745 Expected function prototype..¥Ir_emission4.c(60) : W510 Pointer mismatch in function 'copy_text_to'..¥Ir_emission4.c(89) : W745 Expected function prototype..¥Ir_emission4.c(92) : W745 Expected function prototype
Target chip : uPD78F9222
Device file : V2.00
Compilation complete,

1 error(s) and5 warning(s) found.

Copyright 2010 Toyo Corporation, All
rights reserved40テストの成功には設計品質の向上が不可欠
プログラマ

コードセットの修正

テストエンジニア

テスト実行

テストケースの修正

劣化防止した開発パターン
プログラマ

テストエンジニア

テストケース劣化の開発パターン
コードセットの修正
テストケースの修正
Copyright 2010 Toyo Corporation, All
rights reserved

テスト実行41