第3章 米国政府支援SDP(Software Design and Productivity)研究開発の動向
(1)ソフトウェア研究の将来
現状は、
●現在のインフラは、低い信頼性、安全性、可用性で、まったく不適切である。
●大規模ソフトウェアプロジェクトの半数は失敗している。
●応用ソフトウェア同士が情報をやりとりできない。
●過去のソフトウェア資産が1兆ドルもある。
との仮説に立って、以下の目標を立てている。
●各領域の専門家がソフトウェアを使いこなせるようにしよう。
●既製品ソフト業界の共通基盤となるアーキテクチャを開発しよう。
●ソフトウェア業界に対し、鍵となる概念・技術を提供しよう。
●プログラマの意図を機械が理解できる形で記録する方法を開発しよう。
●ソフトウェア開発の現状をしっかり認識しよう。
この目標実現に向けて、特に注目すべき領域は、以下であり、
●ネットワーク埋め込み型
●対人インタラクション
●グループインタラクションの計算機支援
●領域専門家のための環境:教員、エンジニア、金融、科学者
その領域で基礎となる科学は、以下であり、
●ソフトウェア物理:並行処理のモデルなど
●ソフトウェア経済学:柔軟性の価値を定量化など
●ソフトウェア行動科学:人間の認知・記憶に関する知見をソフトウェア設計に応用したり、ソフトウェアと人間の役割分担を明らかにしたりすることなど
そのキーポイントは、以下であると提言している。
●ソフトウェア開発のプレイグラウンドを変えよう。
●以下のキーとなる技術を進展させよう。
●ソフトウェア経済学を変えよう
●ソフトウェアでハードウェア を定義しよう。
(ハードウェアがソフトウェアをではなく)
(2)新ソフトウェア開発パラダイム
新ソフトウェア開発パラダイムでは、現状は、以下のような要因によって、複雑さが指数関数的に増加している。
●組込型、モバイル、浸透性、大域性
●長寿命、複数バージョン混在
●共同開発
●利用者ごとのカスタマイズ
この難問題を以下のような革新的概念によって、一挙に解決することが必要である。
●国立ソフトウェア考古学センター構想
●多面的ソフトウェア
●協調開発環境
[国立ソフトウェア考古学センター構想]
ソフトウェアの古典を蒐集および保存し、それをリバースエンジニアリングによって、その古典の芸術的本質を抽出し、Webで公開する。これにより、参考となるソフトウェアアーキテクチャの宝庫として、将来の研究の基礎として、特許取得のための事前芸術研究として、役立て、芸術的表現を奨励することをねらう。
[多面的ソフトウェア]
高級言語、オブジェクト指向プログラミング、デザイン・パターン、特定領域用言語といったこれまでの歩みは、ある側面をより理解しやすくした、あるいは、ある側面をうまく表現したというものにすぎない。本来、ソフトウェアは、様々な異なる意図を表現するものであり、新たなシステムは、共存する異なる側面が互いに影響しあって生まれるものである。このような多面的ソフトウェアについて、従来は認識不測であったが、デザイン・パターン、協調開発環境、アスペクト指向プログラミング、特定領域用言語といった研究分野では、一部、多面的ソフトウェアの考えが取り入れられ始めている。今後、多面的ソフトウェアとしてすべきことは以下である。
●どの側面が肝要か
性能、価格、使い勝手、過去からの連続性…
●各側面をどう表現するか
●諸側面をどう変形・統合しシステムとするか
●特定領域用言語のためのツール整備の加速
[協調開発環境]
協調開発環境とは、ソフトウェア開発のプラットフォームとしてWebを仮想的な議論の場にするものであり、研究すべきことは以下である。
●ソフトウェア開発の社会学
●ソフトウェアプロセスの利用
●考古学センターや多面的ソフトウェアを利用するプラットフォームの創造
これらの革新的概念の研究計画例には、以下のようなものがある。
●側面中間形式(特定領域用言語のための汎用ツール、Weavers?)
●対応代数 (Correspondence Calculus)
●デモプロジェクト (Demonstration Projects)
●領域回復(Domain Recovery)
●ソフトウェア保存 (Preservation)
●ソフトウェア開発民俗学 (Ethnography)
(3)実世界ソフトウェア
今日のソフトウェアは、偶然的複雑性、予測不能性、合成不能性、脆弱性、実世界との相互作用に向かないといった問題点を抱えている。
また、ソフトウェアは「コードの集まり」という考え方にハマッテおり、大規模にするには人力を注ぎ込む、システム全体像の理解が喪失している、仕様とその実現が分離している、といった事態を招いている。
10年後には、どこでもコンピュータだらけになって、これまでの世界とは全く変わった世界になるというのに、今日のようなソフトウェアの作り方をしていたら、世界は危険極まわりない場所となってしまう。それを避けたければ、技術の実施を遅らせねばならず、その場合には、自動車は、コンピュータ制御とはならず、交通渋滞にはまり込んでしまうだろう。
これを解決するには、モデリング言語、システムの合成、変換、過去のソフトウェア遺産の扱い、といった課題に取り組まねばならない。
[モデリング言語]
ソフトウェアの問題点は、「プログラムコード」、あるいは「仕様」にあるのではなく、「モデル」あるいは「設計」にある。すなわち、複雑な機能の実現、設計の理解、質問の定式化、振舞いの予測、といったことを行う際に、それを表現するモデリング言語を我々が持っていないことである。
これを解決するため、以下のような研究を行うべきである。
●システムのモデリング「言語」
●有用な抽象化を見つけること
●計算的システム理論
●組合わせて使える抽象化
●時間・並行・能力などの表現
[システムの合成]
システムを組合せて作る組織的方法、例えば、要素の枠組、組合せの意味論、その場での(on-the-fly)合成、既成のソフトウェア要素との統合、といったことが欠如している。
これを解決するため、以下のような研究を行うべきである。
●意味の枠組みと理論
●方法論 (methods) とツール
●実験台と挑戦的問題
●参照実装 (reference implementation)
●アーキテクチャ枠組みの定義
●分散・分割の戦略
●粒度とモジュラー性の制御戦略
[変換]
異なる抽象間の変換についての理論,例えば、異なる抽象の間の関係、生成器(変換器)、複数の視点を許す抽象化(multi view abstraction)、物理的環境の抽象化、高信頼性ソフトウェアとシステム(HCSS:High Confidence Software and Systems)との関係: 証明つきの変換、といったことが欠如している。
これを解決するため、以下のような研究を行うべきである。
●オープンな生成器インフラ(方法論、ライブラリ)
●生成器の理論
●Methods for correct by construction transformers (?意味不明?)
●変換器のパラメタ化
[過去のソフトウェア遺産の扱い]
過去の遺産を扱う方法論,例えば、システムを徐々に現代化する方法、新しいものを古いものと統合する方法論、といったことが欠如している。
これを解決するため、以下のような研究を行うべきである。
●遺産コードの部品化
●遺産からの抽象化の抽出
●漸次現代化、リバースエンジニアリング
●再設計を安価に ⇔ ソフトウェア遺産からの進化
(4)ネットワーク中心のシステム
今後のシステムは、以下のような状況に進展すると予想される。
●すべてがコンピュータ
●すべてがネットワークコンピュータ
●すべてが相互依存する可能性
●実世界と接続
●ますますヘテロに
●接続はますます多様で不安定に
その状況下で、以下のような応用システムが登場してくるであろう。
●交通制御: 自動車数千台からセンサーデータ
●戦域管理: 敵対環境で多様粒度の調整・任務
●サプライチェーン管理
●科学データの共同解析
数千ユーザ、数千資源に対し、ソフトリアルタイムで問合せ最適化の要請
●家庭内電力管理
このような状況、応用システムにおいては、以下のような技術的課題が生じる。
●資源(QoS, 時間・相互依存・エネルギー消費・大きさ)を意識したプログラミング
●動的な資源の振舞い: 故障・不均一性 等
●ソフトウェア遺産
●危機・信用・制御の管理
●スケールの問題
これらの問題を解決するには、以下のような研究方向とアプローチが必要である。
●「問題」を扱うプログラミングモデル
●「問題」の基本機構
●「問題」の全体を扱える、多レベルの資源管理
●ネットワーク中心の(小規模な)要素を、動的に大規模システムに合成する技術、相互運用性
この他、次のような研究も必要である。
●新たな計算モデルを使うためのツール
●高度に複雑化したシステムの検証・シミュレーション・理解
●大規模分散応用システムの (自動) 構成・管理
これらの研究によって、以下のような効果が期待される。
●社会的には
●教育