コーディングを開始する前に、ソフトウェア製品をどれだけ適切に定義する必要がありますか?


13

実際にコーディングを開始する前に、人々がソフトウェア製品をどれだけよく定義し、それが彼らにとってどれだけうまく機能しているかを知りたいと思いましたか?ユースケースの定義、リスクの分析、クラス図の描画などに言及しています。

最終製品が将来のリスクを回避できるようになるための十分なアイデアを持っていることは良いアイデアであることを知っていますが、適応するのが難しいほど製品を明確に定義しないことも重要です変化する。

他のより具体的な質問はおそらく次のとおりです。

  1. 通常、プロジェクトの時間の何パーセントが、開発前の計画段階で費やされますか?

  2. コーディングを開始する前に満たそうとする特定の測定可能な基準はありますか、それとももっと直感的なものですか?

  3. コーディングを開始する前にすべてのクラスの図を作成しますか、それとも物事が変化することを期待して、最初から動的なデザインを作成しようとしていますか?

喜んで共有したい経験があれば最高です!

回答:


10

「どれだけうまく定義されているか」に対する文字通りの答え。は

十分に定義されているため、開始できます。

十分に定義されているため、最初の作業範囲を特定できます(最初のコンセプト)。これは、必然的に発生する変更を特定するのに役立つのに十分です。

スプリントを優先できるほど十分に定義されている。

私はユースケースの定義に言及しています。

常に役立つ。しかし、すべてではありません。重要なユースケースを最初に優先順位付けしてカバーする必要があります。他のユースケースは、今後のリリースでカバーされます。いくつかのユースケースは、優先順位が非常に低いため、実行されません。

リスク分析、

一般的に時間の無駄。

クラス図などの描画

それが役立つ場合。

通常、プロジェクトの時間の何パーセントが、開発前の計画段階で費やされますか?

それは大きく異なります。「信頼できる」数値を取得するには、Software Engineering Economicsなどの優れた本を購入してください。

コーディングを開始する前に満たそうとする特定の測定可能な基準はありますか、それとももっと直感的なものですか?

「測定可能」。定義することはほとんど不可能です。

"腸"。悪いポリシー。

問題は「あなたが何をしているのか理解していますか?」です。

それは直感ではありません。はい/いいえの質問です。

それは「はい/いいえ」の質問であるため、「測定可能」ではありません。

また、さらに優先順位を付ける必要があります。あなたはすべてをするわけではありません。最初のいくつかのスプリントを処理するのに十分です。

コーディングを開始する前にすべてのクラスの図を作成しますか、それとも物事が変化することを期待して、最初から動的なデザインを作成しようとしていますか?

事前にすべてを知ることはできません。

試してはいけません。


個人的には、クラス図の作成に時間がかかりすぎると、開始後にモデルとコードが変更されるため、時間の無駄です。
-AndersK

事前にすべてを知ることはできないことに同意しますが、優れた設計文書は、少なくともスコープと機能のクリープが発生したときにそれを特定するのに役立ちます。
ティムポスト

@Tim Post:良い提案。それが質問の「どれだけうまく定義されているか」を定義する方法です。「スコープと機能のクリープを特定するのに役立ちます」。そんなに多くないよね?
-S.ロット

@Tim Post:「スコープの特定」は誤解を招きます。これは、プロジェクトの開始時に利用可能な「スコープ」の明確な知識があることを意味しますが、これは真実ではありません。市場は静的ではないため、ビジネスニーズの変化に応じて、プロジェクトのライフサイクル全体で範囲が変わります。
ラインヘンリヒズ

@Rein Henrichs:答えを少し調整して、あなたの主張を取り入れました。開始するのに十分なスコープ定義。「これ以上」と付け加えたくなりました。
S.ロット

2

クライアントがプロジェクトチームのメンバーとしてプロジェクトに積極的に参加している場合、開発者は機能についての質問や迅速な決定を行うことができます。その場合、仕様はそれほど詳細ではない可能性があります。

クライアントが遠く離れていて、長期間フィードバックが得られない場合は、仕様を非常に詳細にすべきです。

当社では、ユーザーストーリーを作成し、プロジェクトの開発者とPlanning Pokerをプレイします。これにより、ユーザーストーリーに費やす時間を公平に示すことができます。


