SlideShare ist ein Scribd-Unternehmen logo
1 von 46
PFIセミナー


継続的インテグレーションと
    テストの話



      Eiichiro Iwata

     2012年 5月 10日
自己紹介

 岩田 英一郎 (@eiichiroi)
   元さいたまな人

 経歴
   2009年6月∼ アルバイト

   2010年3月  埼玉大学 大学院理工学研究科 修了

   2010年8月∼ PFI入社

 所属
   製品開発部

   Sedueプロジェクト

 仕事
   Sedue(検索エンジン)の開発

       コア∼運用ツールを幅広く
       研究開発成果の取り込み
                       2
本日の内容




        3
本日の内容

   型?
     残念ながら違います




                  3
本日の内容

 型?
   残念ながら違います

 継続的インテグレーション
   概要/流れ/価値/懸念点/導入

 テスト
   単体テスト/統合テスト/システムテスト/受け入れテスト



   結論
     継続的インテグレーションとテストは重要




                   3
本日の内容

 型?
   残念ながら違います

 継続的インテグレーション
   概要/流れ/価値/懸念点/導入

 テスト
   単体テスト/統合テスト/システムテスト/受け入れテスト



   結論
     継続的インテグレーションとテストは重要



   注意
     基礎的な話が多めなので、ご存知の方はあまり面白くないかも


                   3
継続的インテグレーションとは?

 インテグレーション
   複数のコンポーネントで構成されるソフトウェアが一つのシステム

    として機能することを検証すること
 継続的?
   変更がある度に!



   目的
     ソフトウェア品質の向上



   特に重要なこと
     迅速なフィードバックを得られるようにすること

     自動化が効果的(ボタン一発!)


                    4
継続的インテグレーションの流れ




                              監視




       バージョン管理                     インテグレーション
           システム                       サーバー
     (git, subversion, ...)         (jenkins, ...)




                              5
継続的インテグレーションの流れ




                                        監視




                  バージョン管理                    インテグレーション
                     システム                       サーバー
               (git, subversion, ...)         (jenkins, ...)



1.開発/検証/パッチレビュー
2.プライベートビルド                             5
 (開発環境でのビルド)
継続的インテグレーションの流れ




                                        監視



        変更をコミット
                  バージョン管理                    インテグレーション
                     システム                       サーバー
               (git, subversion, ...)         (jenkins, ...)



1.開発/検証/パッチレビュー
2.プライベートビルド                             5
 (開発環境でのビルド)
継続的インテグレーションの流れ




                                        監視                     実行



        変更をコミット
                                                                ビルドスクリプト
                  バージョン管理                    インテグレーション
                                                                    1.コンパイル
                     システム                       サーバー
                                                                    2.テストの実行
               (git, subversion, ...)         (jenkins, ...)
                                                                    3.インスペクションの実行
                                                                     (コードの解析)
                                                                    4.デプロイ
1.開発/検証/パッチレビュー
                                                                     (パッケージ作成など)
2.プライベートビルド                             5
 (開発環境でのビルド)
継続的インテグレーションの流れ




                                                     フィードバックの生成




                                        監視                     実行



        変更をコミット
                                                                ビルドスクリプト
                  バージョン管理                    インテグレーション
                                                                    1.コンパイル
                     システム                       サーバー
                                                                    2.テストの実行
               (git, subversion, ...)         (jenkins, ...)
                                                                    3.インスペクションの実行
                                                                     (コードの解析)
                                                                    4.デプロイ
1.開発/検証/パッチレビュー
                                                                     (パッケージ作成など)
2.プライベートビルド                             5
 (開発環境でのビルド)
継続的インテグレーションの流れ


              フィードバックの通知




                                                      フィードバックの生成




                                         監視                     実行



        変更をコミット
                                                                 ビルドスクリプト
                  バージョン管理                     インテグレーション
                                                                     1.コンパイル
                      システム                       サーバー
                                                                     2.テストの実行
                (git, subversion, ...)         (jenkins, ...)
                                                                     3.インスペクションの実行
                                                                      (コードの解析)
                                                                     4.デプロイ
1.開発/検証/パッチレビュー
                                                                      (パッケージ作成など)
2.プライベートビルド                              5
 (開発環境でのビルド)
ビルドの種類
       プライベートビルド   インテグレーションビルド   リリースビルド

   種類
     プライベートビルド

     インテグレーションビルド

     リリースビルド



   実行される場所や内容が異なる
     迅速なフィードバックを得られるようにするため




                        6
