複雑な処理を伴うアプリケーションにアジャイルをどのように適用できますか?


12

アジャイルに関する文献のほとんどは、ユーザーが舞台裏で何が起こっているかをかなり認識しているCRUDタイプのビジネスアプリケーションに偏っているようです。(書かれているコードのほとんどはおそらくこのクラスに属しているため、それは問題ありません。)

このタイプのアプリケーションでは、ユーザーストーリー(要件)と開発タスクの関係はほとんど単純です。ユーザーストーリーをいくつかのタスクに分割するだけです。

しかし、ほとんどのコードがユーザーに直接見えない複雑な処理を処理しなければならない別のタイプのアプリケーションがあります。例は次のとおりです。

  • コンパイラー
  • 自動運転車の画像解析システム
  • 流体シミュレーションシステム

ここでは、タスクとユーザーストーリーを関連付けるのが非常に難しくなる可能性があります。この問題を克服するためのテクニックはありますか、それを受け入れてそれを最大限に活用しなければならないのでしょうか?


6
ダウンボッターではありませんが、質問が誤った前提に基づいているためだと思います。IMOの複雑なシステムは、より複雑であるという事実により、アジャイルスタイルの開発により適しています。システムが複雑になるほど、新たな要件が発生する可能性が高くなります。アジャイルSwDevは、新たな要件をより適切に処理するために作成されました。
ラバーダック

4
@RubberDuck:「質問が誤った前提に基づいているためだと思います。」:IMO、これは、誤った前提が説明されており、ダウン票ではないという答えを動機付けます。
ジョルジオ

使用法がロジックを理解しているかどうかは、アジャイルプロセスとはまったく関係ありません。ユーザーストーリーを実装にマッピングし、その所要時間を見積もることはチーム次第です。それが複雑で、かつ/または多くの作業がある場合、チームはストーリーを小さなストーリーに分割できます。ロジックのタイプは重要ではありません。
マーティンマート

2
「アジャイルに関する文献のほとんどは、CRUDタイプのビジネスアプリケーションに偏っているようです」–また、Javaに関する文献のほとんどは、コンソールに文字列「Hello World」を印刷する(またはn番目のフィボナッチ数を計算する)傾向があります。だからと言って、Javaが唯一のメリットがあるというわけではありません。理由はどちらの場合も同じです。現実的な例をブログの投稿やチュートリアルで説明するのは難しいです。[注:これは、誤った前提の根拠を説明しようとする双曲線コメントです。]
ヨルグWミットタグ

1
アジャイルはタスクとユーザーストーリーを必要としません。任意の形式の仕様を使用できます。全体のポイントは柔軟性です。
フランクヒルマン

回答:


9

これは私が計画したよりも長いことが判明しました(コメントとして開始されました)が、追加された長さ/詳細が役立つことを望み、それらが正当化されることを見つけます。

アジャイルはCRUDアプリに固有のものではありません

アジャイルに関する文献のほとんどは、ユーザーが舞台裏で何が起こっているかをかなり認識しているCRUDタイプのビジネスアプリケーションに偏っているようです。(書かれているコードのほとんどはおそらくこのクラスに属しているため、それは問題ありません。)

これは、このタイプのわかりやすいサンプルを作成する方が簡単だからだと思いますが、方法論がそうした種類のシステムを対象にしているからではありません。それほど簡単ではない例を作成すると、読者がアジャイルの概念について読者に教えることになっているときに、読者が例を理解しようとして動けなくなる危険があります。

ユーザーストーリー!=要件

このタイプのアプリケーションでは、ユーザーストーリー(要件)と開発タスクの関係はほとんど単純です。ユーザーストーリーをいくつかのタスクに分割するだけです。

ユーザーストーリーは要件と同じではありません。確かに、要件がどの程度「高レベル」であるかに応じて、いくつかの重複がありますが、一般的には同じではありません。私は以前のマネージャーの多くが陥った同じ落とし穴に陥っているという印象を受けます。ユーザーストーリーを単に「要件」の同義語として考えることです。 SVNの観点から考える。(それらは、悪い開始前提のために問題に遭遇します。)

私見、要件とユーザーストーリーの主な違いは、要件が特定のシステムコンポーネントの動作方法を詳細に指定することです。それらは、入力、出力、仮定/前提条件、発生する可能性のある例外などを含む仕様です。システムが何をするかに焦点を当てています。

