« オブジェクト指向と構造化 お勧めは? | トップページ | 「組込みソフトウェアギルド」への想い »

2011年2月13日 (日)

フローチャート使用に、賛成?反対?

最近 Twitter で、知り合いがこんな事をぼやいていました。

『フローチャートって最初に教える図表として本当に正しいのか?個人的にはDFDの方が絶対いいと思う.
だって何を処理したいのか整理せずにどう処理するか考えるのって順序違うでしょ.だからコード書いたときにI/Fがおかしかったりデータ構造がおかしかったりして書きなおすハメになる.』

私もその通りだと思います。
Interface誌の連載2回目「"いきなりプログラミング"は危険だ!」でも、フローチャート(下図)を載せ、似たようなことを書きました。

Flowchart_sample_2


ここで、改めてフローチャートの良し・悪しを考えてみました。

■ 良いところ
(1) なんといっても、認知度が高い。一般的な業務フローとして使用されていることも多く、プログラミングを知らない人でも理解できることも多い。
(2) 処理の順序を表すものであり、アルゴリズムが図で表現できる。

■ 悪いところ
(1) ある一つの処理の順序しか表せない。そのため...
 -a) プログラム内に複数並行に動く処理がある場合、他の処理との関係が示せない。
 -b) また、プログラム全体像を、俯瞰したものにしにくい。
(2) アルゴリズムの表現であるため、その処理の意味・役割が見え難い。


組込みソフトウェアの開発で考えた場合...

シングルタスク(割込みもなし)で動くようなシステムがあれば、フローチャートでプログラムが表現できます。
しかし、そのようなシステムは極々わずかでしょう。
ということは、殆どのシステムは、フローチャートだけでは、表現できないということです。

ソフトウェアを設計する場合、
 ・いくつのタスクが生成され、どのタスクが何の役割を担っているか。
 ・タスク間は、どれとどれが関係し、どのようなインタフェースを持つか。 
などを重視すると思います。
これらが表現できないと、設計書としては役割を果たせないのです。その意味では、フローチャートは不適な表現です。

設計時に重視する、上記の点がフローチャートには書かれておらず、それらをプログラムコードに噛み砕いた状態で描かれている。そのため、前述の”ボヤキ”にもあるように、書き直すはめが増えてしまうのです。


と、ここまで、フローチャートは使えないということを主張してきました。

かといって、フローチャートの使い道が無いなんてこともありません。
前述の通り、フローチャートは処理手順の表記図なのです。つまりは、アルゴリズムがわかり難いところは、フローチャートを使用する意味も出てくるでしょう。
例えば、ハードウェア周りのドライバのような、複数のステップがまとまって一つの意味をなすようなものは、コードより少し抽象度を上げた処理を、図に示すことで理解しやすくなります。

だたし... 絶対にやめてほしいことは、プログラムコードそのままを、フローチャート図にすることです。
コード読むのと何が違うのでしょう。 こればっかりは、図にする意味は無いと思ってます。

ちゃんと、フローチャートの性質を知り、必要な場所にだけ、使うことにして欲しいものです。


最後に、
処理手順を示す図としては、フローチャート以外にも、幾種類もあります。
図としてより軽く書けるものもあります。
また、UMLのアクティビティ図も処理手順を表すものです。世界標準であるUMLでかけるのですから、今の認知度だけでフローチャートを選択するのは、あまり良い選択肢ではないかもしれません。


※ 関連記事: Interface 2011年2月号

« オブジェクト指向と構造化 お勧めは? | トップページ | 「組込みソフトウェアギルド」への想い »

ソフトウェア開発」カテゴリの記事

Interface記事」カテゴリの記事

コメント

ざっとググると,"構造化チャート"のことを,"構造化フローチャート",最悪のケースでは単に"フローチャート"って呼んでいる例が割と出てきます.この辺の用語に関する手垢の付きすぎ(歴史があるので仕方ないですが)は,構造化設計を学ぶ上での今となってはの障壁かもですね.

ほんとですね。”構造化フローチャート”で、いわゆるフローチャートと、構造図と両方でてきますね。
これは気をつけないと、言葉だけでの説明では、相手は違うことを思い描いて聞いていることありそうです。

なるべく、ビジュアルでの情報共有を試みます。

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: フローチャート使用に、賛成?反対?:

« オブジェクト指向と構造化 お勧めは? | トップページ | 「組込みソフトウェアギルド」への想い »