ビルドの種類 - プライベートビルド
       プライベートビルド   インテグレーションビルド   リリースビルド

   開発環境でのビルド
     リポジトリに変更をコミットする前に実行する

     個人(開発者)向け



   ビルドの範囲
     コンパイル

     軽量なテスト(単体テスト)



   実行時間の目安
     10分以内




                        7
ビルドの種類 - インテグレーションビルド(1/3)
       プライベートビルド   インテグレーションビルド   リリースビルド

   インテグレーションサーバーでのビルド
     開発チーム向け



   分類
     コミットビルド

     2次ビルド




                        8
ビルドの種類 - インテグレーションビルド(2/3)
       プライベートビルド   インテグレーションビルド   リリースビルド

   コミットビルド
     リポジトリに変更がコミットされる度に実行される



   ビルドの範囲
     コンパイル

     軽量なテスト(単体テスト)



   実行時間の目安
     10分以内




                        9
ビルドの種類 - インテグレーションビルド(3/3)
       プライベートビルド   インテグレーションビルド   リリースビルド

   2次ビルド
      コミットビルドが成功した後に実行される(場合によって日次/週次)



   ビルドの範囲
     コンパイル

     軽量なテスト(単体テスト)

     重量なテスト(統合テスト/システムテスト/受け入れテスト)

     インスペクション

     デプロイ



   実行時間の目安
     10分∼数時間以内


                        10
ビルドの種類 - リリースビルド
            プライベートビルド   インテグレーションビルド   リリースビルド

   リリース前に行うビルド
     ユーザ(顧客)向け



   ビルド範囲
     コンパイル

     テスト

           単体テスト/統合テスト/システムテスト/受け入れテスト
           性能テスト/負荷テストを含めることも
       インスペクション
       デプロイ


   実行時間の目安
     インテグレーションビルドと同様 + α
                             11
継続的インテグレーションの価値




           12
継続的インテグレーションの価値

   検証コストの削減
     ビルドの自動化による恩恵



   常にデプロイ可能なソフトウェアを提供できる
     迅速なフィードバックによりバグの混入∼修正まで短時間で

     失敗したら最優先で直す



   修正/機能追加を自信を持って行える
     既存のテストを壊してないかすぐ分かる




                     12
継続的インテグレーションの価値

   検証コストの削減
     ビルドの自動化による恩恵



   常にデプロイ可能なソフトウェアを提供できる
     迅速なフィードバックによりバグの混入∼修正まで短時間で

     失敗したら最優先で直す



   修正/機能追加を自信を持って行える
     既存のテストを壊してないかすぐ分かる




     品質の高いソフトウェアへ
                     12
継続的インテグレーションの懸念点

   CIシステムの構築が大変?
      出来ればプロジェクトの初期から導入するのが望ましい

      プロジェクトの途中から導入する場合はやや大変

         自動化に必要な機能開発など
         段階的導入を検討する
           ‒ 日次ビルド、コンパイルと単体テスト∼
 ハードウェア/ソフトウェアの費用は?
   削減できる検証コストに比べれば微々たるもの

 開発環境で走らせれば良いのでは?
   クリーンなビルド環境は重要です

   プライベートビルドが通っても、インテグレーションビルドが通ら

    ないこともあります(迫真)

                       13
継続的インテグレーションの導入
                   Jenkins        Travis CI

   インテグレーションサーバーのセットアップ
      Jenkins

      Travis CI



   ビルドの自動化
     1. コンパイル
     2. テスト
     3. インスペクション
     4. デプロイ




                             14
Jenkins - セットアップ
                    Jenkins        Travis CI

   Jenkins
      インストール

      起動

      ブラウザ経由でポチポチ設定

           リポジトリの場所の登録
           ビルドスクリプトの登録
           ビルド結果の通知方法の設定
       ビルド結果もブラウザで確認できる
       プラグインも豊富
   続きは
     Jenkins実践入門

     Jenkins ユーザ・カンファレンス 2012 東京


                              15
Jenkins - 色々なフィードバック手段を試してみる
            Jenkins        Travis CI

 フィードバック手段
   メール

   光(ランプ)

   音

   タスクバー、Growl

   ブラウザのプラグイン

 いつ、だれに、何をフィードバックするのかを考慮しつつ決める




                      16
Jenkins - 最近リリースされたDashbozu
               Jenkins        Travis CI

   今回は試す時間が確保できず...紹介のみ




                         17
Travis CI
                           Jenkins        Travis CI

   Travis CI
      継続的インテグレーションを提供するサービス

      オープンソース向け

            GitHubと連携
       http://travis-ci.org/
       ※公式対応言語に注意(C++とかD言語とか公式対応してません)
   セットアップ
    1. GitHubとの連携を許可
    2. リポジトリ毎にTravisの有効/無効を設定
    3. ビルドスクリプトを書いてリポジトリにコミット
            .travis.ymlをリポジトリのトップディレクトリへ
   pficommonをforkして登録してみた
      http://travis-ci.org/#!/eiichiroi/pficommon
                                     18