OTOH、ユーザーストーリーは、システムコンポーネントの詳細な動作仕様を作成しようとせずに、エンドユーザーに期待される結果に焦点を当てています。期待されるユーザーエクスペリエンスに焦点を当てています

かつてこれが私のチームが採用したプラクティスでしたが、ユーザーストーリーをタスクに分解することでした。あなたのタスクはあなたが望む/必要とする特定または曖昧なものかもしれませんが、それらはストーリーを完了状態にするために行われた実際の作業の進行状況を示すためのものでした。

チームの全員が作業の重複を避けるためにどのTCに取り組んでいるかを認識できるように、ユーザーがテストケースを自己割り当てする必要があった数年前に働いていた米国を大まかに思い出します。UIは(n内部)Webアプリケーションでした。ユーザーはボタンを見ただけですが、ストーリーはいくつかのタスクに分割され、いくつかの技術的な実装の詳細などが含まれていました。

ユーザーの可視性

しかし、ほとんどのコードがユーザーに直接見えない複雑な処理を処理しなければならない別のタイプのアプリケーションがあります。

何らかの方法でユーザーに見えるようにすることは可能ですか?

GPSを検討してください。ターンを逃した場合、実際のルートの再計算プロセスは表示されませんが、ユーザーには有用なフィードバック(「再計算中...」など)が表示されます。

コンパイラは、警告またはエラーを表示したり、ユーザーに新しいものが追加されたことを確認するためにGUIに新しい設定/オプションを含めることができます。コンパイラのユーザーはプログラマーになると思いますか?新しい標準のサポートが追加されないでしょうか?

新しい標準をサポートすることはありそうになりながら、機能レベルとユーザーストーリーに分解する必要があるでしょう、あなたが作っていてください、少なくともいくつかのケースでは、あなたがあなたの代わりに機能を使用しなければならないときの話を使用しようとしていない、ということ?

自動車での画像分析は、自動車事故で終わる可能性が減少したことをユーザーに知らせる方法で表現できます。例えば:

自動運転車の乗客として、認識されていない物体に衝突して事故を引き起こす可能性ができるだけゼロに近くなるように、私はより安全に旅行できるようにする必要があります。

その米国は、セキュリティ、安全性などを含む機能要件と非機能要件の組み合わせを使用して、通常指定しなければならないものを高レベルでキャプチャします。

ただし、要件はシステムに関するものである場合があります。例えば:

abcコンポーネントの関数Aは、ゆっくりと動くオブジェクトをより適切に検出するために、画像比較アルゴリズムで許容しきい値を小さくする必要があります。

私にとって、これは簡単だろうタスク何かのよう題した私は上記のユーザーストーリーの下で、:機能の低下の許容A.abcし、それに他の関連する詳細情報が含まれています。

流体シミュレーションシステムの場合、理にかなっている場合は、システムが実行しているバックグラウンドタスクに関するフィードバックを提供するプログレスバーを使用することもできます。(ユーザーに何かを知らせる方法は常にありますが、スパムにならないようにしたい場合があります。)

あなたが言及した特定のドメインについて十分に知らないので、より良いおよび/またはより現実的な例を考え出すことができますが、ここでテイクアウトがある場合は、目に見えないものについてユーザーフィードバックを提供するさまざまな方法を使用できることですシステムが実行している可能性があります。つまり、見えないものをもう少し見えるようにする方法があるかもしれません。(たとえあなたの努力などによってシステムのパフォーマンスがどれだけ速くなったかを文書化した一連のリリースノートを書くことに要約したとしても)

ストーリーとタスクの関係

ここでは、タスクとユーザーストーリーを関連付けるのが非常に難しくなる可能性があります。

私たちのアプローチは、ユーザーのストーリーを、リクエストが何であるかなぜ行われたのか、米国を「完了」と見なすために真実である必要があるものに焦点を当て続けることでした。どのようには常に米国の除外と開発者(複数可)に残っていました。

開発者は、米国で説明されている問題を、彼らが取り組む一連のタスクに分解します。

これは、ほとんどの場合、バックエンドのサーバー側のプログラミングを行った人としてこれを言っています。

何をする必要があるかにもよりますが、AJAXを使用して単純な「読み込み中...」のアニメーション/ gifを表示し、ユーザーが間違った印象を与えずに他の何かが完了するまで少し待つ必要があることを認識しました。時にはそれはこれほど簡単でした。このためのタスクが適切です。

異なるパラダイム、実践、および経験

