スクラムでデザインをどのように扱いますか?


26

スクラムでデザインをどのように扱いますか?スクラムの繰り返しごとに十分に書かれた設計文書がまだありますか?UMLダイアグラムをフィーチャーした設計ノートを作成するだけですか?または、よくコメントされたコードがありますか?

各イテレーションにはデザインの変更が含まれる場合があるため、新しい開発者がドメインを理解し、できるだけ早く参加できるようにするため、人々がこれをどのように捉えるかを知りたかっただけです。


設計は、スプリントの前と最中の両方で、チームが段階的に処理する必要があります。ほとんどのチームは、今後のバックログアイテムを確認するための継続的なアクティビティとして、バックログの改良を取り入れています。これは、チームが労力を見積もるのに十分なソリューションを設計および設計するのに最適な時期です。作成されたアーティファクトはすべてストーリーに添付する必要があります。スプリント中に、よりきめの細かいアーキテクチャと設計アクティビティが発生するはずです。これらのアーティファクトも添付します。ストーリーが完了すると、提供されるソリューションに関する豊富な情報が得られるはずです。
treefiddy

回答:


11

スクラムだからといって、すべてのスプリントがすべて変わるというわけではありません!

スクラムとは、必要なこと(しかしそれ以上)を実行することです。設計を行う必要があり、ドキュメントを作成する必要があります。その量は固定されておらず、その方法も固定されていません。

各スプリントの計画の一部は、何をする必要があるかを決定することです。バックログが何かに影響を与えるために設計する必要がある場合、設計プロセスに特定のタスクを追加し、実装タスクの前にそれを行う必要があります。


9

私はこのトピックについて多くのことを述べています。企業/チーム/人々がソフトウェアにアジャイルアプローチを使用していると言っている多くのケースを見てきましたが、実際には、彼らはアジャイルメソッドが原則を遵守せずに約束する報酬を獲得したいと考えています。

迅速な反復が機能するためには、テスト駆動開発を行う必要があります(不本意ながらTDDを行う必要があると言って間もなく停止しました)。TDDでは、テストはコードの設計と意図を表現します(「コードはドキュメントです」と言うとき、彼らが言うべきことは「テストはドキュメントです」)。手元の機能の理解を表す単体テストを記述することにより、コードが実行する必要があると思われることを明示的に示します。次に、それを行うコードを記述します。次に、適切なアーキテクチャプリンシパル「Red-Green-Refactor」に準拠するように、そのコードをリファクタリングします。

すべてのチェックインで(またはすべてのチェックインの前でも)ユニットテストを実行すると、作成した新しいコードがアプリケーションの他の領域で予期される機能を壊さないことが確認されます。これにより、問題なくコードを変更できるセーフティネットが提供されます。手元の要件に対する理解が深まると、その新しい知識を反映するようにテストを変更できます。実際の設計は、単体テストにあります。他のすべて(カバーされていないコードを含む)は嘘です。

ここにいくつかの推奨読書があります

これらは、アジャイル開発に真にアプローチする方法を学び始めるのに適した場所です。


4
@Murph:アイデアは、アーキテクチャが新しく、前もって定義するのではなく、テストを通じて見つける必要があるということです。
マーティンウィックマン

5
@Martinちょっと見ますが、まだ規模の恐ろしい問題があります。私はある程度まではそれで満足していますが、それ以上...スクラムレベルの開発に到達する前に、おそらくそれを行った(または少なくとも最初の構造を得た)と思います(ここで、高レベルのアーキテクチャと低レベルのアーキテクチャを改善および進化させるチーム)。
マーフ

2
@Murph:はい、ブートストラップは問題です。少なくともプログラミング言語を選択する必要があります。スケーラビリティやパフォーマンスなどの非機能要件はアーキテクチャに大きく影響するため、できるだけ考慮に入れる必要があります。しかし、それとは別に、できるだけシンプルに始めてから、作業フィーチャ(yagni)をスライスごとに段階的に繰り返し追加します。リファクタリングに集中して、コードベースをクリーンに保ち、デザインが表示されるまで内容を抽出します。
マーティンウィックマン

1
スクラムが反復的である理由は、ソフトウェアの性質上、初めて正しく動作しないことを意味します。多くの場合、利害関係者は、彼らの前に何かを持っているまで、彼らが本当に欲しいものを知りません。優れた点:フィーチャの設計を作成するのに何時間も費やし(改良する必要があるか、ゴムが舗装にぶつかると廃棄される可能性が高い)、その設計を実装者に伝えます。またはそれらの時間を費やして機能の最初のパスを実装し、テストとリファクタリングを通じて改善します。
マイケルブラウン

3
ところで、テストが予期せず赤くなるまでは、TDDの真の価値に気付くことはありません。それがTDDでの大きな「あは」の瞬間でした。赤になったばかりのテストを見ると、テストがなければ、コードがテスターの手に渡った後にバグを追跡することは非常に困難だったはずだということがわかりました。高レベルのトップダウンアーキテクチャを確認する必要がある場合は、コードからシーケンス図とクラス図を生成できる多くのツールがあります。それらを使用して、スナップショットレポートを取得し、それらが法律ではないため、破棄します。
マイケルブラウン

2

スクラムはプロジェクト管理の方法論であり、ソフトウェア開発の方法論ではありません。スクラムは通常、アジャイル手法と組み合わせて使用​​されます。そこにあなたの答えがあります。


