9

私はかなり複雑なソフトウェアに取り組み始めました。個人的なプロジェクトですが、それでも私はそれに多大な努力を払っています。今、私は他の人のソリューション/デザインや非常に制御可能な方法で成長するプロジェクトに取り組んでいます。

今回は、基本のコーディングを2回開始しましたが、すぐに行き詰まりました。そこで私は休憩して、1行をコーディングする前に完全なソリューションを書き留めることにしました。私が(順番に)行ったことは次のとおりです。

  1. CLIコマンドの形式でユースケースを作成する(これはコマンドラインアプリケーションです)
  2. ヘルプを書く
  3. クラス、データファイルの構造、およびさまざまな部分の機能ワークフローを設計します。

さて、私はこの部分全体で本当に遅くなります。私は個人用ウィキを設定し、それを使用してそれらの仕様を作成していますが、経験不足と明確な方法論をはっきりと感じています。

ソフトウェア設計は非常に複雑なテーマであり、それについて多くの本が書かれていることを私は知っていますが、あなたの経験/アドバイス/方法論を共有していただきたいと思います。

個人的な中規模のプロジェクトで作業する場合、コーディングを開始する前に何を指定しますか?どのように?

前もって感謝します

4

6 に答える 6

11

ここでは、私よりも経験豊富な方がいらっしゃいますが、常に心に留めておく価値のある点が1つあります。

初めて100%完璧にする必要はありません。実際、あなたがそれを目指すなら、あなたはおそらく決して終わらないでしょう。現実には、システムを一度構築するまで、設計を完全に理解することはできません。

開始し、前進し続け、単体テストカバレッジを常に把握し、システムとその複雑さを理解した上で、段階的にリファクタリングして改善します。

于 2009-01-18T00:40:30.887 に答える
6

個人的な中規模のプロジェクトで作業する場合、コーディングを開始する前に何を指定しますか?

機能仕様を指定します:

  • コーディングを始めたばかりの場合(「方法」)、コーディングしたい「理由」と「何」(「かなり複雑な」ソフトウェアの場合、数か月または数年にわたって)を忘れるのは簡単すぎるのではないかと心配しました。開発にかかる場合があります)。
  • また、私が開発するものの「範囲」を多かれ少なかれ理解したかったのです。おおよそ(桁違いに)評価するために:
    • どれくらいの大きさになりますか
    • 終わらせることができるか
    • 始める価値があるかどうか
    • 最初に開発できるサブセット

リスク管理のために、私が開発したかったもののいくつかは、私がよく知らないいくつかのソフトウェアを使用して暗示されていることを追加します。これに関連するリスクを最小限に抑えるために、私は少し使い捨てのプロトタイピングも行いました。

どのように?

ペンと紙を使って機能仕様の概要を説明しました。私が書いたもののいくつかは高レベル(ビジネスレベルの「ビジョン」ドキュメント)であり、いくつかは低レベルで、よりデザインに似ていました(UIの詳細のいくつか)。時々私は立ち止まってそれを整理する方法について困惑しましたが、その後、各ページが各トピックについて多かれ少なかれまとまりがあり、後でページを整理する方法について困惑する可能性があると考えました(おそらくあなたのウィキのように) )。

私は両方とも事前にソフトウェアアーキテクチャを指定しましたが、指定しませんでした。

  • 基本的なアーキテクチャ(いくつかの小さなコンポーネント)を念頭に置いて開発を開始し、次にコードを追加します。そして、コードを追加するときに、コンポーネントが大きくなりすぎて複雑になった場合は、それをいくつかの小さなコンポーネントに分割します...それは進化のプロセスです... Systemanticsで述べられているように、機能する複雑なシステムは進化してきました動作した単純なシステムから。
  • 私はアーキテクチャを文書化していません。または、アーキテクチャの唯一のドキュメントはコード自体です。たとえば、ソースコードをソースディレクトリ、名前空間、およびDLLに配置する方法です。

私は現在のアーキテクチャの理論的正当性を持っていますが、これらの理由を文書化していません。

  • 私は唯一の開発者です
  • 実際のアーキテクチャはコードによって文書化されています
  • アーキテクチャの理由は私の頭の中にあり、ソースコードの命名規則やさまざまなコンポーネントの依存関係などによって[再]発見できます。

私が唯一の開発者ではなかった場合(その場合のみ)、アーキテクチャとその理論的根拠を文書化する価値があると思うかもしれません。

ソフトウェアのアーキテクチャについて上で述べたことは、ソフトウェアが処理するデータにも当てはまります。

テストに関しては、少しコーディングしてからテストします。または、テストを作成してから、そのテストに合格する機能をコーディングします。私は「ビッグバン統合」、つまりテストなしで何ヶ月も書いているわけではありません。

私のプロセスの最大の弱点の1つは、事前に作業量を見積もり、その見積もりに対して実装を追跡することです...これは、この「個人的な」プロジェクトプロセスと私が行った有料プロジェクトの違いの1つです。 d他の誰かのために商業的に行う。しかし、これが良いかどうかは疑問です。見積もりが商業的にベストプラクティスである場合、おそらく私は個人的なプロジェクトでもそれを行うべきです。

于 2009-01-18T00:45:17.053 に答える
4

基本的に、画面。これらは、ユーザーとソフトウェアの間のインターフェースです。そこで、私はすべてのユースケースを特定しようとし(ユーザーは私の製品を検索します-ユーザーは製品をキャディーに追加します-ユーザーはキャディーをチェックアウトします)、それぞれの画面のチェーンを作成します。

幸運をお祈りしています。

于 2009-01-18T01:00:37.537 に答える
3

私は白紙を見つけました、そしてペンは最良の出発点です:

  • いくつかの大まかな図をスケッチする
  • いくつかのアイデア/メモを書き留めます
  • いくつかの擬似コードを書く
  • 主なユースケースを検討する
  • 潜在的な問題を考える

これに30分以上費やさないでください。また、ドキュメントや事前の設計が多すぎて行き詰まらないようにしてください。どのように実行したいかについて漠然とした考えができたら、すぐにコーディングを開始します。開発を続けると、コードが十分に優れているかどうかを感じることができます。不満がある場合は、嫌いなことを考えて、それらのレッスンを念頭に置いてやり直してください。リファクタリングは頻繁に、そしてすぐに、早いほど良いです。何かが「正しく感じられない」場合、それはおそらくそうではありません。

于 2009-01-18T01:08:08.600 に答える
3
  1. あなたがしたようにユースケースを書いてください。
  2. ユース ケースの 1 つを選択して完全に実装し、他には何も実装しません。これには、単体テスト、ヘルプ、エラー処理など、すべてが含まれます。このバージョンを 1 と呼びます。
  3. 次のユース ケースを実装します。これはコードを追加するだけの場合もあれば、完全な再設計が必要な場合もあります。大丈夫、あなたは今何をしているか知っています。新しいリリースを作成します。
  4. 手順 3 を繰り返します。
于 2009-01-27T01:17:21.213 に答える
1
  1. 画面を描画する
  2. データ関係を描画します (rdbms またはインメモリ)
  3. コーディングを開始
  4. 泡立て、すすぎ、繰り返し (またはプログラマー用語で GOTO 1)

最小限の実装から始めて、反復ごとに機能を追加します。

于 2009-01-18T04:30:29.487 に答える