この問題を克服するためのテクニックはありますか、それを受け入れてそれを最大限に活用しなければならないのでしょうか?

パラダイムシフトを受け入れ、練習し、経験を積んだだけでなく、おそらく言うまでもありません。私はよく、プロセスを通してショートカットをとろうとしている人を見ました。特にあなたが始めているならば、私はそれに対してアドバイスをしたい。経験を積むにつれて、ある程度の柔軟性を持たせることができますが、自分自身を損なうことは避けてください。

以前の言い回しを考えると、あなたはまだ物語を「改名された要件」であるかのように考えていますが、これは間違った仮定だと思います。これは、アジャイルと非アジャイルのアプローチの根本的な違いに関するより深い問題の症状だと思います。

第二に、アジャイルはウォーターフォールと比較してパラダイムシフトであるということを受け入れるべきだと思います。つまり、プロセスには同様の目標がありますが、それらは非常に異なる方法で実行されます。(SVN対Gitを考えてください。それが役立つ場合。)

要件とユーザーストーリーの概念的な違いについての現在の理解を改善し、それらが同じものではないことを受け入れてください。

スプリントから学ぶ-回顧

私が十分に強調できないのは、各スプリントの終わりにスクラムマスターと開発者が回顧することです。それは彼らが正直に/透明な方法で「うまく行った」または「うまくいかなかった」ことを議論する場所であり、「うまくいかなかった」ポイントに対処するために次のスプリントにどのような実行可能な変更が実装されるか。

これにより、お互いの経験から適応し、学ぶことさえできました。それを知る前に、チームの速度の一般的な一貫性によって測定されるように、大幅に改善しました。


「ユーザーストーリー!=要件」:2つが同義語であると言うつもりはありませんでした。すべての要件がユーザーストーリーではありません。しかし、すべてのユーザーストーリーは要件だと思います。要件は、ユーザーストーリーが特定の詳細レベルの1つである階層構造と見なしています。同意しますか?
フランクパファー

@FrankPuffer要件の階層内の異なるレベルのようにユーザーストーリーを表示することは、基本的に異なる概念を混合していると思います。アジャイル側では、階層はテーマ>>エピック>>機能>>ユーザーストーリー>>タスクのように見えます。要件は通常、従来のウォーターフォールアプローチでは機能的要件と非機能的要件に分けられますが、実際の階層には出会っていません。そうは言っても、誰かが要件を再帰的に小さな「サブ」要件に分解しても驚かないでしょう。いずれにせよ、あなたは異なる概念を混ぜています。
code_dredd

PTC Integrityのような要件管理システムは、要件を階層として扱います。これは、要件を仕様文書にマッピングする際に利点となります。
フランクパファー

@FrankPufferうん、だから私は驚かないと言った。とはいえ、私の答えがあなたにとって何かを明確にしたのだろうかと思います。SVNとGitの類推は役に立ちましたか?(これは、両方のシステムに精通していることを前提としています。これは、ソフトウェア開発のコンテキストでは合理的と思われます。)
code_dredd

わかりました、「しない」を「する」と誤読します。そして、はい、私はあなたの答えがとても役立つと思います、そして、おそらくそれを受け入れるでしょう。ユーザーストーリーを要件として考慮しないという考え方に慣れるには、おそらく少し時間が必要でしょう。
フランクパファー

4

これらの場合には、アジャイルの原則を確実に適用できます。どうやって?

  • コンパイラは、後で別のユーザーストーリーで新しい言語機能を追加できます
  • 画像分析システムは、異なる画像分類として追加された新しい機能を持つことができます
  • 流体シミュレーションシステムは、シミュレーションでさまざまなモデルの側面を考慮することができます

象を一口で食べる必要はありません。アジャイルは、象の次のサービングの前にプレートをきれいにしたことを示すように頼みます。


それでも、多くのいわゆるベース機能を必要とする1つ以上のユーザーストーリーが残ると思います。彼らはしばしば単一のスプリントに収まらないでしょう。これはどのように処理する必要がありますか?
フランクパファー

1
顧客がテスト、表示、またはタッチできる実行可能なアプリケーションで成功を測定します。その場合は、そのような方法で進歩の感覚を生み出すおもちゃを彼らに与えてください。たとえば、おそらく最初のスプリントで自動運転車をリリースすることはできませんが、あなたのアルゴリズムがどのように人を偵察するかをデモすることができます。後で、信号と動物をどのように検出するか。後で距離、サイズなどを測定する方法...自動運転車は、遠く離れて、遠く離れて、それが起こるかどうかを知っているリモートスプリントです。
ライヴ

