受け入れ基準なしでソフトウェアをどのように開発しますか?


70

テスターが何をテストするかを知らず、製品所有者として行動する複数の(2-3)人と、承認基準なしで4-5人の開発者のチームでソフトウェアをどのように共同で開発しますか?

私たちが持っているのは、いくつかのスクリーンショットといくつかの箇条書きを含む大ざっぱな「仕様」だけです。

簡単だと言われているので、これらは必要ありません。

どのように進むべきか迷っています。

追加情報

厳しい締め切りが与えられました。

顧客は社内にいるため、理論上は製品所有者がいますが、ソフトウェアをテストする少なくとも3人が作業項目を失敗する可能性があります。失敗するまで実際にテストしているもの。

製品の所有者は、質問に答えたり、フィードバックを提供したりすることはできません。定期的な会議や電話会議はありません。フィードバックには数日かかる場合があります。

完璧な仕様を作ることはできないことは理解できますが、各スプリントで実際に取り組んでいるものの受け入れ基準を持つことは「普通」だと思いました。


33
あなたが望むようにそれを開発してください。ミーティングに参加して、製品が大まかな「仕様」とスクリーンショットにどのように一致するかを示すことに満足している限り、大丈夫だと思います。もちろん、詳細については仕様の作成者にいつでも尋ねることができます
...-FrustratedWithFormsDesigner

10
基本的に、これは自動開発または「カウボーイコーディング」です。開発者が詳細を入力します。開発者は多数決を管理できます。基本的に、正式な要件はありません。スタックホルダーの開発、デモ、フィードバックの収集、すすぎ、繰り返し。
ジョンレイナー

11
製品所有者は、これがコストと時間のスパイラルをますます高くするための優れた方法であることを理解していますか?非コンピューター科学者は、よく書かれた明確な仕様の重要性をしばしば理解しません。たとえば、米国政府は、新しい軍用ハードウェアへの期待を変えると、しばしば同様の問題に直面します。これは、軍事用ハードウェアが予算を超過し、スケジュールより遅れていることが多い理由の1つです。joelonsoftware.com/2000/10/02/…– nickalh
1

35
「簡単だと言われているので、これらのことは必要ありません。...厳しい納期が与えられています。...製品の所有者は、質問に答えたり、フィードバックを提供したりすることができません。定期的にスケジュールされた会議や電話はなく、フィードバックには数日かかる場合があります。」あなたは私の同情を持っています。これらは、「ソフトウェアの作成方法がまったくわからない。まったくない」という特徴です。
jpmc26

13
失敗するように設定されました。これは、経営陣にエスカレートする必要がある種類です。厳しい締め切りがない場合は、成功するまで繰り返すことができます。利害関係者がフィードバックを利用できる場合は、(おそらく)期限に間に合うように十分な速度で反復できます。かなり詳細な仕様を実際に持っていることについても同じです。しかし、何か を与える必要があります。これは、上司に@ $$を火から外すように非常にうまく頼む部分です。
ジャレッド・スミス

回答:


130

反復プロセスは、詳細な仕様ずに、うまくこれを実現します。

大ざっぱなプロトタイプを作成し、顧客からフィードバックを求め、そのフィードバックに基づいて変更を加え、アプリケーションが完了するまでこのプロセスを繰り返します。

顧客がこの方法でそれを行うのに十分な忍耐力を持っているかどうかは、別の質問です。一部のクライアントと開発者は実際にこのプロセスを好みます。顧客は常に実践的であるため、(最終的に)望みどおりの結果が得られます。

言うまでもなく、このように固定費や固定時間の契約をするつもりはありません。


114
追加する必要があるのは、「クライアントが1時間あたりに支払われていることを確認するだけで、クライアントが不足しているアイデアを使い果たした場合にのみ支払われる」ことです。
Doc Brown

22
また、顧客の考えを文書化することも忘れないでください。そうすれば、少なくともどこかにメモが記録されます。これは、正式な受け入れ基準ではないかもしれませんが、それはあなたが実際に次のステップを実行しようとしている時に持っているたくさんの関連だ...
enderland

4
@Doc Brown:OPは「顧客は内部的」を追加するように編集されているため、時間単位での支払いは問題にならないことを願っています。
-sleske

