web-dev-qa-db-ja.com

「アジャイル」チームに、彼らが書くソフトウェアを計画する必要があることをどのように説明しますか?

今週の仕事で、私はagiledを再び取得しました。標準のアジャイル、TDD、共有の所有権、カード上のいくつかのユーザーストーリーを超えて何も計画しないアドホック開発方法論を経て、実際に何もせずにサードパーティの統合アド吐気の技術を口頭でかむ過去数か月間、すべての製品コードを誰かの頭に浮かんだ最初のテストにアーキテクチャ的に結合して考えたりデューデリジェンスを行ったりすると、リリースサイクルの終わりに到達し、開発中の外部に見える主な機能が遅すぎるため、使用、バギー、迷路のように複雑になり、完全に柔軟性がなくなります。

このプロセスの間に「スパイク」は行われましたが、文書化されておらず、単一の建築設計も作成されていませんでした(FSがなかったので、何を開発しているか分からない場合、どのように計画または調査できますか) ?)-プロジェクトはペアからペアへと移り、それぞれが一度に1つのユーザーストーリーにのみ焦点を当てたため、結果は避けられませんでした。

これを解決するために、私はレーダーから出て、(恐ろしい)ウォーターフォールに行き、計画し、コード化し、基本的にペアを交換せずに、一人で作業できるように最大限に努力しました-単体テストではなく、堅牢なアーキテクチャと仕様に焦点を当てましたすべてが固定されると、後で来ます。コードははるかに改善され、実際に完全に使用可能で、柔軟で高速です。一部の人々は、これを行うことに本当に憤慨し、アジャイルの神聖なプロセスに反するため、(おそらく無意識のうちに)私の努力を妨害するために彼らの道を離れました。

では、開発者として、チームに作業の計画を立てるのは「アジャイルではない」と説明し、計画をアジャイルプロセスにどのように組み込むのでしょうか。 (私はIPMについて話しているのではありません。問題に腰を下ろし、問題に取り組む誰もが何を知っているかを十分に詳細に解決する方法を示すエンドツーエンドの設計をスケッチすることについて話している使用するアーキテクチャとパターン、および新しいコードを既存のコードに統合する場所)

50
user23157

すべてのプロジェクトに少し古典的な滝があるべきだと私は思います(私はここで手足を出しているかもしれません)。最初の分析と仕様のフェーズは不可欠です。あなたは自分が何をしているかを知る必要があり、それを書面で持っている必要があります。要件を書面で取得することは困難で時間がかかり、ひどく簡単に実行できます。だから多くの人はそれをスキップします-言い訳は「ああ、アジャイルを行うので、それをする必要はありません。」むかしむかし、アジャイルの前は、「ああ、私は本当に賢く、これを解決する方法を知っているので、それを行う必要はありません」でした。言葉は少し変わりましたが、歌は本質的に同じです。

もちろん、これはすべて強引です。何をすべきかを理解する必要があります。仕様は、開発者とクライアントが意図されていることを伝達できる手段です。

やらなければならないことがわかったら、アーキテクチャをスケッチします。これは「全体像を正しく把握する」部分です。ここには魔法の解決策はなく、正しい方法も、方法もありません。アーキテクチャはソリューションの合成であり、それらは部分的にインスピレーションを得た天才と部分的にハードウォンされた知識から生まれます。

これらの各ステップで反復が行われます。物事が間違っているか欠落していることが判明したら、修正します。それはデバッグです。コードが書かれる前に行われます。

一部の人は、これらの手順を退屈であるか、必要ではないと見なしています。実際、これらの2つのステップは、すべての問題を解決する上で最も重要です。これらを間違ってしまうと、その後のすべてが間違ってしまいます。これらの手順は、建物の基礎のようなものです。それらを誤解すると、ピサの斜塔があります。

WHAT(仕様)とHOW(アーキテクチャ-高レベルの設計)を取得したら、次にタスクを実行します。通常それらの多く。

