スプリント間でビルドを実行する以外に、アジャイルプラクティスに利点はありますか?


9

私は最近、ソフトウェア開発のアジャイルプラクティスに興味を持ちました。それ以来、多くの記事で、これらのプラクティスにより全体的なコストを削減できることを指摘しました。

その背後にあるロジックは通常、次のようになります。要件が変更された場合、この変更を次のスプリントバックログに反映できます。これにより、新機能の設計と実装が時間的に近いため、コストの削減につながります。後で要件を変更する必要があるほど、その要件を満たすためにコストがかかるという有名なルールに従って、コストは下がります。

しかし、中規模から大規模のソフトウェアプロジェクトは複雑です。要件が突然変更されても、その要件を満たすためにシステムの他の部分に触れる必要がないわけではありません。多くの場合、アーキテクチャを大幅に変更する必要があります。つまり、古いアーキテクチャに依存していたすべての機能を再実装する必要があります。したがって、コスト削減の全体的な要点はここではなくなります。もちろん、新しい要件がシステムの新しい独立した部分を必要とする場合、それは問題ではなく、古いアーキテクチャが成長するだけなので、再考して再実装する必要はありません。

そしてその逆。ウォーターフォールを使用していて、新しい要件を導入する必要があることに突然気付いた場合は、デザインを変更できます。既存のアーキテクチャを変更する必要がある場合は、再設計します。それが本当にそれを台無しにせず、システムの新しい部分を導入するだけなら、あなたは行ってすべての仕事をします、ここでは問題ありません。

そうは言っても、アジャイル開発の唯一の利点は、スプリント間で機能を完全にビルドできることだけであるように思えます。多くの人やプロジェクトにとって、これは重要ではありません。さらに、アジャイルはソフトウェアアーキテクチャ全体で悪い結果を招くように見えます。機能が相互に平手打ちされるため、アジャイルチームは機能が機能するかどうかではなく機能が機能することのみを気にします。これは、システムが時間とともに複雑になると、アジャイル開発の実践により、製品アーキテクチャ全体の混乱が実際に増大し、最終的にコストが高くなります。なぜなら、ウォーターフォールにより、アーキテクチャを完成させることができるからです。あなたが何かを解放する前に。

明らかに、多くの人が実稼働環境でアジャイルを使用しているので、どこかで間違っているに違いありません。


あなたはポイントを持っています。「ウォーターフォール」という用語には、(ITにおける他の多くの用語のように)1つの普遍的な定義がないことを指摘しておきます。ほとんどの人は、要件の2000ページ全体が作成および署名されていない限り、コードを作成することはできないと考えています。これはまったくそうである必要はありません。
NoChance

ええ、「ウォーターフォール」とは、スプリントではなく、マイルストーン間の(基本的には)機能仕様->設計->コードの線形プロセスを意味します。そして確かに、2000ページの要件と技術仕様は必須ではありません。クラスの基本的な責任とそれらの相互関係は、多くの場合、トップレベルの設計として十分です。
tux91

3
@EmmadKareem:実際、Waterfall本体では、これがまさにその通りです。設計のすべての詳細が確定するまで、コーディングを開始しません。幸い、実際のウォーターフォールがソフトウェア開発に適用されることはほとんどありません。
tdammers

1
@tdammers、コメントありがとうございます。しかし、これは数回起こりました。ウォーターフォール方式には所有者がいないため、異なる方法で適用および解釈できます。これは方法論ではないためです。良い方法論に包まれたとき、ユーザーがシステムから必要なもののコアを知っているプロジェクトでは特に意味があると思います。
NoChance

@エマド・カリーム:私はあなたに同意します。アジャイル手法は、要件が明確ではなく、最終的な要件を取得するために多くのプロトタイピングとユーザーフィードバックが必要なプロジェクトに適しています。一方、コア要件が最初から明確である場合があります。これらの場合、アジャイルメソッドよりもウォーターフォール(途中で修正の余地あり)に似た開発メソッドを採用します。それは本当にあなたが取り組んでいるプロジェクトの種類に依存すると思います。
ジョルジオ

回答:


7

まず最初に、「ウォーターフォール」モデルは常に、ソフトウェア開発プロジェクトを実行しない方法を説明するわがままな人でした。調べる。

いずれにせよ、ほとんどの「ウォーターフォール」SDLCプロジェクトは、仕様に書き込まれた仮定がもはや有効でないことを人々が発見した場合(そしてこれは常に大規模で複雑なプロジェクトで発生します)に、「変更管理」プロセスを伴います。残念ながら、変更管理プロセスは例外処理手段として構築されており、非常に高額であるため、プロジェクトが遅れたり、品質が低下したりします。

