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

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

[山浦恒央 東海大学 大学院 組込み技術研究科 非常勤講師(工学博士),MONOist]

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

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

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

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

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

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

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

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

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

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

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

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

Copyright © ITmedia, Inc. All Rights Reserved.