好きなようにタスクをバストアップし、好きなように割り当てます。あなたが好きな、またはあなたに合った週の方法論を使ってください。そして、あなたがどこに向かっているのか、そして何を達成する必要があるのか​​を知って、それらのタスクを完了させてください。

その過程で、仕様やアーキテクチャーで誤った痕跡、誤り、問題が見つかるでしょう。これは次のようなことを促します:「まあ、その計画はすべてその時の無駄だった」どちらも雄牛です。それはあなたが後で対処するためのより少ない反則を持っていることを意味しました。初期のハイレベルなものに問題を見つけたら、修正してください。

(そして、ここでの副次的な問題:高価で困難、または不可能でさえある仕様を満たすために何度も何度も見た大きな誘惑があります。正しい答えは、「私の実装は壊れているか、仕様が壊れているのか?」仕様を変更することで問題を迅速かつ安価に解決できる場合は、それを実行する必要があります。これはクライアントで機能する場合と機能しない場合があります。しかし、尋ねないでください。)

最後に-あなたはテストする必要があります。 TDDや他の好きなものを使用できますが、これは最終的に自分がしたと思ったことを実行したことを保証するものではありません。それは役立ちますが、保証するものではありません。したがって、最終テストを行う必要があります。そのため、ソフトウェアの開発やブルドーザーの作成など、プロジェクト管理へのほとんどのアプローチでは、検証や検証などが依然として大きなアイテムです。

概要:事前に退屈なものがすべて必要です。配信手段としてアジャイルのようなものを使用しますが、昔ながらの考え方、仕様、および建築設計を排除することはできません。

[1000人の労働者を現場に配置し、チームを結成していくつかの仕事を行うように指示することで、25階建ての建物を建設することを真剣に期待しますか?計画なし。構造計算なし。建物の外観のデザインやビジョンがない場合。そしてそれがホテルであることを知っているだけで。いいえ-そうは思いませんでした。]

51
quickly_now

TDDは最初に単体テストを書くことを意味すると多くの人が考えていることに私はまだ驚いています。いいえ、コードを書く前に必要なテストを書くことを意味します。テストは、実際には単体テスト、統合テスト、エンドツーエンドテスト、そしてもちろんパフォーマンステストです(テストするコードの前にパフォーマンステストを作成することはおそらくありませんが、まったく作成しないという意味ではありません)。必要なテストのタイプは、ユーザーストーリーの完了の定義から見える必要があります。ユーザーストーリーの受け入れ基準の1つで、機能が500ミリ秒以内に50人の同時ユーザーで結果を提供する必要があると述べている場合、この受け入れ基準が満たされていることを証明するパフォーマンステストを行うまで、ユーザーストーリーは完了したと見なすことができません。自動テストを取得したら、他の機能を追加するときに、合格していることを毎日確認できます。

受け入れ基準が正しく定義されていなかったため、パフォーマンスをテストできなかったようです。それでも、実際の環境にデプロイして高負荷で使用すると、アプリケーションのパフォーマンスが低下する可能性がありますが、常に要件の失敗と見なすことができます(要件が定義されていない場合、開発者は作業時にそれを考慮しませんコード)または開発チーム(定義された要件に対するテストが不十分)。

もう1つの興味深いことは、チームの開発者がシングルユーザーストーリーに集中していることです。アジャイルはコミュニケーションに関するものであるため、開発者はユーザーストーリーに必要なものとそれがアプリケーションの他の部分にどのように影響するかを伝える必要があります。コラボレーションは必須です。テストもそれをカバーする必要があるので、ある開発者が別のユーザーストーリーに必要な機能を壊した場合、それは自動テストで表示されるはずです。それでも十分ではない、または機能しないと感じる場合は、チーム全体が協力してアプリケーションのアーキテクチャを拒否するアーキテクチャ会議を導入できます。通常、そのようなミーティングは週に1回行うだけで十分です。