アジャイルの方法論の背後にある考え方は、変化は当然のことであるということです。したがって、例外処理ではなく「変更管理」の標準操作を行う必要があります。これは簡単ではありませんが、多くの優れた設計手法を使用すれば実行できることがわかっています。

フロントロードデザインのもう1つの主要な問題は、(ほとんどの場合)要件の収集と設計に費やされる時間が多く、設計と開発とテストに時間がかかることです。また、テストが最後のフェーズであり、深刻な問題が発見された場合、時間内に修正される可能性はほとんどありません。

おそらく、アジャイルアプローチの最も優れた機能の1つは、ソリューションを開発しているチームとそれを必要とする顧客との間の継続的な対話(つまり、実際のコミュニケーション)を要求することです。優先度が高く、優先度の最も高いアイテムが最初に実行されます(時間がなくなると、優先度の低いアイテムがカットされます)。フィードバックはすぐに来ます。

劇的な変化の問題に戻ると、変化を軽減する方法を使用する必要があります。優れたSOLID OOプリンシパルは、ソフトウェアの回帰テストを実行できるように確実な自動テストスイートを構築できるのと同様に、これの良い役割を果たすことができます。方法論に関係なくこれらのことを行う必要がありますが、俊敏性を追求しようとする場合、これらは本当に不可欠になります。


まことにありがとうございます。アジャイルでデザインがどのように機能するか、なぜそれほど悪くないのかについての
記事を読みたい人の

8

まあ、いくつかの利点があります。1つは、顧客が仕様書を読まないことです。ずっと。ウォーターフォールは、誰もが最初から仕様にうまく同意することを想定しており、ソフトウェアが1年後に顧客に提供され、仕様が一致すると、彼らは満足するでしょう。実際には、顧客は、ソフトウェア自体を積極的に操作しているときに、本当に必要なもの、本当に必要なもの、そして別のものである必要があるものすべてを発見するだけです。アジャイルは顧客の手で機能するプロトタイプを手に入れるので、これらの切断はすぐにキャッチされます。アジャイルは、要件の変化に対応するだけではありません。また、変更のコストが高い最終的にではなく、変更のコストが低いときに、要件の変更を早期に発生させることも重要です。

2番目の利点は、アジャイルには目に見える成果物がよくあるため、プロジェクトが軌道に乗る可能性が低くなることです。大規模なウォーターフォールプロジェクトでは、実現することさえせずに遅れをとるのは非常に簡単です。滝はプロジェクトの終わりに数ヶ月の死の行進を作り出します。アジャイルを使用すると、数週間ごとに顧客に納品するので、誰もがプロジェクトの場所を正確に把握し、スリップをすばやくキャッチ(および調整)できます。私の経験では、Waterfallは数週間または数か月で、最終的に100時間の週を生成します。アジャイルとは、スプリントの最後に12時間を数日入れる必要があることを意味します。

3番目の利点は、アジャイルプロジェクトの方がやる気を起こさせる傾向があることです。1年にわたるプロジェクトで、人々があらゆる種類の意欲を持つことは非常に困難です。締め切りは遠く離れているように見え、即時性の欠如は、人々が先延ばしにしたり、過度に洗練されたデザインをしたり、さもなければ非常に生産的に機能しない傾向があることを意味します。最初の数か月は、仕様ドキュメントのように、人々がやりたくないことに費やされるため、これは特に当てはまります。アジャイルには、非常に近い将来に常に非常に即時の具体的な期限があるため、人々のモチベーションが高まる傾向があります。来週に予定されている一連のタスクの具体的な期限を先延ばしにすることははるかに困難です。


最初の議論は、まさにそれが私がアジャイルの印象を受けている理由です。絶えず変化する要件に対処する。また、要件を早期に変更することについては、手持ちのアーキテクチャに干渉して、既存のコードの多くを再実装するという大きな可能性があります。2番目の議論、ウォーターフォールプロジェクトが死の行進を引き起こす理由を詳しく説明してください。小さな規律と簡潔な技術仕様を組み合わせると、ここで不思議を感じるようです。3番目の引数、下から上にウォーターフォールプロジェクトを構築し、たまにそれを構築できることの問題は何ですか?
tux91