継続的インテグレーションの導入
         コンパイル     テスト        インスペクション   デプロイ

   インテグレーションサーバーのセットアップ
      Jenkins

      Travis CI



   ビルドの自動化
     1. コンパイル
     2. テスト
     3. インスペクション
     4. デプロイ




                         19
ビルドの自動化 - 1.コンパイル
        コンパイル   テスト        インスペクション   デプロイ

   コンパイル手順の自動化
     waf

     autotools

     make

     rake

     ant

     (言語やプロジェクトに応じて選択)




                      20
ビルドの自動化 - 2.テストの実行
             コンパイル   テスト        インスペクション   デプロイ

   テストフレームワーク
     Google Test, Boost.Test

     (言語やプロジェクト、テストの種類に応じて選択)



   テストの実行範囲が重要
     迅速にフィードバックを得られるように、分類して実行範囲を絞る



   段階的にテストを実施すると良い
     軽量なテスト

           単体テスト
       重量なテスト
           統合テスト/システムテスト/受け入れテスト/...
           データベースのセットアップなどが必要になることも多い
                           21
ビルドの自動化 - 3.インスペクションの実行(1/2)
           コンパイル    テスト        インスペクション   デプロイ

   ソースコードの静的解析・動的解析
     コーディング規約違反の検出(cpplint)

     コピペの検出

     各種コードメトリクスの計測

          クラス数
          メソッド数
          テストの網羅率(カバレッジ)
   注意点
     解析をして終わりにしない。何かしらの対処を行う

          コーディング規約違反を直す
          コピペは共通化できるなら直す
          カバレッジが低いところを補強する

                          22
ビルドの自動化 - 3.インスペクションの実行(2/2)
              コンパイル         テスト         インスペクション     デプロイ

   pficommonのカバレッジを測定してみた
      gcc + gcov + lcov

      スクリプト

            https://gist.github.com/2643761
       結果
            http://eiichiroi.github.com/pficommon/


       network...(^p^)...pull requestお待ちしております




                                   23
ビルドの自動化 - 4.デプロイ
        コンパイル   テスト        インスペクション   デプロイ

   ソフトウェアを利用可能な状態で提供すること

   デプロイ対象のプラットフォームごとに
     (テストやインスペクションの実施)

     パッケージの作成

     設定ファイルの準備

     ...



   継続的にデプロイまで行うのは割と大変
     短期間でのリリースを行う場合はほぼ必須になる




                      24
テスト
             単体テスト      統合テスト        システムテスト    受け入れテスト

 テストのないコードはレガシーコード!
   ソフトウェアの品質を担保するために必要

 テストの分類(IEEE標準規格)
   単体テスト

   統合テスト

   システムテスト

   受け入れテスト

 注意
   組織によっては分類が少ないことも
    コンパイル   単体テスト   統合テスト   システムテスト   受け入れテスト   インスペクション   デプロイ

     プライベートビルド

      コミットビルド                    2次ビルド

                              リリースビルド
                                25
単体テスト
           単体テスト   統合テスト        システムテスト     受け入れテスト

   個々のコンポーネントに対して個別に行うテスト
     コンポーネント                                   車の場合

         関数                                    エンジン

         クラス
                                            キャリブレータ      他のエンジン部品
         ...ねじ?
   テストする人
                                     燃料モジュール         空気モジュール
     各コンポーネントの開発者

                                  ねじ1     ねじX   何か     ねじ1   何か

   優れた単体テスト
     実行速度が速い(1テスト0.1秒では遅い)

     問題箇所の特定がしやすい




                           26
単体テストの例: pficommon
     単体テスト   統合テスト        システムテスト   受け入れテスト




                     27
単体テストの例: pficommon
        単体テスト   統合テスト        システムテスト   受け入れテスト

   文字列をbase64エンコードする関数

   テストコード




                        27
単体テストの注意点
            単体テスト   統合テスト        システムテスト   受け入れテスト

   単体テストではないもの
     外部リソースに依存するテスト

           データベース/ネットワーク/ファイルシステムにアクセスする
       →モックオブジェクトなどで分離


   細かいテクニックはレガシーコード改善ガイドを参照
     ソフトウェアを変更するにはテストが重要

     テストのない状況からテストを整備していく方法

     依存関係を排除するテクニック集




                            28