ウォーターフォールプロセスの多くは、通信と自動テストに置き換えられます。高レベルのドキュメントやデザインを作成できないと言う人は誰もいません!あなたや多くのチームがそのために例えばWikiを使うことができます。

36
Ladislav Mrnka

[私たちの製品は]使用するには遅すぎ、バグがあり、迷路のように複雑になり、完全に柔軟性がなくなりました。

これはアジャイルとは何の関係もありません。それは、プログラマーが適切に仕事をしていない兆候です。

アジャイルの基本的な考え方の1つは、チームがプロセスを完全に制御できるということです。つまり、計画、文書化、テストの量、およびリファクタリングの扱い方について合意する必要があります。その力はすべて素晴らしいですが、責任も伴います。これがおそらくあなたのチームが失敗した場所です。彼らは自由を受け入れたが、彼らの責任を無視した。

結局のところ、それはコードの品質について説明し、それを増加させてそれを維持する方法について合意しようとすることの問題です。実際には、通常のプログラミング方法が適用されます。

プロのヒント:これを実行するには、「完了の定義」を使用してください。誰もがそれに同意していることを確認し、誰にでも見えるようにしてください。ストーリーが完成したかどうかを判断するための厳格な門番としてそれを使用してください。非パフォーマンス要件(パフォーマンスなど)をそのリストに追加することもできます。

16
Martin Wickman

うん。あなたのチームメイトはばかです。アジャイルのせいでプロジェクトは失敗しました。気分が良くなった?さて、次に進みましょう。 :P

資本M手法の名前に集中するのではなく、作成したソフトウェアが非常に遅くてバグが多かった理由に集中すれば、何が問題だったのかについて、あなたとチームはより効果的に通信できると思います。 Agileまたはwaterfallという用語を使用しないでください。彼らはあなたのオフィスに明らかに感情的に満ちています。

アジャイルは時々機能します。今回はあなたのチームではうまくいきませんでした。あなたがアジャイルを間違ったからだと言う人もいます。結局のところ、アジャイルは機能するので、もしあなたがそれを正しくやれば、それは機能したでしょう。なんでも。

失敗があったことに誰もが異議を唱えているようには聞こえませんが、方法論を非難した場合、次回は友人を獲得したり、人々に影響を与えたり、あるいはもっとうまくやったりすることはできません。それはおそらく実際に問題があったこととはほとんど関係がありませんでした。

代わりに、失敗の最も直接的な原因を突き止めることに集中し、チームと協力して、それらが再発しないようにします。これには人のスキルが必要です。

人々のスキルといえば、チームがすべての仕事をし、それを彼らよりもうまく行うことによって見栄えを悪くすることに感謝しなかったことに驚かないでください。これを「レーダーの下で」行うと、チームの効果的なメンバーになるために再構築しなければならない関係が損なわれる可能性があります。

このような状況を見るための最良の方法は、チーム全体の長期的な総アウトプットを考慮することです。今回は1週間節約できたかもしれませんが、長期的には、より良いteamを構築することで、会社の業績を向上させたかもしれません。

私はこれらすべてのことをお話ししていますが、おそらくあなたはそれらのほとんどをすでに知っていると思います。この状況にそれほど近かったのでなければ、他の誰かに説明できるでしょう。

11
PeterAllenWebb

+1これは、最近読んだエンタープライズアジャイルの最も良い説明です。

アジャイルに慣れている人は誰もがこれを意味するとは想定されていなかったと指摘しますが、いったん誰もがメトリックスに巻き込まれると、これはまさに製品の品質に情熱を持たず、どちらかにこだわっているチームから得られるものです。何よりもテストカバレッジをテストしたり、毎週の納期を守ったりして、他の誰もが描いたコーナーに関係なく、週単位で管理レベルに到達するのはそれだけです。