2
私のウォーターフォールプロジェクトの経験は、計画された時間の最初の90%は常に予定通りであり、その時点で突然数か月遅れているということです。すべてのスプリントでデモを主張するアジャイルのモデルでは、これが発生する可能性ははるかに低くなります。1週間半後に説明責任を負うことがわかっていると、通常、9か月後に説明責任を負うよりもやる気が高まります。それはただ人間の心理です。
Gort the Robot

1
まあ、私は経験で議論することはできないと思いますが、私の経験は少し異なっていますが、手作業でのコーディングの優れたデザインは、途中で多くの問題を抱えておらず、見積もりもかなり良いようでした。ウォーターフォールを使用した場合でも、結果として得られるアーキテクチャはより堅固になると私はまだ考えています。
tux91

2
顧客仕様を非常に注意深く読んでいるいくつかの領域(主に、鉄道信号、航空電子工学などの安全上重要な領域)があります。それらはかなりまれであり、とにかく大きく異なる開発方法論につながる傾向があります。
ドナルフェロー

4

質問からの引用に対して、これは反アジャイルな対戦相手の根本的な誤解です

「...ウォーターフォールでは、何かをリリースする前にアーキテクチャ完成させることができます。」誤解です。修正させてください。「...ウォーターフォールを使用すると、アーキテクチャ完成させることができるため、何リリースする必要がありません

ウォーターフォールがいかに高品質のアーキテクチャを提供するかということは、根本的に誤りであり、経験的な歴史的証拠によって完全に反証されています。

Facebookが5億人のユーザーを必要とするウォーターフォール方式で設計され、困難かつ高速な要件であり、サポートするアーキテクチャが完成するまでリリースされなかった場合、今日誰も聞いたことはありません。

YouTube、Twitter、そして無数の他の企業と同じです。

彼らは顧客が作業に触れて対応できる何かを得て、それをできるだけ早くリリースしました。彼らはフィードバックを得てそれを改良し、再びリリースしました。繰り返す。このように、これらの3つの例では、顧客が受け入れて欲しい機能だけで応答し、顧客がほとんどまたはまったく価値のないものに費やす時間をできるだけ少なくします。

何年にもわたるソフトウェア開発の経験を持つ人なら誰でも、完璧なアーキテクチャなどは存在しないことに同意するでしょう。他の選択肢よりもエントロピーと大きな泥の塊から遠くから始まるものだけです。アジャイルはこれを認め、考慮に入れます。プロセスに組み込むことで、これは技術的な負債として、迅速な優先順位付けとリファクタリングです。


3
「しない」という言葉を使用して、ウォーターフォールを使用して実行されたソフトウェア製品は存在しないと言っていますか?また、特定のマイルストーンに対する一連の要件があり、実装に成功した場合、何もリリースしないのはなぜですか?
tux91

1
@ tux91あなたは私のために私の主張をします。デザインが紙に入れられた直後にニーズが変更され、1行のコードが記述される前に廃止されたとしても、完璧なものはありません。したがって、私が引用したステートメントは誤りであり、アーキテクチャを完璧にすることは決してないため、何もリリースすることはありません。

1
@ tux91はまだ理解のために読んでいる、と私は言った、完璧なアーキテクチャはなく、引用のようにリリースするまでリリースしなければ、何もリリースされないでしょう。私はあなたが主張していることを言っていませんでした、これはあなたの頭とあなたの解釈にあります。私が言ったのは、ウォーターフォールが何らかの形でより良い品質のアーキテクチャを提供するというのは誤りであり、根本的に欠陥があるという主張です。そして、NASAと滝に関するこれらの議論とそうでないこと。プログラマーとは無関係であることに加えて、3人の宇宙飛行士を地上で殺害しました。輝かしいサクセスストーリーではありません。

1
@ tux91 wrtの「never」の使い方、私はここでジャロッドと一緒です:質問は「ウォーターフォールで完璧になる ...」と言っています -これは彼が完全に適切な(この非現実的な「完璧な」コンテキストでは)単語「never」で対抗します。私が賛成票を投じなかった唯一の理由は、建設的な質問ではない回答に対する投票を避けようとすることです
gnat

1
@gnatええ、私は「完璧」という言葉を使ったとき、私が実際には意味したくないと思っていなかったと思います
tux91

3

スクラムは一般的なフレームワークであるため、それ自体は技術的な慣行を規定していません。

アジャイルソフトウェア開発には、チームの卓越した技術が必要です。これは、XP(エクストリームプログラミング)の技術的な実践に基づいています。たとえば、リファクタリング、tdd、チーム全体、ペアプログラミング、インクリメンタルデザイン、ci、コラボレーションなどについて学ぶ必要があります。

