僕はIT業界に就職して10年以上が経ちます。SE(システムエンジニア)やプログラマーに興味があって仕事内容を詳しく知りたい方の為に、自分の経験を踏まえて書きます。
システム開発とは?
システムと言われても漠然としていてイメージが付きにくいかもしれません。例えば、スーパーのレジはPOSと呼ばれるシステムですし、転職サイトで有名なリクルートもシステムです。
SE(システムエンジニア)やプログラマーはこのようなシステム開発に携わるお仕事なのですが、細かい役割分担を知る上で、システムがどのような作業工程で作られていくのかを知る必要があります。
システム開発は大きく分けて7つの作業工程を経て行われます。
- ①要求分析
- ②要求定義
- ③基本設計
- ④詳細設計
- ⑤実装(プログラミング)
- ⑥テスト工程
- ⑦本番リリース
①要求分析とは?
クライアント(お客さん)がシステム化したい部分をヒヤリングする工程です。
②要求定義とは?
要求分析でクライアントからヒヤリングした内容を元に、どのようなことをできるシステムにするのか明文化していきます。
例えば、図書館のシステムを作るとしたら以下のような感じです。
・本の名前でどこにあるか検索できる
・返却予定日を過ぎた本の一覧が表示できる
・ブラックリストの会員には貸せないようにする
③基本設計とは?
要求分析を元にシステム化するために更に細かく機能を定義していくフェーズになります。
図書館の例を使って、本の貸出処理をすることを実現するために以下のようなことを決めていきます。
・貸出処理の際の入力項目は何か
・貸出処理を行うことができる人のユーザー権限は何が必要か?
・ブラックリスト会員の場合、アラートメッセージを出して貸出決定ボタンを押せないようにする
・機能に必要なデータベースの設計を行う
このような感じで機能毎に細かい仕様を設計していきます。
④詳細設計とは?
詳細設計は基本設計で定義した仕様を実現するために、プログラミング寄りの落とし込んで設計するフェーズとなります。
どのような詳細設計書を作るかはプロジェクト毎に異なりそうですが、プログラミングを言語化したようなものと言えばわかりやすいでしょうか。
⑤実装(プログラミング)
詳細設計で定義したものを、プログラムコードに置き換えていくような作業になります。
⑥テスト工程
テスト工程と一括りにされていますが、実はこのテスト工程は複数あります。
まずは、単体テストと呼ばれる細かいモジュール単位のテストを行います。
モジュール単位を繋ぎ合わせて1つの機能になるので、連動させて1つの機能として矛盾がないかなどのテストを行う結合試験。
次は、複数の機能を一通り使ってみてテストを行う連動試験。
図書館を使って例にすると、ブラックリストの会員化をチェックするモジュールのテストが単体テスト、貸出処理が正しく行われることを確認するのが結合テスト、貸出処理から返却処理まで正しく行えるかを確認するのが連動試験という具合です。
⑦本番リリース
⑤実装と⑥テスト工程を試験用の環境を使ってテストが完了したら、本番の環境にリリースします。
本番リリースは移行するための詳細な作業順番を決めて、事前にリハーサルをするなどミスがないように慎重に行う必要があります。(本番リリースのミスはお客様の信頼も損ないます。)
SE(システムエンジニア)とプログラマーの違いは?
ここまでシステム開発の工程について説明させていただきました。
システムエンジニアは①要求分析〜③基本設計を担当して、プログラマーは④詳細設計〜⑥テスト工程を担当します。
僕が所属していた大きなプロジェクトの経験だと、①要求分析~②要件定義を行う人はそのプロジェクト経験が長い極わずかの有識者が担当することが多いです。SEの人は③基本設計がメインではありますが、人やプロジェクトによっては④詳細設計や⑤実装なども担当してる方もいます。
基本的にはまずはプログラマーとして経験を積んで、それからSEにステップアップするパターンが多いかと思います。
IT業界の大手企業に就職した人はいきなりSEで活躍するという方も多いようですが、プログラム経験が有る方が良いという考えで、開発会社に派遣してプログラミングを学ばせているというのも見たことがあります。
24時間いつでも障害発生時は対応が求められる
システムにトラブルが起きた時、24時間いつでも即時対応が求められるプロジェクトもあります。
プロジェクト有識者の人は業務用携帯電話を持たされて、24時間いつでもトラブルの対応を求められたり、場合によっては実際にPCを使って障害の暫定対応を求められることもあります。
僕が所属していたプロジェクトでは当番制になっていて、当番の時は業務用携帯電話とPCを持ち帰ります。夜中に電話が掛かってきて暫定対応したという経験もありました。(後日、必要に応じて恒久対応を行う)
まとめ
・SEは要求分析~細かい機能の仕様書を作成する人
・プログラマーはプログラミングやテスト工程を行う人
・障害発生時は24時間いつでも対応を行う必要がある
僕は今まで主にSIer業界で働いていました。その経験を踏まえて書かせていただきました。
ITベンチャーのWeb系サービスを展開しているような会社だと、SEやプログラマーという呼び方は使わずにITエンジニアという呼び名を使って、設計からプログラミングまで幅広くできるフルスタックエンジニアを求めているようなイメージがあります。
初めてIT業界へ就職、転職する方の参考になれば幸いです。
コメントを残す