記事を開いていただきありがとうございます。よしハムコロリと申します。ITエンジニアとして25年以上仕事に携わっています。システムエンジニア(SE)やプログラマーってパソコンをかちゃかちゃしてるんだろうな…程度は何となくわかるかもしれませんが、具体的な仕事内容についてはイマイチ分からない方も多いと思います。今回は、システムエンジニアやプログラマーの仕事内容についてなるべく難しい言葉を使わずに書いてみたいと思います。私はウォーターフォール開発モデルを主にやってきましたので、この開発モデル基準での話になります。様々な開発のスタイルがありますので、順番など異なる点もありますが、大体必要な部分は押さえていると思います。
※本記事にはアフィリエイト広告を掲載しています。是非ご利用ください。
依頼主から要件を聞く
主にシステムエンジニアが担当します。「上流工程」と言われる部分の一つです。依頼主から「どんなアプリやシステムを作りたいのか」、「誰に提供したいのか」などの思いを細かく聞き取ります(「ヒアリングをする」と言われることもあります)。多くの経験を積んでいて、かつ、顧客との会話や交渉事ができるなど多岐にわたるスキルが求められます。基本的にはこの方が依頼主に対する窓口になります。
仕様を決める
主にシステムエンジニアが担当します。「上流工程」と言われる部分の一つです。「基本設計」や「論理設計」と言われることもあります。依頼主から聞き取った要件を実現する為の仕様(スペックと言われることもあります)を決めます。アプリやシステムについて、どのような画面構成にするか、何を入力・保存できて、何を画面に表示するか、利用者数や利用頻度などから、どのようなインフラ(サーバやネットワーク)の構成にするか…などを検討します。検討した結果を依頼主に提案して、依頼主の合意を得るまでやり取りを繰り返すことになります。多くの経験を積んでいて、かつ、顧客との会話や交渉事ができるなど多岐にわたるスキルが求められます。また、インフラやデータベース、アプリやシステムの種類など個別の専門性が求められる場合があるので、複数人で分担して行うこともあります。
対応に掛かる時間を見積もる
主にシステムエンジニアが担当します。「上流工程」と言われる部分の一つです。おおよそは前段の「仕様を決める」と同じタイミングで行います。検討した仕様に基づき、開発してから依頼主に納品するまでに掛かる時間(工数(こうすう)と言われることが多いです)を見積もります。利益を生む為の最も重要な工程になります。多くの経験を積んでいる人が担当することが多いです。見積から費用を算出し、依頼主の合意を得る必要があります。依頼主の予算に合わず、この段階で話が無くなる場合もしばしばあります。
スケジュールや人材、役割分担を決める
主にシステムエンジニアが担当します。アプリやシステムの開発を「プロジェクト(PJ)」と言うことが多く、スケジュールや人材、役割分担を決めて、プロジェクトを進めていく人のことを「プロジェクトマネージャー(PM)」と呼ぶことが多いです。前段で見積もった時間からスケジュールを作成し、各種作業の担当者を決めてから、プロジェクトを進めていきます。他部署や人材を確保する人とのやり取りや、開発に携わるメンバーとのやり取りが多く、コミュニケーション能力やスケジュールを管理する能力、開発メンバーのパフォーマンスを上げる為のスキルが求められます。プロジェクトの規模にもよりますが、プロジェクト内に複数のチームが構成されることもあります。
プログラムを作成する為の設計をする
主にプログラマーが担当します。「詳細設計」や「物理設計」、「プログラム設計」と言われることもあります。システムエンジニアが設計した基本設計内容に基づき、プログラムを作成(「実装」、「製造」、「コーディング」と言われることがあります)する為の組み立てをします。プログラマーを目指している人や初心者の人で多いのは、この”設計作業をする認識が無い”ことです。プログラマーは単にプログラミングをするだけではありません。基本設計内容の不明点をシステムエンジニアに質問したり、プログラムを作成する為の調べものをしたり、設計書という文書(「ドキュメント」と言うこともあります)をExcelやWordで作成したりすることもあります。作業の進み具合を報告したりする必要もあります。
意外とここの認識が薄く、ギャップを感じて、プログラマーを目指すのをやめたり、退職したりするケースがありますのでご注意ください。
テスト項目を作成する
まず、テストには以下の様なものがあります
- (1)単体テスト(内部結合テスト)
- (2)外部結合テスト
- (3)システムテスト(総合テスト)
上記(1)については主にプログラマーや前段の詳細設計を行った人が担当します。(2)と(3)については主にシステムエンジニアが担当します。プログラマーを目指している人や初心者の人の中には、意外とこの作業の認識が無いことが多いです。テストを実施する項目を細かく挙げてExcelやWord、Googleスプレッドシートなどで文書を作成する必要があります。プログラマーって意外とたくさん文書を作成しなければいけないのです…。長い話になるので、詳細は割愛しますが、テストは品質の良いものを提供する為にとても重要な工程です。
プログラムを作成する
プログラマーが担当します。前段の詳細設計に基づき、プログラムを作成します。プログラマーのメインとなる作業ですね。詳細設計を行った人が別にいる場合は、設計内容の不明点を質問したりすることもあります。大体の流れは以下の通りです。
- プログラムを作成
- ビルドが必要な言語の場合はビルド実施
- 動作確認
- GitやSVNなどの変更管理システムに作成したプログラム(ソースコード)や画像ファイルなどを登録
プログラマーとしてスキルアップする方法については以下もご覧ください。
アプリ・システム全体をテストする
前段の「単体テスト(内部結合テスト)」については、主にプログラマーが担当します。また、前段の「外部結合テスト」や「システムテスト(総合テスト)」については、主にシステムエンジニアが担当します。テストのみを実施する「テスター」と言う方が担当する場合もあります。
テスト項目が記載されているテスト仕様書に基づいて、アプリ・システムをテストします。テスト結果を記入したり、テストを実施した画面やデータのスクリーンショットや動画を撮ったりしてテスト結果を残す場合もあります(「証跡」、「エビデンス」と言うことがあります)。品質の良いものを提供する為にとても重要な工程です。最後の砦(とりで)と言っても過言ではないでしょう。
依頼主に確認してもらう
依頼主に実際に扱ってもらってアプリやシステムが希望通りのものであるかを確認してもらいます。「受入(うけいれ)テスト」と言われることもあります。スムーズにいかないことがあり、納品の期日も迫っていたりすることから、急ぎでの対応が求められる場合もあります。開発期間が長いものについては、依頼主側も当時の担当者がいなかったり、記憶が薄れていたりすることもある為、食い違いが発覚しやすいところでもあります。
共通の作業:作った文書やプログラム、テスト結果などのレビュー
それぞれに書くと煩雑になる為、ここにまとめて書きます。システムエンジニアやプログラマーなどが作った文書、プログラム、テスト実施結果については、他のメンバーに確認してもらう「レビュー」という作業があります。作業をした本人だと気付けない、気づきにくい点をクロスチェックできます。また、経験が多い人が確認することで、抜け漏れを洗い出すことができます。
納品前の最終判定をする
ここは現場によって異なりますが、納品の前に全ての工程を振り返ったり、見積もり時間と実際に掛かった時間の差異を確認して、納品するにあたっての最後の話し合いを行います。ここまで来て納品しないという選択肢はほとんど無いと思いますが、私の経験では、不足しているテストを実施したり、処理能力を計測したりということがありました。
依頼主に納品する
全ての作業を経て、依頼主に納品します。リリースを行うとも言われます。何年経験を積んでも、このリリース作業は緊張します。生きた心地がしません。ここまで終わったら、プロジェクトは終了を迎えることになります。
保守をする
依頼主との契約内容にも寄りますが、リリースしたアプリやシステムについては安定稼働を維持する為の保守作業というものが必要になります。エラー発生の確認だったり、不具合の修正だったり、各種証明書の更新だったり…と多岐にわたります。不具合の修正については緊急で対応をしなければならない場合もあります。
さいごに
最後まで読んでいただきありがとうございました。内容はちょっとずつ更新していこうと思います。システムエンジニアやプログラマーの仕事内容について理解が深まれば嬉しいです。繰り返しになりますが、システムエンジニアやプログラマーは「意外と文書をたくさん作らないといけない」と思いますので、念頭に置いておくと良いでしょう。
寄付も募っておりますので、もし共感をいただけましたらご検討をお願いします。
コメント