2
@ Laiv:それはいいだろうが、それが動作するかどうかはわかりません。実際には、最初の数回のスプリントの後、ソフトウェアは顧客が関係できることは何もできなくなります。技術的な進歩はありますが、不可能ではないにしても、それを顧客に伝えるのは難しいでしょう。
フランクパファー

2
どうして?それはあなたのプロジェクトとは無関係の誰かがストーンに書いたからですか 私は、アジャイルが自分のニーズに適応することを期待しています。4週間でスケートを教えることができると言っても、5日に一度立っても失敗する場合、それはスケートを学んでいないことを意味しますか?それとも、もう少し長くかかりますか?アジャイルマニフェストは石の上に書かれておらず、スクラムのルールは傾向の戒めです。
LAIV

2
スプリントのポイントは、顧客をイテレーションの一部にすることです。提供されたコードを使用して通信します。計画や約束ではありません。問題の解決に集中する必要があります。あなたが最初に配達するものが石に固まっている必要はありません。すべてのスプリントを支払う価値があることを証明する必要があります。
candied_orange

1

ユーザーストーリーに厳密に従う人は、バックエンドの技術的な変更がユーザーに影響を与える非常に愚かな方法を思い付くという非常に愚かな練習に従事するだけであることがわかりますユーザーとデータ分析パイプラインの複雑な変更などについて話している場合)または「この作業をどのように整理するのか!」

明らかな解決策は、より実用的であることだと思います。仕事が本質的に非常に技術的であり、ユーザーに特に顕著な影響がない場合は、その方法を説明しようとして眠りに落ちないでください。ユーザーに利益をもたらす明白でシンプルな方法を選択し、開発者が仕事をするために必要な詳細をストーリーに方向付けるだけです。絶対に必要なときに、POがストーリーに技術情報がないことを主張するとき、それは非常にイライラします。それは、そのアーティファクト(ストーリー)が実際に何であるかについての非常に全体的な見解ではありません。彼らは彼らのためだけに存在すると考えているように、ほとんどの場合、それはエンジニアにとっても重要です。

これらの技術的なタスクの大部分については、ユーザーへの影響に関して、それが効率を改善しているかどうか、または将来の配信がより高速になり、パフォーマンス、信頼性などを改善するかどうかに関して、いくつかの低い成果があります。彼らは、実際に人々が「ユーザーストーリー」を考えるときに考える傾向があるものではありませんが、ビジネスが技術的な負債やその結果を引き受ける理由を理解したい場合、これらの説明は通常提供するのが最も簡単です。

tl; drは、スクラムナジがあなたの人生を特別な困難にさせないようにしてください。単純に、スクラムナジはあまりにも正方形にすぎて適応できないからです。適応性があるということは、結局アジャイルの中核概念です。スクラムまたはアジャイルへの厳格な順守は、通常、顔または実用主義と実用性(実際に最もよく機能するもの)で飛びます。


私は柔軟であることがすべてですが、率直に言って、ユーザーはストーリーが満足される限り、技術的な詳細を特に気にしません。適切な要件を満たすために「厳密にアジャイル」である必要はありません。また、適切な要件とは、要件が満たされていることを明確に証明する受け​​入れテストを伴う要件を意味します。「非常に愚かなエクササイズに従事している」人々は明らかに間違っていますが、それは「厳格なスクラム」の概念に従っているという意味ではありません。
ロバートハーベイ

@RobertHarvey技術的な詳細はユーザーとは無関係であることに同意しますが、私のポイントは、ユーザーストーリーを含むアーティファクトの目的は、ユーザーにとって物事がどのように機能するかを伝えることよりも幅広い目的を持っていることです(少なくとも、そうすべきです)。純粋なユーザーストーリーを作成する場合、アーキテクチャ、拡張性、パフォーマンスなどに関連する要件をどのように実施しますか?純粋な「ユーザーストーリー」アプローチを採用すると、開発者は低品質のコードを書くようになります。そして、それは開発者やqaの「ユーザーストーリー」を読むユーザーではなく、技術的なものであるため、関連情報を意図的に除外するのは愚かです。
evanmcdonnal

0