私はこれが再編成よりも少ないもので修正されるのを見たことがありません。あなたが本当に情熱的な人々を引き付けるために特別な何もない中堅企業であるならば、それでも次の経営陣が方法論を時々変えない限りそれを修正しません。

アジャイルは、開発チームが必要とされる余分な、信用されていない作業にもかかわらず、良い製品を作るのに十分気にかけている組織でのみうまく機能するようです。効果的に彼らは自分の時間でそれを良くするために十分に気を配り、改善のために戦う必要があります(そしていくつかのTDDケースではテストをやり直すために多くの余分な時間を燃やすことをいとわない)

あなたは明らかに良い製品を出荷することに関心があり、スクリプト化された一連の動作を実行し、給料を受け取って製品の混乱を継続的にクリーンアップすることを明らかに関心があります。

それが俊敏かどうかにかかわらず、私は他の場所で刺激の少ない雇用を探します。

アジャイルで完全に燃やされている場合でも、他の方法論を実行する場所はたくさんあります。たとえば、入札または契約のほとんどすべて。

9
Bill

あなたの議論に簡潔な引用を追加したい場合、アイゼンハワーは良いものでした:

「計画は何もありません。計画がすべてです。」

http://www.brainyquote.com/quotes/quotes/d/dwightdei149111.html

彼はあなたがあなたの計画を変えることを期待するべきであり、それでそれが存在するようにその計画にあまり価値を置かないことを意味しましたが、同時に計画のプロセスはあなたのエネルギーを決定的な方法で鋭く集中します。それらをテストして改良する前に、計画を立てる必要があります。

9
jhocking

一部のスタッフにも同じ問題があります。

基本的に「書くまで分からない」というのが好きな言葉です。そのため、反対の方向に進み、クライアントと協力して、承認ポイントを使用して成果物を定義しました。最後は「Xを実行するためのコードを書いてください」です。

「楽しくて興味深いコードを実行する」と同じ成果物スプリントに「設計/テスト/計画などを書く」場合、最初の部分は決して発生しません...

しかし、私が「ビルドするものを言ってクライアントがサインオフするまで、あなたはどんな面白くて面白いコードも実行することができません」と置くなら、

  • あなたは最初に不平を受け入れます、そしていくつかの涙と私は空白の仕事と余分な努力の多くの充填をしなければなりませんでした...
  • その後、「プロセスはどうだったのか」と尋ねると、紙面の最初のバージョンを試したほうがよいと明かされます。
  • 次に、開発者が見ることができるテストケースを用意し、「完了したことの意味」の予想を正確に示すことができます。
  • 次に、クライアントが開発を承認すると、拒否率が80%減少します...
  • さらに、すべての開発者が設計ドキュメントを持ち歩き、設計について話し合っている様子を見ることができます...彼らは本当に理解し始めます。
  • 次に、プロジェクト計画を一口サイズのチャンクに分解し、それからプロセスを作成する方法を考え出します。

アジャイルの部分は、クライアントが計画から変更されたときに発生し、2週間のサイクル内で順応できるため、ズボンのシートのそばを飛ぶことなく途中で補うことができます。

私たちのケースでは、「ビッグデザインの前払い」は、平均5つのサブステージを持つ9つのステージ(実際の製品リリース)に分割されました。デザイナーと開発者は互いに歩調を合わせており、デザイナーは開発者よりも1〜3サブステージ進んでいます...遠すぎるため、開発での発見が設計の多くを壊しすぎ、あまりに近く、微調整を行って設計コストを従来どおりにしました開発段階ですでに「確定」されている。各サブステージは、1人の開発者にとって2〜4のスプリントです。

小規模なプロジェクトでは、同じ開発者が最初に設計>サインオフ>請求​​書>開発>サインオフ>請求​​書...をサイクルで行うだけです。

テスト命名問題

テストには多くの面がありますが、正式にはそれぞれ約7つのカテゴリのテストがあり、それぞれにサブセクションがあります。これらの後者の1つは「自動化された単体テストの作成」です。