8
+1多くの内部プロジェクトでこのプロセスを実行しましたが、非常にうまく機能し、さらに全体的な時間の節約になりました。1つのヒントは、反復を短くすることです:1週間または2週間。
ボブツウェイ

13
私の経験では、正式な受け入れ基準がない理由は、彼らが本当に何を望んでいるのかまだ誰もわからないということである場合、これはうまく機能するということです。プロトタイプは彼らが意見を形成するのを助け、あなたはあなたが手にする大きな不確実なタスクを持っていることを受け入れます。しかし、理由は、利害関係者が自分が望むものについて考えたり、話したり、書いたりする時間を見つけられない場合、または利害関係者が政治的な理由で明示的に述べることができないと矛盾する要件がある場合です。その後、プロトタイプが缶を蹴飛ばすだけで、頑丈なスティックが見つかるまで何も改善されません。
スティーブジェソップ

58

あなたが言っていることが真実であり、仕様があなたが始めるのに十分なほど近くない場合(そしてこの評価で正直である)、私はこのアプローチをお勧めします:

  1. あなたが与えられたスケッチと「スケッチ」仕様を読んでください。
  2. コードを作成するのに十分なレベルに独自の仕様を記述します。たくさんの推測をしなければならないかもしれません。
  3. レビューのために仕様を顧客に示します。彼らが好きな部分に注意し、あなたが間違っていると思った部分の詳細を入手してください。
  4. あなたと顧客が同期するまで、手順2と3を繰り返します。
  5. これで適切な仕様ができました。

「簡単になります」と言ったときに顧客が正しかった場合、このエクササイズは簡単です。

顧客が間違っていて、実際にあらゆる種類の落とし穴や要件のギャップがある場合、仕様の草案はすぐに問題を説明し、彼らが間違っていることを伝えます(指を指すか議論する必要はありません)それらの前にいて、明白であること。また、仕様はそれらのあいまいさを解決するための優れたディスカッションツールとして機能し、フィードバックで修正する際の重要な決定の記録として機能します。


27
仕様を「仕様」(顧客の場合は、プロジェクトの友好的で有用なものとして受け入れる)の代わりに「作業のスケジュール」と呼ぶことで、顧客をtrickすことができます。このような開発プロセスへの関与のすべての基本原則に敵対的である彼らの非プログラマー脳は、プログラマーが正当な理由なしにやらせる退屈な退屈な事務作業だと考えています)。
スティーブジェソップ

2番目のポイントでは、開発者向けの技術仕様のみを作成することをお勧めします。そうしないと、開発者は作業を開始できません。このようにして、開発される作業の性質についてビジネスチームと並行して共同作業できます。このようにして、開発チームとビジネスチームの両方が要件について互いに同期されます。
カラン

3
your draft specification will quickly illustrate the problem and communicate to them that they were wrong (....) since it will be right in front of them and obvious-これがどれほど明白であるかを理解しているクライアントは、そもそも問題を抱えることのないクライアントです。または、より多くのsuccintlyそれを置くために:解決策は、問題の非存在を意味します(私は人生のすべての分野でますます頻繁に認識パラドックスである)...
ラドゥMurzea

1
決して「理解しない」人もいますが、私の経験では、必要な詳細レベルの例を示し、要件が満たされたときに行うことができる「間違った」決定を示すのに役立つことがよくありますあいまいです。
ジョン・ウー

18

製品の所有者からプロトタイプが渡されました。(あなたが完了するまで)彼をより良いものを返します

プロジェクトを開始するための紙のプロトタイプが提供されたようです。それはひどい始まりではありません。漸進的に機能するプロトタイプを提供することにより、同じ言語ビジネスオーナーに連絡することをお勧めします。

プロトタイプは紙で始まり、デジタルモックアップに移行してから、「実際の」テクノロジーで構築する必要があります。

Treehouseには、このための優れたガイドがあります。

フレームワークを使用したプロトタイピングの素晴らしい点は、構造とスタイリングがすでに整っているため、プロトタイプが実際のサイトになることが多いことです。同じフレームワークを使用する場合、最初からサイトを再作成する必要はありません。

特に悪い結果のせいにされるのが心配な場合は、正式な仕様を提供することもできます。しかし、おそらくプロトタイプからより多くのフィードバックを得るでしょう。

締め切りに間に合う