4
スクラムはアジャイルな方法論であり、開発チームとステークホルダーに焦点を当て、作業コードの反復配信を取得します。トップダウンのプロジェクト管理とスクラムは、石油と水のようなものです。
マイケルブラウン

1
@Mikeは同意しましたが、私は常にスクラムはプロジェクトマネージャーのアジャイル手法であり、エクストリームプログラミングは開発者のアジャイル手法であると感じてきました。とはいえ、スクラムがソフトウェア以外の多くのプロジェクトに適用されているのを見てきました。興味深いことに、ウィキペディアはこのスクラムの定義を提供します。スクラムは、ソフトウェアエンジニアリングの一種であるアジャイルソフトウェア開発でよく見られるプロジェクト管理の反復的で増分的な方法論です。en.wikipedia.org / wiki / Scrum_( development
-ahsteele

2
私が誤ってあなたのコメントを却下したことに気付いたのですが...というわけではありません。あなたがマイナーな編集をしない限り、彼らはその投票を削除させません。スクラムがプロジェクト管理方法として説明されるのを見たことはありません。面白い。そうは言っても、TDDを適用せずにソフトウェアでスクラムが機能することを期待することが、「アジャイルを実行する」ための多くの試みが失敗する理由だと思います。
マイケルブラウン

1

要件が頻繁に変わるほど、前もって設計されているわけではありません。そのため、通常、クラスレベルまで設計することは時間の無駄です。ただし、より高いレベルのアーキテクチャ上の決定をスケッチする価値はあります。

ヘビーデューティな設計ドキュメントを作成する際の問題は、作成されてすぐに廃止されることです。したがって、最も効果的に機能するのは、通常、短時間で完全に変更される可能性の低い高レベルのドキュメントです。


1
要件が常に変化しているとは言いません。スプリント中の実際の要件は静的で変更されていません。各スプリントの後、要件の優先度を再評価できます。全体的な目標を変更することはありません。
マーティンヨーク

@マーティン良い点。私は彼らがスクラムからスクラムに変わっていると言い換えるべきだと思います。
ヴァディム

1

スクラムは、アジャイル値に基づいた反復的で増分的なモデルです。つまり、個別の設計段階はありません。アイデアは、あなたがすべきことである常にあなたが常にプロジェクト全体の分析、実装、テスト、および統合を扱っているのと同様に、デザインを扱うこと。

これを機能させるには少し計画が必要です。入力スプリント計画会議のチームが先にスプリントのためのタスクを推定し、。ほとんどの人は、これが推定会議であるだけでなく、設計作業でもあることに気づいていません。たとえば、タスクは「新しい車のモデルのコードを追加する」かもしれません。これはまだ推定できません。もう少し知る必要があります。そのため、チームは設計について議論し、広範なソリューション(「サブクラスカー?」)を考え出し、それをタスクのリマインダーとして追加します。あなたはそれ以上の形式を必要とすることはめったにありません。これで、問題の解決方法がわかりました。まだすべての詳細を把握しているわけではなく、それで十分です。十分な設計を知っているので、快適に見積もることができます。ダイアグラムをまったく作成する必要はありません(この時点で)。

実際の物理的なドキュメントについては、すべての人が見ることができるように壁にシステム概要図を作成することをお勧めします。概要には、最も重要なクラスとモジュールを含めるだけでよく、ほとんど更新する必要はありません。また、システム内の最も重要なクラスの状態図をいくつか作成することは非常に役立ちます。一般的なユースケースのいくつかの選択シーケンス図を振りかけ、人々が物事がどのように接続されているかをすばやく簡単に確認できるようにします。コードからクラス階層図を生成できるため、この問題は簡単に解決できます。

すべての図は、実際の実装後に作成されることに注意してください。これは、「包括的なドキュメントよりも機能するソフトウェア」とジャストインタイムの設計を維持しています。

そして、はい、読み取り可能なコードは間違いなくドキュメントです。


1

プロジェクトの全体的なアーキテクチャと高レベルの設計は、プロジェクトオーナーがストーリーを作成するときにスクラムチームの外部で行われます。

ストーリーと顧客の期待との関係を理解できるように、あらゆる形式で書き留めた全体的な設計が十分に必要です。

各ストーリーに必要な設計の一部は、計画中に計画し、製品所有者と交渉する際に行われます。

ストーリーの設計作業の大部分はスプリントで行われます。

ストーリーの見積もりが十分に定義されていない場合、現在のスプリントにタイムボックスを確保して、後のスプリント用に適切なストーリーを作成できる十分な設計作業を行うことができます。


0

私の理解では、プロジェクトの開始時に収集する事前要件を使用して、より高いレベルの設計を行うということです。この設計をよく文書化します。

次に、実際に要件を実装するときに、必要に応じて下位レベルの設計を変更しますが、上位レベルの設計は変更しません。

とにかく、それが5分前にとにかく私に説明された方法です...


0

現在、Eclipseコミュニティ内では、モデルがコード/開発を推進するMDDに焦点を当てた従来のUMLツールと、モデルだけでなく、反復が開発プロセスを推進すべきであると考えるOmondoとの間で分裂しています。

MDDはがらくたであり、UMLは他のチームメンバーと通信するために標準化するため、本当に優れた方法であるため、私は彼らに同意します。 代替テキスト

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