統合テスト
          単体テスト   統合テスト        システムテスト     受け入れテスト

   システムの一部を対象とするテスト
     複数のコンポーネントが依存関係を持つテスト

     外部リソースへ依存するテスト

         データベース/ネットワーク/ファイルシステムにアクセスする
                                               車の場合
 テストする人
   開発チームの人                                    エンジン

 優れた統合テスト
                                           キャリブレータ      他のエンジン部品
   網羅率が高い

                                    燃料モジュール         空気モジュール
   単体テストと統合テストの境界
     ソフトウェアの規模による               ねじ1     ねじX   何か     ねじ1   何か

         テストの実行時間が十分少ないときには分けないことも

                          29
統合テストの例: pficommon
           単体テスト       統合テスト        システムテスト   受け入れテスト

   pfi::text::jsonのテスト
      pficommon/src/text/json_test.cpp

      粒度が粗めのテストが多い



   pfi::data::serializationのテスト
      pficommon/src/data/serialization_test.cpp

      色んな型の変数をファイルへシリアライズしている



   興味ある型はgithubを見てください




                               30
システムテスト
            単体テスト   統合テスト        システムテスト     受け入れテスト

 システム全体を対象とするテスト
                                                  車の場合
   UIやAPIを経由してテストする
                                                    車
 テストする人
   テストチーム
                                           駆動装置     HVAC     他の車体部品
 優れたシステムテスト
   幅広いテスト                         エンジン       トランスミッション

           機能/負荷/性能テストなど
                                   キャリブレータ        他のエンジン部品


   統合テストとシステムテストの境界
     ソフトウェアの規模によって変わる

           何を「システム」と定義するか?サブシステムに分割することも
       統合テストとシステムテストを合わせて結合テストと呼ぶことも?
           組織によって違ったりしてカオス
                            31
受け入れテスト
            単体テスト   統合テスト        システムテスト   受け入れテスト

   ユーザの要件を満たしているかどうかのテスト
     アルファテスト

           開発者側で行う受け入れテスト
       ベータテスト
           顧客側で行う受け入れテスト
       ユーザビリティのテストなども行う
   テストする人
     顧客

     顧客層を代表する人

           顧客やソフトウェアのユースケースを良く理解している
   優れた受け入れテスト
     実環境とテスト環境が同じ

           ハードウェア/ソフトウェア/データ/人
                            32
まとめ

 継続的インテグレーション
   概要/流れ/価値/懸念点/導入

 テスト
   単体テスト/統合テスト/システムテスト/受け入れテスト



   結論
     継続的インテグレーションとテストは重要

           検証コストの削減
           常にデプロイ可能なソフトウェアを提供できる
           修正/機能追加を自信を持って行える
       段階的にでも良いので導入しましょう


                        33
参考文献

   継続的インテグレーション入門
     やや古くなっているが、まとまっている



   Jenkins実践入門
      Jenkins導入するなら



   体系的ソフトウェアテスト入門
     テストプロセス、テスト計画、テスト実行



   レガシーコード改善ガイド
     開発者は読むべき




                       34
Copyright © 2006-2012
Preferred Infrastructure All Right Reserved.

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Harbor RegistryのReplication機能
Harbor RegistryのReplication機能Harbor RegistryのReplication機能
Harbor RegistryのReplication機能
 
Azure Api Management 俺的マニュアル 2020年3月版
Azure Api Management 俺的マニュアル 2020年3月版Azure Api Management 俺的マニュアル 2020年3月版
Azure Api Management 俺的マニュアル 2020年3月版
 
Argo CD Deep Dive
Argo CD Deep DiveArgo CD Deep Dive
Argo CD Deep Dive
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
 
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門するKeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解
 
サーバ構築を自動化する 〜Ansible〜
サーバ構築を自動化する 〜Ansible〜サーバ構築を自動化する 〜Ansible〜
サーバ構築を自動化する 〜Ansible〜
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
 

Ähnlich wie 継続的インテグレーションとテストの話

継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ
Yasutomo Arai
 
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめJenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
atsushi_tmx
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
Atsuhiro Kubo
 
「継続的デリバリー」読書会 第3章 継続的デリバリー
「継続的デリバリー」読書会 第3章 継続的デリバリー「継続的デリバリー」読書会 第3章 継続的デリバリー
「継続的デリバリー」読書会 第3章 継続的デリバリー
Norikazu Hiraki
 
VSUG Day 2010 Summer Tokyo - keynote
VSUG Day 2010 Summer Tokyo - keynoteVSUG Day 2010 Summer Tokyo - keynote
VSUG Day 2010 Summer Tokyo - keynote
Takeshi Shinmura
 
