SlideShare a Scribd company logo
テストの種類とBDD
2015.02.28 モバイル向けテスト手法勉強会 at Sansan株式会社
@nowsprinting / Koji Hasegawa
自己紹介
• id: @nowsprinting
• フリーランス

(iOS/Androidアプリ受託開発)
• アプリ『山吹色の茸疾走』『フットサル ルールと雑学』

『電エースQuiz - 河崎実監督と特撮映画の世界』
• コミュニティ:

テスト自動化研究会、Androidテスト部、VR部
著書
アジェンダ
• テストの目的
• テストの種類(テストレベル、テストタイプ)
• UIを操作するテスト
• BDD(Behavior Driven Development)
テストの目的
テストの目的
• 欠陥を摘出する
• 対象ソフトウェアの品質レベルが十分であることを
確認する
• 意志決定のための情報を示す
• 欠陥の作りこみを防ぐ
『ISTQB ソフトウェアテスト標準用語集 日本語版』より引用
テストの目的
• 欠陥を摘出する
• 対象ソフトウェアの品質レベルが十分であることを
確認する
• 意志決定のための情報を示す
• 欠陥の作りこみを防ぐ
『ISTQB ソフトウェアテスト標準用語集 日本語版』より引用
←これだけではない
テストレベル
V字モデル
テストレベル
テストレベル
テスト工程
テストレベル
テスト工程
結合度
テストレベル
開発者
QA
顧客
誰が実施するかで区切る、と考える
ユニットテストについて
• ユニットテスト==ホワイトボックステスト、とは限らない
• 機能テスト:テスト対象が「何をするのか」を機能仕様
に基づいてテストする
• 性能テスト:このレベルで処理時間を測定・評価できる
ようにしておく
• 原則自動化すべき。でも無理に全部やらない(カバレッジ
を追わない)。
システムテスト
• アプリを端末にインストールし、UIを操作する(リリー
スビルド、proguard)
• サーバと通信する場合、ステージングもしくはプロダ
クション環境を使用する(End to End)
• 一般に、独立したテストチーム(QA)が行なう
• 機能要件、非機能要件を満たしているか、多角的に検
証を行なう
(ISTQBにおける定義)
受け入れテスト
• アプリが要求仕様(ユーザのニーズ)を満たしてい
ることを確認する
• 出荷判断を行なうプロダクトオーナーや、受託開発
の場合は顧客が行なう(UAT)
• B to Cの場合、アルファテスト、ベータテストもこ
こに分類される
(ISTQBにおける定義)
テストレベルについて
• 考え方であり、厳密に全部分類・実施するものでは
ない(モバイルアプリは小規模なので)
• 視点(誰が実施すべきか、誰のためのテストか)は
意識したほうが良い。
テストタイプ
テストタイプの例
• 機能テスト(機能仕様に基づいたテスト)、

ユースケーステスト、シナリオテスト
• 確認テスト(修正後の動作を確認する)、

回帰テスト(リグレッションテスト。エンハンスバ
グが無いことの確認、複数OS・機種での動作)
• 使用性(ユーザビリティ)テスト、性能テスト、

信頼性テスト、etc…
テストタイプ
• テスト活動をまとめたもの
• たとえば機能テスト、使用性テスト、回帰テストな
どのように特定のテスト目的に焦点を当てたもの
• 一つ又は複数のテストレベルで行なわれる
『ISTQB ソフトウェアテスト標準用語集 日本語版』より引用
自動化に向くテストタイプ
• ユニットテスト
• 統合テスト(インタフェースに着目したテスト)
• システムレベルの機能テスト
• 性能テスト
『TABOK Guidebook』より
テストレベル(結合度)と自動化
• 下層ほど自動化しやすい

テストダブル(スタブ、モック)の使用、UIからは
指定できないパラメタなど。
• UIを操作するテストは、実行時間が多め。また、UI
変更によるメンテナンスコストが嵩む傾向にある。
• システムテスト(End to End)では、日時、天気、
株価、為替、乱数などがあると成否判定は困難
UIを操作するテスト
UIを操作するテスト
• 様々な呼ばれ方
• テストツールなどで Functional test
• End to End test
• BDD(振る舞い)のテスト、受け入れテスト
UIを操作するテスト
• 判定方法の違い
• スクリーンショットを比較・判定する(monkey
runner, Sikuli, 目grep, アニメGIF)
• DOMツリー(ヒエラルキー)を って、特定の
コンポーネントの状態・属性を判定する

