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?

Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化dcubeio
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門Preferred Networks
 
ちょっと明日のテストの話をしよう
ちょっと明日のテストの話をしようちょっと明日のテストの話をしよう
ちょっと明日のテストの話をしようYasuharu Nishi
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方Shohei Koyama
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Shin Ohno
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~UnityTechnologiesJapan002
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編infinite_loop
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
Confluenceショートカットキー表 v1
Confluenceショートカットキー表 v1Confluenceショートカットキー表 v1
Confluenceショートカットキー表 v1Naho Inuyama
 
DockerからKubernetesへのシフト
DockerからKubernetesへのシフトDockerからKubernetesへのシフト
DockerからKubernetesへのシフトmasaki nakayama
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話Tier_IV
 
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション 【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション 日本マイクロソフト株式会社
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようShuto Suzuki
 
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方Shigenori Sagawa
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Takayuki Shimizukawa
 
チケット駆動開発の解説~タスク管理からプロセス改善へ
チケット駆動開発の解説~タスク管理からプロセス改善へチケット駆動開発の解説~タスク管理からプロセス改善へ
チケット駆動開発の解説~タスク管理からプロセス改善へakipii Oga
 

Was ist angesagt? (20)

Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門
 
ちょっと明日のテストの話をしよう
ちょっと明日のテストの話をしようちょっと明日のテストの話をしよう
ちょっと明日のテストの話をしよう
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
Confluenceショートカットキー表 v1
Confluenceショートカットキー表 v1Confluenceショートカットキー表 v1
Confluenceショートカットキー表 v1
 
DockerからKubernetesへのシフト
DockerからKubernetesへのシフトDockerからKubernetesへのシフト
DockerからKubernetesへのシフト
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話
 
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション 【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
 
チケット駆動開発の解説~タスク管理からプロセス改善へ
チケット駆動開発の解説~タスク管理からプロセス改善へチケット駆動開発の解説~タスク管理からプロセス改善へ
チケット駆動開発の解説~タスク管理からプロセス改善へ
 

Ä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
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployRyutaro YOSHIBA
 
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 智治 長沢
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をAtsuhiro Kubo
 
【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 Hiro Yoshioka
 
「継続的デリバリー」読書会 第3章 継続的デリバリー
「継続的デリバリー」読書会 第3章 継続的デリバリー「継続的デリバリー」読書会 第3章 継続的デリバリー
「継続的デリバリー」読書会 第3章 継続的デリバリーNorikazu Hiraki
 
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜Daiki Kawanuma
 
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略Naoki Umehara
 
VSUG Day 2010 Summer Tokyo - keynote
VSUG Day 2010 Summer Tokyo - keynoteVSUG Day 2010 Summer Tokyo - keynote
VSUG Day 2010 Summer Tokyo - keynoteTakeshi Shinmura
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Takako Miyagawa
 
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...NTT DATA Technology & Innovation
 
Vsug day2010 osaka_s1
Vsug day2010 osaka_s1Vsug day2010 osaka_s1
Vsug day2010 osaka_s1mizusawa
 
Vsug day2010 osaka_1
Vsug day2010 osaka_1Vsug day2010 osaka_1
Vsug day2010 osaka_1mizusawa
 
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 でみる、アジャイル開発における開発支援ツールの活用智治 長沢
 

Ä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

PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57Preferred Networks
 
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 東京ミートアップ #3Preferred Networks
 
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
 
深層学習の新しい応用と、 それを支える計算機の進化 - 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...Preferred Networks
 
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 #55Preferred Networks
 
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 #2Preferred Networks
 
最新リリース: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 #2Preferred Networks
 
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 #2Preferred Networks
 
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演Preferred Networks
 
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東大大学院「 融合情報学特別講義Ⅲ」)Preferred Networks
 
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)Preferred Networks
 
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)Preferred Networks
 
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 〜 コンテナ技術を語るPreferred Networks
 
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張Preferred Networks
 
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会Preferred Networks
 
続・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、ヤフー〜 #2Preferred Networks
 
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...Preferred Networks
 
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...Preferred Networks
 
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...Preferred Networks
 
独断と偏見で選んだ 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 50Preferred 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