ソフトウェアテスト技術の最新動向
JaSST'05 in Osaka
2005/07/15
香川大学工学部
信頼性情報システム工学科

古川善吾
zengo@eng.kagawa-u.ac.jp
2005/7/15

JaSST’05 in Oosaka

1目次• 1. はじめに• 2.テスト手順• 3.テスト技術• 4.テストの種類• 5.最近の話題• 6. おわりに2005/7/15

JaSST’05 in Oosaka

2１．はじめに• ソフトウェアテストの位置づけ– Dijkstra：テストによってプログラムの正しさを示すことができな
い– Myers：テストは、誤りを発見する作業である– 玉井哲雄：誤りを発見すると同時に「確からしさを確信する」ための作業– 統計的テスト法：ソフトウェア品質を求める– テスト駆動開発−TDD (Test Driven Development)• アジャイル開発• ソフトウェアテストの効率化、高品質化• →最近のソフトウェアテスト技術の話題
2005/7/15

JaSST’05 in Oosaka

3２． テスト手順• テスト設計– テストケースの作成– テストデータの作成• テスト実施– プログラムの実行– テスト結果の判定• テスト評価– テストの充分性の評価– ソフトウェアの信頼性評価
2005/7/15

JaSST’05 in Oosaka

4３． テスト技術• 静的手法– プログラム解析– 正当性検証• 半動的手法– 記号実行– モデル検査(?)• 動的手法– テスト

2005/7/15

JaSST’05 in Oosaka

5４． テストの種類
••
•
•
•
•
•
•
•

４．１ テストフェーズあるいはテスト目的による分類
単体テスト：処理の流れ
統合テスト：モジュール間インターフェイス
システムテスト：システム全体としての動作
受入テスト：システムの機能
４．２ プログラムの利用方法
ホワイトボックステスト
グレイボックステスト
ブラックボックステスト

2005/7/15

JaSST’05 in Oosaka

6５． 最近の話題• 統計的テスト– ：最近進めている研究。利用モデルの作成、支援ツール→Static-test• TDD (Test Driven Development)• 自動テスト：JUnit, CPPUnit– ：eXtreme Programming, Junix→XP-Junit• ネットワーク対応のテスト：パフォーマンステスト、セキュ
リティ対策、分散処理のテスト• 組込システムのテスト：並行処理– ：並行動作の統計的テスト→Concurrent-Statistic• 国際学会での話題：ISSTA2004, ISSTA2002,
ISSTA2000, ICSE2005, ICSE2005, ICSE2003
2005/7/15

JaSST’05 in Oosaka

7

ISSTA2004• 10セッション• 1. ２ワークショップ：– Webサービスのテストと解析、検証– ソフトウェアテストの経験的研究• 2. プログラム解析１：– Javaの呼び出し連鎖の静的・動的解析– 拡張可能な路依存の値フロー解析を用いたソフトウェア確認– JavaのWebサービスに関する頑強性のテスト• 3. テスト１：– malware(virus, torojan horse...)発見器のテスト– 複雑な構成空間における効率的な欠陥特性のための被服配列– 非決定システムのテストのための最適戦略2005/7/15

JaSST’05 in Oosaka

8

ISSTA2004(つづき)• 4. 経験研究：– 開発中の継続テストの経験的評価– バグはどこに• 5. テスト生成：– Java PathFinder を用いたテスト入力生成– ループ代入フラグの存在における発展的テスト– クラスの発展的テスト– ツール：モデルに基づくテストのためのAGEDISツール• 6. テスト２：– 限定された徹底的テストによるソフトウェアの正確さ– 関数推定を用いた関数正当性の自動化されたブラックボックス
テスト– テスト技法の解析的比較
2005/7/15

JaSST’05 in Oosaka

