フローチャートの作成
真っ白なテキストページに「さぁ、プログラミングしてください!」と言われても、
何から手を付けて良いのかわかりません。
そこで、ソフトウェアエンジニアとしてのルーティンを確立するようにしましょう。
製品の機能や精度など、要件定義を行うと思います。
クライアントからの要求仕様と実現可否を話し合い、可視化したものが仕様書になります。
製品要件に対して、ソフトウェアで実現する機能やその手段を明示し、どの様に実現させるのかを具体的にしておく必要があります。
例えば、「LEDをソフトウェア制御で点滅させてほしい」と要件を出されても、
・どの様な周期で点滅させたいのか?
・輝度はどの程度必要なのか?
・どれだけの時間点滅処理をさせたいのか?
・起動後から点滅なのか、ある条件にて点滅なのか?
など、単純機能なものですら確定させて欲しい詳細事項が多々出てきます。
これらを開発仕様書(納入仕様書)で具体化した後、本来はソフトウェア内部仕様書などを作成します。
ソフトウェアとしてどの様な方法で、機能実現させるのか、用意される関数はどの様な関数なのか、全体のシーケンスはどの様な処理遷移を辿るのか。など、必要事項を記述するのが理想です。
中小企業としては、プロジェクトの工期間が短く、しっかりと仕様書を作成する時間も持てないかもしれません。
ただ、フローチャートは必ず記録に残す癖をつけておいてください。
コーディングが山場になり、当初の構成案はどうだっのか?を見返す際に、
プログラムを追いかけて見返しているようでは、効率が悪いだけでなく正確な状態を把握することができなくなります。
また、チェックされる第三者の方がフローチャートを見れば一目瞭然になることからも、
必要なツールとして捉えておいてください。
そこでフローチャートの書き方やルールを解説したいと思います。
ここで参考にしているサイトは以下になります。
https://www.ntt.com/business/services/rink/knowledge/archive_55.html
フローチャートの記号
フローチャートに使用する記号は以下になります。
これは共通となります。
記号ごとにそれぞれ役割があり、右側の欄に解説として記載されています。



予備知識として、記号をプログラムの処理で置き換えることができます。
例えば、条件分岐は if文、switch文になります。

ループの開始と終了は、for文やwhile文になります。

この様に各記号は、これまで学習してきたプログラムの構文に置き換えることができるので、
処理の流れを書くことに重点を置いて作成をし、コーディングの際に置き換えしながらプログラミングをすることで、設計の指針にすることが可能です。
簡単なサンプルのフローチャート
先ほど例に出したLED点滅の処理をチャートにしてみましょう。
事前条件が必要なので、要件定義として仕様を以下にしたいと思います。
・起動後すぐに点滅開始
・点滅周期は1Hz
・点滅時間は無限に実施
・周期はカウント変数でカウントする
以下の様なフローチャートを書くことができます。
①開始はmain関数の先頭の処理に相当します。
②初期化処理はmain関数内で変数を初期値で代入する処理に相当します。
③点滅開始は、LEDのI/OポートをONとする処理に相当します。
④1Hzのカウントか?の分岐処理は、カウント変数が規定値化チェックする処理に相当。
⑤上記④がYESならカウント変数を0にクリアする処理に相当。
上記④がNOならカウント変数に+1する処理に相当。
⑥ループは、再度点滅開始処理に戻る処理に相当。
以降は、④~⑥を永遠に繰り返す。

このチャートの通り、プログラムとしてmain関数内に書いていけば、処理が実現できることとなります。
厳密には、カウント変数がいくらになったら1Hzなのか?が規定できていないので、
もう少し詳細まで決めないといけないことがあります。
例えば、タイマーで割り込みを活用してカウント変数を規定時間毎に加算できるようにするのか、
ループが1週するのにかかる時間を計測した上で、カウント変数が○○〇〇値になったか判定する。のか、実現手法がいくつかあるならば、手段を決めてフローチャートに反映する必要があります。
この様にして、プログラムをコーディングする前に設計図を考えて作成しておくことで、
実際にコーディングする際、設計図の通りに書いていけば良く、余計なことを考える必要がないぐらいまで、フローチャートが充実させておけば、ソフトウェアの品質も格段に上がります。