スマートフォンアプリの
テスト自動化をはじめよう
Meisters Salon 特別編 2014.05.23
@nowsprinting/Koji Hasegawa
色々
自己紹介
• @nowsprinting/Koji Hasegawa	

• フリーランス
(iOS/Androidアプリ受託開発)	

• テスト自動化研究会、Androidテスト部	

• 著書『iOSアプリ テスト自動化入門』
  『An...
著書
アジェンダ
• テストレベルと自動化	

• システムテスト自動化のROI	

• システムテスト自動化フレームワークの紹介	

• ビルド・静的解析の自動化	

• まとめ
テストレベルと自動化
テストレベル
テストレベル
• テストフェーズ(工程)とは必ずしも

一致しない	

• プロダクト(アプリ)の結合度	

• 担当者の変わり目
ユニットテスト
• MVCのM(モデル、ビジネスロジック)
を中心に行なう	

• XCTest, GHUnit, Kiwi, OCMock, …	

• JUnit, Robolectric, Mockito, EasyMock, …
ユニットテスト
• MVCのM(モデル、ビジネスロジック)
を中心に行なう	

• XCTest, GHUnit, Kiwi, OCMock, …	

• JUnit, Robolectric, Mockito, EasyMock, …
小さな...
統合(結合)テスト
• 個々のクラス間の統合(結合)	

• iOS/Android SDKとの統合	

• UI(StoryBoard, nib, Layout XML)との統合	

• サーバAPIとの統合
統合(結合)テスト
• 個々のクラス間の統合(結合)	

• iOS/Android SDKとの統合	

• UI(StoryBoard, nib, Layout XML)との統合	

• サーバAPIとの統合
網羅的に、結合箇所に着眼。この観...
システムテスト
• QA担当者が実施する、エンド・ツー・
エンドのテスト	

• アプリを実機にインストールして実施	

• サーバAPIはステージング以上	

• 機能テスト、非機能テストなど色々
システムテスト
• QA担当者が実施する、エンド・ツー・
エンドのテスト	

• アプリを実機にインストールして実施	

• サーバAPIはステージング以上	

• 機能テスト、非機能テストなど色々
機能テストは自動化できるが、ユーザビリ
ティ...
システムレベルの	

機能テスト
• 近年のテスト自動化ツールは、Selenium
のようにViewのツリー構造を利用してオ
ブジェクト指定が可能	

• レイアウトや座標に左右されないテスト
が可能。(ただし機能テストに限る)
システムテスト自動化の
ROI(投資利益率)
理想の高い利益
• テスト実行時間の短縮	

• “正しい”画面表示のテスト(Judge/Assert)	

• 複数のOSバージョン/機種で実行できる	

• OS/機種依存問題を検出できる(表示崩
れなども)
Return
投資
• 自動化ツールの選定/習得	

• 自動化スクリプトの作成(高度なJudge/
Assertを求められる)	

• 自動化スクリプトの保守(同上)	

• テストデータ、スタブサーバの準備
理想の高い利益を	

得るための
Invest...
投資
理想の高い利益を	

得るための
Investment
コストの増大、工程遅延、保守の放棄
• 自動化ツールの選定/習得	

• 自動化スクリプトの作成(高度なJudge/
Assertを求められる)	

