狸系の里 シーズン2

はじめの一歩、二歩、散歩・・

アルゴリズムとソフトウェア

音楽をジャンルから独立した表現法-例えば波形なり、音の特徴パラメータなり-で表現してこれを基礎資料とする。こうすると、この基礎資料を使おうとする人は誰でも計算機プログラム(以下プログラム)を書かねばならないことになり、閾が高い。この事態をどう考えるか。

 

情報技術にはよく似た言葉がたくさん出てきて最初は面食らう。例えばプログラムには、アルゴリズム、ソフトウェアという言葉がある。プログラムは具体的なものを指すが、アルゴリズムとソフトウェアとはどこで区別するか。

筆者は、アルゴリズムはそれ自身で完結した定義をもつ計算手順を指し、他方ソフトウェアは実世界の問題解決のために創作された計算手順を指すと考えている。この定義から、ソフトウェアを制作するにはまず、実世界の問題を定式化するところから始まる。

よく言われる分類基準に拠れば、ソフトウェア制作手順は、要件定義、外部設計、内部設計、コーディングからなる。ここで要件定義は考えている問題を書きだす手順、外部設計は書きだされた問題を部分問題に分割し、各部分問題間で交換される情報を明確にする手順、内部設計は各部分問題を解決するプログラムコードの大きな纏まりを明確にする手順、コーディングは内部設計で与えられた纏まりに計算のためのコードを与える手順を言う。この制作手順に先行して実世界で行われている業務があり、この制作手順に続けて試験と運用が行われる。実世界の業務は更新されることがあるので、ある時点でソフトウェアの前提となる業務の定義からは乖離が起こる。その場合には、要件定義に始まる手順を再試行する。*1この辺りを下図に示す。

f:id:Y_Shigaraki:20170210201045j:plain

言わば、二段目の四つの箱がアルゴリズムの設計に当たり、その上下でアルゴリズムを実世界と対応づける。そこで次のように考えると、前回の帰納と演繹の図式との関連づけが見える。

 

f:id:Y_Shigaraki:20170210201028j:plain

ここで法則の箱の中の前半、要件定義と外部設計の組み合わせと、後半、内部設計とコーディング、試験の組み合わせとを比較すると、後半では、コードを実行する計算機環境に関する情報が追加される。

 

こうしてみると、ソフトウェア工学で言う、要求定義、外部設計、内部設計、コーディング及び試験というステップは、アルゴリズムの具体化に焦点を当てたソフトウェア制作工程の考え方ということが出来るだろう。

 

科学的研究の場では、有限的に計算可能な方法で法則が書けるとは限らないし、帰納/演繹のステップで機能・性能が既知のソフトウェアを使うこともある。また、抽出された要件の全てをコーディングに利用するとも限らない。

それどころか、帰納的な方法では仮説が一つの成果となることから、同じ対象(例えば日本音楽の音階)について複数個の仮説が出されることがある。ソフトウェアはそれぞれの仮説からある目的に沿って作られる事になる。

 

このように、ソフトウェア制作手順を要求抽出から始めて運用までをひとまとまりのものとして考えると、案外それは科学的(自然科学とは限らない)研究プロセスと似たものになっているようにみえる。

一つだけ留意すべき点があるとすれば、アルゴリズムを利用する条件設定のために、業務をある範囲で切り出す必要が出ることがある。この切り出しは、業務を定義する(define-境界線を設定する)ためには是非必要になることだが、要件を書きだすために使う用語の意味に次の影響を与える。その用語が境界線の内外を跨ぐ場合、アルゴリズムには境界線の内がわの意味だけが反映する。例えば「良い環境」のような抽象的な用語に特定の指数の組み合わせを対応づけた場合、「良い環境」とはその指数の組み合わせのことである、という意味づけになり、何故それでよいかはアルゴリズムの外側に置かれることになる。

研究活動の一部としてソフトウェアが作られる場合には、研究の用語で、誤解が起こらないように、明確に要件を書くことで、境界線を跨ぐ用語が起こす問題は避けられると思いたいのだが・・*2

 

それはともかくとして、こういう考えで、ソフトウェア制作手順を組み込んだ研究活動というものはどのようなものになるのだろうか・・

*1:それほど深刻でなければ要件定義まで戻ることはないかもしれない。

*2:現実には伝統邦楽と西洋音楽との間で、他の音楽に関する用語を引用すると、往々にして用語の意味が混乱するのだが。