web-dev-qa-db-ja.com

疑似コーディングによるソフトウェア設計?

疑似コードに基づく方法でソフトウェアを設計する(つまり、書き留める)ための良い方法を知っていますか?

私はソフトウェア設計に不慣れで、UMLに関する情報を読んでいます。私の控えめなクラス階層はこれまでのところ良好ですが、複雑になったら、「全体を見る」という図では、将来の拡張性のために別の構造を使用できたはずです。 Pythonはプロトタイピングに適しているので、私は書き始めたばかりでほとんど問題ありませんが、まったくそうではありません。

そこで、UMLクラス図を試してみましたが、あまり役に立たないようです。そこで解決する問題は、頭の中でささいなことです。しかし、実際のメソッドの疑似コード化を開始すると、追加の設計要件に気づきます。

では、疑似コードで設計したい場合、どうすればよいでしょうか?私は、コードとほぼ1対1の方法が最適に機能すると私は信じています。しかし、ほとんどのUMLソフトウェアはメソッドのコードさえ表示しません(GoFなどの画像とは対照的です)。

誰かがUMLはドキュメンテーションとプレゼンテーションのためだけのものであり、デザインのためにはそれほど優れていないと主張しましたか?私もその感覚を得ます。 Envision APDTが見つかるまで、純粋なUMLといくつかの単純化したホワイトボードスケッチがソフトウェアを設計する方法であると思いました。

それで、アジャイル開発は私が注意しなければならないことですか、それともランダムにそのアジャイルと呼んでいますか-アジャイルはスケジュールだけについてだと思いましたか?または、(UMLを使用して)間違って設計していますか-誰もが疑似コードで設計していますか?どうすればそのための優れたツールを見つけることができますか?

9
Gerenuk
 I thought agile is about schedule only?

単なる計画ではありません。アジャイルソフトウェア開発は、進化的開発であり、製品の所有者から要求された変更への柔軟な対応を促進する適応計画を備えた、タイムボックスでの反復配信です。

 Or am I designing incorrectly (with UML) - does anyone design by pseudocode? 

私の経験では、クライアントスタンドの観点から見ると、チャートははるかに理解しやすくなっています。彼らは視覚的に魅力的で、多くの場合非常にカラフルでフォローしやすいです。ただし、実際のアプリケーションコードとの切断の性質上、チャートを維持することは非常に困難です。アプリケーションに変更が加えられるたびに、開発者はチャートを含むすべてのドキュメントを更新するために時間をかけなければなりません。ただし、クライアントのビジネスプロセスを十分に理解し、UMLダイアグラムを管理できるBAがチームまたは会社にあれば、その問題は簡単に解消できます。

UMLのようなツールを使用すると、このプロセスが簡単になりますが、オブジェクト指向プログラミングでのみうまく機能します。技術チームにとって疑似コードははるかに簡単です。このコードを作成するプロセスにより、実際のプログラミング言語開発フェーズの速度が大幅に向上します。

あなたが同様に見ることができるいくつかの他の選択肢があります:

  • データフロー図
  • 状態図
  • プロセスフローチャート

見栄えのよい参考資料: ソフトウェア設計チュートリアル 。さらに、私は個人的に、優れたブログを読むことをお勧めします PseudocodeまたはCode? Coding Horrorによる投稿-私のお気に入りのブログを読む:)

全体として、考慮する必要があるいくつかのトレードオフがあります。

8
Yusubov

アセンブリ言語でプログラミングする場合、疑似コードを書くことは非常に理にかなっています。アルゴリズムは、手動でアセンブリ言語に翻訳してから翻訳をデバッグする労力を費やす前に検証できます。 FORTRAN IVのような第1世代のコンパイルされた言語では、一部の制御構文がGOTOであり、すべての変数(仮引数を除く)がグローバルであり、変数名が6文字に制限されていたため、それはまだ意味がありました。

今日、私たちはアセンブリ言語でプログラミングをほとんど行っていません。コードを書くだけでなく、疑似コードを書くことにはほとんど価値がありません。まともな言語では、実際のコードはほぼWord for Wordの疑似コードに従います。疑似コードは時間の無駄です。

しかし、私は一番下からコーディングを始めません。私はTDDに従って、テストから始めます。次に、上からコーディングを開始し、必要に応じてテストをパスするために、徐々に下に向かって作業を進めます。

疑似コードに代わるものは、1000行の低レベルクラスを記述しないことです。代わりに、ドメインの理想的だが存在しないAPIを呼び出して、最初から始めます。次に、APIをビルドします。

3
kevin cline

すべてのメソッドのリストをスキップして、継承階層を単に表示する場合でも、クラス図はほとんど努力する価値がないと思います。シーケンス図は良いですが、私(おそらく私だけ)に描いていると、ぎこちなく感じます。

データフローダイアグラムと構造図の方が便利だと思います(ただし、構造図は通常BDUFに関連付けられているため、現時点では好まれません)。 DFDは特に機能分解に役立ちます。 DFDの各「バブル」は、必要な詳細レベルに到達するまで、独自のDFDに分解できます。

1
TMN

グラフィカルツールは疑似コーディングよりも優れていると思いますが、UMLは非常に複雑すぎて、これらのメソッドの欠点を組み合わせています:-)

もう少し明確に言うと、プログラミングは、特定の問題を分析し、より小さなコンポーネントとそれらの相互作用に分離する方法であると思います。これは「目的地ではなく旅」であり、問​​題に関する知識を常に向上させるため、コンポーネントのグラフが変化しています。レイヤーが表示されたり消えたり、関数やデータアイテムが上下に移動するなどです。

このプロセスを実行するための自然なツールは、スケッチボードです。できるだけ単純ですが、すばやく理解するのに十分なほど複雑です(同じ論理的な意味で同じ色、形、矢印)。銀の弾丸は見つかりませんでした。おそらく1日書きますが、今は gliffy ;を使用します。 prezi のズーム機能と組み合わせると、ほぼ完璧になります。

なぜ疑似コーディングではないのですか?疑似コーディングは、アイデアを形作るときに、「コンポーネントグラフのシリアル化された形式」を実装するための1つの前進です。良くない、頭を制限する。私の経験では、コーディングを開始するほど、捨てる必要のあるコードが少なくなることがわかりました...

しかし、おそらくこれは、スローされたコードをすべて記述したので、今は記述する必要がないためです。システムを設計するときに、それらから得た経験は私と一緒ですか?まあ、私はステートメントを変更する必要があります。

グラフが表示されず、同等の解決策が多数ある場合は、疑似コードに進むか、モックオブジェクトを使用してそのコードを記述してください。Javaでは、ほとんど違いはありません。コードを見て、それらのコンポーネントの構造と使いやすさを感じてください。それは、グラフの修正と意思決定に役立ちます。しかし、これは、コードが悪いと感じてそのコードを破棄する準備ができている場合にのみ機能します。私はこれが疑似コードの利点だと思います:機能するときにそれを保持する誘惑は少ないですが、構造が間違っています(そしていつものように、十分な時間がありません)。 :-)

0
Lorand Kedves