Vsug day2010 osaka_s1
Vsug day2010 osaka_s1Vsug day2010 osaka_s1
Vsug day2010 osaka_s1
mizusawa
 
Vsug day2010 osaka_1
Vsug day2010 osaka_1Vsug day2010 osaka_1
Vsug day2010 osaka_1
mizusawa
 

Ähnlich wie 継続的インテグレーションとテストの話 (20)

Cibc lecture imagire
Cibc lecture imagireCibc lecture imagire
Cibc lecture imagire
 
継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ
 
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめJenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
 
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
 
Jenkinsstudy#4kokawa
Jenkinsstudy#4kokawaJenkinsstudy#4kokawa
Jenkinsstudy#4kokawa
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
 
【JaSST'11 Tokyo】 テスト イノベーション
【JaSST'11 Tokyo】 テスト イノベーション【JaSST'11 Tokyo】 テスト イノベーション
【JaSST'11 Tokyo】 テスト イノベーション
 
VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011
 
Devsumi2008
Devsumi2008Devsumi2008
Devsumi2008
 
「継続的デリバリー」読書会 第3章 継続的デリバリー
「継続的デリバリー」読書会 第3章 継続的デリバリー「継続的デリバリー」読書会 第3章 継続的デリバリー
「継続的デリバリー」読書会 第3章 継続的デリバリー
 
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
 
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略
 
VSUG Day 2010 Summer Tokyo - keynote
VSUG Day 2010 Summer Tokyo - keynoteVSUG Day 2010 Summer Tokyo - keynote
VSUG Day 2010 Summer Tokyo - keynote
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
 
Vsug day2010 osaka_s1
Vsug day2010 osaka_s1Vsug day2010 osaka_s1
Vsug day2010 osaka_s1
 
Vsug day2010 osaka_1
Vsug day2010 osaka_1Vsug day2010 osaka_1
Vsug day2010 osaka_1
 
Enterprise TEST Forum 2012
Enterprise TEST Forum 2012Enterprise TEST Forum 2012
Enterprise TEST Forum 2012
 
【Agile Forum in Gifu】 Visual Studio 2010 でみる、アジャイル開発における開発支援ツールの活用
【Agile Forum in Gifu】 Visual Studio 2010 でみる、アジャイル開発における開発支援ツールの活用【Agile Forum in Gifu】 Visual Studio 2010 でみる、アジャイル開発における開発支援ツールの活用
【Agile Forum in Gifu】 Visual Studio 2010 でみる、アジャイル開発における開発支援ツールの活用
 

Mehr von Preferred Networks

Mehr von Preferred Networks (20)

PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
 
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
 
Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...
Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...
Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...
 
深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...
深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...
深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...
 
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
 
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
 
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
 
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
 
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
 
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
 
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
 
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
 
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語るKubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
 
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
 
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
 
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
 
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
 
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
 
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
 

