RAD Studio で実践する 継続的インテグレーション アプリとデベロッパーの価値 を拡張するエッセンス 長沢 智治 テクニカル エバンジェリスト アトラシアン株式会社 re-workstyle.com @tomohn
ビジネスとアプリケーションの進化 90s 00s Business 10s Business Business Apps Apps Apps C/S コード品質 開発者中心 分業 Web サービス サービス品質 開発チーム中心 分業から協調 マルチデバイス + サービス ビジネス品質 開発と運用 協調
BUILD LEARN Business Apps MEASURE
Feedback loop Deployment Small Batch Production Ready Acceptance Test DVCS Retrospective Burn down Scrum DoD Agile Task Board Backlog Pair Programming Business Apps Value Up Time Box extreme Programing CI TDD Design for Operations DevOps MTTR Customer needs Service Desk Cloud Cycle Time
Continuous I ntegration
継続的インテグレーション CI: Continuous Integration アプリケーション作成時の 品質改善や納期の短縮のための習慣のことです ウィキペディア XP のプラクティスの一つでビルドやテスト インスペクションなどを継続的に実行していく ことを意味する
品質改善 納期の短縮 継続的 ビルド 習慣
習 慣 ソフトウェア開発における心臓はなにか チームの循環器はなにか
ソフトウェア開発 アイデアを価値に転換する Software Delivery
開発とビルドのリズムとコスト 1 : 10 : 100 の法則 1 開発: コスト ビルド: コスト 10 テスト: コスト 100 テストを書こう頻繁にコミットしよう (DVCS)
開発とビルドのリズムとコストの蓄積 1 : 10 : 100 の法則 開発: コスト 1 ビルド: コスト 10 テスト: コスト 100
開発とビルドのリズムとコストの改善 1 : 10 : 100 の法則 1 開発: コスト ビルド: コスト テスト: コスト 1 10 10 100 継続的ビルドによる品質改善とデリバリーの短縮
開発とビルドのリズムからデプロイのリズムへ Deploy 1 : 10 : 100 の法則 開発: コスト ビルド: コスト テスト: コスト 1 1 10 10 100 デプロイ: コスト 100
Deploy DEVELOPMENT TESTING PRODUCTION
Deploy DEVELOPMENT TESTING PRODUCTION
Deploy DEVELOPMENT TESTING PRODUCTION
開発とビルドのリズムからデプロイのリズムへ Deploy DEVELOPMENT TESTING PRODUCTION
開発者のコード変更は直接デリバリーへ Deploy 継続的インテグレーション VCS + CI (+BTS/ITS) アイデアとバグを コードに転換 DEVELOPMENT TESTING デプロイの自動化 リリース管理 手を抜けないコード の品質の作りこみ PRODUCTION フィードバックの 収集と適切な反映
開発者のコード変更は直接デリバリーへ Deploy 1 : 10 : 100 の法則 DEVELOPMENT 開発: コスト TESTING 1 1 ビルド: コスト 10 PRODUCTION 5 テスト: コスト 100 10 デプロイ: コスト 100
開発者とアプリ 要求とコードとビルドをつなぐ Deploy 開発者同士: DEV ITS/BTS VCS TEST PROD CI チーム同士: 開発者と デザイナー テスター マネージャー ITS/BTS 利害関係者: 開発チームと 企画 運用 顧客 ITS/BTS DEPLOY
開発者とアプリ 要求とコードとビルドをつなぐ Deploy 開発者同士: DEV ITS/BTS VCS TEST PROD CI チーム同士: 開発者と デザイナー テスター マネージャー ITS/BTS 利害関係者: 開発チームと 企画 運用 顧客 ITS/BTS DEPLOY
開発者とアプリ 要求とコードとビルドをつなぐ Deploy 開発者同士: DEV DVCS リポジトリ 継続的インテグレーション 技術依存しない自動ビルドツール ビルド管理 開発者と デザイナー テスター マネージャー BST / ITS: 要求 バグ タスクの追跡, 変更管理 利害関係者: ドキュメントやソースコードの変更要素 (Issues) の追跡と管理 各種の成果物の粒度の調整と各成果物をつなぐ重要な役割 開発者とアプリの価値をわかりやすく示すのに欠かせない 開発チームと 企画 運用 顧客 PROD DVCS クライアント 無償のデファクトスタンダード チーム同士: TEST コードレビューや連携可能 なリポジトリ管理 継続的デプロイメント 自動デプロイとデプロイ状況の管理 ライブ ドキュメント共有 企画や仕様書を陳腐化させない ドキュメントから協調 思考と経験の形式知化 チーム内外のコミュニケーション インフラ タイムラインでアクティビティを通知 対処の円滑化
Demo
開発者とアプリ 要求とコードとビルドをつなぐ Deploy 開発者同士: DEV DVCS リポジトリ 継続的インテグレーション 技術依存しない自動ビルドツール ビルド管理 開発者と デザイナー テスター マネージャー BST / ITS: 要求 バグ タスクの追跡, 変更管理 利害関係者: ドキュメントやソースコードの変更要素 (Issues) の追跡と管理 各種の成果物の粒度の調整と各成果物をつなぐ重要な役割 開発者とアプリの価値をわかりやすく示すのに欠かせない 開発チームと 企画 運用 顧客 PROD DVCS クライアント 無償のデファクトスタンダード チーム同士: TEST コードレビューや連携可能 なリポジトリ管理 継続的デプロイメント 自動デプロイとデプロイ状況の管理 ライブ ドキュメント共有 企画や仕様書を陳腐化させない ドキュメントから協調 思考と経験の形式知化 チーム内外のコミュニケーション インフラ タイムラインでアクティビティを通知 対処の円滑化
開発者とアプリ 要求とコードとビルドをつなぐ Deploy RAD Studio (Delphi, C++er) でのテスト 開発者同士: チーム同士: 開発者と デザイナー テスター マネージャー 利害関係者: 開発チームと 企画 運用 顧客 テスト容易性の高い設計と実装 TEST(MVC, PROD MVVM) DEV ビューとロジックの分離 デバッグ実行 テスト テスティング フレームワークの活用 DUnit DVCS クライアント DUnitX 継続的インテグレーション 無償のデファクトスタンダード 技術依存しない自動ビルドツール DUnit ビルド管理 DVCS リポジトリ DUnit: xunit 互換の Delphi ユニットテスト 継続的デプロイメント コードレビューや連携可能 自動デプロイとデプロイ状況の管理 なリポジトリ管理 RAD Studio で標準搭載 IDE からのテスト実行に特化 BST / ITS: 要求 バグ タスクの追跡, 変更管理 GUI とコマンドライン実行 ドキュメントやソースコードの変更要素 (Issues) の追跡と管理 各種の成果物の粒度の調整と各成果物をつなぐ重要な役割 テスト結果は対話的 (ログなし) 開発者とアプリの価値をわかりやすく示すのに欠かせない ライブ ドキュメント共有 企画や仕様書を陳腐化させない ドキュメントから協調 思考と経験の形式知化 チーム内外のコミュニケーション インフラ タイムラインでアクティビティを通知 対処の円滑化
開発者とアプリ 要求とコードとビルドをつなぐ Deploy DUnit でのテストの作成 開発者同士: ウィザードによるテストの作成 DEV DVCS リポジトリ 継続的インテグレーション 技術依存しない自動ビルドツール ビルド管理 開発者と デザイナー テスター マネージャー BST / ITS: 要求 バグ タスクの追跡, 変更管理 利害関係者: ドキュメントやソースコードの変更要素 (Issues) の追跡と管理 各種の成果物の粒度の調整と各成果物をつなぐ重要な役割 開発者とアプリの価値をわかりやすく示すのに欠かせない 開発チームと 企画 運用 顧客 PROD DVCS クライアント 無償のデファクトスタンダード チーム同士: TEST コードレビューや連携可能 なリポジトリ管理 継続的デプロイメント 自動デプロイとデプロイ状況の管理 ライブ ドキュメント共有 企画や仕様書を陳腐化させない ドキュメントから協調 思考と経験の形式知化 チーム内外のコミュニケーション インフラ タイムラインでアクティビティを通知 対処の円滑化
開発者とアプリ 要求とコードとビルドをつなぐ Deploy DUnit でのテストロジックの記述 開発者と デザイナー テスター マネージャー procedure TestTCalc.TestAdd_Case1; var TEST PROD DEV _result : System.Integer; y: System.Integer; x: System.Integer; begin DVCS クライアント テスト対象の実行 無償のデファクトスタンダード 継続的インテグレーション x := 1; 技術依存しない自動ビルドツール y := 1; ビルド管理 DVCS リポジトリ 継続的デプロイメント コードレビューや連携可能 _result := atcalc.add(x, y); 自動デプロイとデプロイ状況の管理 なリポジトリ管理 CheckEquals(x+y, _result); end; BST / ITS: 要求 バグ タスクの追跡, 変更管理 利害関係者: ドキュメントやソースコードの変更要素 (Issues) の追跡と管理 各種の成果物の粒度の調整と各成果物をつなぐ重要な役割 開発者とアプリの価値をわかりやすく示すのに欠かせない 開発者同士: チーム同士: 開発チームと 企画 運用 顧客 テスト対象の検証 ライブ ドキュメント共有 企画や仕様書を陳腐化させない ドキュメントから協調 思考と経験の形式知化 チーム内外のコミュニケーション インフラ タイムラインでアクティビティを通知 対処の円滑化
開発者とアプリ 要求とコードとビルドをつなぐ Deploy DUnit でのテストの実行 開発者同士: テストの実行 TEST PROD DVCS クライアント 無償のデファクトスタンダード チーム同士: DEV DVCS リポジトリ 継続的インテグレーション 技術依存しない自動ビルドツール ビルド管理 開発者と デザイナー テスター マネージャー BST / ITS: 要求 バグ タスクの追跡, 変更管理 利害関係者: ドキュメントやソースコードの変更要素 (Issues) の追跡と管理 テスト結果がファイルに出力できない 各種の成果物の粒度の調整と各成果物をつなぐ重要な役割 開発者とアプリの価値をわかりやすく示すのに欠かせない 継続的インテグレーションで検証困難 開発チームと 企画 運用 顧客 コードレビューや連携可能 なリポジトリ管理 継続的デプロイメント 自動デプロイとデプロイ状況の管理 ライブ ドキュメント共有 企画や仕様書を陳腐化させない ドキュメントから協調 思考と経験の形式知化 チーム内外のコミュニケーション インフラ タイムラインでアクティビティを通知 対処の円滑化
開発者とアプリ 要求とコードとビルドをつなぐ XMLTestRunner2.pas の読み込みにより NUnit 互換ファイルを出力 開発者同士: チーム同士: Deploy DUnit でのテストロジックの記述 TEST PROD DEV unit TestTCalcUnit; interface uses TestFramework,, XMLTestRunner2; DVCS クライアント 無償のデファクトスタンダード type 継続的インテグレーション 技術依存しない自動ビルドツール // テストメソッド ビルド管理 DVCS リポジトリ 開発者と デザイナー テスター マネージャー BST / ITS: 要求 バグ タスクの追跡, 変更管理 利害関係者: ドキュメントやソースコードの変更要素 (Issues) の追跡と管理 各種の成果物の粒度の調整と各成果物をつなぐ重要な役割 開発者とアプリの価値をわかりやすく示すのに欠かせない 開発チームと 企画 運用 顧客 コードレビューや連携可能 なリポジトリ管理 継続的デプロイメント 自動デプロイとデプロイ状況の管理 Initialization RegisterTest (TestTCalc.Suite);! With XMLTestRunner2.RunRegisteredTests do Free; ライブ ドキュメント共有 end. 企画や仕様書を陳腐化させない ドキュメントから協調 思考と経験の形式知化 チーム内外のコミュニケーション インフラ タイムラインでアクティビティを通知 対処の円滑化
開発者とアプリ 要求とコードとビルドをつなぐ Deploy 開発者同士: 1 DEV 開発者と デザイナー テスター マネージャー 利害関係者: 開発チームと 企画 運用 顧客 PROD 企画 アイデアの顕在化と実施計画 DVCS クライアント 無償のデファクトスタンダード チーム同士: TEST 2 継続的インテグレーション 技術依存しない自動ビルドツール ビルド管理 プロジェクト計画とタスクの割り出し DVCS リポジトリ コードレビューや連携可能 なリポジトリ管理 継続的デプロイメント 自動デプロイとデプロイ状況の管理 BST / ITS: 要求 バグ タスクの追跡, 変更管理 ドキュメントやソースコードの変更要素 (Issues) の追跡と管理 各種の成果物の粒度の調整と各成果物をつなぐ重要な役割 開発者とアプリの価値をわかりやすく示すのに欠かせない ライブ ドキュメント共有 企画や仕様書を陳腐化させない ドキュメントから協調 思考と経験の形式知化 チーム内外のコミュニケーション インフラ タイムラインでアクティビティを通知 対処の円滑化
開発者とアプリ 要求とコードとビルドをつなぐ Deploy DEV 開発者同士: 開発者と デザイナー テスター マネージャー 利害関係者: 開発チームと 企画 運用 顧客 PROD DVCS クライアント 無償のデファクトスタンダード チーム同士: TEST 3 継続的インテグレーション 技術依存しない自動ビルドツール ビルド管理 開発作業の 起動 DVCS リポジトリ コードレビューや連携可能 なリポジトリ管理 継続的デプロイメント 自動デプロイとデプロイ状況の管理 4 BST / ITS:開発の実施 要求 バグ タスクの追跡, 変更管理 ドキュメントやソースコードの変更要素 (Issues) の追跡と管理 各種の成果物の粒度の調整と各成果物をつなぐ重要な役割 開発者とアプリの価値をわかりやすく示すのに欠かせない ライブ ドキュメント共有 5 継続的インテグレーション 企画や仕様書を陳腐化させない ドキュメントから協調 思考と経験の形式知化 チーム内外のコミュニケーション インフラ タイムラインでアクティビティを通知 対処の円滑化
開発者とアプリ 要求とコードとビルドをつなぐ Deploy DEV 開発者同士: 開発者と デザイナー テスター マネージャー 開発チームと 企画 運用 顧客 PROD DVCS クライアント チーム同士: 利害関係者: TEST 無償のデファクトスタンダード 継続的インテグレーション DVCS リポジトリ 技術依存しない自動ビルドツール ビルド管理 DEV コードレビューや連携可能 なリポジトリ管理 自動デプロイとデプロイ状況の管理 継続的デプロイメント BST / ITS: 要求 バグ タスクの追跡, 変更管理 ドキュメントやソースコードの変更要素 (Issues) の追跡と管理TEST 各種の成果物の粒度の調整と各成果物をつなぐ重要な役割 開発者とアプリの価値をわかりやすく示すのに欠かせない ライブ ドキュメント共有 企画や仕様書を陳腐化させない ドキュメントから協調 思考と経験の形式知化 チーム内外のコミュニケーション インフラ タイムラインでアクティビティを通知 対処の円滑化 PROD
We Software
We Software
We Software
アトラシアンの文化を体験しに 遊びに来てください マリノスタウン内 Google Maps: アトラシアン 最寄り駅: 各線 横浜駅から徒歩 10分 みなとみらい線 新高島から徒歩 5 分
アトラシアンの文化を体験しに 遊びに来てください We Software
We Software
: Twitter: tnagasawa@atlassian.com @tomohn Facebook: Tomoharu.Nagasawa