2015年7月19日日曜日

[システム開発]メタデータと設計自動化

 コンピュータシステムの効率化を目指す上で目標とすべきは、設計及びコーディングの自動化である。設計の自動化は、コンピュータが最適と思われる設計を自動で行うものである。前述した通り、システムを使う側は「サービス」という単位でシステム機能の提供を受けることになるため、設計自動化とはこの場合、既存サービスを組み合わせて1つのパッケージとしたものを提供することを指す。
 既にgoogleなどでは実装されていると考えられる。ユーザの検索傾向から年齢、性別、性格、趣味などまでほぼ完全に特定し、そのような人間が好みそうな広告を自動で提供している。このような仕組みは、他の分野にも適用することができる。メタデータを使ったコーディング自動化の仕組みを使う場合は、人間が記述したロジック部分をテンプレート化することによって、カスタム部分のコーディングまで完全に自動化しておくことにより、コーディング自動化の仕組みを、設計自動化につなげていく道筋ができる。
 超高効率なシステム体系が出来上がると、システム作成とは数億ステップ~数兆ステップの中から必要な機能だけを抽出するという作業になる。「こういう機能がほしい」というリクエストを受けてできたカスタムシステムが数千~数万の数となれば、ほとんどのカスタムリクエストは既存機能のどれかに該当する。統計的に考えても、数万~数十万のシステムを集積すれば、リクエストされるほとんどの機能が既存機能となっていくことは明白である。
 人間が手で書いたカスタムコードは、完全なテストコードも込みでテンプレートを逆起こしして、自動コーディングの枠組みに組み込まなければならない。そうしないと、必要なサービスを抽出して1つのパッケージを作成し、動作確認してからユーザに提供するという設計自動化の仕組みが完全な自動とならない。完全に自動化できないということは、そこに人の手が入るということであり、時間とコストがかかるということでもある。それはシステム効率化が目指すところではない。
 システムを「サービス」という細かい機能の集合としておき、入力パラメータ、出力パラメータ、処理の結果変更したデータをログに記録することによって、万一バグがあった場合でも数億~数兆ステップのデータの「どこがおかしい」かは数秒で識別することができる。管理可能性を失わずに、超大規模システムを作っていくとはそういうことである。ルールを決め、常に管理可能性が崩れていないことを監視し、自動化が完全であることを常に確認する仕組みができて初めて、システム開発の全体を自動化していく展開をうかがうことができる。
 サービスという単位でソフトウェア機能の提供を受けることがスタンダードになれば、人が手書きしなければならないロジックを外部注文する仕組みにも秩序が生まれる。注文者は提供すべきサービスと、永続化層の構成を提供して実装を依頼する。このときセキュリティホールなどの悪質なコードを埋め込まれないようにするためには、全く異なる業者に同じ実装を依頼することである。実装内容が著しく異なる、不要な変数をいくつも使っている、動かすともう一方では出てこない不審な通信データがある、そのような場合はただちにその業者を次回以降の選定対象から外し、ソフトウェアも不採用とする。人が手で書くコードの信頼性を高める手段もまた、統計的な技法によるべきである。
 このような徹底した管理によって、自動化された巨大なコード体系を完成する。生産管理でも在庫管理で財務会計でも、ありとあらゆる分野でこのような本質モデル、メタデータに着目したシステム開発技法により、高品質なソフトウェアを自動で提供する仕組みを整備していくことが可能である。

0 件のコメント:

コメントを投稿