問題はユーザーストーリーに彼らが持っていない意味を与えることにあると思います。スクラムでは、PBI、または製品バックログアイテムという用語を使用していますが、これは無限に優れていると思います。PBI 多くの場合、ユーザーストーリー形式に従います。たとえば、「サブスクライバーはサブスクリプションの詳細を表示できるようにする」などのPBIがありますが、「サブスクライバーの詳細を取得するストアドプロシージャを作成する」 「。

ユーザーストーリーはツールです。ユーザーの立場に立って機能の説明と要件を作成するのに役立ちます。しかし、写真を掛ける必要があるときにレンチが役に立たないように、ユーザーストーリーが不要な場合もあります。

そうは言っても、多くのチームは実際には「ユーザー」の部分で速くてゆるいプレーをしています。「開発者として、サブスクライバーの詳細を取得するためにストアドプロシージャを呼び出す必要がある」などの「ユーザーストーリー」があり、本質的には「開発者ストーリー」です。これは同様に有効なオプションですが、個人的には、何をする必要があるかを説明し、一連の受け入れ基準を考え出すことができる限り、実際のユーザーストーリーがあるかどうかはほとんど問題ではありません。


1
非常に奇妙でまれな場合を除いて、私はこれに同意しません。スクラムでは、HOWは開発チームの権限であり、製品の所有者ではありません。ただし、製品の所有者はPBIの責任を負う必要があります。そのため、「ストアドプロシージャを作成する」などのPBIは、開発チームからHOWを選択する権利を奪います。PBIは、ユーザーストーリーであろうとなかろうと、PBIを行うことのビジネス上の価値を説明する必要があります。ストアドプロシージャの作成はビジネス上の価値ではなく、実装の詳細です。
-RibaldEddie

それはポイントではありません。これはほんの一例です。「ストアドプロシージャ」を「a way」のような一般的なものに変更することができます。ポイントは、必ずしもユーザーストーリーである必要はないということです。
クリスプラット

例の要点は模範となることです。あなたの例が「ポイントではない」場合、その例のポイントは何ですか??
-RibaldEddie

-3

これらのタイプのアプリケーションは、異なる専門知識が存在し、さらに発展するものです。チームメンバーは、教育の違い、趣味のプロジェクトの違い、スキルの違いによる過去の職歴の違いによります。さらに、誰かが特定のコードを開発した場合、開発者はコードを最もよく知っている人になることが期待できます。したがって、同じコードを含む開発タスクを同じ開発者に提供することは理にかなっています。

最も一般的なアジャイルプロセスであるスクラムでは、各タスクに難易度が割り当てられたポーカーが計画されています。難易度は、プロセスに従ってそのタスクを実行している人に依存しません。次に、スプ​​リント中、人々は同種とみなされるため、各個人はすべてのタスクをすべて選択して実装できることが期待されます。プロジェクトのような単純なCRUDでは、この仮定が成り立ちます。しかし、非常に複雑で難しいプロジェクトでは、確かにそうではありません。

この種のプロジェクトにはアジャイルプロセスを使用しません。最良の選択は、正式なプロセスを避け、適切なプロジェクト管理を使用することです。特定の機能を実装するユーザーを決定するときは、この機能に必要な最高のスキルと、既存のコードに関する最高の知識を持っている人を検討してください。これにはプロセスは必要ありません。おそらく、すべての機能について適切な設計ドキュメントを作成し、それらを最新の状態に保つことをお勧めします。ここで滝のようなモデルを宣伝しているわけではないことに注意してください。プロジェクトの開始時に設計文書がすべて作成されるわけではありません。代わりに、新しい機能が必要になったときに新しい設計ドキュメントを作成します。


5
私の質問とはあまり関係ありませんが、常に最高のスキルを持つ人に機能を実装させることは危険です。チーム内の知識の広がりを妨げます。メンテナンスが必要で、専門家がチームを去ったか、一時的に利用できない場合は、トラブルが発生します。
フランクパファー

@FrankPuffer自動運転車など、リストに挙げた種類のシステムの場合、専門家がチームを離れると、問題が発生します。限目。おそらくコーディングを一元化する必要はありませんが、適切な「知識の広がり」を仮定して合理的な短い時間スケールで専門家の交代を可能にすることも完全に不合理です。これらは、問題の調査に10年以上費やしたことのある人々であり、おそらくその分野のトップに近いものです。おそらく、異なるスキルセットを持つこのような複数の人が必要になります。そのようなプロジェクトは本質的に危険です。
デレクエルキンズは
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.