ソフトウェア設計コンサルタント、っていう職種があるかどうかは怪しいのですが、そういう名刺を作ろうかなと画策中です。それで、コンサルタントって名乗るからには、何かをサポートできないといけないですよね。当然ですが。
設計というのが何処の部分を示すのかというと、ウォーターフォール的に言えば、要件定義と開発/実装の間です。そして、重要なのは先のエントリで説明しましたが、プログラム言語に依存しません。勿論、プログラム言語特有のメリットを使う場合もあるでしょうが、システムをトップダウンで見たときは、特定のプログラム言語、ライブラリに依存しないほうが、実装上の選択肢が多くなり、開発費等のコスト削減に寄与できます。当然、スケールも柔軟に考えることが可能です。
そんな訳で、最初は「システム設計」から入りましょう。
システム設計なんて大層な名前がついていますが、所謂、どんなシステム構成にするの?ってのを図示します。
システム構成のパターンは、ほぼ決まっています。
・スタンドアローンのアプリケーション(インストールアプリ、ゲーム)
・クライアント/サーバー型
・不特定多数のWEBサイト
・特定人数のWEBサイト(SNS)
・UIを持つWEBサービス(ブログツール)
・UIを持たないWEBサービス(金融、株式データサービス)
などです。この他にもいくつかあるでしょうが、大抵のものはこの範囲におさまってしまいます。
これにデータベースの有無が関係します。データベースの有無は、既存のデータ/テーブルを使うのか、新規にデータベースを使って良いのか、に関係してます。
これらを図に書くと、
となります。
新規システムの場合は、ネットワーク回線速度も含めてすべて設計する訳ですが、ほとんどの場合は既存のリプレースになります。なので、それぞれの箱や線について、既存の制約を書きだしていきます。
例えば、不特定多数のWEBサイトを再構築する際のチェックポイントを抜き出します。
チェックポイントの抽出は簡単です。
・接続点
・動作点(コンピュータそのもの)
にマークを付けます。動作点については、
・CPU
・DISK
・MEMORY
を調べます。この根拠は microsoft のパフォーマンスチューニングのwebページにあります。
# ちょっとリンク先を失念。
と言う訳で、システム構成を決めるときには、
・CPU
・DISK(永続化の容量)
・MEMORY(必要メモリ、推奨メモリなど)
・NETWORK(回線速度)
を決定します。これはシステム要件(応答速度、1分間の応答数)から来るもので、そのままシステムを構築するときのハードの値段に関わってきます。
# SE的に見れば、二重化の問題もありますが、ここでは
# ソフトウェア開発の視点で見ています。
と、ここまでできればシステム設計の基本は完成です。
逆に言えば、先の要件(CPUやDISKなど)を満たさないシステム設計は意味を為さないので注意が必要です。
なところで、その1はおしまい。事始めなのでこれくらいにしておきます。
その2は、先にシステム設計/構成を、もっと論理的に考える方法を説明します(予定)。
>システム構成のパターンは、ほぼ決まっています。
やっぱり、、そうですよね。。
一般企業のシステムであればなおさら。
言語に依存しない、というのは実感してます。
というか、そういう目で眺められることを目標にしています。
この手のテンプレートは、大手SEであればネットワーク部門が大抵持っている(暗黙知も含めて)はずなので、
それほどブレはないのかなぁ、と思っています。自社サーバーの導入も含めて。
特に中小企業の場合は、ほとんど典型的なパターンだし。
ネットワーク構築の場合には、ルータやらIPの設定やらが入ってくるので、
・ネットワーク機器の選定
・ネットワークの取り回し計画(設置階が異なるととか
の考慮が必要ですが、ソフトウェア開発には、論理的な設定があれば十分。
となると、トポロジー的な設定が頭に入っていれば、この手のシステム構築はそんなにパターンはないでしょうね。
むしろ、要求定義の中に機能外要件(応答時間数とか)の問題が、ネットワーク構築には必要です。