フローチャートを書く意義と書き方

フローチャートは、処理の流れを図に起こして整理するために使う技法です。
フローチャートを起こすことで、他の人に処理の流れを伝えやすくなるので、設計書では良く用いられます。
また、自分自身も処理の流れを理解しやすくなるので、複雑なプログラムを組む前に作ることも多いです。

特にプログラミングに慣れていない内は処理の流れを考えるのにも一苦労だと思いますので、プログラミングする前にフローチャートを書く癖を身に付けることをお勧めします。

以下、フローチャートの書き方や例を提示していきます。

1.フローチャートの例

フローチャートは、記号を線で結ぶことで作成します。
記号の中には具体的な内容を記述します。

フローチャートには詳細なものと概要を把握するものに大別できます。
詳細なフローチャートは、プログラムの1行1行を記号に落としていくようなイメージであり、すぐにプログラムに落とし込むことが難しい初学者にお勧めできるフローチャートです。
一方、概要のフローチャートは、処理の流れを俯瞰するためのものであり、実際のプログラミングでは1つ1つの記号の中で複数の処理(順次処理、分岐処理、繰り返し処理等)を記述します。設計書に用いられることが多いのはこちらのフローチャートです。

2.フローチャートの記号の意味

フローチャートで使われる記号の意味は以下の通りです。
これ以外の記号が使われることもありますが、これ以外の記号は現場や人によって微妙に書き方が異なることも少なくないので、実際のフローチャートを読んで都度記号の意味を考えた方が良いでしょう。

3.繰り返しや定義済み処理を含むフローチャートの例

前述の例では使用していない記号があったので、以下で補足します。


いかがでしたでしょうか。

慣れない内はプログラムのロジックを考えるのに一苦労します。
いきなりプログラムを書き始めるのが難しい場合は、フローチャートを書く所から始めると良いと思います。

ちなみに、私も、難しい処理を実装する場合は自分のためにフローチャートを書きます。
つい最近も、再帰処理を含む複雑なロジックを4ページ程のフローチャートで整理していました。
慣れていてもフローチャートを書く時は書くので、慣れない内は尚更書いた方が良いのではないか、と思っています。

磁気ディスクの構成とアクセス方法

今回は、磁気ディスクの構成とアクセス方法について、わかりやすく図解してみました。

ITパスポートや基本情報処理技術者では頻出ですので、これらの試験を受けるのであれば是非理解しておいた方が良いです。
実務ではあまり使うことはないと思うのですが、全く使う機会がないわけではありません。
例えば、メインフレームで磁気ディスクの容量計算を行う時にこの知識が必要になりますし、フラグメンテーションとデフラグは普通にPCを使っていても知っておいた方が良いことです。

・磁気ディスクの構成

・磁気ディスクのアクセス方法


いかがでしたでしょうか。

ITパスポートを受験する知人の様子を見ていて、磁気ディスクは馴染みが無くて少し難しいと感じたので、今回の記事を執筆しました。
もしかしたら試験では理解できずに丸暗記で済ませてしまった知識かもしれませんが、知っておくに越したことは無い知識です。
今回の記事を通して、磁気ディスクについての知識が少しでも広まれば幸いです。

これからも、試験や実務で役に立つ知識を発信していきたいと思います!

O(オーダ)の概念と実務での使い道

今回の記事は、検索アルゴリズムやソートアルゴリズムの性能を評価する際に用いられる「O(オーダ)」の概念についてです。

「O」は情報処理技術者試験ではよく主題されるものの、業務系SE(特定の業務のシステム設計を得意とするSE)には無縁のものに思われがちです。
しかし、業務系SEでも「システム改修によりデータ量が○倍になるが、このバッチ処理は○分以内に終わらせないといけない」という形で性能面を考えた設計が必要になることがあります。
実際に本番と同じ環境・改修後のデータ量を用意してテストができれば良いのですが、それができない場合は本番環境の現状のデータ量・処理時間から改修後の処理時間を見積もる必要があります。
(この見積もりで求められる性能が出ない場合は、性能を向上させるための設計を考える必要が出てきます)
このような見積もりで、「O」という概念が必要になります。


下記に、代表的なアルゴリズムとそのオーダを記載します。

・線形検索

O(N)

・2分検索

O(logN)

・バブルソート、基本選択法、基本挿入法

O(N^2)

・クイックソート、マージソート、ヒープソート

O(NlogN)

ここで、Nはデータ量のことを指し、Oは処理時間のことを指します。
例えば、「O(N^3)」なら、処理時間はデータ量の増加の割合の3乗となります。
データ量が2倍になれば、処理時間は8倍(2^3)となります。

また、情報処理の分野では、logの底は2とされています。
そのため、「logN」とは、「2を何乗したらNになるのか」を指す値となります。
log2は1(2^1=2)、log4なら2(2^2=4)、log1024なら10(2^10=1024)となります。
例えば、2分検索の場合、階層が1深くなれば(処理回数が1回増えれば)2倍のデータを検索できるようになるので、「2^処理回数=データ量」の関係が成り立ち、O(logN)と表記できます。

例として、データ量が4倍になった時の処理時間の増加量を以下に示します。

・線形検索

4倍(N)

・2分検索

2倍(logN)

・バブルソート、基本選択法、基本挿入法

16倍(N^2)

・クイックソート、マージソート、ヒープソート

8倍(NlogN)

なお、実務で処理時間を見積もる際、OSや製品で用意されている検索・ソートアルゴリズムは原則として高速なものが用意されているので、2分検索やクイックソート・マージソート・ヒープソートと同じオーダで計算して良いでしょう。


いかがでしたでしょうか。

情報処理技術者試験で学んだ知識が本当に実務で役に立ったのが個人的に印象的だったので、記事として書きました。
これ以外にも実務で役に立つ知識は少なくないので、単に合格するために試験勉強するのではなく、実務で使える引き出しを増やすために勉強した方が良いと個人的には思っています。

これからも実務で使える/使えたことがあれば、記事として発信していきたいと思います!

「モジュール強度とモジュール結合度」の図解

情報処理技術者試験では、モジュール強度・モジュール結合度は頻出です。
モジュール強度は強ければ強いほど、モジュール結合度は弱ければ弱いほど、プログラム変更の影響範囲を限定できるため、良い設計と言えます。

しかし、モジュール強度やモジュール結合度は参考書では文章のみで解説されることが多く、なかなかイメージできない方も多いのではないのでしょうか。
そこで、モジュール強度とモジュール結合度について、以下に図示してみました。

小売店のシステムを模した例としています。
また、「モジュール」は「mdr」と表記しています。

この図を見れば、モジュール強度が弱い場合やモジュール結合度が強い場合に、プログラム変更の影響範囲が広がりやすくなってしまうことをイメージしやすくなるのではないでしょうか。

・モジュール強度が弱く、プログラム変更の影響範囲が広がる例
 「売上履歴管理機能」に改修が入り、返品についても管理できるようになった。
 モジュール強度が連絡的強度以下の場合、「売上履歴管理機能」の改修が同一モジュール内の別の機能に影響を及ぼす可能性があり、影響調査や修正の工数が増大する。

・モジュール結合度が強いと困る例
 「売上履歴管理mdr」に改修が入り、「在庫管理mdr」とは終了時の挙動が別々となった。
 モジュール結合度が外部結合以下の場合、モジュールの結合方法を変更せざるを得なくなり、影響調査や修正の工数が増大する。