• 自動化スクリプトの保守(同上...
理想の高い利益
Return
• テスト実行時間の短縮	

• “正しい”画面表示のテスト(Judge/Assert)	

• 複数のOSバージョン/機種で実行できる	

• OS/機種依存問題を検出できる(表示崩
れなども)
現実的な利益に絞る
Return
• テスト実行時間の短縮	

• “正しい”画面表示のテスト(Judge/Assert)	

• 複数のOSバージョン/機種で実行できる	

• OS/機種依存問題を検出できる(表示崩
れなども)
“テストの目的”に立ち返る
• 欠陥を摘出する	

• 対象ソフトウェアの品質レベルが十分で
あることを確認する	

• 意思決定のための情報を示す	

• 欠陥の作り込みを防ぐ
※JSTQBシラバスより引用
• 欠陥を摘出する	

• 対象ソフトウェアの品質レベルが十分で
あることを確認する	

• 意思決定のための情報を示す	

• 欠陥の作り込みを防ぐ
※JSTQBシラバスより引用
スコープを“回帰テスト”に絞っても満たせるもの
“テストの目的...
• 欠陥を摘出する	

• 対象ソフトウェアの品質レベルが十分で
あることを確認する	

• 意思決定のための情報を示す	

• 欠陥の作り込みを防ぐ
※JSTQBシラバスより引用
対象OS/機種で”とりあえず”動くことが確認できれば
“テスト...
欲張らないROI
• 利益	

• テスト実行時間の短縮	

• 複数OSバージョン/機種で実行できる	

• 投資	

• 自動化ツールの選定/習得	

• 自動化スクリプトの作成/保守(高度な
頑張らないテストスクリプト)	

• テストデ...
頑張らないテストスクリプト
• 日時、天気、株価、為替、乱数などに
起因するJudgeを無理にはしない	

• レイアウト崩れまでJudgeしようとしない	

• 機種依存の問題を狙ってテストしようと
しない(OS/解像度のフラグメンテー
ショ...
頑張らないテストスクリプト
• 日時、天気、株価、為替、乱数などに
起因するJudgeを無理にはしない	

• レイアウト崩れまでJudgeしようとしない	

• 機種依存の問題を狙ってテストしようと
しない(OS/解像度のフラグメンテー
ショ...
頑張らないテストスクリプト
• 日時、天気、株価、為替、乱数などに
起因するJudgeを無理にはしない	

• レイアウト崩れまでJudgeしようとしない	

• 機種依存の問題を狙ってテストしようと
しない(OS/解像度のフラグメンテー
ショ...
頑張らないテストスクリプト
• 日時、天気、株価、為替、乱数などに
起因するJudgeを無理にはしない	

• レイアウト崩れまでJudgeしようとしない	

• 機種依存の問題を狙ってテストしようと
しない(OS/解像度のフラグメンテー
ショ...
頑張らなくても
ここまでできる事例
iOSのUIAlertView
iOS6
iOS7
iOSのUIAlertView
iOS6
iOS7 CLASH!!!
iOSのUIPickerView
iOS6
iOS7
iOSのUIPickerView
iOS6
iOS7 CLASH!!!
AndroidのdrawRect()
Android 4.1
Canvas#drawRect(100,100,10,10);
(10,10)
(100,100)
Android 4.2
AndroidのdrawRect()
Android 4.1
Canvas#drawRect(100,100,10,10);
(10,10)
(100,100)
描画されない!Android 4.2
※left<=right, top<=bot...
Android機種依存の例 1
一定量のViewヒエラルキー
の上でソフトウェアキーボー
ドが出現するときに
StackOverflowErrorが発生
(某メーカーのAndroid 2.3
搭載端末のみ)
普通の端末
奇妙な端末
Android機種依存の例 2
普通の端末
奇妙な端末
Android機種依存の例 2
利益を拡大する
Return
欲張らないROI
• テスト実行時間の短縮	

➡時間と集中力を高度なテストに割り振る	

➡リリース頻度の向上(4∼6週間ごとが理想)	

• 複数OSバージョン/機種で実行できる	

➡さらにテスト実行環境を増やす。端末の回転、
ロケール、...
利益を拡大する
• テスト実行時間の短縮	

➡時間と集中力を高度なテストに割り振る	

➡リリース頻度の向上(4∼6週間ごとが理想)	

• 複数OSバージョン/機種で実行できる	

➡さらにテスト実行環境を増やす。端末の回転、
ロケール、タ...
利益を拡大する
• テスト実行時間の短縮	

➡時間と集中力を高度なテストに割り振る	

➡リリース頻度の向上(4∼6週間ごとが理想)	

• 複数OSバージョン/機種で実行できる	

➡さらにテスト実行環境を増やす。端末の回転、
ロケール、タ...
手動ではできないことができる
• ロードテスト(ヒートラン)	

• メモリリークの調査	

• 低メモリ状態での動作	

• コンカレンシーテスト	

• 再現率の低い(タイミングがシビアな)
問題の確認テスト
システムテスト自動化	

フレームワークの紹介
monkeyrunner
• Android SDK同梱の自動テストツール。スクリプ
トはPythonで記述。キャプチャツール有り	

• 座標を指定してタップ、ドラッグ	

• スクリーンショット、画像比較でのJudge	

• http:/...
Robotium
• Android Testing Frameworkのヘルパーで、
Seleniumライクなテスト記述が可能
(JUnitの知識が必要)	

• 端末回転、スクリーンショットなど必要
機能は っている	

• https:/...
uiautomator
• Android 4.1で利用できるSDK同梱の自動テスト
ツール。端末の回転とスクリーンショットは
4.2から利用可能。JUnitベース	

• SeleniumのようにViewのヒエラルキーを って
画面要素を指定...
Espresso
• 10月に公開された、Google謹製のAndroid
向けテスティングフレームワーク	

• Android 2.2以上で利用可能	

• テスト記述は JUnitベース	

• https://code.google.c...
UIAutomation
• Xcodeに同梱のInstrumentツールで自動実行を
行なうフレームワーク	

• スクリプトはJavaScriptで記述	

• 標準でassert機能が無いのでJSのライブラリを
使う( tuneup_js...
Appium
• iOS/Androidで利用できるオープンソースの
テストツール	

• 複数のスクリプト言語で記述可能	

• テスト対象にAgentを組み込む必要がない	

• AndroidはAPI Level 17 (JellyBea...
Calabash
• Cucumberのテスト(feature)を、iOS/
Androidデバイスで実行できる	

• iOS版はテスト対象にAgentを組み込む必要
あり	

• https://github.com/calabash/ca...
MonkeyTalk
• Gorilla Logic社が開発/公開しているOSSで
iOS/Androidで利用可。旧”FoneMonkey”	

• 専用の表形式IDEでテストを記述可能	

• テスト対象にAgentを組み込む必要あり	

...
その他 iOS向けフレームワーク
• Frank	

• Cucumber系、 ATI 2012 Awards iOS部門
finalists	

• http://www.testingwithfrank.com/	

• Zucchini	
...
ツール選定のポイント
• スクリプトを書けるチームかどうか

(将来も保守していけるのか)	

• iOS/Androidでテストを共有したいのか

(但しUIが異なるので期待しすぎない)	

• 「何が実行できるか」は余り重視しない

(ツー...
ビルド・静的解析の
自動化
テスト用ビルドを作る
• 複数のTarget/Configurationを持つiOSプロジェクトの構
成Tips http://nowsprinting.hatenablog.com/entry/2012/11/
18/031511	

• Gr...
UAT/ベータテスト
• iOS/Android	

• TestFlight https://testflightapp.com/	

• Android	

• deploy gate https://deploygate.com/	

• ...
継続的インテグレーション
• OS X Server/Bots	

• Xcodeとの統合。自由度は低め	

• Jenkins	

• 豊富なプラグイン、コードカバレジ、
静的解析	

• Travis CI	

• クラウドサービス、Imm...
OS X Server/Bots
OS X Server/Bots
Jenkins
Jenkins
Jenkins
ビルド・静的解析を 
自動化するメリット
• 手作業によるオペミスを減らす	

• 内部品質の低いプロダクトを改善する 
足がかり	

• ひとりでも寂しくない!
まとめ
まとめ
•欲張らない	

•頑張らない
まとめ
•欲張らないROI	

•頑張らないテストスクリプト
Upcoming SlideShare
Loading in...5
×

スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編

1,028

Published on

http://meisters.doorkeeper.jp/events/11134

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,028
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
7
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編

  1. 1. スマートフォンアプリの テスト自動化をはじめよう Meisters Salon 特別編 2014.05.23 @nowsprinting/Koji Hasegawa 色々
  2. 2. 自己紹介 • @nowsprinting/Koji Hasegawa • フリーランス (iOS/Androidアプリ受託開発) • テスト自動化研究会、Androidテスト部 • 著書『iOSアプリ テスト自動化入門』   『Androidアプリテスト技法』(共著)
  3. 3. 著書
  4. 4. アジェンダ • テストレベルと自動化 • システムテスト自動化のROI • システムテスト自動化フレームワークの紹介 • ビルド・静的解析の自動化 • まとめ
  5. 5. テストレベルと自動化
  6. 6. テストレベル
  7. 7. テストレベル • テストフェーズ(工程)とは必ずしも
 一致しない • プロダクト(アプリ)の結合度 • 担当者の変わり目
  8. 8. ユニットテスト • MVCのM(モデル、ビジネスロジック) を中心に行なう • XCTest, GHUnit, Kiwi, OCMock, … • JUnit, Robolectric, Mockito, EasyMock, …
  9. 9. ユニットテスト • MVCのM(モデル、ビジネスロジック) を中心に行なう • XCTest, GHUnit, Kiwi, OCMock, … • JUnit, Robolectric, Mockito, EasyMock, … 小さな単位でテスト、検証を厳密に行なう ことができ、自動化の恩恵が大きい
  10. 10. 統合(結合)テスト • 個々のクラス間の統合(結合) • iOS/Android SDKとの統合 • UI(StoryBoard, nib, Layout XML)との統合 • サーバAPIとの統合
  11. 11. 統合(結合)テスト • 個々のクラス間の統合(結合) • iOS/Android SDKとの統合 • UI(StoryBoard, nib, Layout XML)との統合 • サーバAPIとの統合 網羅的に、結合箇所に着眼。この観点で UT/STにテスト項目があれば良いはず
  12. 12. システムテスト • QA担当者が実施する、エンド・ツー・ エンドのテスト • アプリを実機にインストールして実施 • サーバAPIはステージング以上 • 機能テスト、非機能テストなど色々
  13. 13. システムテスト • QA担当者が実施する、エンド・ツー・ エンドのテスト • アプリを実機にインストールして実施 • サーバAPIはステージング以上 • 機能テスト、非機能テストなど色々 機能テストは自動化できるが、ユーザビリ ティや厳密な検証を欲張らないこと
  14. 14. システムレベルの 機能テスト • 近年のテスト自動化ツールは、Selenium のようにViewのツリー構造を利用してオ ブジェクト指定が可能 • レイアウトや座標に左右されないテスト が可能。(ただし機能テストに限る)
  15. 15. システムテスト自動化の ROI(投資利益率)
  16. 16. 理想の高い利益 • テスト実行時間の短縮 • “正しい”画面表示のテスト(Judge/Assert) • 複数のOSバージョン/機種で実行できる • OS/機種依存問題を検出できる(表示崩 れなども) Return
  17. 17. 投資 • 自動化ツールの選定/習得 • 自動化スクリプトの作成(高度なJudge/ Assertを求められる) • 自動化スクリプトの保守(同上) • テストデータ、スタブサーバの準備 理想の高い利益を 得るための Investment
  18. 18. 投資 理想の高い利益を 得るための Investment コストの増大、工程遅延、保守の放棄 • 自動化ツールの選定/習得 • 自動化スクリプトの作成(高度なJudge/ Assertを求められる) • 自動化スクリプトの保守(同上) • テストデータ、スタブサーバの準備
  19. 19. 理想の高い利益 Return • テスト実行時間の短縮 • “正しい”画面表示のテスト(Judge/Assert) • 複数のOSバージョン/機種で実行できる • OS/機種依存問題を検出できる(表示崩 れなども)
  20. 20. 現実的な利益に絞る Return • テスト実行時間の短縮 • “正しい”画面表示のテスト(Judge/Assert) • 複数のOSバージョン/機種で実行できる • OS/機種依存問題を検出できる(表示崩 れなども)
  21. 21. “テストの目的”に立ち返る • 欠陥を摘出する • 対象ソフトウェアの品質レベルが十分で あることを確認する • 意思決定のための情報を示す • 欠陥の作り込みを防ぐ ※JSTQBシラバスより引用
  22. 22. • 欠陥を摘出する • 対象ソフトウェアの品質レベルが十分で あることを確認する • 意思決定のための情報を示す • 欠陥の作り込みを防ぐ ※JSTQBシラバスより引用 スコープを“回帰テスト”に絞っても満たせるもの “テストの目的”に立ち返る
  23. 23. • 欠陥を摘出する • 対象ソフトウェアの品質レベルが十分で あることを確認する • 意思決定のための情報を示す • 欠陥の作り込みを防ぐ ※JSTQBシラバスより引用 対象OS/機種で”とりあえず”動くことが確認できれば “テストの目的”に立ち返る
  24. 24. 欲張らないROI • 利益 • テスト実行時間の短縮 • 複数OSバージョン/機種で実行できる • 投資 • 自動化ツールの選定/習得 • 自動化スクリプトの作成/保守(高度な 頑張らないテストスクリプト) • テストデータ、スタブサーバの準備
  25. 25. 頑張らないテストスクリプト • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテー ションと、機種依存問題は分けて考える)
  26. 26. 頑張らないテストスクリプト • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテー ションと、機種依存問題は分けて考える) ユニットテストでモックを使って実施
  27. 27. 頑張らないテストスクリプト • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテー ションと、機種依存問題は分けて考える) ユニットテストでモックを使って実施 スクリーンショットを目視確認
  28. 28. 頑張らないテストスクリプト • 日時、天気、株価、為替、乱数などに 起因するJudgeを無理にはしない • レイアウト崩れまでJudgeしようとしない • 機種依存の問題を狙ってテストしようと しない(OS/解像度のフラグメンテー ションと、機種依存問題は分けて考える) スクリーンショットを目視確認 ユニットテストでモックを使って実施 内容次第で手動で確認
  29. 29. 頑張らなくても ここまでできる事例
  30. 30. iOSのUIAlertView iOS6 iOS7
  31. 31. iOSのUIAlertView iOS6 iOS7 CLASH!!!
  32. 32. iOSのUIPickerView iOS6 iOS7
  33. 33. iOSのUIPickerView iOS6 iOS7 CLASH!!!
  34. 34. AndroidのdrawRect() Android 4.1 Canvas#drawRect(100,100,10,10); (10,10) (100,100) Android 4.2
  35. 35. AndroidのdrawRect() Android 4.1 Canvas#drawRect(100,100,10,10); (10,10) (100,100) 描画されない!Android 4.2 ※left<=right, top<=bottomでないと描画されない仕様
  36. 36. Android機種依存の例 1 一定量のViewヒエラルキー の上でソフトウェアキーボー ドが出現するときに StackOverflowErrorが発生 (某メーカーのAndroid 2.3 搭載端末のみ)
  37. 37. 普通の端末 奇妙な端末 Android機種依存の例 2
  38. 38. 普通の端末 奇妙な端末 Android機種依存の例 2
  39. 39. 利益を拡大する Return
  40. 40. 欲張らないROI • テスト実行時間の短縮 ➡時間と集中力を高度なテストに割り振る ➡リリース頻度の向上(4∼6週間ごとが理想) • 複数OSバージョン/機種で実行できる ➡さらにテスト実行環境を増やす。端末の回転、 ロケール、タイムゾーン、12h/24h表記、IME (Android)、文字サイズ(Android 4.0)
  41. 41. 利益を拡大する • テスト実行時間の短縮 ➡時間と集中力を高度なテストに割り振る ➡リリース頻度の向上(4∼6週間ごとが理想) • 複数OSバージョン/機種で実行できる ➡さらにテスト実行環境を増やす。端末の回転、 ロケール、タイムゾーン、12h/24h表記、IME (Android)、文字サイズ(Android 4.0) Return
  42. 42. 利益を拡大する • テスト実行時間の短縮 ➡時間と集中力を高度なテストに割り振る ➡リリース頻度の向上(4∼6週間ごとが理想) • 複数OSバージョン/機種で実行できる ➡さらにテスト実行環境を増やす。端末の回転、 ロケール、タイムゾーン、12h/24h表記、IME (Android)、文字サイズ(Android 4.0) Return ROIにとどまらず、製品の価値を 上げられる!
  43. 43. 手動ではできないことができる • ロードテスト(ヒートラン) • メモリリークの調査 • 低メモリ状態での動作 • コンカレンシーテスト • 再現率の低い(タイミングがシビアな) 問題の確認テスト
  44. 44. システムテスト自動化 フレームワークの紹介
  45. 45. monkeyrunner • Android SDK同梱の自動テストツール。スクリプ トはPythonで記述。キャプチャツール有り • 座標を指定してタップ、ドラッグ • スクリーンショット、画像比較でのJudge • http://developer.android.com/tools/help/monkeyrunner_concepts.html • サンプル https://github.com/nowsprinting/nameko-harvest
  46. 46. Robotium • Android Testing Frameworkのヘルパーで、 Seleniumライクなテスト記述が可能 (JUnitの知識が必要) • 端末回転、スクリーンショットなど必要 機能は っている • https://code.google.com/p/robotium/ • サンプル https://github.com/mike-neck/AllowLog
  47. 47. uiautomator • Android 4.1で利用できるSDK同梱の自動テスト ツール。端末の回転とスクリーンショットは 4.2から利用可能。JUnitベース • SeleniumのようにViewのヒエラルキーを って 画面要素を指定可能 • Viewのdescriptionでも要素を指定可能 • http://developer.android.com/tools/help/uiautomator/index.html • サンプル https://gist.github.com/nowsprinting/4131415
  48. 48. Espresso • 10月に公開された、Google謹製のAndroid 向けテスティングフレームワーク • Android 2.2以上で利用可能 • テスト記述は JUnitベース • https://code.google.com/p/android-test-kit/
  49. 49. UIAutomation • Xcodeに同梱のInstrumentツールで自動実行を 行なうフレームワーク • スクリプトはJavaScriptで記述 • 標準でassert機能が無いのでJSのライブラリを 使う( tuneup_js等)
  50. 50. Appium • iOS/Androidで利用できるオープンソースの テストツール • 複数のスクリプト言語で記述可能 • テスト対象にAgentを組み込む必要がない • AndroidはAPI Level 17 (JellyBean)以上が必要 • http://appium.io/
  51. 51. Calabash • Cucumberのテスト(feature)を、iOS/ Androidデバイスで実行できる • iOS版はテスト対象にAgentを組み込む必要 あり • https://github.com/calabash/calabash-android • https://github.com/calabash/calabash-ios
  52. 52. MonkeyTalk • Gorilla Logic社が開発/公開しているOSSで iOS/Androidで利用可。旧”FoneMonkey” • 専用の表形式IDEでテストを記述可能 • テスト対象にAgentを組み込む必要あり • ATI 2012 Awards iOS/Android部門winner • https://www.gorillalogic.com/monkeytalk
  53. 53. その他 iOS向けフレームワーク • Frank • Cucumber系、 ATI 2012 Awards iOS部門 finalists • http://www.testingwithfrank.com/ • Zucchini • DSL系、ATI 2012 Awards iOS部門finalists • http://www.zucchiniframework.org/ • KIF • https://github.com/kif-framework/KIF
  54. 54. ツール選定のポイント • スクリプトを書けるチームかどうか
 (将来も保守していけるのか) • iOS/Androidでテストを共有したいのか
 (但しUIが異なるので期待しすぎない) • 「何が実行できるか」は余り重視しない
 (ツールの実行機能の差は縮まる) • 仕様化、BDD
  55. 55. ビルド・静的解析の 自動化
  56. 56. テスト用ビルドを作る • 複数のTarget/Configurationを持つiOSプロジェクトの構 成Tips http://nowsprinting.hatenablog.com/entry/2012/11/ 18/031511 • Gradle+Androidプラグインでプロダクトフレーバーを 試してみた http://nowsprinting.hatenablog.com/entry/ 2013/05/23/153941 Agentの組み込みの他、接続先サーバ別など 自動生成できると便利です
  57. 57. UAT/ベータテスト • iOS/Android • TestFlight https://testflightapp.com/ • Android • deploy gate https://deploygate.com/ • Google Play Storeのベータ版配布機能 On The Airでビルドを配布できるサービス
  58. 58. 継続的インテグレーション • OS X Server/Bots • Xcodeとの統合。自由度は低め • Jenkins • 豊富なプラグイン、コードカバレジ、 静的解析 • Travis CI • クラウドサービス、Immutable
  59. 59. OS X Server/Bots
  60. 60. OS X Server/Bots
  61. 61. Jenkins
  62. 62. Jenkins
  63. 63. Jenkins
  64. 64. ビルド・静的解析を  自動化するメリット • 手作業によるオペミスを減らす • 内部品質の低いプロダクトを改善する  足がかり • ひとりでも寂しくない!
  65. 65. まとめ
  66. 66. まとめ •欲張らない •頑張らない
  67. 67. まとめ •欲張らないROI •頑張らないテストスクリプト
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×