システムエンジニアとは?システム開発の工程

2020年5月22日

よくシステムエンジニアとかSEとかという言葉を耳にすると思いますが、いったいどんな仕事をするのでしょうか?
私は30年近くIT業界にいて、いろいろなシステム開発に携わってきました。
しかし私の妻はいまだにプログラムがどんなものか理解していないようです。
二人の子どもからも、「パパは会社で何をしているの」と聞かれたりします。
ここでは、システムエンジニアがどんなことをするのかご紹介しています。

<目次>

システムエンジニアは何をする人?

システムエンジニアは何をする人かというとシステムを開発する仕事です。
システムを開発するには、システムの規模にもよりますが、お客様の要求を分析し、概要設計をして、基本設計・詳細設計をして開発に入ります。いきなり開発に入ることはありません。

システムエンジニアは、コンピュータを使いさまざまな業界のシステムを作る技術者のことで、要求分析を行う上流工程から、概要設計、詳細設計を行う中流工程、コーディング、テストを行う下流工程と各工程に分かれて作業を行います。システムの開発は、一人のスーパーマンのようなシステムエンジニアが上流から下流まですべての作業を行うことはありません。

システム開発の工程(フェーズ)

システム開発の各工程(フェーズ)とその作業内容は以下のようなものです。

1)要求分析 
      お客様の要望をヒアリング し、システム開発に必要なハードウェアやソフトウェア、ミドルウェアを検討し、必要な作業量を見積り全体スケジュール(開発工数、作業期間)を作成します。
検討結果をお客様に提案し案件の受託まで行います。
2)概要設計  
  お客様の要望を実現するために、必要なハードウェアやミドルウェア、ツール、通信ソフト、ソフトウェア(開発言語、データベース)等最適なものを検討します。
3)基本設計
  データベースを使うのであればテーブル設計書、画面系であれば画面設計書などを作成します。
4)詳細設計(モジュール設計)
  基本設計書に従いコーディングできるレベルまで設計書を作成します。  
5)コーディング  
  詳細設計書に沿ってプログラムをコーディングする。 
6)社内テスト
  テスト仕様書を作成し作成されたプログラムが設計書どおりに動くか検証を行う。
7)結合テスト
  外部IFがあれば、外部機器・外部システムとの結合テストを行います。
8)総合テスト

要求分析から基本設計までを上流工程、そこから下の工程を中流工程、下流工程と呼んだりします。
経験豊富な熟練のシステムエンジニアほど上流工程を担当します。

システムエンジニアの役割

システム開発は、開発する案件をプロジェクトと言っています。
プロジェクトは大規模なシステムだと100人、少ないと数人ということもあります。

プロジェクトは一般的には、以下のような構成になっています。

・プロジェクトマネージャー(PM)
・プロジェクトリーダー(PL)
・設計担当者(サブリーダー)
・プログラマー(PG)
・テスター

システムエンジニアは、経験年数に応じてどれかの役割を担当します。
それぞれの役割は以下のようなかんじです。

プロジェクトマネージャー(PM)

プロジェクトマネージャー(PM)は、プロジェクトの人員構成を考え予算管理などを行います。
経験豊富なシステムエンジニアが担当し、
複数のプロジェクトを担当することもあります。

プロジェクトリーダー(PL)

プロジェクトリーダー(PL)は、プロジェクトの進捗管理やプロジェクトの全体管理を行います。
少人数のプロジェクトでは、PLが設計やコーディングも行います。

設計担当者(SE)

設計担当者は、例えば画面系、帳票系、通信系などの設計を担当しプログラマーにコーディングを依頼します。
プロジェクトの中では、サブリーダーの存在です。
ここをSEとも言っています。
少人数のプロジェクトでは、設計担当者(SE)がコーディングも行います。

プログラマー

設計担当者が作成した詳細設計書をもとにプログラミング設計をしてコーディングを行います。
システムエンジニアになりたての人は、プログラミングを担当することが多いです。
少人数のプロジェクトでは、自身でテストも行います。

テスター

大規模のシステムでは、テスターがいて仕様書にもとずいてテストパターンを作成し、仕様どおりにシステムが機能するかテストを行います。

大きなプロジェクトだと役割が細分化されますが、5人~10人の小規模なプロジェクトでは、PMが無くてPLがSEも兼ねたりします。もっと小規模なプロジェクトではPLが設計からPGからテストまで行います。

専門分野のエンジニア

システムエンジニアはどちらかと言うと開発が主体ですが、他にインフラエンジニアやデータベースエンジニア、ネットワークエンジニアという専門分野のエンジニアがシステム構築にかかわっています。

インフラエンジニア

システムエンジニアはどちらかというと開発主体ですが、ソフトウェアの開発とはちょっと違って、社内のサーバーやPCの管理、ネットワーク、セキュリティーを管理するエンジニアをインフラエンジニアと呼んでいます。

データベースエンジニア

データベースを専門的に担うエンジニアをデータベースエンジニアとよんだりします。
オラクル社やSybase社などのエンジニアがこれにあたります。
データベースの導入、サポートを専門に行います。

ネットワークエンジニア

ネットワークを専門的に担うエンジニアで、ネットワーク専門の会社があります。
社内のネットワークの管理を外部のネットワーク会社に委託している会社も少なくないです。
ネットワークはかなり高度なスキルが必要で、自社にこうしたエンジニアを確保するのが難しいからです。

システムインテグレーター

ユーザーからシステムの企画、構築、運用・保守までアウトソーシングするサービスを提供する会社をシステムインテグレータ(SI)と呼んだりします。
日立やNRI、IBM、HPなどのコンピュータメーカなどがこれにあたります。
こうした大手はユーザーからシステム構築から運用まですべてを受託し、開発をいくつかのソフト会社を使って行ったりしています。ソフトウェアの開発はコストの安い中国やインドに外注に出したりしています。