見出し画像

プログラミングシンキング:01 機能ブロック図

あらゆる製品・ソフトウェアはいくつかの機能の集合体です。スマートフォンのメモ帳は、文字を書き留めるだけの単機能と思われるかもしれませんが、もっと分解することができます。まず、文字入力インタフェースから入力された文字をテキストデータとしてメモリなどに記憶する機能、記憶されたテキストデータを画面に表示する機能、コピー&ペーストやカット&ペーストのために表示されたテキストの領域を選択する機能、長文の場合は画面をスクロールする機能、などたくさんの機能から構成されています。

PTC-01 メモ帳

「メモが書ける」というのは機能や仕様というより、その上位の概念です。「メモが書けるソフトウェアを作って」とだけプログラマーに伝えて、一旦書いた文字を修正できないソフトウエアができてきたらどうでしょう。たぶんキレます。ほしい機能を明確にすることを、要件定義といいます。これがあいまいなままソフトウエア開発が進むと悲惨な結果になるのは間違いありません。特に公共が民間に発注するケースで、たびたび問題が起こっています。

有名なオレゴン大学の実験があります。顧客が説明した要件と、プログラマーが開発したソフトウエアは似ても似つかないという皮肉の利いたブランコのイラストをご覧になったことはないでしょうか。さらに、顧客が説明した要件と、顧客が本当に必要だった要件ですら全然違う、というオチです。

PTC-01 ブランコカラー

C.アレグザンダ―・他著,B6判,203p,鹿島出版会,1977年12月
https://xtech.nikkei.com/it/article/COLUMN/20080828/313626/
https://pages.uoregon.edu/ftepfer/SchlFacilities/TireSwingTable.html

顧客が説明した要件と、本当に必要だった要件が一致していないというのは、一義的には顧客の責任です。気の利いたプログラマーなら、顧客はこう言ってたけど、本当に必要な要件はこっちだよな、といいように解釈してくれるかもしれません。でも、言われたことと違うことをするリスクを負わせるのは酷です。

先ほどのメモ帳の要件は、次のように書けます。「〇〇したい」という表現にするのがコツです。したくないことは書かないですからね。

・文字入力インタフェースから文字を入力したい
・すでに入力した文字を修正したい
・入力した文章を別の箇所に移動したい
・入力した文章をコピーしてメールなどの別アプリにペーストしたい
・メールなどの別アプリでコピーした文章を、メモ帳アプリにペーストしたい

「〇〇したい」という言葉を「〇〇する機能」に置き換えれば、機能ブロック図はほぼ完成です。実際には機能はさらに細分化され、階層構造になりますが、それはプログラマーにお任せしてもよいでしょう。

PTC-01 ブロック図

ついでに、不要な要件も追加しておくと、より要件定義が明確になります。例えば、「文字の色や大きさは変更できなくてよい」、「文章の中央揃え、右揃えに変更できなくてよい」などです。

プログラマーは、依頼者の話を聞き始めたときから、どうやってプログラミングすればよいか無意識に考え始めています。依頼者の要件定義があいまいだと、とても不安になるので、矢継ぎ早に質問してくるかもしれません。なにがやりたいのかをクリアにしたいだけで、不機嫌になっているわけではないのです。むしろ不器用かもしれませんが、真剣に向き合っていると思ってあげてください。プログラミング言語で書かれたソースコードは機能のカタマリで、複雑な階層構造またはネットワーク構造になっています。彼らの思考パターンにダイレクトに入力するために、とにかくやりたいことを明確にし、分解することが大切です。機能ブロック図を書けば、自然とできるようになるはずです。


それでは、お題です。道端に設置されている「ジュースの自動販売機」の機能ブロック図を書いてみてください。

PTC-01 自販機


この記事が気に入ったらサポートをしてみませんか?