(ほとんどのテスティングフレームワークがこれ)
UIを操作するテスト
• 判定方法の違い
• スクリーンショットを比較・判定する(monkey
runner, Sikuli, 目grep, アニメGIF)
• DOMツリー(ヒエラルキー)を って、特定の
コンポーネントの状態・属性を判定する

(ほとんどのテスティングフレームワークがこれ)
• レイアウト崩れまで評価できる(ユーザビリティ
テストの領域?)
• UIの変更にとても弱い(メンテナンスコストが
かかる)
UIを操作するテスト
• 判定方法の違い
• スクリーンショットを比較・判定する(monkey
runner, Sikuli, 目grep)
• DOMツリー(ヒエラルキー)を って、特定の
コンポーネントの状態・属性を判定する

(ほとんどのテスティングフレームワークがこれ)
• UIの変更に比較的強い
• レイアウト崩れ、文字のトランケートなどは判
定できない(機能テストに絞る)
UIを操作するテスト
• 自動化テスティングフレームワークの分類
• 統合テスト:

KIF, Robotium, Espresso
• システムテスト:

UI Automation, uiautomator, Calabash,
Appium, MonkeyTalk, etc…
UIを操作するテスト
• 自動化テスティングフレームワークの分類
• 統合テスト:

KIF, Robotium, Espresso
• システムテスト:

UI Automation, uiautomator, Calabash,
Appium, MonkeyTalk, etc…
• テストダブルを利用するなど、自由度が高い
• 比較的高速
• End to Endの「安心感」は得られない
UIを操作するテスト
• 自動化テスティングフレームワークの分類
• 統合テスト:

KIF, Robotium, Espresso
• システムテスト:

UI Automation, uiautomator, Calabash,
Appium, MonkeyTalk, etc…
• 厳密なシナリオテストは困難(不可能ではないが、
テストが複雑になるとメンテナンスも困難)
• 実行時間がかかる(項目数を減らしたい)
UIテストの自動化にあたって
• 機能テストに絞る。困難であればスモークテスト
• レイアウトはスクリーンショットを目視など
• ユーザビリティは人間が触って評価すべき
• 自動化しても、実行時間はゼロではない
• 複雑なテストを書けば、メンテナンスも大変。

メンテなしで長く使いまわせるテストを目指す
機種依存について
• 機種依存とは何か、を考えなおす
• 機種固有のバグ:テスト以前に回避する作りにす
べきで、テストで見つけようと考えない
• OS・解像度のフラグメンテーション:レイアウ
ト崩れは、スクリーンショットを目視で判断
テスト自動化に関する情報
• テスト自動化研究会

https://sites.google.com/site/testautomationresearch/
• テスト自動化パターン言語プロジェクト