開発者がこのコンテキストでの「テスト」の意味を理解しているために「テスト最初の開発」をするのは悪い名前です。開発者は、テストを実装に対するインターフェースに対するテストの実際のコードを書くものと見なします。まったくそうではない場合...コードの記述に関してはこれを実行できますが、実際には、「コードの記述を開始する前に、ユースケースとユーザーストーリーに対して設計を検証します」...適切に実行すると、多くの要素が削除されます。開発中に通常発見される問題のうち、はるかに安価な「捨てることができる紙」バージョンです。

4
Robin Vessey

私は一種のハイブリッドを使う傾向があります。全体的な計画はウォーターフォールですが、実行にはアジャイルがあります。

私の推測では、状況があなたの言うほど悪い場合、チームは実際にはアジャイルを使用しておらず、単に怠惰または規律を欠いているだけです。アジャイルとは、計画を立てないことではなく、柔軟であり、アジャイルであることです。

4
richard

アジャイルの重要な要素の1つは、継続的な改善のアイデアと、チーム全体がプロジェクトを所有するというアイデアです。したがって、正しいアプローチは、チームの問題を確認し、チームに修正方法を決定させることでした。

1人のチームメンバーが自分で立ち去り、アジャイルのすべての原則を破棄し、独自の方法で作業を行うと、少量のコードがうまく機能する可能性がありますが、プロジェクト全体を前向きに進めるわけではありません。

3
Dave

それらを機能させる1つの方法多分すべてのスプリントバックログをカバーするT-Mapを作成する

T-map

各チームにはスレッドがあり、各スプリントは期間です。それはすべて一緒に結びつきます(あなたのチームが倒れるようです)。これをどこかに固定し、磁石を取得してペア/サブチームを表現します。彼らは「競争」することさえできます。しかし、誰もが自分や他のチームがどこにいるかを知っています。依存性がある場合は、ここに依存してください。

ここでのポイントは、全体のプロセスを伝えるだけでなく、スプリントに分解することです。最初のスプリントだけがそこに置かれ、他の期間が空白であっても、これはプロジェクトを完了するための優れたロードマップになるはずです。

2
Pureferret

あなたには2つの問題があります。要件の形が不十分で、アーキテクチャが貧弱です。

要件

全体的な最終目標とそこに到達するための詳細なロードマップの両方が必要です。

ウォーターフォールの世界では、最終的な目標は機能仕様であり、そこに到達するためのロードマップはプロジェクト計画です。

アジャイルの世界では、1つの方法は、それを壮大なユーザーストーリーに取り込むことです。次に、ロードマップは、叙事詩の詳細を具体化する詳細なユーザーストーリーです。

壮大なストーリーはアイデア全体を理解するのに十分な肉を捕まえることができないため、私はそのストーリーに完全に満足したことはありません。したがって、私が使用する傾向があったのは、1、2の壮大なユーザーストーリーに関連した高レベルのシステム要件ドキュメントです。その後のロードマップは、詳細なユーザーストーリーです。

システム要件ドキュメントがあることの良い点は、ユーザーストーリーの多くの受け入れ基準が引き出せることです。

高レベルのシステム要件ドキュメントは、技術的に精通した顧客に製品を販売するためにマーケティングが使用する可能性のある「カットシート」と考えてください。

アーキテクチャ

「カットシート」が提供するものの1つは、設計しているシステムに境界を設けることです。これにより、使用するアーキテクチャについて、情報に基づいた早い段階での決定を行うことができます。

もしあなたのチームが早い段階でそのようなドキュメントを持っていたなら、後でシステムを再構築するという苦労を経験する必要はないでしょう。


実際、3つ目の問題は、コミュニケーション不足です。コミュニケーションは双方向(または複数の人の間の双方向)です。しかし、それは人間の失敗だけであり、正しくなるためには(時には)超人的な努力が必要です。

1
Peter K.