継続的インテグレーションとテストの話

  • 1. PFIセミナー 継続的インテグレーションと テストの話 Eiichiro Iwata 2012年 5月 10日
  • 2. 自己紹介  岩田 英一郎 (@eiichiroi)  元さいたまな人  経歴  2009年6月∼ アルバイト  2010年3月  埼玉大学 大学院理工学研究科 修了  2010年8月∼ PFI入社  所属  製品開発部  Sedueプロジェクト  仕事  Sedue(検索エンジン)の開発  コア∼運用ツールを幅広く  研究開発成果の取り込み 2
  • 4. 本日の内容  型?  残念ながら違います 3
  • 5. 本日の内容  型?  残念ながら違います  継続的インテグレーション  概要/流れ/価値/懸念点/導入  テスト  単体テスト/統合テスト/システムテスト/受け入れテスト  結論  継続的インテグレーションとテストは重要 3
  • 6. 本日の内容  型?  残念ながら違います  継続的インテグレーション  概要/流れ/価値/懸念点/導入  テスト  単体テスト/統合テスト/システムテスト/受け入れテスト  結論  継続的インテグレーションとテストは重要  注意  基礎的な話が多めなので、ご存知の方はあまり面白くないかも 3
  • 7. 継続的インテグレーションとは?  インテグレーション  複数のコンポーネントで構成されるソフトウェアが一つのシステム として機能することを検証すること  継続的?  変更がある度に!  目的  ソフトウェア品質の向上  特に重要なこと  迅速なフィードバックを得られるようにすること  自動化が効果的(ボタン一発!) 4
  • 8. 継続的インテグレーションの流れ 監視 バージョン管理 インテグレーション システム サーバー (git, subversion, ...) (jenkins, ...) 5
  • 9. 継続的インテグレーションの流れ 監視 バージョン管理 インテグレーション システム サーバー (git, subversion, ...) (jenkins, ...) 1.開発/検証/パッチレビュー 2.プライベートビルド 5 (開発環境でのビルド)
  • 10. 継続的インテグレーションの流れ 監視 変更をコミット バージョン管理 インテグレーション システム サーバー (git, subversion, ...) (jenkins, ...) 1.開発/検証/パッチレビュー 2.プライベートビルド 5 (開発環境でのビルド)
  • 11. 継続的インテグレーションの流れ 監視 実行 変更をコミット ビルドスクリプト バージョン管理 インテグレーション 1.コンパイル システム サーバー 2.テストの実行 (git, subversion, ...) (jenkins, ...) 3.インスペクションの実行 (コードの解析) 4.デプロイ 1.開発/検証/パッチレビュー (パッケージ作成など) 2.プライベートビルド 5 (開発環境でのビルド)
  • 12. 継続的インテグレーションの流れ フィードバックの生成 監視 実行 変更をコミット ビルドスクリプト バージョン管理 インテグレーション 1.コンパイル システム サーバー 2.テストの実行 (git, subversion, ...) (jenkins, ...) 3.インスペクションの実行 (コードの解析) 4.デプロイ 1.開発/検証/パッチレビュー (パッケージ作成など) 2.プライベートビルド 5 (開発環境でのビルド)
  • 13. 継続的インテグレーションの流れ フィードバックの通知 フィードバックの生成 監視 実行 変更をコミット ビルドスクリプト バージョン管理 インテグレーション 1.コンパイル システム サーバー 2.テストの実行 (git, subversion, ...) (jenkins, ...) 3.インスペクションの実行 (コードの解析) 4.デプロイ 1.開発/検証/パッチレビュー (パッケージ作成など) 2.プライベートビルド 5 (開発環境でのビルド)
  • 14. ビルドの種類 プライベートビルド インテグレーションビルド リリースビルド  種類  プライベートビルド  インテグレーションビルド  リリースビルド  実行される場所や内容が異なる  迅速なフィードバックを得られるようにするため 6
  • 15. ビルドの種類 - プライベートビルド プライベートビルド インテグレーションビルド リリースビルド  開発環境でのビルド  リポジトリに変更をコミットする前に実行する  個人(開発者)向け  ビルドの範囲  コンパイル  軽量なテスト(単体テスト)  実行時間の目安  10分以内 7
  • 16. ビルドの種類 - インテグレーションビルド(1/3) プライベートビルド インテグレーションビルド リリースビルド  インテグレーションサーバーでのビルド  開発チーム向け  分類  コミットビルド  2次ビルド 8
  • 17. ビルドの種類 - インテグレーションビルド(2/3) プライベートビルド インテグレーションビルド リリースビルド  コミットビルド  リポジトリに変更がコミットされる度に実行される  ビルドの範囲  コンパイル  軽量なテスト(単体テスト)  実行時間の目安  10分以内 9
  • 18. ビルドの種類 - インテグレーションビルド(3/3) プライベートビルド インテグレーションビルド リリースビルド  2次ビルド  コミットビルドが成功した後に実行される(場合によって日次/週次)  ビルドの範囲  コンパイル  軽量なテスト(単体テスト)  重量なテスト(統合テスト/システムテスト/受け入れテスト)  インスペクション  デプロイ  実行時間の目安  10分∼数時間以内 10
  • 19. ビルドの種類 - リリースビルド プライベートビルド インテグレーションビルド リリースビルド  リリース前に行うビルド  ユーザ(顧客)向け  ビルド範囲  コンパイル  テスト  単体テスト/統合テスト/システムテスト/受け入れテスト  性能テスト/負荷テストを含めることも  インスペクション  デプロイ  実行時間の目安  インテグレーションビルドと同様 + α 11
  • 21. 継続的インテグレーションの価値  検証コストの削減  ビルドの自動化による恩恵  常にデプロイ可能なソフトウェアを提供できる  迅速なフィードバックによりバグの混入∼修正まで短時間で  失敗したら最優先で直す  修正/機能追加を自信を持って行える  既存のテストを壊してないかすぐ分かる 12
  • 22. 継続的インテグレーションの価値  検証コストの削減  ビルドの自動化による恩恵  常にデプロイ可能なソフトウェアを提供できる  迅速なフィードバックによりバグの混入∼修正まで短時間で  失敗したら最優先で直す  修正/機能追加を自信を持って行える  既存のテストを壊してないかすぐ分かる 品質の高いソフトウェアへ 12
  • 23. 継続的インテグレーションの懸念点  CIシステムの構築が大変?  出来ればプロジェクトの初期から導入するのが望ましい  プロジェクトの途中から導入する場合はやや大変  自動化に必要な機能開発など  段階的導入を検討する ‒ 日次ビルド、コンパイルと単体テスト∼  ハードウェア/ソフトウェアの費用は?  削減できる検証コストに比べれば微々たるもの  開発環境で走らせれば良いのでは?  クリーンなビルド環境は重要です  プライベートビルドが通っても、インテグレーションビルドが通ら ないこともあります(迫真) 13
  • 24. 継続的インテグレーションの導入 Jenkins Travis CI  インテグレーションサーバーのセットアップ  Jenkins  Travis CI  ビルドの自動化 1. コンパイル 2. テスト 3. インスペクション 4. デプロイ 14
  • 25. Jenkins - セットアップ Jenkins Travis CI  Jenkins  インストール  起動  ブラウザ経由でポチポチ設定  リポジトリの場所の登録  ビルドスクリプトの登録  ビルド結果の通知方法の設定  ビルド結果もブラウザで確認できる  プラグインも豊富  続きは  Jenkins実践入門  Jenkins ユーザ・カンファレンス 2012 東京 15
  • 26. Jenkins - 色々なフィードバック手段を試してみる Jenkins Travis CI  フィードバック手段  メール  光(ランプ)  音  タスクバー、Growl  ブラウザのプラグイン  いつ、だれに、何をフィードバックするのかを考慮しつつ決める 16
  • 27. Jenkins - 最近リリースされたDashbozu Jenkins Travis CI  今回は試す時間が確保できず...紹介のみ 17
  • 28. Travis CI Jenkins Travis CI  Travis CI  継続的インテグレーションを提供するサービス  オープンソース向け  GitHubと連携  http://travis-ci.org/  ※公式対応言語に注意(C++とかD言語とか公式対応してません)  セットアップ 1. GitHubとの連携を許可 2. リポジトリ毎にTravisの有効/無効を設定 3. ビルドスクリプトを書いてリポジトリにコミット  .travis.ymlをリポジトリのトップディレクトリへ  pficommonをforkして登録してみた  http://travis-ci.org/#!/eiichiroi/pficommon 18
  • 29. 継続的インテグレーションの導入 コンパイル テスト インスペクション デプロイ  インテグレーションサーバーのセットアップ  Jenkins  Travis CI  ビルドの自動化 1. コンパイル 2. テスト 3. インスペクション 4. デプロイ 19
  • 30. ビルドの自動化 - 1.コンパイル コンパイル テスト インスペクション デプロイ  コンパイル手順の自動化  waf  autotools  make  rake  ant  (言語やプロジェクトに応じて選択) 20
  • 31. ビルドの自動化 - 2.テストの実行 コンパイル テスト インスペクション デプロイ  テストフレームワーク  Google Test, Boost.Test  (言語やプロジェクト、テストの種類に応じて選択)  テストの実行範囲が重要  迅速にフィードバックを得られるように、分類して実行範囲を絞る  段階的にテストを実施すると良い  軽量なテスト  単体テスト  重量なテスト  統合テスト/システムテスト/受け入れテスト/...  データベースのセットアップなどが必要になることも多い 21
  • 32. ビルドの自動化 - 3.インスペクションの実行(1/2) コンパイル テスト インスペクション デプロイ  ソースコードの静的解析・動的解析  コーディング規約違反の検出(cpplint)  コピペの検出  各種コードメトリクスの計測  クラス数  メソッド数  テストの網羅率(カバレッジ)  注意点  解析をして終わりにしない。何かしらの対処を行う  コーディング規約違反を直す  コピペは共通化できるなら直す  カバレッジが低いところを補強する 22
  • 33. ビルドの自動化 - 3.インスペクションの実行(2/2) コンパイル テスト インスペクション デプロイ  pficommonのカバレッジを測定してみた  gcc + gcov + lcov  スクリプト  https://gist.github.com/2643761  結果  http://eiichiroi.github.com/pficommon/  network...(^p^)...pull requestお待ちしております 23
  • 34. ビルドの自動化 - 4.デプロイ コンパイル テスト インスペクション デプロイ  ソフトウェアを利用可能な状態で提供すること  デプロイ対象のプラットフォームごとに  (テストやインスペクションの実施)  パッケージの作成  設定ファイルの準備  ...  継続的にデプロイまで行うのは割と大変  短期間でのリリースを行う場合はほぼ必須になる 24
  • 35. テスト 単体テスト 統合テスト システムテスト 受け入れテスト  テストのないコードはレガシーコード!  ソフトウェアの品質を担保するために必要  テストの分類(IEEE標準規格)  単体テスト  統合テスト  システムテスト  受け入れテスト  注意  組織によっては分類が少ないことも コンパイル 単体テスト 統合テスト システムテスト 受け入れテスト インスペクション デプロイ プライベートビルド コミットビルド 2次ビルド リリースビルド 25
  • 36. 単体テスト 単体テスト 統合テスト システムテスト 受け入れテスト  個々のコンポーネントに対して個別に行うテスト  コンポーネント 車の場合  関数 エンジン  クラス キャリブレータ 他のエンジン部品  ...ねじ?  テストする人 燃料モジュール 空気モジュール  各コンポーネントの開発者 ねじ1 ねじX 何か ねじ1 何か  優れた単体テスト  実行速度が速い(1テスト0.1秒では遅い)  問題箇所の特定がしやすい 26
  • 37. 単体テストの例: pficommon 単体テスト 統合テスト システムテスト 受け入れテスト 27
  • 38. 単体テストの例: pficommon 単体テスト 統合テスト システムテスト 受け入れテスト  文字列をbase64エンコードする関数  テストコード 27
  • 39. 単体テストの注意点 単体テスト 統合テスト システムテスト 受け入れテスト  単体テストではないもの  外部リソースに依存するテスト  データベース/ネットワーク/ファイルシステムにアクセスする  →モックオブジェクトなどで分離  細かいテクニックはレガシーコード改善ガイドを参照  ソフトウェアを変更するにはテストが重要  テストのない状況からテストを整備していく方法  依存関係を排除するテクニック集 28
  • 40. 統合テスト 単体テスト 統合テスト システムテスト 受け入れテスト  システムの一部を対象とするテスト  複数のコンポーネントが依存関係を持つテスト  外部リソースへ依存するテスト  データベース/ネットワーク/ファイルシステムにアクセスする 車の場合  テストする人  開発チームの人 エンジン  優れた統合テスト キャリブレータ 他のエンジン部品  網羅率が高い 燃料モジュール 空気モジュール  単体テストと統合テストの境界  ソフトウェアの規模による ねじ1 ねじX 何か ねじ1 何か  テストの実行時間が十分少ないときには分けないことも 29
  • 41. 統合テストの例: pficommon 単体テスト 統合テスト システムテスト 受け入れテスト  pfi::text::jsonのテスト  pficommon/src/text/json_test.cpp  粒度が粗めのテストが多い  pfi::data::serializationのテスト  pficommon/src/data/serialization_test.cpp  色んな型の変数をファイルへシリアライズしている  興味ある型はgithubを見てください 30
  • 42. システムテスト 単体テスト 統合テスト システムテスト 受け入れテスト  システム全体を対象とするテスト 車の場合  UIやAPIを経由してテストする 車  テストする人  テストチーム 駆動装置 HVAC 他の車体部品  優れたシステムテスト  幅広いテスト エンジン トランスミッション  機能/負荷/性能テストなど キャリブレータ 他のエンジン部品  統合テストとシステムテストの境界  ソフトウェアの規模によって変わる  何を「システム」と定義するか?サブシステムに分割することも  統合テストとシステムテストを合わせて結合テストと呼ぶことも?  組織によって違ったりしてカオス 31
  • 43. 受け入れテスト 単体テスト 統合テスト システムテスト 受け入れテスト  ユーザの要件を満たしているかどうかのテスト  アルファテスト  開発者側で行う受け入れテスト  ベータテスト  顧客側で行う受け入れテスト  ユーザビリティのテストなども行う  テストする人  顧客  顧客層を代表する人  顧客やソフトウェアのユースケースを良く理解している  優れた受け入れテスト  実環境とテスト環境が同じ  ハードウェア/ソフトウェア/データ/人 32
  • 44. まとめ  継続的インテグレーション  概要/流れ/価値/懸念点/導入  テスト  単体テスト/統合テスト/システムテスト/受け入れテスト  結論  継続的インテグレーションとテストは重要  検証コストの削減  常にデプロイ可能なソフトウェアを提供できる  修正/機能追加を自信を持って行える  段階的にでも良いので導入しましょう 33
  • 45. 参考文献  継続的インテグレーション入門  やや古くなっているが、まとまっている  Jenkins実践入門  Jenkins導入するなら  体系的ソフトウェアテスト入門  テストプロセス、テスト計画、テスト実行  レガシーコード改善ガイド  開発者は読むべき 34
  • 46. Copyright © 2006-2012 Preferred Infrastructure All Right Reserved.

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n