https://github.com/KenColle/AutomationPatternLanguage
テスト自動化パターン言語プロジェクト(一部)
©2014 .reviewrc
BDD
BDD(振る舞い駆動開発)
• Behavior Driven Development
• 元々の考え方はTDD
• TDDの適用範囲が当初より縮小され、ユニットテ
ストだけを指すようになったため改めて提唱された
• ATDD(Acceptance TDD)も同様の背景で生まれ、
現在では同義語としていい(はず)
BDDの特徴
• Feature(機能を実現するテストシナリオ)を先に
定義し、それを満たす実装を行なう
• Featureは可読性が高く、「動くドキュメント」と
して関係者がレビューできるものになる
• Featureはユースケースの粒度で書かれる
※Scenario BDDの話であり、Spec BDDには触れません
Featureの例(1/2)
Feature:
顧客を追加できること。一覧画面では氏名とマーケティング区分が表示されること
Scenario:
"Add"ボタンをタップすると顧客を1件追加し、編集画面に遷移する
Given I launch the app
When I touch the button marked "Add"
Then I wait to see a navigation bar titled "Detail"
Featureの例(2/2)
Scenario:
顧客は男性・35歳に設定。一覧に戻ると、マーケティング区分はM2層となること
Given I should see a navigation bar titled "Detail"
When I type "Newton Geizler" into the "name" text field using the keyboard
And I select gender to "男性"
And I select age to "35"
And I navigate back
Then I wait to see a navigation bar titled "Master"
And I should see a cell name "Newton Geizler" and division "M2層"
Featureの例(2/2)
Scenario:
顧客は男性・35歳に設定。一覧に戻ると、マーケティング区分はM2層となること
Given I should see a navigation bar titled "Detail"
When I type "Newton Geizler" into the "name" text field using the keyboard
And I select gender to "男性"
And I select age to "35"
And I navigate back
Then I wait to see a navigation bar titled "Master"
And I should see a cell name "Newton Geizler" and division "M2層"
Given, When, Thenで表現する
Featureの例(2/2)
Scenario:
顧客は男性・35歳に設定。一覧に戻ると、マーケティング区分はM2層となること
Given I should see a navigation bar titled "Detail"
When I type "Newton Geizler" into the "name" text field using the keyboard
And I select gender to "男性"
And I select age to "35"
And I navigate back
Then I wait to see a navigation bar titled "Master"
And I should see a cell name "Newton Geizler" and division "M2層"
各ステップで実際にどうアプリを操作するかは
Stepファイル に記述される
Featureの例(3/3)
Scenario Outline:
顧客をn件追加する
(snip)
When I type "<name>" into the "name" text field using the keyboard
And I select gender to "<gender>"
And I select age to "<age>"
And I navigate back
Then I wait to see a navigation bar titled "Master"
And I should see a cell name "<name>" and division "<division>"
Examples:
¦ name ¦ gender ¦ age ¦ division ¦
¦ Newton Geizler ¦ 男性 ¦ 35 ¦ M2層 ¦
¦ Hermann Gottlieb¦ 男性 ¦ 34 ¦ M1層 ¦
¦ Mako Mori ¦ 女性 ¦ 22 ¦ F1層 ¦
BDDについての情報
• @IT連載『いまさら聞けないTDD/BDD超入門』

http://www.atmarkit.co.jp/ait/kw/tdd_bdd.html
• 同『スマホ向け無料システムテスト自動化ツール』

http://www.atmarkit.co.jp/ait/kw/smapho_testtool.html
• 第4回∼Calabash
まとめ
まとめ
• 「テスト」は意外と広く、多角的
• そのうち、自動化が効果的なものを狙って自動化す
るべき

(機械が得意なものは機械、人間が得意なものは人間がやる)
• テストコードは「動くドキュメント」を目指す

More Related Content

PDF
20221226_TITECH_lecture_ishizaki_public.pdf
PDF
画像認識モデルを作るための鉄板レシピ
PDF
Teslaにおけるコンピュータビジョン技術の調査 (2)
PDF
Logstashを愛して5年、370ページを超えるガチ本を書いてしまった男の話.
PDF
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PDF
ナレッジグラフ/LOD利用技術の入門(前編)
PDF
レガシーコードとの付き合い方とテストでの話
20221226_TITECH_lecture_ishizaki_public.pdf
画像認識モデルを作るための鉄板レシピ
Teslaにおけるコンピュータビジョン技術の調査 (2)
Logstashを愛して5年、370ページを超えるガチ本を書いてしまった男の話.
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
ナレッジグラフ/LOD利用技術の入門(前編)
レガシーコードとの付き合い方とテストでの話

What's hot (20)

PDF
Amazon SageMaker 推論エンドポイントを利用したアプリケーション開発
PDF
QtとC++でGUIプログラミング
PDF
Amazon SageMaker で始める機械学習
PDF
ZOZOTOWNのマルチクラウドへの挑戦と挫折、そして未来
PDF
Lucas kanade法について
ODP
どこに何を書くのか?
PDF
第1回ナレッジグラフ推論チャレンジ2018開催報告~ 第2回チャレンジ開催案内~
PDF
画像処理(二値化)
PPTX
どうやらテスト駆動型開発は死んだようです。これからのCI
PDF
SSII2021 [OS2-02] 深層学習におけるデータ拡張の原理と最新動向
PDF
物体検出エラーの分析ツール TIDE
PDF
自己教師学習(Self-Supervised Learning)
PDF
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
PPTX
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
PPT
レイトレ空間構造入門
PDF
最近のストリーム処理事情振り返り
PDF
オブジェクト指向の設計と実装の学び方のコツ
PDF
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
PDF
【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
PDF
【メタサーベイ】Transformerから基盤モデルまでの流れ / From Transformer to Foundation Models
Amazon SageMaker 推論エンドポイントを利用したアプリケーション開発
QtとC++でGUIプログラミング
Amazon SageMaker で始める機械学習
ZOZOTOWNのマルチクラウドへの挑戦と挫折、そして未来
Lucas kanade法について
どこに何を書くのか?
第1回ナレッジグラフ推論チャレンジ2018開催報告~ 第2回チャレンジ開催案内~
画像処理(二値化)
どうやらテスト駆動型開発は死んだようです。これからのCI
SSII2021 [OS2-02] 深層学習におけるデータ拡張の原理と最新動向
物体検出エラーの分析ツール TIDE
自己教師学習(Self-Supervised Learning)
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
レイトレ空間構造入門
最近のストリーム処理事情振り返り
オブジェクト指向の設計と実装の学び方のコツ
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
【メタサーベイ】Transformerから基盤モデルまでの流れ / From Transformer to Foundation Models
Ad