後の努力は、すべてが古典的な「プロトタイプ」ではないことに注意してください。なぜなら、それらは使い捨てではないからです(またはその一部はそうではありません)。期限が成果物になる前に完了する最後の、最も有能な反復。

締め切りは、最も明確に定義された要件です。時間通りに納品できる、完全で一貫性のあるものを用意してください。

テスターと協力する

この緩いプロセスがあなたの会社にとって新しいものであるなら、あなたのテスターはおそらくあなたよりも損失にさらされおり、ガイダンスを求めているかもしれません。プロセスの早い段階で時間を割く必要があります。正式な受け入れ基準を受け取らずに意味のあるテストを提供できるように支援していることを上司に伝えてください。

テスターが提供する必要のあるものがあるかどうかを確認します。たとえば、「証明」のドキュメントを「元に戻す」ことができます。

テストファーストデザインを試す

正式な要件はないため、テストケースを開発するために何らかの構造を提供します。

Test First Designおよび/またはテスト駆動開発に十分に精通し、必要に応じてプロセスに関するテスターに​​ガイダンスを提供します。このような簡単なプロジェクトの場合、プロセスの専門家になる必要はありません。しかし、実証済みの方法論を使用することは、あなたとあなたのテスターに​​よく反映されます。

特にUIの標準に準拠

ルックアンドフィールに関する要件はありませんが、期限があります。他の人の設計作業を使用して、プロフェッショナルな外観のアーティファクトを作成するために必要な作業を最小限に抑えます。

サイトの標準UIを選択し、指示が​​ない限り/カスタマイズしないでください。どのプラットフォーム用に開発しているのかわかりませんが、BootstrapまたはGoogle Material Designは2つの例です。

通信するが、せがらないでください

1日に1つのメールを製品所有者に送信することをお勧めします。緊急の場合のみ、それ以上を送信してください。

質問がある場合は、ガイダンスが表示されない場合の手順を説明してください。例えば:

このアプリのユーザーはモバイルデバイスでアクセスする必要がありますか?今のところ、これはデスクトップ/ラップトップのみのシステムになると想定しています。

パニックにならないで

「要件」という用語を知らなかった人々のために、私は多くのプロジェクトに関わってきました。ほとんどは成功しました。手渡しの製品所有者は、優れたソリューションを構築するための自由度を与えてくれます。

これらのプロジェクトのプロジェクトオーナーの一部は、「私は忙しすぎて...」という無能な言い訳の後ろに隠れて隠せませんでした。しかし、ほとんどは最終結果に「喜んで」いました。


言及されていない1つのポイントはハード期限です:何かがその日に配信され、それが機能する(動きを通過する)ことが重要です。代わりにその制限が、作るの@Tim他のすべての点ではうまく行くべき
フィリップ・オーキー

@PhilipOakley、フィードバックをありがとう。期限を逃さないようにするために、ますます受け入れられる「成果物」を作成する反復的なプロトタイピングプロセスに関するポイントを追加しました。それが役立つかどうか教えてください。
ティムグラント

それは改善です。「Meeting」を「Meet」に変更して、より必須にすることもできます。次に、他のものなしで日付を指定した場合、それが重要な要件になるため、次の「メモ」にコンテキストがあるというステートメントを追加することもできます。(多くの場合、顧客は時間とコストのみに関心があり、残りは化粧品とファッションです、私が知っていると確信しています;
フィリップオークリー

10

プロジェクトとは、確実性が達成されるまで不確実性を減らす行為です

  • 最初は常にある程度の不確実性があります。場合によっては、要件が少しあいまいになります。時々、非常に大ざっぱなものです。あなたは仕事の一部として解決する必要があります。
  • 秘Theは、この不確実性を繰り返し分析し(分析、設計、実装を組み合わせて)、ユーザーストーリーを洗練し、システムを実装することです。
  • テストケース/シナリオ、および受け入れ基準も同じ方法で明確にする必要があります。(とりわけ)品質と正確性に関する不確実性を減らすことに貢献します。
  • 最後に、十分な確実性が得られます。顧客は、ニーズに合った使用可能なテスト済み製品を入手します。

それが漸進的な精緻化の原則です。要件、基準、結果は段階的に精緻化され、開発プロセスへの関与を通じて顧客が自分の期待と要件を理解することも同様です。

これは問題ですか?

初期要件が大ざっぱなほど、不確実性が高くなり、タスクの実行に必要な時間が長くなります。だから、誰が追加の仕事をし、誰が費用を払うのかだけの問題です。

これらの2つの質問の答えは、契約書の中にあるべきです。または交渉の対象となります。そして、顧客は追加の関与を受け入れる必要があります(主な議論は「ガベージイン、ガベージアウト」です。ただし、より外交的な方法で提示することを強くお勧めします;-))


