2

一度にすべてを頭に入れておくことができないほど複雑なプロジェクトに取り組み始めるときはいつでも、アプリがどのように機能するかを概説するのが好きです...私は通常、テキストエディタで次のようなものをハックします:

# Program is run
#     check to see if database exists
#         create database
#             complain on error, exit
#     ensure database is writable
#         complain to user, exit
#     check to see if we have stored user credentials
#         present dialog asking for credentials
#             verify credentials and reshow dialog if they're invalid
#     show currently stored data
#     start up background thread to check for new data
#         update displayed data if new data becomes available
#     ...
# 
# Background service
#     Every 15min update data from server
#     Every 24 hours do a full sync w/ server

など(注:これはコメントされているため、コードにコメントとして含めているためではなく、SOは解析しません)。

私が疑問に思っているのは、皆さんがこれをどのように行うかです。プログラムの流れを概説するためのツールはありますか? 複雑なプロジェクトをどのように説明すれば、コードを書く段階になったときに、細かい部分の設計やアーキテクチャーではなく、コードに集中できるようになりますか?

4

9 に答える 9

2

このような単純なダイアグラムをスケッチする必要がある場合は、GraphViz を使用します。DOT 言語は軽量で、ダイアグラムのバージョンを比較すると非常にうまく比較できます。

これについては、数か月前に、より複雑なアーキテクチャ図を示す例とともにブログに書きました。

また、GraphViz フローがどのように構成されているかを示すために、大規模なプログラム フローを示すズームアウトされた図を含むブログ投稿を追加しました。すべてのテキストを難読化する時間がないので、アーキテクチャの印象を与えるために低解像度の写真としてそこに置いてください。ズームインして詳細を確認することはできません.

この図は、起動を取得するために多くの grep を行った後、手作業で作成されました。挑発しすぎないように、図を生成する DOT テキストの抜粋をいくつか示します。

digraph windows {
 rankdir=LR
 label="Windows Invoked\nby controls and menu items"
 node[fontsize=12]

/* ENTRY POINTS */
 wndMainMenu[shape=box color=red fontcolor=red]
 DEFAULT_WINDOW[LABEL="DEFAULT\NWINDOW" shape=box color=red fontcolor=red]


/* WINDOWS */ 
 node[shape=box color=black fontcolor=black style=solid]
 App
 wndAddBill [label="Add Payable\nwndAddBill"]
 wndAddCustomer [label="Add a Customer\nwndAddCustomer"]

...

/* WINDOW INVOCATION */
 node[shape=oval color=blue fontcolor=blue style=normal]
 edge[fontsize=10 style=normal color=blue fontcolor=blue]

 wndPayBills_bvlNewBill -> wndAddBill 
 wndAddCustomer -> wndAddCustomer_save001
 wndManageDrivers_bvlNewCustomer -> wndAddCustomer 

代替テキスト http://www.aussiedesignedsoftware.com/img/WindowLaunchesZoomedOut.png

于 2009-09-17T11:01:18.403 に答える
1

基本的に、あなたがやろうとしているのは、Given-When-Then 形式で情報とユースケースを抽出することです。http://wiki.github.com/aslakhellesoy/cucumber/given-when-thenを参照してください。このアプローチにより、両方の問題が解決されました。

  • ドメインとエッジケースの理解
  • どこから始めればよいかだけでなく、次に何に取り組めばよいかがわかるように、ソリューションの概要を示します。
于 2009-09-18T09:22:08.793 に答える
1

Emacs Mxアウトラインモード

または、紙。

psこれは深刻な答えです。

于 2009-09-17T03:34:43.510 に答える
0

ドキュメンテーションに関連するもの: Wiki、Wiki、その他の Wiki! 読みやすく、最も重要なのは、誰でも簡単に更新できることです。

私のお気に入り: Trac (単なる wiki ではありません)

于 2009-09-17T03:32:19.083 に答える
0

プログラムの流れを概説するためのツールはありますか?

上位のコメント (「プログラムが実行されました」) は、「フローチャート」を使用して表現できます。

下部のコメント (「バックグラウンド サービス」) は、「データ フロー図」を使用して表現できます。

私はフローチャートを使用しません (あなたが書いたように、対応する疑似コード/テキストと比較して、それらが価値を追加しているとは思いません) が、システムのトップレベル ビューを示すデータ フロー図が好きです (すなわち、データ ストア/フォーマット/場所、およびデータ処理段階/IO)。ただし、データ フロー図は UML よりも前から存在するため、ネット上ではそれらについての説明はあまりありません。

于 2009-09-17T03:35:31.317 に答える
0

OO 領域のシーケンス図が好きです。多角形のプッシュに時間を費やさずにシーケンス図を作成するための優れた方法がいくつかあります。

まず、テキスト入力を受け取るオンライン シーケンス図ジェネレーターがいくつかあります。一例として、WebSequenceDiagrams.comを参照してください。

また、テキスト入力を受け取って図を作成するJava ベースの優れたツールもあります。これは、ant から直接呼び出すことができるため、ビルド プロセスへの統合に適しています。

于 2009-09-17T03:53:07.770 に答える
0

何かが複雑な場合は絵が好きですが、紙に手書きする傾向があるので、より視覚化できます。これにはホワイトボードが最適です。

大規模または複雑なアプリを小さなパーツに分割し、それらを紙の上に設計して、パーツ間のフローをよりよく理解できるようにします。

パーツ間のフローが完成したら、各パーツを個別に設計することをお勧めします。各パーツは独自のサブシステムであるため、必要に応じて言語やプラットフォームを変更できます。

その時点で、私はアプリケーションの作業を開始し、サブシステムを分解する必要がある場合でも、一度に 1 つのサブシステムで作業するだけで、頭の中に保持できる部分ができあがります。

于 2009-09-17T03:56:11.320 に答える