「顧客担当者」(クライアントに提案している役割)は、チーム全体で最も重要な役割です。チームが製品やビジネスに関する質問の答えを得ることができない場合、彼らはどのように正しい決定をすることになっていますか?
ラインヘンリヒズ

それは素晴らしい点です、ありがとう!クライアントの関与が、特定のプロジェクトに最適なものをどのように劇的に変えることができるかは考えませんでした。間違いなく心に留めておくべきこと。また、「Planning Poker」のことは聞いたことがなかったので、本当に価値があるようです。
-drewag

2

プロジェクトをどの程度適切に定義するかは、開始して次の2週間に向かっている場所を知るのに十分です。

スクラムマスターとして、Excelシートまたはその他の場所で製品の総体的な機能を定義する必要があります。機能を追跡するためだけです。それらをユーザーストーリーにすることは、次に必要な機能について考えるのに役立ちます。次に、それらに優先順位を付けます:最も重要なまたは必須の機能を上に、最小を下に。

最も重要な機能の一部をリストしたら、開発できると思われる機能を選択して、2週間後、または必要に応じて1か月後にDone状態にします。次に、これらの選択した機能を展開して、いくつかのコーディングを開始できるようにします。

コーディング中に、選択した機能を完了状態にするために開発する必要がある他の要素を確実に考えるでしょう。完了とは、もう何もする必要がないことを意味します。つまり、テスト、コーディング、アセンブル、ドキュメントは完了です。

目標を達成する限り、選択した機能のリストはいつでも拡大できます。つまり、特定の期間中に言ったことをすべて開発できます。

つまり、完璧である必要はありません。いくつかのアイデアを投げ入れ、仲間と共有し、書かれた内容が要求される製品要件を満たすのに意味があるかどうかを確認します。もしそうなら、あなたはいる!明確にするために、単純な顧客管理製品を使用します。何が必要とされているか?

As a user, I may manage the Customers;
As a system, I persist changes to the underlying data store;
As a user, I need to enter my credentials to be able to manage customers;
As a system, I have to authenticate the user against the Active Directory;

最初のドラフトはそれと同じくらい簡単です!次に、セキュリティがシステムの重要な部分であることがわかります。究極の優先順位(Y / N)を設定するのに十分な重要性があるでしょうか。これは、満たさなければならない要件によって異なります。ここでは、顧客管理が最も重要だとしましょう。そのため、次のスプリントでは、基本的だが許容可能な方法で顧客を管理できるようにする必要があります。顧客管理とは何ですか?

As a user, I may manage Customers;
    -> As a user, I add a customer to the system;
    -> As a user, I change a customer details;
    -> As a user, I delete a customer;
    -> As a system, I flag a deleted customer as being inactive instead of deleting it;
    -> As a user, I need to list the customers;
    -> As a user, I search the customers data bank for a given customer;
    -> ...

これはすでに、アプリケーションの開発を開始するのに十分な機能を示しています。プログラマにさらに指示が必要な場合は、クラス図に慣れている開発者がCustomerクラスとそのプロパティとメソッドを設計するかもしれません。しかし、私が関係している限りでは、私がこれまでに書いたこのいくつかについては、始めるのに十分でしょう。一部の機能は、途中で追加または変更される場合があります。重要なのは、あなたが言ったことが完了されることに集中することです。この例では、顧客管理のことです。現時点では、ユーザー認証を気にする必要はありません。これは、後のスプリントで後ほど説明します。

これがお役に立てば幸いです!=)


本当にありがとう!このような特定のシナリオでこれを見るのは素晴らしいことでした。これは、製品全体について定義することに関して少なくともある程度測定可能なものを持っているが、サブゴールと機能指向アプローチを強調するのに良いフレームワークだと思います。将来新しいプロジェクトを始めるとき、このアプローチは間違いなく重要です!
-drewag

