SEは一般的に「ITがわかる人」とみなされる。しかし、ITの本質は情報活用技術であり、コンピュータ・システムは手段であり、あくまで顧客の問題解決が目的である。ここでは、コンピュータ・システム構築の現場監督であるSEの仕事内容についてまとめる。
1 SEはシステム全体にかかわるエンジニア
SE(System Engineer)とは、コンピュータ・システム開発のすべての工程にかかわるエンジニアのことである。IT用語辞典e-Wordsによる定義は以下の通り。
コンピュータシステムの設計やシステム開発のプロジェクト管理などをする技術者のこと。対象となる業務を分析して、どのようなシステムがふさわしいか設計したり、プログラマを束ねてソフトウェアの開発プロジェクトを指揮したり、ハードウェアやソフトウェアを組み合わせてシステム全体を構築したりする業務を担う。
プログラミングだけにかかわるプログラマとは違い、システム全体にかかわるということだ。システムとは、複数の要素が関係し合い、まとまって機能する系統のことである。様々なハードウェアとソフトウェアを組み合わせて構築されたシステムが、コンピュータ・システムである。
コンピュータ・システムは、これまで手作業で行われていた業務を効率化するために導入される。SEは、手作業の業務内容を調査分析し、それをコンピュータ・システムに置き換える基本設計をして、細かな仕様を決める。ソフトウェア作成(プログラミング)作業はプログラマに任せ、SEはプロジェクト管理やソフトウェアの開発管理を行う。システム導入後の保守管理も行う(システム開発の基礎知識参照)。
すなわちSEは、コンピュータ・システム構築の最初(調査分析)から最後(保守管理)まで、すべての行程で作業を行うエンジニアなのである。プログラミングという部分的な作業を行うプログラマより、かかわる仕事の範囲が格段に広い。そのためSEには、ハードウェアとソフトウェアからプロジェクト管理まで、多種多様なスキルが要求される。
SEに要求されるスキル
- ヒアリング:顧客の業務内容の調査分析
- プレゼンテーション:コンピュータ・システムの基本設計
- ハードウェア:コンピュータ・システムの仕様決定
- ソフトウェア:開発費と開発期間の見積もり
- ネットワーク:プロジェクト管理
- データベース:ソフトウェア開発管理
- 管理能力:コンピュータ・システムの保守管理
プログラマに要求されるスキル
- プログラミング言語、アルゴリズムとデータ構造、開発ツールやコンポーネントの知識:ソフトウェア作成(プログラミング)
2 プログラマを経験してからSEになるとは限らない
SEはエンジニア(技術者)の一種であるが、細かな作業をコツコツとこなす「職人」ではなく、職人の面倒を見る「管理者」に近い職種である。建築に例えれば、プログラマが大工で、SEが現場監督といえる。プログラマを経験しなければSEになれないわけではない。しかし、現在の日本では、大規模なプログラムであるOS(Operating System)やDBMS(Database Management System、データベース管理システム)などを作る会社がほとんど存在しないため、一般的にプログラマ部門は小規模であり、SE部門やほかの管理部門の配下になっている場合がほとんどである。
3 システム開発手順の規範
規範とはお手本となる手法のことである。コンピュータ・システムの開発手順の規範の1つに「ウォータフォール・モデル」がある。7つの工程があり、順に「基本計画→外部設計→内部設計→プログラム設計→プログラミング→テスト→運用・保守」と進む。
1つの工程の作業が完了したらドキュメント(報告書)を作成し、レビュー(review、検閲)を行う。レビューのための会議を開催し、SEがドキュメントの内容を開発チームのメンバー、上司および顧客に説明する。レビューに合格しないと先の工程に進めず、先の工程に進んだら後戻りしない。後戻りしなくても済むように、各工程の作業を完璧に仕上げ、徹底的にレビューを行うのがウォータフォール・モデルの特徴である。
4 各工程の作業内容とドキュメント
ウォータフォール・モデルの各工程の作業内容とドキュメントの種類を説明する。
各工程で作成されるドキュメントの種類
- 基本計画:システム計画書、システム機能要求仕様書
- 外部設計:外部設計書
- 内部設計:内部設計書
- プログラム設計:プログラム設計書
- プログラミング:モジュール設計書、テスト計画書
- テスト:テスト報告書
- 運用・保守:運用マニュアル、保守マニュアル
基本計画の工程では、SEがコンピュータ・システムの顧客にヒアリングを行い、現状の手作業の業務内容を調査分析する。その結果として作成されるドキュメントは「システム計画書」や「システム機能要求仕様書」などである。
コンピュータ・システムの設計は3つの工程に分けられる。1つ目の外部設計は、コンピュータ・システムを外側(ユーザー側)から見た設計である。取り扱うデータ、画面のユーザー・インタフェースおよびプリンタに印字する帳票などを設計する。2つ目の内部設計は、コンピュータ・システムを内側(開発者側)から見た設計である。外部設計の内容を具現化するための詳細な設計を行う。3つ目のプログラム設計は、内部設計の内容をプログラムに置き換えるためのさらに詳細な設計である。以上の3つの工程の結果として「外部設計書」「内部設計書」「プログラム設計」などのドキュメントが作成される。
プログラミングの工程では、プログラム設計書の内容に基づいて、プログラマがプログラムの打ち込み作業(コーディング)を行う。十分なプログラム設計が完了していれば、プログラミングはとても単純な作業となる。ドキュメントとしては、プログラムの構造を示す「モジュール設計書」や、次の工程のための「テスト計画書」が作成される。モジュールとは、細分化されたプログラム要素のことである。
テストの工程では、テスト計画書の内容に基づいてプログラムの機能を確認する。ドキュメントとして作成される「テスト報告書」では、テスト結果を定量的に(数字で)示さなければならない。
テスト結果を定量的に示す方法には「システム機能要求仕様書」に示された個々の機能を確認できたら赤ペンで塗りつぶしていく「塗りつぶしチェック」、すべてのコードの動作を確認したことを示す「カバレージ(coverage)」などがある。「塗りつぶしチェックで95%の機能を確認した。残りの5%には問題があるが、原因が分かっているので1週間以内に修正できる」や、「99%のカバレージを完了した。残り1%はデッド・コード(dead code、決して実行されないコード)なので削除する」といった定量的なテスト結果ならば、合否の判定が容易だろう。
テストに合格したら、「運用・保守」の工程となる。運用は、コンピュータ・システムを顧客の環境に導入(インストール)して使ってもらうことである。保守は、コンピュータ・システムの正常な動作を定期的に確認し、必要に応じてファイルのバックアップをとったり、場合によっては部分的な改造を行うことである。この工程は、顧客がコンピュータ・システムを使っている限り、いつまでも続く。作成されるドキュメントは「運用マニュアル」や「保守マニュアル」である。
5 設計とは細分化のこと
設計とは細分化することである。まず全体の設計図から個々の要素の設計図を作成する。個々の要素の設計図から小さな部品(プログラムのモジュール)を作成する。個々の部品をテスト(単体テスト)してOKなら、全体の設計図を見ながら部品を組み合わせる。組み合わせた部品が正しく連携して動作することをテスト(結合テスト)する。このようにして、大きなコンピュータ・システムが構築されるのである。
これはウォータフォール・モデルの工程でも同じである。基本計画からプログラム設計までは、コンピュータ・システムに置き換えられる手作業の業務を小さな要素に細分化していく作業である。プログラミングから運用・保守までは、細分化された小さな要素をプログラムのモジュールとして作成し、モジュールを結合してコンピュータ・システムに仕上げる作業である。細分化→組み合わせという工程を経ている。
このようなプログラムの設計技法は、すでに様々なものが考案されている。以下のように、細分化の対象として注目するものによって種類が分かれる。
代表的なプログラムの設計技法
- 共通機能分割法:コンピュータ・システム全体で共通する機能
- STS法(Source,Transform,Sink):データの流れ(入力、変換、出力)
- TR法(Transaction):トランザクション(データの処理単位)
- ジャクソン法:入力データと出力データ
- ワーニエ法:入力データのみ
- オブジェクト指向:コンピュータ・システムを構成する物(オブジェクト)
6 オブジェクト指向は保守を容易にする
オブジェクト指向で設計されたコンピュータ・システムは、保守が容易である。なぜなら、現実世界の変化に合わせてコンピュータ・システムを部分的に改造する際に、 その変化に対応するオブジェクトだけを改造すればよいからである。例えば、消費税は3%から5%に変わり、郵便番号は5桁から7桁に変わった。もしも、消費税オブジェクトや郵便番号オブジェクトという単位で細分化が行われたコンピュータ・システムなら、それらのオブジェクトだけを改造すればよいことになる(オブジェクト指向プログラミングの捉え方7選参照)。
7 テクニカル・スキルとコミュニケーション・スキル
SEに要求されるスキルを大きく分けると、「テクニカル・スキル」と「コミュニケーション・スキル」の2つに分類できる。テクニカル・スキル(technical skill)とは、ハードウェア、ソフトウェア、ネットワーク、データベースなどの技術を使いこなす能力のことである。コミュニケーション・スキル(communication skill)とは、人間同士で情報交換する能力のことである。双方向の情報交換の能力が要求される。情報交換の1つの方向は、SEが顧客などから情報を聞き出す「ヒアリング」で、もう1つの方向は、SEが顧客などに情報を伝える「プレゼンテーション」である。
テクニカル・スキルの基礎知識とは、「コンピュータはなぜ動くのか」コンピュータの3大原則や、必要部品から動作確認まで コンピュータの作成プロセス10項など、これまで説明してきたことである。コミュニケーション・スキルの基礎知識とは、一般的な社会人としての常識に加え、「ITとは何かを知ること」だと言える。社会人には立場(stance)というものがある。SEとして顧客の前にたてば、顧客はSEのことをITがわかる人だとみなす。もしSEがITをわかっていなかったらどうなるか。コミュニケーションが成立しなくなってしまうだろう。
SEから顧客への第一声は、「どんなコンピュータ・システムが必要なのですか?」ではなく、「何にお困りですか?」である。顧客が困っていることをヒアリングし、その解決策(ITソリューション)を提案することがSEの役目なのである。
8 ITとはコンピュータ導入のことではない
ITはInformation Technology(情報技術)の略語だが、「情報活用技術」と訳すとわかりやすいだろう。ITの道具としてコンピュータが便利なだけであり、手作業でも情報を活用していれば十分ITだと言える。例えば、名刺を五十音順に分類して整理しているというのもITだし、仕入先・販売先などに分類することもITしていると言える。
SEは手作業の業務を分析し、顧客の抱える問題をコンピュータで解決する手段を提案する。すなわち、「ITができる」ことと「コンピュータを導入する」ことは、同じことではないことを顧客に説明することが必要なのだ。
9 コンピュータ・システムの成功と失敗
成功したコンピュータ・システムとは、顧客の要求を十分に満たしたコンピュータ・システムである。成功か失敗かを判断するのは簡単だ。導入したコンピュータ・システムが顧客に使われていれば成功である。顧客に使われていなければ、どんなに高度な技術だからといって失敗なのである。
10 稼働率を大幅に上げる多重化
稼働率とは、正常に動作している状態の比率である。「稼働率=正常に動作している時間÷(正常に動作している時間+ダウンして修理中の時間)」という計算式で表せる。
コンピュータ・システムを構成する要素を多重化すると、稼働率を大きく向上させることができる。例えば、1台ずつ使われているPCの稼働率が90%で、プリンタの稼働率が80%の機器を考える(実際はもっと上)。このコンピュータ・システムは、ユーザーが入力した全情報の90%がPCを通過してプリンタにたどり着き、さらに90%の情報の80%がPCを通過して印字される「直列システム」だと言える。したがって、全体の稼働率は0.9×0.8=0.72=72%となる。
次に、同じ機能のPCとプリンタを2台ずつ使った「並列システム」にする。PCもプリンタも、どちらか一方が動作していれば、コンピュータ・システム全体はダウンしていないことになる。PCの稼働率は90%であるから、故障率は10%である。PCが2台とも同時に故障する確率は、0.1×0.1=0.01=1%である。つまり、2台のPCをまとめて考えた場合の稼働率は、100%-1%=99%である。同様に、プリンタ2台が同時に故障する確率は0.2×0.2=0.04=4%である。したがって、2台のプリンタをまとめて考えた場合の稼働率は、100%-4%=96%である。以上のことから、PCとプリンタを2台ずつ使った並列システムの稼働率は、0.99×0.96≒0.95=95%となる。
PCとプリンタを1台ずつ使った場合の稼働率は72%であったが、それぞれ2台に増やすと稼働率が一気に95%まで上がった。このような数字を示せば、顧客はたとえ費用が2倍になったとしても納得してくれるだろう。
最後に
特に「4 各工程の作業内容とドキュメント」の仕事の流れはわかりやすく、数字でテスト結果を提示するなど誰しもにわかりやすく伝えるスキルが求められることが理解できる。また「6 オブジェクト指向は保守を容易にする」において、「保守が容易になるような単位でオブジェクトに細分化するのが、プロらしいオブジェクト指向なのです」と述べているように、開発の段階から保守・運用のことも考慮に入れるプロ意識が見て取れる。
「コンピュータ技術を社会の役に立てる!」という意識を持って、これからも実践していきたい。
12回にわたって、矢沢久雄著「コンピュータはなぜ動くのか」についてまとめた。現在では、Amazon EC2やGoogle Appsといったサービスを使うことで、圧倒的に低価格でITサービスを利用できるようになってきている。こういった最新のサービスをITの基礎知識をふまえながら活用することで、より顧客に役立つサービスを提供できるだろう。
非常に丁寧に「コンピュータ」について説明してくださった著者の矢沢久雄氏に、心から感謝する。
![]() |