2つの主なソフトウェア開発方法は、ウォーターフォールとアジャイルです。これら2つについて説明する場合、それらを区別する特定のプラクティス(ペアプログラミング、TDDなどと機能仕様、大きな事前設計など)に焦点が当てられることがよくあります。
しかし、実際の違いははるかに深く、これらの実践は哲学に由来しています。
ウォーターフォールは言う:変更はコストがかかるので、最小限に抑える必要があります。
アジャイルは言う:変更は避けられないので、変更を安くしてください。
私の質問は、TDDや機能仕様についてどのように考えているかに関係なく、ウォーターフォール開発方法論は本当に実行可能ですか?
ソフトウェアの変更を最小限に抑えることは、貴重なソフトウェアを提供することを望む人々にとって実行可能なオプションであると本当に誰もが考えていますか?それとも、避けられない変化を管理するために、どのような方法が私たちの状況で最も効果的に機能するかについての質問ですか?
もちろん滝は実行可能です。それは私たちを月に連れて行ってくれました!
そして、それはここで話しているアジャイルコーチです!
プロジェクトの管理方法に関連する問題を明確に特定できない限り、変更する正当な理由はありません。
AgileおよびWaterfall方法論の代替として、YOUR方法論を提案します。特定のビジネス、特定のチーム、あなたの製品、あなたの働き方、あなたの企業文化に適応...それが、スクラムが方法論ではなく simple framework と呼ばれる理由です。
あなたが好きなブログの誰かがそれについて話したので方法論を実装したいのは、何もせずに問題を進行させるのと同じくらい愚かです。
あなたは言うことから始めます:
2つの主なソフトウェア開発哲学は、ウォーターフォールとアジャイルです。
これは誤りです。この二分法は、自分自身を配置する相手を作成するために、アジャイルコミュニティによって構築されました。アジャイルが流行する前、人々はソフトウェアを構築するための無数の異なるアプローチについて話していました。それらは今日でも存在していますが、どういうわけか、アジャイルの支持者によって「ウォーターフォール」と呼ばれる大きな混乱にまとめられることがよくあります。
私は OPEN/Metis とそのバリアントを10年以上使用しており、大きな成功を収めています。これは明らかに俊敏ではなく、滝でもありません。何千人もの開発者が、非アジャイル手法を毎日使用して、航空機、生命にかかわるシステム、銀行などのための非常に複雑なソフトウェアを作成しています。
つまり、もちろん、アジャイルの実行可能な代替手段があります。
まず、あなたの発言に同意しません。
ウォーターフォールは言う:変更はコストがかかるので、最小限にすべきです。
アジャイルは言う:変更は避けられないので、変更を安くしてください。
私の解釈は:
ウォーターフォールは言う:顧客は彼らが欲しいものを知っています。
アジャイルは言う:顧客は何が欲しいかわからないので、いくつかの異なるバージョンを作成する必要があります。
私が今までに見た「ウォーターフォール」の最良の実装は、非常に大規模な金融顧客との巨大な統合プロジェクトであり、約40以上のサブプロジェクトが関与していました。私たちが提供したデスクトップとウェブサイトのパッケージは、40以上のサブプロジェクトの1つにすぎません。私は彼らが他の人のお金をかなり過剰に吹き飛ばしたと思っていましたが、彼らは彼らの物を持っていて、フォーメーションですべて一緒に動いていた40以上の異なる船を保ちました。プロジェクトは目標日に稼働し(目標はonceがプロジェクト中に移動しました)、私は彼らがより質素かつ機敏にそれを行うことができたと思いましたが、それは時間通りにそして仕様通りに行われました。稼働夜のスケジュールは約100ページの長さであり、それらのページの約40は、関係するあらゆる種類の人々の緊急パニック連絡先の詳細でした。私はこのクライアントに非常に感銘を受けました。
または、実行されていることを実行して、最新の苦情/バグレポートを実行し、that agileを呼び出すこともできます。
はい、問題のドメインによっては、さまざまなソフトウェア開発手法がすべて実行可能です。 「コースの馬」です。
たとえば、原子力発電所を制御したり、NASAスペースシャトルを運転したりするソフトウェアを書いているとします。この種の問題ドメインは、おそらくウォーターフォール(またはさらに厳密な)アプローチに適しています。可能であれば、すべての問題を事前に整理する必要があります(またはBOOM!)。
最新のWeb 2.0/3.0 /バジーマーケティング用語UIを構築していますか?アジャイルの方がはるかに良い方法です(迅速なフィードバックと変更が必要です)。
方法論がどのような場合でも適用できる、ソフトウェアの職人の技術の原則と呼べるものがあります。
もっと。
あなたが何をするにせよ、方程式のどちら側の熱狂者の言うことを聞かないでください。あなた、あなたのチーム、そしてあなたの問題領域にふさわしいことをしてください。
質問に答えるために、ソフトウェアのための実行可能な代替手段はありますか?少なくとも一般的なケースでは、おそらくまたはまだです。ソフトウェアの性質によると思います。ソフトウェアは情報であるため、無料で複製できます。橋や家とは異なり。つまり、練習すれば、家を建てるのが上手になり、比較的単純なドメインで操作できるようになります。どの時点でワンショットアプローチを使用しないのですか?
しかし、ソフトウェアの複製コストはゼロなので、なぜ同じことを2回行うのでしょうか。ソフトウェアは製造から離れる傾向があります。したがって、すべてのソフトウェアが新製品の作成である場合、私たちは常に、ある程度、私たちが何をしているのかわからない複雑なドメインで動作しています。または、事前に知ることは高価であり、実行して調べることは安価です。複雑でリスクの高いドメインでは、実験を試みて、増分して繰り返したいと思います。
原子力発電所やフライバイワイヤシステムは、ウォーターフォールを実行するソフトウェアの例としてよく示されます。しかし、シャトルアビオニクスシステムは繰り返し開発されたのではないでしょうか。カナダと米国の航空管制システムはどうでしたか?
そして、OPEN/Metisが反復的で段階的である場合、私にとっては、他の一般的なアジャイルプラクティスと関連付けられていなくても、アジャイル哲学を持っているように思えます。
問題はソフトウェアの複雑さに起因します。物理学は決して変化しないため、滝は橋の建設や道路の舗装などに最適です。もちろん、ある時点で新しいアスファルトを開発する予定ですが、道路の建設方法に革命をもたらすことはありません。橋のサスペンションの鋼は、適切なサイズかそうでないかのどちらかです。ソフトウェアでできるように、実際の建設プロジェクトをくずしたり、スタブしたりすることはできません。
ソフトウェアの変更。ソフトウェアは急速に変化します。ムーアの法則によれば、チップ上のトランジスタの数は18〜24か月ごとに2倍になります。当然、プログラムのコード行数も2倍になります。したがって、これらのコード行間の複雑さは、2 ^(2t)のようなbigOで増加します。
ソフトウェアは急速に変化し、それに伴って複雑さが指数関数的に増加します。
ソフトウェアのコストを制御するときは、乗法や加法だけでなく、指数係数を制御する必要があります。コードを変更すると、複雑さは指数関数的に増加します(プロジェクトが進むにつれて、それ自体も指数関数的に複雑になります)。
変更isは避けられません。プログラミングの本質は、クラスとカスタムメソッドで言語を拡張し、言語自体を変更します。他の種類の工学分野ではこれを行うことはできません(道路の建設など。カリフォルニア州カンザス州の道路を舗装するためだけに新しい舗装を発明することはありません)。
アジャイル方式は、将来のリリースとバグ修正を処理するためのプラットフォームも提供します。バージョン管理されたソフトウェアを開発するための管理ツール、プロセス、トレーニングを受けた従業員がすでにいます。ウォーターフォール方式では、マイナーなバグ修正を処理するためにチームを再トレーニングする必要があります。
とにかく、私の2セント。
ウォーターフォール方式は、確かに実行可能であり、他のアプローチと同じように哲学的に健全です。ウォーターフォールはアジャイルよりずっと以前から存在していることを覚えておいてください。ただし、これは、ある方法論が別の方法論よりも良いかどうかを述べるための議論ではないことに注意してください。
ウォーターフォール方式は、問題のドメイン全体と、ソフトウェアパッケージで顧客が達成したいことについて非常に明確に理解している場合に使用します。あなたはおそらく契約を結ぶときに固定価格を見積もったでしょう、そしてあなたの顧客は彼らが合意された要件から逸脱することができないことを理解しています。あなたのプロセスは厳密には、開発のさまざまな段階の間で一連の承認を通過するプロセスであり、各段階が異なるチーム(時には異なる会社)によって完了することがよくあります。他の人との接触。ウォーターフォールが外部の請負業者に入札された場合、軍や政府のプロジェクトに良い影響を与えることがよくあります。ウォーターフォールや他の類似のアプローチが悪い評判を得るのは、開発者が見積もりが不十分であったり、不測の事態なしに計画されたスケジュールであったり、問題ドメインの不十分または不完全な理解などの問題が発生した場合です。問題は決して方法論の誤りではありませんが、それを適用することです。
アジャイルと方法論の比較は誤ったものです。アジャイルは方法論ではなく、哲学です。あるいは、ソフトウェアの開発方法を検討する別の方法を表す包括的な用語であると言った方がいいでしょう。方法論は単なるツールであり、そのため、その価値は常に アジャイルであることの意味 の中心にある個人や相互作用よりも小さくなります。
ソフトウェアの変更を最小限に抑えることは、貴重なソフトウェアを提供したいという人にとって実行可能なオプションであると本当に誰もが考えていますか?
変更を最小限に抑えるあらゆる機会は、開発者と顧客の両方にとって貴重です。変更により、スケジュールが遅れたり、スケジュールを満たすために機能が省略されたりする可能性があります。プロジェクトの価値に影響を与える変更の影響を管理する方法です。
または、避けられない変化を管理するために、どのような方法が私たちの状況で最も効果的に機能するかについての質問は本当にありますか?
あなたの慣行は、変化の管理に役立つかもしれませんし、変化を完全に無視するかもしれません。重要なのは、開発プラクティスと顧客との関係の管理の組み合わせ、およびこれらすべてが関係者すべてに対して効果的に連携するかどうかです。
すべての目的と目的Agileを使用する私たちの人々は、あなたがあなたのために働く方法を選択することを理解しています。特定のアプローチが好きな場合は、それに従ってください。ニーズに完全に適合しない場合は、変更してください。ソフトウェアの作成方法は、手元にあるリソースを最大限に活用しようとすることと、プロジェクトを失敗に導く可能性のあるプラクティスを最小限に抑えることにかかっており、多くの場合、方法を変更して、手元にある特定のプロジェクト。
「OK、それで今、私たちはアジャイルです」と言うことは本当に一つであり、アジャイルが持つ哲学によって実際に生活し、働くことはまったく別のことです。ウォーターフォール、インクリメンタル、スパイラル、スクラム、XP、FDD、またはその他の方法を使用するかどうかに関係なく、基本的にはアジャイルを評価します。
そして、これらの価値をうまく適用するために、ツール、方法、そして経験をすべてまとめる場所です。
はい、ウォーターフォール、スパイラル、反復、その他のハイブリッドプロセスモデルはすべて実行可能ですが、変更は避けられません。プロセスとは、変化をどのように処理するかということだけではなく、(私はそうです)最大の決定要因は、問題をどのくらいよく理解/理解しているか、そしてどれだけ正確に計画および予測できるかです。
ソフトウェア開発プロセスにはスペクトルがあり、多くの企業が独自のバージョンのプロセスモデルを統合しており、特定のプロジェクトで変更されることが多いため、「2つの主なソフトウェア開発方法論はウォーターフォールとアジャイルである」と不快です。ソフトウェア開発には2つ以上の実行可能なアプローチがあります。ウォーターフォールとアジャイルは「変化」のスペクトルの反対側にある傾向がありますが、これらの競合する方法論を次のように分類することは合理的です。
ウォーターフォールは言う:変更はコストがかかるので、最小限に抑える必要があります。
アジャイルは言う:変更は避けられないので、変更を安くしてください。
しかし、それだけではありません。ビジネスは計画と予測ができる必要がありますが、ソフトウェアは創造的なプロセスであり、見積もりはしばしば間違っています。良い-速い-安い三角形を覚えていますか? 4番目のディメンションであるプロセスを追加すると、見積もりが間違っていてプロジェクトが遅れる危険がある場合に、プロセスの労力を減らすことでスケジュールを圧縮できることもわかります。ソフトウェアは変更可能な(変更可能な)プロセスであり、アジャイル、反復、スパイラルはすべて、より短い間隔で増分機能を提供する機能を提供します。
ウォーターフォールおよびその他の要件に基づくプロセスモデルには変更の処理に関するコントロールがあるため、ウォーターフォールが変更を最小限に抑えると言うのは不正確であり、ウォーターフォールが変更を認識して管理し、その変更の影響を伝えると言うのはより正確です(変更によりスケジュールの影響が生じるため、要件と設計を事前に用意します)。製品を構築しているとき、または要件(機能)を完全に定義する必要があるときは、ハイブリッドモデルの1つに駆り立てられます。
また、見積もりが間違っている場合は、プロセス(鉄の三角形の4番目のレッグ)がスケジュールに合わせて犠牲になることがよくあります。