構造化プログラミング

構造化プログラミング

構造化って良く聞くけど実際のところについてよくわからないと言う声を聞くことがあります。
本稿ではソフトウェア工学において必ず出てくる構造化プログラミングについて、簡単に学びます。

ソフトウェア工学

1968年にドイツのガーミッシュで開催されたNATOのソフトウェア会議でソフトウェア工学と言う用語が使われ広く知られるようになります。
当時はCOBOLやFORTRANなどの高級言語も標準化しソフトウェアの大規模化、複雑化により開発スケジュールや品質が大きな問題となりつつありました。
会議ではソフトウェアも他の工学分野同様に理論、実践に裏付けられた必要があると提言しています。

スパゲッティコード

当時のコンピュータはメモリも小さいことから、可読性よりも実行効率(決して開発効率ではありません)を重視し職人芸的なプログラムが横行しました。
プログラムがソースコードを行ったり来たりし複雑に絡み合っているため、スパゲッティコードなどと呼ばれています。

この職人芸的なプログラムからの脱却を目指し、「構造化プログラミング」が生まれます。

構造化プログラミング

構造化プログラミングの目指すところは「高品質」で「保守しやすい」コードで書かれたプログラムを行うことです。
基本的には「順次」「分岐」「反復」の各処理で構成されます。

構造化プログラミング

順次

名前の通り順に処理を行います。
プログラムの基本ですね。

分岐

真偽(Yes or No)を判定して異なる処理を行います。こちらも基本ですね。
単純に考えるとプログラムは順次と分岐だけで作ることが出来ると思いませんか?
実際、構造化プログラミングの誕生前はこのように考える技術者も多かったはずです。

反復

反復とは繰り返し処理です。繰り返す回数や繰り返しをやめる条件になると反復処理から脱出します。
繰り返す回数や条件を判定する部分は確かに分岐になりますが、より大きな視点から見ると分岐とは異なる目的であることが解ると思います。
このようにプログラマの意図を理解しやすくするため、分岐と反復は明確に分けられているのです。

構造化言語

構造化プログラミングと似た言葉に構造化言語があります。
構造化言語とは構造化プログラミングの「順次」「分岐」「反復」を言語仕様として搭載されているプログラミング言語になります。
例えばC言語では分岐はif文、反復はfor文などで記述することが出来ます。
高級言語などと呼ばれることもあります。
※この項はプログラムの講義では有馬線の詳細については触れません。
C言語について学びたい方はこちらを参照してください。

構造化言語=構造化プログラミングではありません

間違われる方が多いのですが、構造化言語=構造化プログラミングではありません。
思い出してください、構造化プログラミングの目指すところは「高品質」で「保守しやすい」コードで書かれたプログラムを行うことです。
そしてスパゲッティコードを駆逐することでもあります。
先ほどの「順次」「分岐」「反復」だけでそれが実現出来ないことは明白ですね。

「高品質」で「保守しやすい」コードの為には、他にも様々な「縛り」が必要になってくるのです。
結局プログラミングとはこの縛りと戦いでもあります。
昨今はプログラム規模も大きくなり、単独での開発は難しくなってきました。
このようなプロジェクト開発ではこの縛りを受け入れながら、「高品質」で「保守しやすい」コードを作成することがさらに重要になってくると思われます。