1
私は最初の文が大好きです。それに対するブックエンドは、顧客が次のことをすることです:1)彼らが望むものを確信しない、2)彼らが行くにつれて彼らの考えを変える、3)達成不可能な何かを望む。しかし、これが実際に単純なプロジェクトであれば、成功する可能性は十分にあります。

1
これは金です。
ブルーノガーディア

8

定期的な会議はありません」。では、定期的な会議をスケジュールすることから始めてみませんか?複数の製品所有者がいるという事実だけでも、プロジェクトの容易さを保証するものではありません。それぞれの人々は対立する要件を持ち、すべての利害関係者と直接話し合う必要があります。

さらに、詳細な決定ログ保存することをお勧めします。少なくとも、誰かが決定したすべてのものを、日付と決定が行われたときに出席していた人々のリストとともに書き留めてください。何かを決めた理由を書き留めることができればさらに良い。PC上のファイル、イントラネットWikiのページ、またはデスク上のノートブックのいずれでもかまいません。ログはあなたとプロジェクトを保護します:テスターが「失敗」と言ったとき、あなたはこれらの人々とそのように決定されたことを指摘できます。それはあなたの問題ではなく彼らとテスターの間です。これにより仕様が変更される場合は問題ありませんが、現時点では、彼らが念頭に置いていた期限を満たすことは期待できません。


8

明確な要件、ゆるやかなリーダーシップ、完了(DoD)の定義がなく、仕事をタイムリーに行い期限を守るために必要な情報を確保する責任を負わないプロジェクトは、プロジェクトのレシピです失敗。

反復的な開発は悪い提案ではありませんが、製品の所有者と開発者の間の緊密な協力が必要です。「私たちは質問があることを知っています。プロジェクトの配信が遅れないように、誰が定期的に質問に答えることができるでしょうか?」と言って、誰かを引っ掛けてみてください。進捗状況を確認し、障害を取り除くために誰かと定期的にスケジュールを組んでください。それらが表示されない、または拒否しない場合は、丁寧な書面による通信および文書の遅延または無応答でフォローアップします。製品の所有者が利用できない場合は、利用可能な代表者を提供するよう依頼してください。

また、反復開発のもう1つの特徴は、要件の変更がタイムラインの変更を必要とすることです。 タイムラインを作成できない場合は、期限に間に合うようにコミットすることはできません。また、何を行う必要があるかについてよくわからない場合は、タイムラインを作成できません。仕様を独断的に尋ねる代わりに、現在の仕様を確認し、あなたまたはチームがそれがどのように機能するかについての質問を文書化し、製品所有者と議論して時間をスケジュールし、答えを文書化します。完了したら、その決定に基づいて仕様を作成し、製品所有者に(書面で)同意してもらうことができます。仕様の目的は、あいまいさを取り除き、DoDを作成することです。これは、Q&Aセッションで提供できるものです。仕様に反対する場合は、仕様と呼ばないでください。

彼らがそれが簡単だとあなたに言うとき誰も信じないでください。時には実際にそれが思ったほど簡単で、私はこれを信じるならば(とのみの場合)私は完全に要件が本当に彼らは彼らが言うほど単純であることを信頼する十分の製品の所有者、および私がされている仕様を知っています自明です(そうでない場合は、Q&Aセッションをスケジュールして文書化します)。私はあまりにも多くの状況にあり、運用の観点から簡単にするのが非常に難しい開発の観点から、またはあなたはあなたが完全に完了し、絶望の言葉を聞くと思う(「ああ、ところで、私たちは忘れていた...」)。例...「あなたがしなければならないのは、これらのPDFファイルをドキュメントリポジトリから読み取ることです。」これは、受け入れテスト中に、「ああ、これらの一部が完全に一貫性のない方法で横に読み取られることを忘れていました。間違ったページサイズが定義されているものや、これら3つのページを追加する必要があるもの、すべて同じものを表示する必要があるものがあります。修正は本当に簡単ですか?」

