質問

現在、私たちの組織は継続的インテグレーションを実践していません。

CI サーバーを稼働させるには、投資収益率を示す文書を作成する必要があります。

バグを早期に発見して修正することによるコストの削減とは別に、このドキュメントに記載できるその他のメリット/削減に興味があります。

役に立ちましたか?

解決

CIを好きのための私の#1の理由は、それが時にはチーム全体を損なうことができます壊れたコードをチェックインから開発者を防ぐのに役立つということです。私は重要なチェックイン、私は休暇のために残して右の前にいくつかのDBスキーマの変更を伴うを加えた場合を想像してみてください。確かに、すべてが私のdevのボックスに罰金を動作しますが、私がチェックインしたり、些細であってもなくてもよいDBスキーマchangescript忘れます。まあ、今オフィスにあるデータベースが、誰に新しい/変更されたフィールドを参照する複雑な変更があった次の日は、実際に新しいスキーマ、今チーム全体がダウンしていることながら、すでに行った作業を再現するに誰かのルックスとただでチェックするのを忘れています。

そして、はい、私は、DBの変更で特に厄介な例を使用しますが、それは本当に、何でもかまいません。おそらく部分的にチェックイン後、あなたの実際のエンドユーザーをスパムするために、あなたの開発者のすべての原因となるいくつかの電子メールで送信するコードと?あなたはそれに名前を付ける...

だから私の意見では、これらの状況の単一のものを回避することは非常に迅速に、このような努力の有料オフのROIを行います。

他のヒント

標準的なプログラム マネージャーと話している場合、単純な ROI の観点から継続的インテグレーションを理解するのが少し難しいと感じるかもしれません。特定のドルの投資と引き換えにどのような物理的な製品が得られるのかは、すぐには明らかではありません。

私がそれを説明する方法を学んだのは次のとおりです。「継続的インテグレーションは、プロジェクトからあらゆる種類のリスクを排除します。」

危機管理 これは、お金の使い道を心配するよりもコードを書くことに多くの時間を費やすソフトウェア エンジニアリングの通常の範疇から外れたプログラム マネージャーにとって、深刻な問題です。このような人々と効果的に協力するには、私たちが良いことだとわかっていることを、彼らが理解できる言葉で表現する方法を学ぶことが重要です。

このような会話で私が持ち出したリスクのいくつかを以下に挙げます。賢明なプログラム管理者であれば、最初の点以降の議論では私がすでに勝利していることに注意してください。

  1. 統合リスク:継続的インテグレーションベースのビルド システムでは、「長い週末に家に帰る前にファイルをチェックインするのを忘れた」などの統合の問題が発生して、開発チーム全体が金曜日の仕事全体を失う可能性ははるかに低くなります。このようなインシデントを 1 件回避することで得られるプロジェクトの節約 = チームの人数 (チェックインを忘れた悪役のためマイナス 1) * 1 日あたりの作業時間 8 時間 * エンジニア 1 人当たりの時給。このあたりでは、プロジェクトに請求されない数千ドルに相当します。ROI の勝利!
  2. 回帰のリスク:ビルドのたびに実行される単体テスト/自動テスト スイートを使用すると、コードの変更によって正常に機能していたものが壊れるリスクが軽減されます。これははるかに曖昧であり、確実性が低くなります。ただし、少なくとも、最も退屈で時間のかかる (つまり、費用がかかる) 人間によるテストの一部を自動化に置き換えるフレームワークを提供していることになります。
  3. テクノロジーリスク:継続的インテグレーションにより、新しいテクノロジー コンポーネントを試す機会も得られます。たとえば、最近、Java 1.6 アップデート 18 がリモート サイトへの展開中にガベージ コレクション アルゴリズムでクラッシュすることがわかりました。継続的統合により、アップデート 18 では機能しなかった場合でも、アップデート 17 に戻すと機能する可能性が高いと確信していました。この種のことを現金価値の観点から表現するのははるかに困難ですが、それでもリスクの議論を使用できます。プロジェクトの確実な失敗 = 悪い。グレースフル ダウングレード = はるかに優れています。
CIは、問題の発見を支援します。それはビルドを破損したり、コードの主要なバグを発見するのにかかる時間は現在の量を測定します。各開発者のための企業へのコストで、その時間枠の間にそのコードを使用していることを乗算。回数切れの数で年度中に発生していること。

乗算

あなたの数があります。

すべての成功したビルドがリリース候補である - 。あなたはずっと速くアップデートとバグ修正を提供することができるように

ビルドプロセスの一部は、インストーラを作成する場合は、

は、これも同様に迅速な導入サイクルを可能にします。