このようにすることで、変更を迅速かつ安全に処理できるようになります。これは、そもそもアジャイル開発を使用する主な理由でもあります。

重要なアジャイルの1つの測定値は、定期的(毎週、隔週)に価値のある実用的なソフトウェアを顧客にリリースできるかどうかです。できますか?その後、あなたは私の本の中で機敏です。


ウォーターフォールベースのプロジェクトは変更が困難であることを意味するため、私はこの「変更を迅速かつ安全に処理することが可能」ではありません。何故ですか?それは単なるコードベースです。何を変更する必要があるかを指定し、それを設計して、それが既存のアーキテクチャ、コード、テスト、リリースにどのように適合するかを示します。それをスプリントと呼ぶのではなく、マイルストーンと呼んでください。アジャイルよりも時間がかかったり、アジャイルよりも難しいことはないようです。違いは、より慎重に計画を立てても、厳密にXPを行う必要がないということです。
tux91

@ tux91回答を更新しました。建築に関しては、26:20に「インクリメンタルデザイン」と呼んでいるものを読んだりたりすることをお勧めします。
マーティンウィックマン

2

私にとって、アジャイルの主な利点はプロジェクトのリスクを軽減することです。

反復的に配信し、ユーザーベースから多くのフィードバックを得ることにより、ユーザーが実際に必要なものを配信する可能性が高まり、最も重要な機能をできるだけ早く実用的に配信することでそれを実現できます。理論的には、これはより良い見積もりと計画で行われます。これは明らかにビジネスの観点から非常に魅力的です-リリース可能なビルドだけではありません。

この絶え間ない変化がシステムを危険にさらし、品質を低下させると主張するかもしれませんが、私は2つのことを言うでしょう。1)この変更は、従来のソフトウェアデリバリープロジェクトでとにかく発生します。これは説明されず、プロジェクトの後半で発生します。これは、ご指摘のとおり、物事を変更するのは困難でコストがかかる時期です。2)アジャイルは、経験豊富なやる気のある人とTDD、ペアリング、コードレビューなどのプラクティスを使用するという観点から、この変化への対処について多くのことを述べています。品質と継続的な改善に向けた考え方の変化がなければ、アジャイルが意味する頻繁な変更が問題を引き起こし始める可能性があることを受け入れます。


そう、まさにそれが滝の唯一の利点だと私が思うものです。ただし、開発段階にある製品を誰にも見せたくない場合もあります。製品の準備が整っていないため、まだセールスポイントがありません。または、最終的に何を構築したいかについてかなりしっかりした考えがある場合。テスト、ペアプログラミング、およびコードレビューは、全体的な製品アーキテクチャが優れていることを保証するものではありません。これらは、新しい機能が適切に動作することを保証するためだけに行われます。
tux91

1

多くの場合、アーキテクチャを大幅に変更する必要があります。つまり、古いアーキテクチャに依存していたすべての機能を再実装する必要があります。

要件の変更の結果としてアーキテクチャを大幅に変更する必要がある場合は、アーキテクチャまたは要件が不適切です。優れたアーキテクチャでは、可能な限り多くの決定を延期し、システムのコンポーネントを切り離すことができます。良い(ユーザー)要件は、「別のデータベースを使用する」ようなものではありません。

それでは、適切に機能するアーキテクチャーがあるという前提の下で操作してみましょう。その場合、アジャイル開発方法論は、大規模な先行設計方法論によってこの「洗い流し」を失うことになります。結局のところ、アジャイル開発方法論のコア機能は、コードの疎結合を促進するTDDのようなプラクティスであり、プロジェクトが最初に近いものから非常に成熟したものまで高速で継続できるようにします。


0

多くの場合、アーキテクチャを大幅に変更する必要があります。つまり、古いアーキテクチャに依存していたすべての機能を再実装する必要があります。したがって、コスト削減の全体的な要点はここではなくなります。

アジャイルプロセスに従うと、あまりにも多くのソフトウェアが開発される前に(そして変更が必要になる前に)この要求をキャッチできる可能性が高くなります。クライアントと協力せずに何かを見せずに数か月行くと、提供する準備ができていると「考えて」初めて、これらの主要なアーキテクチャ上の問題を見つけます。

コンパイルすらしない大量のコードよりも、テストカバレッジのある実際のアプリケーションにこれらの変更を実装したいと思います。テクニカルサポートの責任者として、開発に数か月かかっていたアプリケーションのCDを渡されましたが、インストールもできませんでした。最初の週にその問題を見つけることはできましたが、長い夜だったので、代わりにダイナーを注文する時がきました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.