どういたしまして!私の塩の粒があなたを助けてくれてうれしいです!=)製品の要件は途中で変更される可能性があるため、クライアントがこれまでに行ったことを確認すると、他のアイデアや変更を行う必要があるため、機能を詳細に定義しないことが重要ですできた それに応じて製品を調整し、新しい要件を満たすようにする必要があります。したがって、プロジェクトの開始時に一度にすべてを確立した場合、これが原因で作業が失われることを想像してください!おそらく、あなたはそれを捨ててゼロから再起動するために何時間も働いたでしょうか。進化させてください=)
ウィルマルクーラー

1

まあ、私にとってうまくいくのは、機能が「かなりうまく」指定されていて、ソフトウェアアーキテクチャが非常に緩やかにしか指定されていないことです。

私が働き始めるためには、私が何に向かって取り組んでいるのかを知る必要があります。単に顧客のニーズを理解しているだけではうまくいきません。自分で使用するためのツールを作成している場合でも、画面を描画し、機能、各ボタンの機能、すべてを説明します。それ以外の場合は、始められません。

一方、私はコードの開発方法を正確に描くことを本当にあきらめました。これは最悪の方法かもしれませんが、私には有効です。作成するデータベーステーブルのセットを定義することはできますが、各テーブルに含まれる列は定義しません。必要なオブジェクトとクラスを考えるかもしれませんが、私は間違いなく図を描きません。

地獄、時々私はそれを間違えた後まで正しい方法を知らないことさえある。方法を知ったので、一度構築し、分解し、再度実行します。この時点で、かなり詳細なロードマップを作成して再起動できます。


あなたの経験を共有してくれてありがとう。重要なことは、開発者として開始するのに十分な快適さを感じるということであるというコンセンサスに沿っているようです。もちろん、あなたが再びそれをすることになったなら、あなたが変えるであろうことを発見するでしょう、さもなければ、あなたはあまりに多くの時間を計画に費やしました。製品が完成したらすぐに完全な書き直しをしたいという気持ちを知っています。それは私が避けようとしていることです;)(少なくとも合理的な程度まで)。
-drewag

1

どの言語と方法論を使用していますか?

JavaやC ++などの一部の言語では、Common LispやPythonなどの言語よりも多くの初期構造が必要です(Javaではリファクタリングが簡単であるため、C ++はJavaよりも優れています)。Leo Brodie(「Thinking Forth」で考えます)は、コーディングを開始するタイミングについて2つのアドバイスを提供しました。Forthに慣れるより早く、他の言語で望むよりも遅くなります。

ウォーターフォールの方法論(特に初期設計が成果物である場合)は、アジャイルよりも多くの先行作業を必要とします(ただし、アジャイル手法の初期計画を無視したくない場合もあります)。自動化されたテストの優れたセットがあると、より大きなものを変更するのがより安全になり、したがって、より少ない先行作業でうまくいくことができます。

また、個人および作成するソフトウェアの種類に対する知識に依存します。ある時点で、主にCRUDアプリを実行するとき、いくつかの仕様と3インチx 5インチのメモ用紙で始まるプログラム全体を書くことができました。今書いているものをそのように書くことはできません。


視点をありがとう。プロジェクト管理に関して、言語とプラットフォームがベストプラクティスにどのように影響するかについては考慮していませんでした。私は主にObjective-C、UIKit、およびAppKitについて話しています。しかし、私は他の多くの言語(C、C ++、C#、Java、Pythonなど)でも働いています。つまり、特定の方法がすべてのプロジェクトに最適であると想定しないように注意する必要があります。ターゲットプラットフォームと言語に基づいて方法論のベースを調整する必要があります(選択がある場合は、それに基づいて言語を選択することもできます)。
-drewag

1

ここで役立つ2つの用語は、MVP(Minimum Viable Product)とMMF(Minimum Marketable Feature)です。MMFは、ビジネス価値を提供する機能の最小バージョンです。MVPは、製品として実行可能な最小のMMFです。プロジェクトを開始するとき、最善のことは、MMFとMVPを特定し、そこから開始することです。

製品が実行可能になり次第、製品をリリースし、徐々に改善を続けます。


それは本当に素晴らしい用語です、ありがとう!これは、測定可能な何かを思い付くためにここで断然最高のものです。もちろん、それは完全ではありませんが、機能が市場性があるかどうか、そして/または製品に価値を加えるかどうかを判断するのはかなり簡単だと思われます。
-drewag
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.