から ウィキペディア:

  • 単体テストが失敗したりバグが発生したりした場合、開発者はデバッグに時間を無駄にすることなく、コードベースをバグのない状態に戻すことができます。
  • 開発者は統合の問題を継続的に検出して修正し、リリース日の土壇場での混乱を回避します(誰もがわずかに互換性のない バージョン)。
  • 壊れた/互換性のないコードの早期警告
  • 競合する変更の早期警告
  • すべての変更の即時単体テスト
  • テスト、デモ、リリースの目的で「現在の」ビルドを常に利用できるようにする
  • 彼らが書いているコードの品質、機能、またはシステム全体の影響に関する開発者への即時フィードバック
  • 頻繁にコードチェックインすると、開発者がモジュラーで複雑でないコードを作成するようにプッシュすると
  • 自動テストと CI から生成されたメトリック (コード カバレッジのメトリック、コードなど) 複雑さと機能の完成度) は、機能的で質の高いコードの開発に開発者を集中させ、チームの勢いを高めるのに役立ちます
  • 最高の実用性を実現するには十分に開発されたテストスイートが必要

私たちは CI (1 日 2 回のビルド) を使用しているため、動作するコードをテストとリリースに利用できるようにしておく時間を大幅に節約できます。

開発者の観点から見ると、自動ビルド結果が電子メールで全世界 (開発者、プロジェクト マネージャーなど) に送信されると、CI は恐ろしいものになる可能性があります。など)、こう言います。 「DLL ロード中にエラーが発生しました。'XYZ.dll' のビルドに失敗しました。」 そしてあなたはミスターです。XYZ、そして彼らはあなたが誰であるかを知っています:)!

ここに私自身の経験から、私の例だ...

私たちのシステムは同じコードベースに取り組んで70以上のエンジニアで複数のプラットフォームと構成を持っています。私たちは、最も一般的に使用されるためあまり一般的に使用されるコンフィグのための60%のビルド成功の周りのどこかに、85%に苦しみました。コンパイルエラーやその他の障害について日常的に電子メールの定数洪水がありました。

私はいくつかの大まかな計算を行なったし、私たちは仕事の約10人日、毎日を合計悪いのプログラマあたりの一日のビルド時間の平均を失ったと推定しています。それがさらに私たちがかかり、それの安定した、場合、彼らは知らないので、プログラマが最新のコードに同期することを拒否したときの繰り返し時間内で発生コストの要因にはない。

チーム市が管理し、ビルドサーバのラックを展開した後、我々は今、すべてのconfigsの98%の平均成功率を参照して、システム内の平均的なコンパイルエラーが滞留分のない時間とエンジニアのほとんどは、今では快適な滞在していますコードの最新のリビジョンます。

一般的に、私は私達の全体的なコスト削減に保守的な見積もりは、CIを導入する前に、3ヶ月と比較して、プロジェクトの最後の3ヶ月の間に周りの時間の6人月だったと言うでしょう。この引数は、私たちは私たちの構築サーバーを拡張し、追加の自動テストに多くのエンジニアの時間を集中するためのリソースを確保支援してきました。

私たちの最大ゲインは、常にQAのためのナイトリービルドを持つからです。私たちの古いシステムの下では、各製品には、少なくとも週に一度、誰かが不正なコードをチェックインしたことが2AMで見つけるでしょう。これは、電子メールのエンジニアリングリリースを送信するために、救済策だったとのテストにQAのためのナイトリービルドが発生することはありません。彼らは問題を診断し、DEVに連絡します。 QAは、実際との仕事に何かを持っていた前に、時にはそれは正午限りました。今、毎晩のインストーラの良いを有することに加えて、我々は実際にVMのすべての異なるサポートされる構成の毎晩にインストールします。 QAが入ってくるときだから今、彼らは数分以内にテストを開始することができます。あなたは古い方法を考えるとき今、QAは、その後、開始テストを、すべてのVMを解雇、それをインストールし、つかんインストーラに来ました。私たちは、QA人あたりのテストにQAに設定につき、おそらく15分を保存します。

利用可能な空きCIサーバ、およびNAntのような無料のビルドツールがあります。あなたは利益を発見するためにあなたのdevのボックスにそれを実装することができます。

あなたがソース管理、バグ追跡システムを使用している場合は、

は、私はかなり説得力になることを一貫して(すべてのチェックイン後数分以内に)報告のバグへの最初であることを想像してみてください。それに独自のバグ率の低下を追加し、あなたはおそらく販売を持っているでしょう。

ROI とは実際には、顧客が望むものを提供する能力です。もちろん、これは非常に主観的なものですが、エンド顧客の関与を得て実装すると、顧客が得られるものに感謝し始めることがわかり、ユーザー受け入れ中に問題が少なくなる傾向があります。

  • コスト削減になるでしょうか?そうでないかもしれない、
  • UAT 中にプロジェクトは失敗しますか?絶対にいいえ、
  • プロジェクトは途中で終了してしまうのでしょうか?- これが提供されないことを顧客が見つけた場合、高い可能性が 期待される結果。
  • プロジェクトに関するリアルタイムの実際のデータを取得していただけますか - はい

したがって、失敗が早くなり、リスクを早期に軽減するのに役立ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top