2.ソフトウェアは、部分に還元することが不可能な全体である

大槻, 2014.02.17

 大きなソフトウェア、大きな問題に対処する有効な方法が「分割統治(divide and conquer)」です。モジュール化、段階的詳細化といった方法があり、これらが有効な場面も多いのは確かですが、単純な理論や構造を拠り所としているため、現実世界の問題では限界があります。これは裏を返せば、全体が部分から構成されることを前提とした対象に絞って、できることしかやらないと言っているようなものです。

 こういった制約された良構造を探求すること自身は悪いことではありませんが、少なくとも限界を知る必要があります。科学の世界でも、旧来のデカルト的な世界観や還元主義、機能主義、決定論からの脱却の必要性が広く唱えられてきています。

 近年台頭して来ている複雑系、カオス、進化論などの研究領域では、全体は部分の総和以上の何かがあるとする立場をとっています。全体と部分とが循環しているといってもよいでしょう。企業やチーム、さらには、ソフトウェアそのものを生命体と見なすことは、自然な発想です。複雑系の研究領域では、ニュートン以来の決定論的な考え方脱却し、組織化された生物学的なアプローチをとっています。

 ソフトウェアは、実世界の中に置かれるマシンですから、実世界の振る舞いに左右されます。実世界は自然界であっても、社会であっても複雑系の様相を呈しています。複雑系に関しては、多くの研究者が取り組んでいますが、総じて説明困難な複雑な現象を研究しているものの、まだまだ発展途上の領域で、これといった成果が得られているようには思えません。

 複雑系とは、「数多くのコンポーネントから構成されながらも、単純な運用規則を持つのみで中央制御機構を持たない大規模なネットワークから、集合体としての複雑な振る舞い、複雑な情報処理や、学習、進化による適応が生じるシステム」と定義されます[Michell2009]。また、内部・外部の制御装置やリーダーの存在なくして組織化された振る舞いを生むことを「自己組織化」と言い、単純な規則によって予測の難しい複雑な振る舞いが巨視的に生じることを「創発」と言います。複雑系には、この自己組織化と創発が生ずることが特徴だと言えます。

 ソフトウェアの世界も複雑系の局面は多く出現すると考えられ、この世界での予測や意思決定を行う方法を模索していく必要があります[Johnson2009]。ソフトウェアシステムの改訂や、新しい要求への対応、フィードバックの方法、関与者やチームの行動規範などの局所的な変化が、システム、ひいては、その周辺の社会・経済に対して大局的な影響を及ぼすと考えられます。一方で、複雑系とコンピューティング(計算)との関係も新しいものが出現してきて、遺伝的アルゴリズムや自己増殖型オートマトン、ゲーム論を取り入れたシミュレーションなどを使った予測や制御の方法が整備されてくるかもしれません。いずれにせよ古典的なソフトウェアエンジニアリングの知見だけでは、立ち行かなくなるのは明らかです。