>>Top Page >>techblog

詳細設計はやめよう - 論理の記述に自然言語が適さない理由

written by a2c_s on 2017-03-03

ソフトウェア工学における過ちの一つに、プログラム言語で記述することを自然言語で詳細に記述したドキュメント、いわゆる詳細設計書を作ってからプログラムを書けば間違いが少なくなり、内容を専門家ではない人も理解でき、保守性があがる。というものがある。

これは本当に大きな間違いだ。プログラムを先に自然言語で記述したところで何一つ簡単にはならず、それどころか分かりにくくなるのだ。

具体的な例で見てみよう。プログラムと同じように論理を扱う数学では記号を使うのが一般的である。なぜ数学者は以下のような代数学の問題を自然言語でなく、記号で数式を表すのだろうか?


x^2 + 21 = 10x
xの解を求めよ

このような代数学の問題を自然言語で表したならどうなるだろう?

数学の歴史において、数学記号が発達する以前には上記のような問題は自然言語で記述されていた。9世紀前半の数学者モハンマド・ベン・ムサ・アル・フワーリズミは「アル・ジャブルの書」の中に先の問題と解法を以下のように書いている(当時の解法なので現代の数学記号の操作によるものとは幾分異なる)。

“””
...たとえば「正方形と数21の和が同じ正方形の根の10倍に等しい」、これはすなわちある平方量で、21ディルハムをつけ加えるとその平方量の根の10倍に等しくなるようなものは何でならないか、ということである

解法 根の個数を半分にすると5になる、これをそれ自身と掛けると25になる, これから平方と結びついた21を引くと,残りは4である。その根を求めると2である。これをもとの根から引き去ると残りは3である。これが求めていた平方の根であり、平方は9である。根の数に新しい根を加えてもよく、和は7になりこれももとめていた平方の根であり、平方自身は49になる。
“””
解析教程<上> (著), Ernest Hairer (原著), Gerhard Wanner (原著), 蟹江 幸博 (翻訳) 出版 シュプリンガー・フェアラーク東京 (1997/10) より

何か分かりやすくなっただろうか?ならないはずだ。おそらく数式を理解できた人でも難しく感じ、数式を理解できない人にはさらに理解のできないものになったことだろう。

この例からわかるのは、抽象的な論理概念を自然言語で書いたところで何一つ簡単にはならず、それでいて記述量は何倍にもなり、しかも専門的な知識を持つ人以外には理解できないということである。

数学が難しいのは記号を使っているからではなく、扱っている概念そのものが難しいからなのだ。

これはプログラムと詳細設計書の関係と同じである(プログラムレベルの詳細設計を書かされた経験のある方はフワーリズミの文が詳細設計の文章に似ていると感じたかもしれない)。詳細設計書を書いたところで何かが分かりやすくなるわけではない。すぐにでもプログラミングレベルの詳細設計書を書くことはやめよう。

なお、アル・フワーリズミは「アルゴリズム」の語源になった数学者でもある。なにもプログラミングにおけるアルゴリズムの語源がフワーリズミの名前にあるからといって、記述方法まで当時の方法に従うことはないはずだ。

© Copyright 2016 by a2c_s.