複数のSIer企業での経験から、実際にシステムエンジニアはどんな仕事をするのかご紹介します。新卒からシステムエンジニアを目指している方や未経験からシステムエンジニアを目指している方の参考になればと思います。
プログラミングはするの?
まずは一番気になるプログラミングはするの?と言う疑問についてお答えします。
「プログラミングをする可能性もあるが、メインの業務ではない。」がおそらく現実的な回答だと思います。数千万円、数億円以上など規模が大きなプロジェクトになればなるほどSIerのSE自身が自らプログラミングをする機会は少なくなっていきます。それはプログラミン以外のプロジェクトを管理する仕事で手一杯になるため、それ以外の他の人に任せられる仕事はどんどん任せていくからです。
SIerはプログラミング自体で儲けるわけではなく、最終的に開発したシステムの価値で儲けるため自然な流れと言えるでしょう。プログラミング自体で儲けるのはSESやフリーランスのプログラマーである可能性が高いです。
システム開発の基本的な流れ
まずはシステム開発を行うにあたって基本的な流れを説明します。
フェーズの分け方は色々あると思いますがおおまかに以下のように分けます。
「①提案活動」→「②要件定義」→「③設計」→「④開発」→「⑤テスト」
①提案活動
SIerにはユーザー系や独立系などの分類わけがよくされます。どの分類のSIerであっても、まずは提案活動を行って開発案件を獲得する必要があります。
既存のお客様や親会社から自然と流れてくる案件の話などがあったとしても、提案活動から始めることになります。
提案活動とは「現状このような課題があるので、システム化することでこんな風に効率化させましょう」とお客様にシステム化する価値を理解していただく工程になります。
理解して頂き価値を認識した上でやっと発注していただける流れとなります。
この中でシステムエンジニアが具体的に行う仕事は以下のようなものになります。
1.お客様から現状をヒヤリングし課題を洗い出す
2.どのようにしてシステムで課題を解決するのかを考える
3.資料に起こしてお客様に説明する
提案活動を行うためには業務に関する知識やシステムに関する知識、プレゼン能力など幅広い知識や能力が求められます。
そのため基本的に提案活動はある程度経験を積んだシステムエンジニアが実施することがほとんどです。
②要件定義
要件定義は端的に言うと、システム化する範囲と方向性を明確化する工程になります。
要件定義まで行うとシステムの規模がある程度明確になるため、要件定義後に設計フェーズ以降の具体的な見積もりを行うことも多いです。
システムエンジニアが行う具体的な業務は以下の通りです。
1.現行業務とシステムについてヒヤリング、調査を行う
2.削減する業務、追加する業務を整理し、システム化する範囲を明確化する
3.整理した内容を資料に整理し、お客様の合意を得る
要件定義も提案活動と同様に業務やシステムに関する幅広い知識が必要となるため、経験豊富なシステムエンジニがが実施することが多いです。
③設計
設計フェーズでは要件定義で決めたシステム化する範囲・内容を具体的に設計書として落とし込む作業となります。設計には大きく基本設計、詳細設計があります。
基本設計
画面レイアウト、帳票レイアウト、データベースレイアウトの設計など、入力元、出力元がどのようなものになるか設計します。見た目だけではなく後続フェーズである詳細設計や開発で実現可能なものであるかどうかを考えながら設計書に落とし込む必要があります。ここで後続フェーズをどこまで考慮した設計にできるかがシステムエンジニアの腕の見せどころでもあります。
ただ単に理想だけを追い求めた設計にしてしまうと後続フェーズで詰みます。
詳細設計
基本設計で定めた入出力のレイアウトをシステムで具体的にどのような形で処理するかを具体化した設計を行います。例えばデータベースのレイアウトであれば、数値の項目とするのか、文字列項目とするのかであったり、桁数は何桁として定義するのかなど実際にシステム上で動かすために定める必要がある事項です。
設計フェーズはシステムについて知っていればある程度こなすことができるため、比較的経験年数の浅いシステムエンジニアでも実施できる部分が多くなってきます。
④開発
開発フェーズでは設計フェーズで設計した内容をプログラムとして作成していきます。プログラミングを行うのはこのフェーズになります。SIerにはプログラミングだけをやる人間はあまりいないため、基本的には外部のSESなどから調達してきたプログラミングを生業としているシステムエンジニアにお願いすることが多いです。
開発フェーズにおけるプログラミングについては、比較的狭い範囲の知識があれば行えることが存在するので新入社員として入社したシステムエンジニアはまずこの業務から行うこともあるかもしれません。
ただしここで注意したいのはプログラミングと言っても幅広く、基盤となる部分をプログラミングして開発する部分と設計フェーズで設計した内容をプログラムに行うようなプログラミングの大きく二種類存在します。
SIerは基盤となる機能については自前でプログラミングして自前で持っていることが多いです。
あとは個別の案件の画面や機能だけ付け足せばよいと言う上な状態まで用意しているのです。
個別の案件の末端機能は数が多く人手がかかるため外部から協力してもらうことで迅速に開発を進めることができると言うことになります。
⑤テスト
テストには大きく3種類のテストが存在します。
単体テスト
設計書通りに動作するプログラムになっているか、単体のプログラム単位でテストします。
具体的には1画面の単位や1つのバッチ処理の単位などです。
画面であれば入力チェックが設計通りに行われるかなどをテストします。
結合テスト
単体テストが完了し、プログラム単体では正常に動作することがわかると結合テストを実施します。
結合テストでは複数のプログラムを名前の通り結合してテストを行います。
例えば画面で何かを登録したあとに、他の画面で登録した内容が確認できるかなどプログラム間でのやり取りがうまくいっているか確認します。
システムテスト
システムの本稼働後の状態に近い状態でテストをします。例えば実際に入力されるデータの値を使用してデータを登録したり、外部から連携されるデータについても実際に外部のシステムから出力されたデータを利用したりします。
テスト工程はテスト仕様書さえでできていればほとんどただの作業となる部分もあるため、比較的経験の浅いシステムエンジニアや外部のシステムエンジニアにお願いすることが多いと思います。
まとめ
長文になってしまいましたが、システムエンジニアがどのような仕事をしているなんとなく理解していただくいことができましたでしょうか?色んな種類の仕事がありますが、一部は自分の手を動かしたりお願いしたりとプロジェクトの規模によりけりですが一般的にはこのような業務になると思います
SIerに興味がある方はこちらの記事も御覧ください。
コメント