SlideShare uma empresa Scribd logo
1 de 17
第8回「テスト道具とその他の手法」
2011年7月29日(金)
服部 健太
ソフトウェア・テスト入門
自動単体テストツール
 単体テストのテストケースを事前に定義しておく
と,自動的にテストの実行,結果の判定をおこ
なってくれるツール
 単体テストは本講義で説明したモジュールテストに
相当
 広く使われている
 代表的なプログラミング言語に対応して揃ってい
る
 CUnit/CppUnit/JUnit/RubyUnit/PythonUnit/…
 *Unit系
2011/7/292 ソフトウェア・テスト入門8
JUnitの例
 テストしたいクラスAについて,テストケースをATestというク
ラスにメソッドとして書いていく
 Java版Othelloライブラリの例:
public class ServerTest {
…略…
@Test
public void testConnect() {
assertTrue(server.connect(host, port));
assertFalse(server.connect(host, port));
}
@Test
public void testDisconnet() {
assertTrue(server.connect(host, port));
…
2011/7/293 ソフトウェア・テスト入門8
JUnitの例(2)
 テストの自動実行
 antのbuild.xmlに,たとえば以下のように定義しておくとant
runtestsで全テストケースが実行され,レポート出力される
<target name="runtests" depends="compiletests">
<junit printsummary="yes" haltonfailure="false">
<classpath>…省略…</classpath>
<formatter type="plain"/>
<batchtest>
<fileset dir="${tests.dir}">
<include name="**/*Test.java" />
</fileset>
</batchtest>
</junit>
</target>
2011/7/294 ソフトウェア・テスト入門8
静的フロー解析ツール
 プログラムを実行せずに,静的に解析することで,
エラーを調べる
 自動コード検査のようなもの
 検出できる問題
 未定義の値をもつ変数
 使われない値を代入された変数
 モジュール間のインタフェースの不一致
 到達不能コード
 ⇒多くは最近のコンパイラの警告オプションで発見可能
 より進んだ機能をもつ製品もある
 Coverity
 スレッド解析して競合を発見するなど.
2011/7/295 ソフトウェア・テスト入門8
テストカバレッジモニタ
 ホワイトボックス・テストに応用できるツール
 実行中に対象プログラムのモニタを行い,命令網
羅基準と判定条件網羅基準にあっているかどうか
を判定する統計的手法を提供する
 使ったことは無いが,調べてみたところ,テクマ
トリックス株式会社というところが以下のツール
を販売している
 http://www.techmatrix.co.jp/quality/ctest/test/covera
ge.html
2011/7/296 ソフトウェア・テスト入門8
プログラムの正当性の数学的証明
 テストの基本的な問題は,エラーがないことをしめすのは
不可能である点.
 プログラム検証法/プログラムの正当性の証明
 テストにかわるものとして,プログラムにエラーがないこと
を実際にしめすための手法
 Coq/Agdaなどの定理証明支援系ツールを使うことも多い
 問題点:
 非常に頭を使う必要がある
 証明が間違っているかもしれない
 規模の大きなプログラムでは難しい
 個人的には,プログラマは自分で書いたコードの正しさを
確信できるよう,非形式的でよいので証明する習慣を身に
つけた方が良いと思う.
2011/7/297 ソフトウェア・テスト入門8
テスト・データ・ジェネレータ
 テスト・データを見分けたり作成するのをたすけ
るためのツール
 テスト・ケース・ジェネレータではないことに注意
 プログラムの論理の流れを分析し,たとえば,あ
る特定の基準を実行するのに必要な入力データの
セットを推測する
 特殊なものとしては,コンパイラのテストデータ
を生成するもので,形式文法で入力を記述するも
のもある
2011/7/298 ソフトウェア・テスト入門8
環境シミュレータ
 実際のなまの環境でのテストが不可能だったり,
高価になるとき,そのシステムのまわりの環境を
シミュレートするツール
 ストレステストと大容量テスト
 ハードウェア故障など現実の環境でつくりだすこ
とが困難な状況をつくりだすこと
 核反応制御プログラムや宇宙システムなどなまの
環境のもとでのテストが問題外であるとき
2011/7/299 ソフトウェア・テスト入門8
仮想計算機
2011/7/29ソフトウェア・テスト入門810
 一種の環境シミュレータ
 複数個のプログラムをそれぞれが別々の単体の機
械のもとで実行しているかのようにみせかける
 新しいオペレーティングシステムのテストに使え
る
 1台の計算機しかない場合でも,複数のテストを
同時に実行することができる.
ソフトウェア・エラーの研究
2011/7/29ソフトウェア・テスト入門811
 研究事例
 大規模レーダ制御システムで2165個のエラーを分類し
たもの
 Fortran, PL/I, Algol, Basic, Cobolで書かれた小さなプロ
グラム開発をふくむ大学の実験で得られた1189個のエ
ラーの研究
 3個の大型ソフトウェア・パッケージでのエラーの研究
 TRWシステムで作成された4個の大きなプログラムでの
エラーの研究
 IBMのDOS/VSオペレーティングシステムの発注にあ
たってのテストで発見されたエラーの分析
 かのKnuthもTeXのエラーを分析している
 文芸的プログラミングの第10章参照
予測モデル
2011/7/29ソフトウェア・テスト入門812
 プログラムに何個のエラーが残っているか予測する
 いつテストをやめればよいかの判断
 ソフトウェアが出荷可能かどうかの判断
 一般的なカテゴリ:
1. ハードウェアの信頼性モデルから得られるモデル
 ハードウェアの信頼性理論にもとづくもの
 Markov法にもとづくもの
2. プログラムの構造にもとづくモデル
 モデルのパラメータとして,プログラムの大きさ,分岐命
令数,ネスティングのレベル,データ型の数などをふくむ
3. 「エラーをばらまく」モデル
 意図的にプログラムの中にエラーをばらまき,ばらまかれ
た数と発見された本来のエラーn数の比率から全体のエ
ラー数を推測する
ソース管理システム
2011/7/29ソフトウェア・テスト入門813
 コード,文書,テストケースを自動的に管理する
ツール
 バージョン管理システムとも呼ばれる
 古くはSCCS, CVSなど.最近では,SVNやgitな
ど
 大きなプロジェクトでは欠かせないツール
対話型デバッガ
2011/7/29ソフトウェア・テスト入門814
 プログラマに一連のデバッグ機能を提供する
 メモリダンプ機能
 ブレイクポイントの設定
 変数が変更される箇所の検出
 部分的な実行
 現在では,統合開発環境に組み込まれている
 フリーの代表的なデバッガとしてはGDBがある
 個人的には,最近はほとんどデバッガを使ってま
せん...
コンパイラ・デバッグ補助機能
2011/7/29ソフトウェア・テスト入門815
 デバッグ時だけ有効になるような命令を指定できる機能
 Cでいえば,#if DEBUG~#endなどで命令を囲み,コンパイ
ル時に-DDEBUGを指定したりする
 アサーション
 ASSERT <ブール式> 文
 のように,ブール式が偽のもつ場合は,それに関連した命令
が実行され,プログラムが中断される
 Javaのassert文
 アサーションを有効に活用することで,素早くバグを見つ
け,デバッグすることができる
 インタフェースの契約を明示化するのにも有効
 例:ある手続きの引数nが非負整数であることが前提の場合,
入口にassert (n >= 0)と記述しておく.
メモリエラー検出ツール
 未確保のメモリ領域へのアクセス,配列の範囲外ア
クセス,二重解放など,メモリに関するエラーを検
出するツール
 実際にプログラムを実行し,検出を行うため,すべての
エラーを発見できるわけではない.
 Valgrind
 フリーのメモリリーク検出ツール
 Purify
 昔からある割と有名な商用ツール
 自動GCを備えた言語を使うことが多い今日では,あ
まり使う場面が少なくなっているような気がする
2011/7/2916 ソフトウェア・テスト入門8
モデル検査ツール
 ソフトウェアの設計に対応するモデルを記述し,そ
のモデルが,形式的に定義された仕様を満たすかど
うかを検査する.
 モデル記述言語
 システムの設計を記述する
 仕様記述
 様相(時相)論理を用いて記述するものが多い
 代表的なモデル検査ツール
 SPIN/Promela
 モデルをある種のオートマトンに変換し,ランダムに実
行したり,すべての取りうる状態を検査することで,仕
様を満たすかどうか検査する
 並行/分散システムなどでは,強力なツールとなりうる
2011/7/2917 ソフトウェア・テスト入門8

Mais conteúdo relacionado

Semelhante a ソフトウェア・テスト入門8

Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)
masanori kataoka
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説
Kinji Akemine
 
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料
Masatoshi Itoh
 
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦
urasandesu
 
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
Yuya Takeyama
 

Semelhante a ソフトウェア・テスト入門8 (20)

Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説
 
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料
 
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦
 
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
 
Spring bootでweb ユニットテスト編
Spring bootでweb ユニットテスト編Spring bootでweb ユニットテスト編
Spring bootでweb ユニットテスト編
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityRuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for Unity
 
Apache Wicketのユニットテスト機能
Apache Wicketのユニットテスト機能Apache Wicketのユニットテスト機能
Apache Wicketのユニットテスト機能
 
Spock's world
Spock's worldSpock's world
Spock's world
 
Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編
 
Junit4
Junit4Junit4
Junit4
 
Agileツール適合化分科会(tddとbdd)
Agileツール適合化分科会(tddとbdd)Agileツール適合化分科会(tddとbdd)
Agileツール適合化分科会(tddとbdd)
 
勉強会8月26日.pdf
勉強会8月26日.pdf勉強会8月26日.pdf
勉強会8月26日.pdf
 
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
 
xUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency InjectionxUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency Injection
 
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
 
テスト自動化のこれまでとこれから
テスト自動化のこれまでとこれからテスト自動化のこれまでとこれから
テスト自動化のこれまでとこれから
 
CLRH_120414_WFTDD
CLRH_120414_WFTDDCLRH_120414_WFTDD
CLRH_120414_WFTDD
 
About junit
About junitAbout junit
About junit
 

Mais de Kenta Hattori

Mais de Kenta Hattori (20)

オブジェクト指向入門2
オブジェクト指向入門2オブジェクト指向入門2
オブジェクト指向入門2
 
オブジェクト指向入門1
オブジェクト指向入門1オブジェクト指向入門1
オブジェクト指向入門1
 
オブジェクト指向入門10
オブジェクト指向入門10オブジェクト指向入門10
オブジェクト指向入門10
 
オブジェクト指向入門9
オブジェクト指向入門9オブジェクト指向入門9
オブジェクト指向入門9
 
オブジェクト指向入門8
オブジェクト指向入門8オブジェクト指向入門8
オブジェクト指向入門8
 
オブジェクト指向入門7
オブジェクト指向入門7オブジェクト指向入門7
オブジェクト指向入門7
 
オブジェクト指向入門6
オブジェクト指向入門6オブジェクト指向入門6
オブジェクト指向入門6
 
オブジェクト指向入門5
オブジェクト指向入門5オブジェクト指向入門5
オブジェクト指向入門5
 
オブジェクト指向入門4
オブジェクト指向入門4オブジェクト指向入門4
オブジェクト指向入門4
 
オブジェクト指向入門3
オブジェクト指向入門3オブジェクト指向入門3
オブジェクト指向入門3
 
ソフトウェア・テスト入門2
ソフトウェア・テスト入門2ソフトウェア・テスト入門2
ソフトウェア・テスト入門2
 
ソフトウェア・テスト入門1
ソフトウェア・テスト入門1ソフトウェア・テスト入門1
ソフトウェア・テスト入門1
 
ソフトウェア・テスト入門7
ソフトウェア・テスト入門7ソフトウェア・テスト入門7
ソフトウェア・テスト入門7
 
ソフトウェア・テスト入門6
ソフトウェア・テスト入門6ソフトウェア・テスト入門6
ソフトウェア・テスト入門6
 
ソフトウェア・テスト入門5
ソフトウェア・テスト入門5ソフトウェア・テスト入門5
ソフトウェア・テスト入門5
 
ソフトウェア・テスト入門4
ソフトウェア・テスト入門4ソフトウェア・テスト入門4
ソフトウェア・テスト入門4
 
ソフトウェア・テスト入門3
ソフトウェア・テスト入門3ソフトウェア・テスト入門3
ソフトウェア・テスト入門3
 
アルゴリズムとデータ構造15
アルゴリズムとデータ構造15アルゴリズムとデータ構造15
アルゴリズムとデータ構造15
 
アルゴリズムとデータ構造14
アルゴリズムとデータ構造14アルゴリズムとデータ構造14
アルゴリズムとデータ構造14
 
アルゴリズムとデータ構造13
アルゴリズムとデータ構造13アルゴリズムとデータ構造13
アルゴリズムとデータ構造13
 

Último

TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
YukiTerazawa
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
koheioishi1
 

Último (7)

生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
 

ソフトウェア・テスト入門8