【第6回テックヒルズ】検索基盤開発のための結合テスト環境の自動化

5,687 views

Published on

6月18日、CROOZ株式会社主催の第6回テックヒルズ 「Let’s study Jenkins~さまざまなケーススタディ~」で発表した、「検索基盤開発のための結合テスト自動化」の資料です。

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

No Downloads
Views
Total views
5,687
On SlideShare
0
From Embeds
0
Number of Embeds
2,526
Actions
Shares
0
Downloads
16
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

【第6回テックヒルズ】検索基盤開発のための結合テスト環境の自動化

  1. 1. 検索検索検索検索基盤開発のための基盤開発のための基盤開発のための基盤開発のための結合テスト環境の自動化結合テスト環境の自動化結合テスト環境の自動化結合テスト環境の自動化Jun/18/2013荻野荻野荻野荻野 恒太郎恒太郎恒太郎恒太郎, アビジートアビジートアビジートアビジート パランデパランデパランデパランデ, 松本松本松本松本 幹幹幹幹, 鵜飼鵜飼鵜飼鵜飼 大志大志大志大志Search Platform Group, Search Section, Big Data Department, Rakuten Inc.http://www.rakuten.co.jp/
  2. 2. 2自己紹介自己紹介自己紹介自己紹介氏名氏名氏名氏名 荻野恒太郎所属所属所属所属 ビッグデータ部サーチプラットフォーム開発グループ業務業務業務業務 - グローバルサーチプラットフォーム(GSP)のサーチコンポーネント周りの設計・開発・品質検証- Jenkinsもももも使って結合テスト環境の自動化
  3. 3. 3結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化①①①①背景背景背景背景
  4. 4. 4ソフトウェア開発のソフトウェア開発のソフトウェア開発のソフトウェア開発の困難困難困難困難なポイントなポイントなポイントなポイント
  5. 5. 5ソフトウェアの結合ソフトウェアの結合ソフトウェアの結合ソフトウェアの結合コンポーネントAコンポーネントAコンポーネントBコンポーネントBコンポーネントCコンポーネントCpullpulluseuseコンポーネントDコンポーネントDpushpushコンポーネントEコンポーネントEuseuseDeveloper 2Developer 2 Developer 2Developer 2Developer 2Developer 2 Developer 2Developer 2Developer 2Developer 2
  6. 6. 6ソフトウェアの結合ソフトウェアの結合ソフトウェアの結合ソフトウェアの結合コンポーネントAコンポーネントAコンポーネントBコンポーネントBコンポーネントCコンポーネントCpullpulluseuseコンポーネントDコンポーネントDpushpushコンポーネントEコンポーネントEuseuseDeveloper 2Developer 2 Developer 2Developer 2Developer 2Developer 2 Developer 2Developer 2Developer 2Developer 21つのつのつのつのソフトウェアソフトウェアソフトウェアソフトウェア
  7. 7. 7ソフトウェアの結合ソフトウェアの結合ソフトウェアの結合ソフトウェアの結合コンポーネントAコンポーネントAコンポーネントBコンポーネントBコンポーネントCコンポーネントCpullpulluseuseコンポーネントDコンポーネントDpushpushコンポーネントEコンポーネントEuseuseDeveloper 2Developer 2 Developer 2Developer 2Developer 2Developer 2 Developer 2Developer 2Developer 2Developer 2仮説:Eへの影響がない仮説:Eへの影響がない
  8. 8. 8ソフトウェアの結合ソフトウェアの結合ソフトウェアの結合ソフトウェアの結合コンポーネントAコンポーネントAコンポーネントBコンポーネントBコンポーネントCコンポーネントCpullpulluseuseコンポーネントDコンポーネントDpushpushコンポーネントEコンポーネントEuseuseDeveloper 2Developer 2 Developer 2Developer 2Developer 2Developer 2 Developer 2Developer 2Developer 2Developer 2仮説:Dのスキーマに変更がない仮説:Dのスキーマに変更がない
  9. 9. 9ソフトウェアの結合ソフトウェアの結合ソフトウェアの結合ソフトウェアの結合コンポーネントAコンポーネントAコンポーネントBコンポーネントBコンポーネントCコンポーネントCpullpulluseuseコンポーネントDコンポーネントDpushpushコンポーネントEコンポーネントEuseuseDeveloper 2Developer 2 Developer 2Developer 2Developer 2Developer 2 Developer 2Developer 2Developer 2Developer 2仮説:Cには異常なデータは含まれない仮説:Cには異常なデータは含まれない
  10. 10. 10ソフトウェアの結合ソフトウェアの結合ソフトウェアの結合ソフトウェアの結合コンポーネントAコンポーネントAコンポーネントBコンポーネントBコンポーネントCコンポーネントCpullpulluseuseコンポーネントDコンポーネントDpushpushコンポーネントEコンポーネントEuseuseDeveloper 2Developer 2 Developer 2Developer 2Developer 2Developer 2 Developer 2Developer 2Developer 2Developer 2仮説:Bにはバグがない!仮説:Bにはバグがない!
  11. 11. 11コンポーネントの結合コンポーネントの結合コンポーネントの結合コンポーネントの結合====仮説の検証仮説の検証仮説の検証仮説の検証
  12. 12. 12結合の開発期間に占める割合結合の開発期間に占める割合結合の開発期間に占める割合結合の開発期間に占める割合CI導入前開発50%結合33%QA17%プロジェクト中のそれぞれのフェーズの期間割合プロジェクト中のそれぞれのフェーズの期間割合プロジェクト中のそれぞれのフェーズの期間割合プロジェクト中のそれぞれのフェーズの期間割合仮説仮説仮説仮説の検証は高コストの検証は高コストの検証は高コストの検証は高コスト
  13. 13. 13開発者は多くの開発者は多くの開発者は多くの開発者は多くの仮説仮説仮説仮説を抱えているを抱えているを抱えているを抱えている“Continuous Integration”, Paul M. Duvall [2006]
  14. 14. 14Continuous Integrationローカルでのソースコードの変更単体テストの追加ローカルでのソースコードの変更単体テストの追加ソースコードのマージ、テストの実行、変更のコミットソースコードのマージ、テストの実行、変更のコミットコミットビルド(ビルド&自動テスト)、自動デプロイコミットビルド(ビルド&自動テスト)、自動デプロイ2次ビルド(結合テスト、性能テスト等)2次ビルド(結合テスト、性能テスト等)http://martinfowler.com/]
  15. 15. 15Continuous Integrationローカルでのソースコードの変更単体テストの追加ローカルでのソースコードの変更単体テストの追加ソースコードのマージ、テストの実行、変更のコミットソースコードのマージ、テストの実行、変更のコミットコミットビルド(ビルド&自動テスト)、自動デプロイコミットビルド(ビルド&自動テスト)、自動デプロイ2次ビルド(結合テスト)2次ビルド(結合テスト)
  16. 16. 16結合テスト結合テスト結合テスト結合テストのののの自動化自動化自動化自動化????
  17. 17. 17結合テスト結合テスト結合テスト結合テストのののの自動化自動化自動化自動化????
  18. 18. 18テストテストテストテストの性質の性質の性質の性質単体テスト 結合テスト対象コンポーネント1 複数コスト 低 高対象機能 単純 複雑可用性可用性完全性完全性検索精度検索精度ドキュメント登録ドキュメント登録クエリクエリサーチでの例)
  19. 19. 19単体テスト 結合テスト対象コンポーネント1 複数コスト 低 高対象機能 単純 複雑テストテストテストテストの性質の性質の性質の性質可用性可用性完全性完全性検索精度検索精度ドキュメント登録ドキュメント登録クエリクエリサーチでの例)3000件以上の3000件以上の3000件以上の3000件以上のテストケーステストケーステストケーステストケース3000件以上の3000件以上の3000件以上の3000件以上のテストケーステストケーステストケーステストケース
  20. 20. 20結合テスト結合テスト結合テスト結合テストのののの自動化自動化自動化自動化????
  21. 21. 21テスト実行のコストテスト実行のコストテスト実行のコストテスト実行のコストテストケース数テストケース数テストケース数テストケース数Totalcost(man-hour)ManualAutomation多低高少テスト実行のコスト
  22. 22. 22テストケース数テストケース数テストケース数テストケース数Totalcost(man-hour)ManualAutomation多低高少テスト実行のコストテスト実行のコストテスト実行のコストテスト実行のコストテスト実行のコスト毎日毎日毎日毎日大規模な大規模な大規模な大規模なテストケーステストケーステストケーステストケースをををを実行可能実行可能実行可能実行可能毎日毎日毎日毎日大規模な大規模な大規模な大規模なテストケーステストケーステストケーステストケースをををを実行可能実行可能実行可能実行可能
  23. 23. 23結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化ユーザーにユーザーにユーザーにユーザーに高付加高付加高付加高付加価値価値価値価値を提を提を提を提供する供する供する供する“仮説仮説仮説仮説”のののの常時検証常時検証常時検証常時検証ユーザーにユーザーにユーザーにユーザーに高付加高付加高付加高付加価値価値価値価値を提を提を提を提供する供する供する供する“仮説仮説仮説仮説”のののの常時検証常時検証常時検証常時検証=
  24. 24. 24結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化②②②②課題課題課題課題
  25. 25. 25結合テスト結合テスト結合テスト結合テスト自動化に自動化に自動化に自動化に向けての向けての向けての向けての課題課題課題課題課題① テストの複雑さ課題② テストの実装コスト課題③ テストの実行時間課題④ テスト結果の再現性
  26. 26. 26課題① テストの複雑さ・テストの基本に則り品質を・テストの基本に則り品質を・テストの基本に則り品質を・テストの基本に則り品質を積み上げる積み上げる積み上げる積み上げる・複雑な内部状態のテストは・複雑な内部状態のテストは・複雑な内部状態のテストは・複雑な内部状態のテストはUT・・・・CTでででで・結合テストは原則・結合テストは原則・結合テストは原則・結合テストは原則ブラックボックステストブラックボックステストブラックボックステストブラックボックステスト・テストの基本に則り品質を・テストの基本に則り品質を・テストの基本に則り品質を・テストの基本に則り品質を積み上げる積み上げる積み上げる積み上げる・複雑な内部状態のテストは・複雑な内部状態のテストは・複雑な内部状態のテストは・複雑な内部状態のテストはUT・・・・CTでででで・結合テストは原則・結合テストは原則・結合テストは原則・結合テストは原則ブラックボックステストブラックボックステストブラックボックステストブラックボックステスト
  27. 27. 27課題② テストの実装コスト・テストフレームワークを開発・テストフレームワークを開発・テストフレームワークを開発・テストフレームワークを開発- シナリオベースでシナリオベースでシナリオベースでシナリオベースでテストケースを表現テストケースを表現テストケースを表現テストケースを表現- 仕様変更に対しての保守性仕様変更に対しての保守性仕様変更に対しての保守性仕様変更に対しての保守性・テストフレームワークを開発・テストフレームワークを開発・テストフレームワークを開発・テストフレームワークを開発- シナリオベースでシナリオベースでシナリオベースでシナリオベースでテストケースを表現テストケースを表現テストケースを表現テストケースを表現- 仕様変更に対しての保守性仕様変更に対しての保守性仕様変更に対しての保守性仕様変更に対しての保守性
  28. 28. 28課題③ テストの実行時間・・・・コミットビルドでコミットビルドでコミットビルドでコミットビルドで10分の分の分の分のSmoke Test・結合テストのテストジョブは・結合テストのテストジョブは・結合テストのテストジョブは・結合テストのテストジョブは1時間で分割時間で分割時間で分割時間で分割・・・・50台のテスト環境でスケール台のテスト環境でスケール台のテスト環境でスケール台のテスト環境でスケール・・・・コミットビルドでコミットビルドでコミットビルドでコミットビルドで10分の分の分の分のSmoke Test・結合テストのテストジョブは・結合テストのテストジョブは・結合テストのテストジョブは・結合テストのテストジョブは1時間で分割時間で分割時間で分割時間で分割・・・・50台のテスト環境でスケール台のテスト環境でスケール台のテスト環境でスケール台のテスト環境でスケール
  29. 29. 29Smoke Test
  30. 30. 30Smoke Test実行時間とカバレッジのバランス・ 実行時間は10分・ End to End のテストドキュメント登録/削除,日本語処理、平行性等
  31. 31. 31複数の複数の複数の複数のExecutor
  32. 32. 32複数の複数の複数の複数のExecutor複数のExecutorを配置し、並列にテストジョブを実行
  33. 33. 33複数の複数の複数の複数のExecutor複数のExecutorを配置し、並列にテストジョブを実行1時間を超えるテストジョブは分割
  34. 34. 34重要なテスト重要なテスト重要なテスト重要なテストを優先して実行を優先して実行を優先して実行を優先して実行Priority Sorter Pluginにて、jobの優先度を指定
  35. 35. 35重要なテスト重要なテスト重要なテスト重要なテストを優先して実行を優先して実行を優先して実行を優先して実行Priority Sorter Pluginにて、jobの優先度を指定
  36. 36. 36課題④ テスト結果の再現性・・・・ 原因:原因:原因:原因:- 環境差異環境差異環境差異環境差異- 連続したテスト実行のための連続したテスト実行のための連続したテスト実行のための連続したテスト実行のためのシステムの状態差異システムの状態差異システムの状態差異システムの状態差異・・・・ 解決方法解決方法解決方法解決方法クリーンアップクリーンアップクリーンアップクリーンアップ + インストールインストールインストールインストール・・・・ 原因:原因:原因:原因:- 環境差異環境差異環境差異環境差異- 連続したテスト実行のための連続したテスト実行のための連続したテスト実行のための連続したテスト実行のためのシステムの状態差異システムの状態差異システムの状態差異システムの状態差異・・・・ 解決方法解決方法解決方法解決方法クリーンアップクリーンアップクリーンアップクリーンアップ + インストールインストールインストールインストール
  37. 37. 37結合テスト自動化の課題と解決方法結合テスト自動化の課題と解決方法結合テスト自動化の課題と解決方法結合テスト自動化の課題と解決方法課題課題課題課題 解決方法解決方法解決方法解決方法結合テストの複雑さ ・品質の積み上げ・結合テストではブラックボックステストテストの実装コストが高い・シナリオベースで記述可能なフレームワークテストの実行時間が長い・10分のSmoke Test・1時間毎にジョブを分割・50台の環境でスケールテスト結果の再現性 ・クリーンアップ + インストール
  38. 38. 38結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化③③③③開発プロセス開発プロセス開発プロセス開発プロセス
  39. 39. 開発プロセス開発GITmergeUT/CTSmokeTestIT1 IT2Smoke TestPassPassバージョンPassYesNo NoSTUT&ビルドYesPass開発開発開発開発YesNoclone手動手動手動手動システムテストシステムテストシステムテストシステムテストリリース結合結合結合結合テストテストテストテストビルドビルドビルドビルド
  40. 40. 開発プロセス開発GITmergeUT/CTSmokeTestIT1 IT2Smoke TestPassPassバージョンPassYesNo NoSTUT&ビルドYesPass開発開発開発開発YesNoclone手動手動手動手動システムテストシステムテストシステムテストシステムテストリリース結合結合結合結合テストテストテストテストビルドビルドビルドビルド{“cassandra”:“2.4.0-20130228.125411-258.jar”,“indexer”:“2.4.0-20130227.134019-53.jar”,.}
  41. 41. 41結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化④効果④効果④効果④効果
  42. 42. 42CI導入の効果導入の効果導入の効果導入の効果CI導入前開発50%結合33%QA17%プロジェクト中のそれぞれのフェーズプロジェクト中のそれぞれのフェーズプロジェクト中のそれぞれのフェーズプロジェクト中のそれぞれのフェーズの期間の割合の期間の割合の期間の割合の期間の割合結合テスト自動化後結合0%QA17%開発83%
  43. 43. 43NumberofissuesIT2 CTDevelopmentDevelopment QAQA発見が期待されるテストタイプごとの積算発見バグ数発見が期待されるテストタイプごとの積算発見バグ数発見が期待されるテストタイプごとの積算発見バグ数発見が期待されるテストタイプごとの積算発見バグ数
  44. 44. 44NumberofissuesIT2 CTDevelopmentDevelopment QAQA結合バグを開発初期から発見結合バグを開発初期から発見結合バグを開発初期から発見結合バグを開発初期から発見結合バグを開発初期から発見結合バグを開発初期から発見結合バグを開発初期から発見結合バグを開発初期から発見発見が期待されるテストタイプごとの積算発見バグ数発見が期待されるテストタイプごとの積算発見バグ数発見が期待されるテストタイプごとの積算発見バグ数発見が期待されるテストタイプごとの積算発見バグ数
  45. 45. 452013-02-102013-02-242013-03-102013-03-242013-04-07NumberofissuesIT2 availabilityIT2 field typeIT2 synonymIT2 joinIT2 gatewayIT2 Search-API indexing/searchIT2 smokeDevelopmentDevelopment QAQAテストタイプごとの積算発見バグ数テストタイプごとの積算発見バグ数テストタイプごとの積算発見バグ数テストタイプごとの積算発見バグ数
  46. 46. 462013-02-102013-02-242013-03-102013-03-242013-04-07NumberofissuesIT2 availabilityIT2 field typeIT2 synonymIT2 joinIT2 gatewayIT2 Search-API indexing/searchIT2 smokeDevelopmentDevelopment QAQAテストタイプごとの積算発見バグ数テストタイプごとの積算発見バグ数テストタイプごとの積算発見バグ数テストタイプごとの積算発見バグ数QA期間はサービス期間はサービス期間はサービス期間はサービスのののの高度な高度な高度な高度な付加価値のテスト付加価値のテスト付加価値のテスト付加価値のテストに集中に集中に集中に集中QA期間はサービス期間はサービス期間はサービス期間はサービスのののの高度な高度な高度な高度な付加価値のテスト付加価値のテスト付加価値のテスト付加価値のテストに集中に集中に集中に集中
  47. 47. 47コミットビルドとしてのコミットビルドとしてのコミットビルドとしてのコミットビルドとしてのSmoke Testの重要性の重要性の重要性の重要性
  48. 48. 48コミットビルドとしてのコミットビルドとしてのコミットビルドとしてのコミットビルドとしてのSmoke Testの重要性の重要性の重要性の重要性6%のバグがのバグがのバグがのバグがSmoke Testで発見で発見で発見で発見6%のバグがのバグがのバグがのバグがSmoke Testで発見で発見で発見で発見
  49. 49. 49コミットビルドとしてのコミットビルドとしてのコミットビルドとしてのコミットビルドとしてのSmoke Testの重要性の重要性の重要性の重要性バグ発見数バグ発見数バグ発見数バグ発見数 / テスト実行時間テスト実行時間テスト実行時間テスト実行時間
  50. 50. 50コミットビルドとしてのコミットビルドとしてのコミットビルドとしてのコミットビルドとしてのSmoke Testの重要性の重要性の重要性の重要性バグ発見数バグ発見数バグ発見数バグ発見数 / テスト実行時間テスト実行時間テスト実行時間テスト実行時間効果的な効果的な効果的な効果的なSmoke Testをををを実行する事実行する事実行する事実行する事が重要が重要が重要が重要効果的な効果的な効果的な効果的なSmoke Testをををを実行する事実行する事実行する事実行する事が重要が重要が重要が重要
  51. 51. 結合テストの自動化の効果の大きさ結合テストの自動化の効果の大きさ結合テストの自動化の効果の大きさ結合テストの自動化の効果の大きさ効果効果効果効果 大大大大 効果効果効果効果 小小小小対象プロダクトの寿命長い 短い開発中のコンポーネント数多い 少ない要求・仕様・設計の変更頻度多い 少ない
  52. 52. 52結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化⑤まとめ⑤まとめ⑤まとめ⑤まとめ
  53. 53. 53まとめまとめまとめまとめ結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化結合テストの自動化・・・・ 結合の検証までを自動化結合の検証までを自動化結合の検証までを自動化結合の検証までを自動化→仮説仮説仮説仮説の検証を効率化の検証を効率化の検証を効率化の検証を効率化・・・・ 結合バグを早期に発見結合バグを早期に発見結合バグを早期に発見結合バグを早期に発見→ユーザーに付加価値ユーザーに付加価値ユーザーに付加価値ユーザーに付加価値をををを提供する機能提供する機能提供する機能提供する機能の検証の検証の検証の検証・・・・ 結合の検証までを自動化結合の検証までを自動化結合の検証までを自動化結合の検証までを自動化→仮説仮説仮説仮説の検証を効率化の検証を効率化の検証を効率化の検証を効率化・・・・ 結合バグを早期に発見結合バグを早期に発見結合バグを早期に発見結合バグを早期に発見→ユーザーに付加価値ユーザーに付加価値ユーザーに付加価値ユーザーに付加価値をををを提供する機能提供する機能提供する機能提供する機能の検証の検証の検証の検証=
  54. 54. 54Automationyou

×