最初のソフトウェア設計ドキュメントを作成しようとしています。私は独学で、CSの正式なトレーニングを受けていません。事前に少し読んだ後、システムの要件、品質、および非品質のリストを作成しました。これは、プロジェクトが提供するタスクの管理上の観点からの概要を提供します。これらを設計制約に変換できるようにすることが目的でした。これにより、正当な設計上の決定が導かれます。これまでのところ、提供されるリソースの詳細については詳しく説明していませんが、システムに存在するすべてのリソースに適用する必要があるという点で一般的です。
しかし、次のステップに進むのに苦労しています。設計制約はどのように見えるはずですか?それはどの程度具体的または一般的である必要がありますか?ドメイン要件を制約に変換するにはどうすればよいですか?私はすでにナッツと過剰指定されたものを行ったことがありますか? :-)
背景
私は小さなサービス会社で唯一のプログラマーです。現在のHTMLにはPHP PIアプリケーションがあり、有機的に成長し、テストインフラストラクチャがありません。1ビットを編集すると、アプリの遠く離れた部分に影響があり、意図しない結果が生じます。これを次のように置き換えたいと思います。より専門的に設計された(実際には、あらゆる種類の設計された)もので、テストスイートを使用したオブジェクトベースです。管理者はプログラミングについて知らないので、現在の機能のどれが無意味で、どのワークフローが行き詰まっているのかなどを知る必要があります。これは、永久に延期された設計会議中と実装中の両方での私のガイダンスとなることを目的としています。
これまでのところ、私は次のとおりです。
用語
[〜#〜]要件[〜#〜]
サービスが示す機能が必要は何ですか?
[〜#〜]品質[〜#〜]
最終製品を展示する他の機能はどのようなものですか?
非品質
どの機能が重要で重要ではなく、設計の柔軟性を可能にしますか?
Robertがコメントで述べたように、すべての設計制約を1か所で完全に網羅できるとは私は思いません。設計上の決定を支援するために設計上の制約を文書化するつもりであるとおっしゃっていたので、ウォーターフォールスタイルの開発環境で作業していると想定しています。ウォーターフォールの開発については、Wikipediaの 批評のセクション を参照してください。ウォーターフォールの開発が正当化される場合もありますが、 アジャイル開発 が普及している理由があります。少しずつ製品の開発を自由に開始できるので、何かが機能しないことがわかったらすぐに、その部分を捨てて、別のアプローチを試してください。また、プロジェクトの過程で要件が変化することに対して、はるかに反応します。
ウォーターフォールの開発は、多くの場合、事前に多くの管理時間を浪費します-要件が変更されたため、プロジェクトの終わりに向かって本質的に役に立たなくなるためだけに、何十ページもの長さの要件ドキュメントを処理しなければならなかった人はどれくらいいますか?その開発の過程で?
これまでのところ、設計の制約を文書化する方法に関する質問には直接答えていません。むしろ、私はあなたがすべてを前もってやらないことを提案しています。開発環境がどのようなものか(つまり、大企業の場合は自営業者であるなど)は説明しませんが、開発前に何を提供する必要があるかについての期待を変えることができるかどうか完了したら、それは非常に役立つと思います。 「何をすべきか事前に文書化しますか?」という質問にひねりを加えることができる場合は、代わりに ser stories の公式化を検討することをお勧めします。事前に知っておくべきニーズ。
(ちなみに、areソロまたは小さなチームで作業している場合は、アジャイルムーブメントから生まれた リーン開発 を読んでおくとよいでしょう。開発プロセスから廃棄物を取り除くことに焦点を当てています)。
ニコラスのコメントに基づいて編集:
おそらく厳しい状況にあるようですね。私の回答の上記のリンクは、あなたがよく知らない各領域をカバーしています(批評リンクの上部にジャンプして、 ウォーターフォール開発 -に慣れていない場合は、完全なスクープを参照してください滝対アジャイル開発、それはあなたが前者をしていることはほぼ確実です) 。
開発プロジェクトに伴うものに対する経営陣の期待がどれほど柔軟であるかについて、あなたは感じていますか?アイデアを彼らに持ち込むことに抵抗がなければ、リーンテクニックの恩恵を本当に受けられると思いますが、確かに、リーン開発の経験者が案内してくれなければ、最初は気が遠くなるかもしれません。
たまたま Pluralsight サブスクリプションをお持ちの場合(または無料トライアルにサインアップしてもかまいません)、 "ソフトウェアスタートアップのベストプラクティス" と呼ばれるコースでリーン開発の背後にある原則であり、プロジェクトの開始からこれらすべての設計上の制約を計画しようとすべきではない理由について、経営陣にもたらす議論を提供します。 (または、YouTubeで視聴できるプレゼンテーションがいくつかあります)。
方法を絞り込み、アジャイル手法を使用して1つずつ実行します。
あなたが説明する状況(基本的には混乱)とあなたが望むシステム(クリーンアップ)を考えると、一度に1つの小さな部分に取り組むことをお勧めします。
これらの「資質」も削除します
誰もが常にこれらを望んでいるからです。これはあなたがしないでください開発者のターンアラウンドが遅い、エラー、魅力のないクライアントUI、非効率的なUIなどを望んでいることを示しているので、あなたが持っている要件について反対を考えることは役立つかもしれません。それらのいずれかが本当に必要であり、それらを要件にすることはあまり役に立ちません(ただし、それらは価値のある原則です)。それらはまた非常に一般的で非特異的です。それらのそれぞれは、詳細の悪魔のように「しかし、それは実際には実際には何を意味するのか」という質問をします。
私はあなたがリストした要件を1つずつ取り上げます。あなたは12を持っており、それぞれ1か月を主な焦点として1年間の作業に便利です。
避けなければならない最大のことは、ボリュームに圧倒され、プランニングの詳細が多すぎるという罠です。
また、各ステップで克服すべき困難や問題に直面するため、かなりの忍耐が必要になります。このような状況では、多くの場合、勝つのはカメです。
この投稿は「アーキテクチャ」としてタグ付けされているので、アーキテクチャの観点から検討します。
収集している要件の種類に関して、正しい方向に進んでいます。私はあなたがより一般的に共有したものをアーキテクチャの推進力として分類します。つまり、アーキテクチャ設計を推進するために使用できる最小限の情報セットです。ほとんどの人は、アーキテクチャドライバを4つのバケットに分割します。
「 プロジェクトの計画/優先順位付け/作業割り当ての「問題」(または非機能要件)を処理する方法 」および「 機能要件と非機能要件を区別する必要がある理由」の説明を参照してください。 ? "についての議論と背景。
制約は動かせないので、アーキテクチャの設計に大きな影響を与える少なくとも1人の利害関係者が決定を下す必要があります。制約への対処に関する具体的なアドバイスを次に示します。
微妙ですが、制約と設計決定には大きな違いがあります。設計上の決定は、設計者が選択したものであるため、変更することもできます。 制約は変更できません。これは、チームとアーキテクトにとって、あなたが制御/影響を与えるものと、あなたに影響を与えるものを明確に示しているため、重要です。
制約は、システムの耐力壁と考えるのが好きです。あなたが家を建てていた場合、耐力壁は深刻な-おそらく壊滅的な-コストなしでは絶対に動かすことができないものです。他の回答でアドバイスされている可能な限り最後の瞬間までメジャー決定を延期することは素晴らしいアドバイスです。しかし、プロジェクトの開始時に行う仮定-特に柔軟なものと動かないものは、プロジェクト全体に悩まされます。
いくつかの簡単な例-