Similar to テストの種類とBDD #33testing (20)

PDF
テストファースト、自動テストを導入するという事について(@社内勉強会)
PDF
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
PDF
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
PDF
BDD by Jasmine (jscafe 13)
PDF
Hey It's Not My TDD!
PDF
約1000サービスの実績から見えた「UXを可視化するユーザーテストの極意」 先生:平石 大祐
PDF
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
PDF
TDD Boot Camp Tokyo for C++ 2014-01 補講
PDF
継続的8章
KEY
テスト初心者Androiderのためのソフトウェアテスト入門
PDF
JUnit入門/TDD入門[新人研修資料]
PDF
SeasarCon 2009 White TDD
PDF
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
PDF
Springのプログラムモデルと動く仕様~テスト編~
PDF
#STAC2014 システムテスト自動化ハンズオン
PPTX
TPI NEXT ざっくり概要
PPTX
事例からわかる!テスト自動化導入パターン
PDF
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
PDF
要求モデル/BDD 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第43回】
テストファースト、自動テストを導入するという事について(@社内勉強会)
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
BDD by Jasmine (jscafe 13)
Hey It's Not My TDD!
約1000サービスの実績から見えた「UXを可視化するユーザーテストの極意」 先生:平石 大祐
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
TDD Boot Camp Tokyo for C++ 2014-01 補講
継続的8章
テスト初心者Androiderのためのソフトウェアテスト入門
JUnit入門/TDD入門[新人研修資料]
SeasarCon 2009 White TDD
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
Springのプログラムモデルと動く仕様~テスト編~
#STAC2014 システムテスト自動化ハンズオン
TPI NEXT ざっくり概要
事例からわかる!テスト自動化導入パターン
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
要求モデル/BDD 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第43回】
Ad

More from Koji Hasegawa (19)

PDF
Blender-like SceneView Hotkeys Unity extensions
PDF
IntelliJ plugin の作りかた
PDF
AltUnityTesterを試してみた #gotandaunity
PDF
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
PDF
ビルドプロセスとCI #STAC2014
PDF
VRの入力デバイス #JAGVR
PDF
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
PDF
スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編
PDF
iOSアプリ開発でもTravis CI #eytokyo
PDF
テストフィクスチャTips(主にCoreData) #potatotips
PDF
Androidで使えるモックフレームワーク
PDF
スマートフォンアプリの テスト自動化をはじめよう
PDF
第3回Ques ここからはじめる!Androidアプリのテスト自動化
PDF
Androidとの同時開発だけどモデルをC++で書けば問題ないよねっ
KEY
Testterチーム2011年まとめ
KEY
Testter単体テストのビアレビュー報告
KEY
山吹色の茸疾走におけるテストの実例
PDF
Testterを叩け!
PDF
Atec mtg7 unittest
Blender-like SceneView Hotkeys Unity extensions
IntelliJ plugin の作りかた
AltUnityTesterを試してみた #gotandaunity
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
ビルドプロセスとCI #STAC2014
VRの入力デバイス #JAGVR
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編
iOSアプリ開発でもTravis CI #eytokyo
テストフィクスチャTips(主にCoreData) #potatotips
Androidで使えるモックフレームワーク
スマートフォンアプリの テスト自動化をはじめよう
第3回Ques ここからはじめる!Androidアプリのテスト自動化
Androidとの同時開発だけどモデルをC++で書けば問題ないよねっ
Testterチーム2011年まとめ
Testter単体テストのビアレビュー報告
山吹色の茸疾走におけるテストの実例
Testterを叩け!
Atec mtg7 unittest

テストの種類とBDD #33testing