ポイントは、それは本当に簡単かもしれませんが、クイックミーティングでそれを確認でき、すべての仮定を文書化し、それらが正確で正しいことを確認することができます。つま先を踏むかどうかに関係なく、いずれにしても最終的に誰かが不幸になる可能性があるため、期待に応える作業コードを作成する際の障害を取り除くために立ち上がることをお勧めします。質問に回答し、誰かをいらいらさせることに固執している場合、要件を満たす時間通りに優れた製品を提供すると、彼らはそれを忘れます。明確化に失敗して配信しなかった場合、バグを報告しないように言ったことを誰も覚えていないでしょう。


3

仕様がなければ、チームワークが必要です。アジャイルに行く。

POに座って、いくつかの小さなストーリーを作りましょう。「この画面だけを配信し、このボタンだけが「鳴る!」」一部のACで解決します。ストーリーを伝えます。 ストーリーを実演します。ボタンが赤になっているはずです。バグまたは新しいストーリーを作成します。鳴り響くボタンをお届けします。等々。

頻繁にデモされる小さな垂直スライスを共同で指定して配信します。

この方法で顧客があなたと協力しない場合は、解決策を探してください。


-1

あなたが概説したように、私はいくつかの仕事にプロジェクトを費やしました。POがあなたがどのような設計上の決定を下し、なぜそれをしなければならないのかを知っている限り、あなたは大丈夫です。一方、彼らが設計の決定を理解していない場合は、少なくとも文書化されたユーザー受け入れテスト文書のためにそれらを押す必要があります。


-2

コードの記述を開始するには、詳細で検証可能な仕様が必要です。それは事実であり、それを回避することはできません。

誰もその仕様を書こうとしないなら、開発者はそれを書かなければなりません。そのため、仕様が不完全になります。完全な仕様に変換します(つまり、「これは、他の人から指示されない限り、これを実装するつもりです」という意味です)。その仕様を関係者に渡し、仕様を変更する機会を彼らに与えます。仕様を変更する機会に過ぎません。たとえば、「この方法が気に入らない」と言って仕様を解除しないでください。その時点で、それはあなたの仕様であるか、別の仕様を提供できますが、仕様を削除することはできません。

仕様を改善する可能性のある同僚からすばやくレビューを取得することをお勧めします。しかし、とにかく、仕様があり、それに応じてコードを記述し、テスターがそれに応じてテストします。そして、あなたは仕事をしました:あなたは仕様を持っていて、それを実装しました。仕様が顧客が望んでいるものではない場合、それは製品所有者、または良い仕様を書くことに煩わされることができなかった顧客の責任です。


6
「コードを書き始める前に、詳細で検証可能な仕様が必要です。それは事実であり、それを回避することはできません。」私の同僚と私は多くのプロジェクトでそれをやったことがあります。あなたの主張は絶対的なものではありません。
-whatsisname

1
@whatsisnameが同意しました。私もこの方法でコードを書きました。これは、タスクに探索的な側面がある場合に発生します。現在、仕様のないコーディングには欠点がありますが、目標を達成できないと言うよりも許容される場合があります。
コートアンモン

1
@whatsisname、フレージングは​​改善される可能性がありますが、基本的な真実は、それ何であるかを理解せずに要求を満たすことができないということです。 「Javaでプログラムを作成してください」と言っただけでは、そのプログラムを作成することはできません。プログラムが何をすべきか、つまり自分の目標を発明し、それを達成するという独自のアイデアを構築することはできますが、それはあなたを含め誰も述べたことのない目標を達成することはまったく不可能です。これは、大小を問わずあらゆる要求に適用されます。ニーズや要望を理解してからでなければ、それらを作成、制作、提示できません。
ワイルドカード

つまり...要求が理解され、満たされるために実際に必要な詳細レベルは、大幅に過大評価される可能性があります。また、過小評価される可能性があります。これに対する唯一の解決策はコミュニケーションです。
ワイルドカード

@Wildcard:ええ、フレージングは​​かなり承認されると思います。あなたが言おうとしていることは、ゼノのパラドックスを連想させるが、それほど説得力がない。
-whatsisname
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.