ソフトウェアには”遊び”がない
以前に書いた、「静的×動的視点で分析する」を書いてみました の続きの話になります。
この時には、構造化設計技法だって、「静的な側面、動的な側面をそれぞれ考え、両方が上手く一つの構造物で実現できるように考えるのが、設計」ということを言いたくて書きました。
それについて反響をいただいた中で、この記事がとても興味深かったので、さらにそれに続けて、私の考えたことを書きたいと思います。
特に、気になった部分を引用します。
後悔^H^H公開日記:別館 : 設計と実装における「動的」 より
・・・前略・・・
以上のように考えると,機械または建築と状態遷移に着目した場合のソフトウェアは,共に "動く".しかしこれらの間には違いがある.
機械または建築の可動部には,"遊び"があり,また他のマクロの物理条件の影響を受けやすい.人が普通に暮らせる範囲の温度や湿度で,ドアが開きづらくなったりする."完璧な歯車は回らない"というのは機構設計をするかたの基礎知識でもあろう.
一方,状態遷移に着目した場合のソフトウェアは,引用元の主張とは異なる特質を持つと私は考える.
「ソフトウェアの挙動には"遊び"が無く,ほぼ100%の再現性で動作する.」
なるほど・・・この表現は、目から鱗って感じでした。
確かに、ソフトウェアは条件が揃えば絶対再現できます。
しかし、ソフトウェアを作られた方なら実感されていると思いますが、その再現をさせるのが大変なのですよね。
なぜならば... プログラムを動かす沢山のパラメタをすべて把握して、その条件の組み合わせを見極めないと、再現ができないからです。
そこで、ハタッと思ったのが 「ソフトウェアは”遊び”がないから、これらが重要なんだ! 」 …と。
一つは、テストです。
機械であれば、遊びを設けて物理的に調整できない誤差は吸収されます。しかし、遊びのないソフトウェアはピッタリ・ピッタリの境界を見極めて、結果の ○ × をハッキリさせておかなければならないのです。そうでなければ、”想定外” なんて動作が起こってしまいます。
実は、最近私自身がソフトウェア・テストを勉強しています。できるだけ ”想定外”をなくすように、しっかりソフトウェアの動作を保障するのは、すごく、すごく、すっご~く難しい ということを、今さらながら実感中です。
そして、もう一つ改めて思ったのが、アーキテクチャ設計の大切さです。
アーキテクチャでしっかり、どこが可動部の接点となるかを見極める。接点を明確にし、各部の関係を疎に保つ。インタフェースを各部の窓口に集約し、やたらといろいろな部分との関係を作らない。
そして、その可動部が解るからこそ、結合テストで、遊びのなさを潰すことができる。
振り返って考えれば、設計の基本そのままですね~。
...と、最終的には設計、テストの大切さを改めて実感した。
という、なんかありきたりの〆でした。 m(. ̄  ̄.)m