9ISSTA2004(つづき)• 7. モデルチェック１：– 設計レベルでの自動化された交換可能性解析– 演算の航空機交通量のモデルと検証– 時相論理式の一括最適化コンパイラ• 8. プログラム解析２：– ソフトウェア動作の自動分類のための能動的学習– プログラム舵取り(?) によるマルチモードシステムの適用可能性
改善– ツール：同期反応型プログラムのスライシングツール• 9. プログラム解析３：– 原子性に対する純粋性拡大– 部分型を用いた高速制約解決– SABER: エラー減衰に基づくスマート解析
2005/7/15

JaSST’05 in Oosaka

10

ISSTA2004(つづき)• 10. モデルチェック２：– XML操作ソフトウェアのモデルチェック– RTCORBAに基づく応用プログラムのモデル化および検証に対する形式的手段– パラメタ化された状態機械を用いた検証過程モデルの構築

2005/7/15

JaSST’05 in Oosaka

11

ISSTA2002
•
•
•
•
•
•
•
•
•
•

Javaプログラムの静的解析：３件
安全性の確認：２件
故障と障害の解析：４件
テスト効率の改善：３件
仕様に基づくテスト：３件
確認（conformance)と相互操作性テスト：３件
並行プログラムの解析：２件
テストと信頼性の理論：３件
パネル：ISSTA の研究は、産業界に役立っているか？
動的解析：３件

2005/7/15

JaSST’05 in Oosaka

12

ISSTA2000• 静的解析：３件• オブジェクト指向ソフトウェアとコンポーネントのテスト：４件• 実時間とプロセス：３件• 事例報告：４件– 回帰テストのためのテストケースの優先付け– どのポインター解析法を使用すべきか？
– 分岐、データフロー、操作テストの導出信頼性比較：
ケーススタディ– 誤り帰納入力（？）の簡単化
2005/7/15

JaSST’05 in Oosaka

13

ISSTA2000(つづき)• テスト４件– データベース応用ソフトウェアのテストのための枠組
み– jRapture: 観察ベースのテスト法のためのキャプチャ／リプレイツール– テスト可能性、誤りサイズ、定義域ー値域比率：永遠の三角形– 入出力解析によるブラックボックステストの削減• 並行性解析：３件

2005/7/15

JaSST’05 in Oosaka

14

ICSE2005• Research Papers：15セッション• Experience Reports：5セッション• 研究 3/15– テストと解析：３件– テストの経験的評価：３件– 静的・動的解析：＊• 経験 2/5– 要求とテスト：２件– 予測と検証：３件
2005/7/15

JaSST’05 in Oosaka

15

ICSE2004• 20セッション 5/20
• テスト１：３件• テスト２：３件• 検証：３件• 静的解析：３件• 動的解析：３件

2005/7/15

JaSST’05 in Oosaka

16

ICSE2003• テスト１：３件– 相互性テストのテストスィーツの構成– 利用者のセッションデータを用いたWeb アプリケーションテストの改善– 操作的抽象化によるテストスィーツの改善• テスト２：３件– Javaプログラムにおける多様性のテストのためのクラス断片解析– コンポーネント配置テストの枠組み– モデル検査としてのデータフローテスト• 型式手法：２セッション、６件
2005/7/15

JaSST’05 in Oosaka

17

ICSE2003(つづき)• テストと故障修正：３件– IBMにおけるTDDの評価– 大規模SDL開発モデルにおける故障修正プロセスの解析– 安全性に重要なソフトウェアのテストにおける要求の発見

2005/7/15

JaSST’05 in Oosaka

18

６．おわりに• テスト：Webシステムのテスト、仕様に基づくテス
ト、誤り解析、...
• 形式的手法：仕様化、形式化→モデルチェック• テスト（／デバッグ）の経験報告• 実践的評価↓• 産業界における経験データの公開を！！

2005/7/15

JaSST’05 in Oosaka

19バグの統計の出典

2005/7/15

JaSST’05 in Oosaka

20

統計の解説2005/7/15

JaSST’05 in Oosaka

21

バグの統計−１

2005/7/15

JaSST’05 in Oosaka

22

バグの統計−２

2005/7/15

JaSST’05 in Oosaka

23