バグ検出ドリル(8)電卓プログラムのような小さなプログラムにもバグがいる山浦恒央の“くみこみ”な話(108)(2/4 ページ)

» 2018年07月18日 10時00分 公開

3.「学生のプログラミング」と「商用のプログラム」

 学生が書くプログラムと、ビジネスとして、業務で書くプログラムの違いとは何でしょうか。学生は、経験は多くはありませんが、宿題として出した数百行程度の仕様書とプログラムを1週間程度で力任せに書いてきます。さらに、社会人と比べると労働時間の規制に縛られないため、2〜3日徹夜してプログラミングする時間と体力を持っています。ただし、開発規模は、大きくて1000行程度でしょうか。

 一方、プロのソフトウェア開発者は、自社の関係部署や他社と綿密に連携をとりながら、プログラムを作成します。プロジェクトとして複数人で開発することが多く、小規模プログラムでも数万行の規模になります。

 筆者が考える「学生のプログラミング」と「商用のプログラム」の決定的な違いは、エラーケースと品質に関する考え方だと思います。プログラミング演習や論文でエラーケースは想定しませんし、品質にこだわることもありません。正常ケースさえ稼働すればそれで十分なのです。

カレーの具材 ※写真はイメージです

 まず、エラーケースについて。プログラムを「料理のレシピ」とすると、カレーのレシピでは、「①水1l(リットル)を鍋に入れる。②ガスコンロを点火して、水を90℃に熱する。③玉ねぎ1個を切って鍋に入れる。④ニンジンを1本切って鍋に入れる。⑤ジャガイモを1個切って鍋に入れる。⑥牛肉を200g切って鍋に入れる。⑦カレー粉を加えて煮込む」となります(市販のレシピ本でも、使う調味料やスパイス、野菜の切り方は凝っていても、大きな違いはないでしょう)。「学生のプログラミング」の場合、カレーさえ作れればいいので、この程度の記述で十分です。家庭で、「アルザス風白アスパラガスのブイヨン煮込み」みたいに複雑な料理を作る場合でも、レシピの「粒度」「複雑さ」「記述の範囲」は「カレーの作り方」と同じでしょう。

 一方、プロの技術者のプログラミングでは、「①水1lを鍋に入れる」と聞いて、「断水で水道から水が出なかった場合は、ペットボトルのミネラルウオーターを使う。ペットボトルの水がなければ、近くのスーパーマーケットへ買いに行く。スーパーで水が売り切れていたり、スーパーが閉店していたり……」とエラーケースをたっぷり考えます。「②ガスコンロを点火して、水を90℃に熱する」についても同様で、ガスが点かない場合、カセットコンロを使おう。その時、ガスボンベの残量が少ない場合、スーパーマーケットへ買いに行き……」となります。

 品質に関してですが、カレーのレシピで、学生プログラミングでは、「玉ねぎ、にんじん、ジャガイモ、牛肉を入れるのに5分ぐらいしかかからない」と考えます。「食材の準備に手間取り、お湯が沸騰して蒸発して火事になる可能性はないか」とは考えません。考えつかないことは、当然、テストもしません(と言うより、できません)。学生プログラミングでは、正常ケースで、かつ、「いつも入力しているデータ値の範囲」で正常に動作すればそれで満足します。極めて楽観的ですね。

 一方、プロのエンジニアは非常に悲観的です。事故や事件が起きないか、あら探しをします。単なる「カレーのレシピ」なのに、ガス爆発や断水や火事、包丁で指を切った場合の救急搬送まで心配するのです。

 誤解をしないでいただきたいのですが、筆者は「学生のプログラミング」はダメで、「商用のプログラム」が優れていると言っているのではありません。それぞれに良い点と課題があります。

 「学生プログラミング」の良いところは、ある意味、趣味でプログラミングをしますので、時間とお金を好きなだけ注げることです。「商用開発」だと、そんなぜいたくは許されません。利益が出ないプロジェクトは、容赦なく途中打ち切りになります。

 「学生プログラミング」がソフトウェア業界に大きく貢献した好例が「UNIX」です。学生が中心になって、OSのソースコードを開発・保守・公開し、配布しました。これにより、ソフトウェアの技術が世界的に急激に上がり、共通の基盤でアプリケーションを開発する機運が産まれ、ソフトウェア開発を志望する学生も増えました。少なくとも筆者にとってUNIXの誕生は、ソフトウェアを一般に広めた革命的な出来事でした。

Copyright © ITmedia, Inc. All Rights Reserved.