ソフトウェアエンジニアの仕事とは?
ソフトウェアエンジニアとは、顧客が要望する機能を実現するソフトウェアを開発する人材であり、ソフトウェアの設計やプログラミングを主に担当します。同類の職種にシステムエンジニア(以下SE)がありますが、SEは、システムの企画、要件定義、全体設計など主に上流工程を担当します。ソフトウェアエンジニアは、それを受けて具体的なソフトウェアやデータベースの設計、プログラミングを担当します。それでは、ソフトウェアエンジニアのどのようなものか、情報システムの開発プロセスに沿ってご説明します。(1)企画提案
情報システムは、ユーザー企業の目的に合ったものを開発する必要があります。ここでは、企業のニーズをヒアリングし、システムの企画を立案します。このフェーズでは経営的な視点も必要なため、経験を積んだSEが対応します。
(2)システム仕様作成(要件定義)
システム企画を受けて、システムの概要(機能、ハードウェア構成、ネットワーク構成、スケジュール、概算費用など)を決めて、システム仕様書を作成します。このフェーズは、一般に「要件定義」とも言われSEが主に担当しますが、ソフトウェアエンジニアは技術的な面で支援することがあります。
(3)システム設計
システム設計フェーズでは、ユーザー企業の現場担当者と直接打合せを行ない、システム仕様書に書かれている機能などの詳細を決めていきます。また、具体的なハードウェアの種類や台数なども決め、システム仕様書よりも詳細かつ具体的な、システム設計書を作成します。システム設計は主にSEが担当しますが、ここでもソフトウェアエンジニアは、技術的な面で支援します。
(4)プログラム設計
システム設計を受けて、次にプログラムの構造やアルゴリズムを設計します。以前はフローチャートなどを使ってプログラム設計を行いましたが、最近ではUMLなどを利用するケースも増えています。小規模なソフトウェアならプログラム設計とコーディングを同じ人が行うこともありますが、中規模以上のソフトウェアの場合、複数のプログラマがコーディングするため、プログラム設計書を作成する必要があります。
ソフトウェアエンジニアは、ソフト開発の専門家! |
(5)プログラミング
プログラム設計書に沿って、プログラムのコーディングを行います。一般にコーディングはプログラマの仕事であり、ソフトウェアエンジニアはプログラムの設計を主に担当します(場合によっては、ソフトウェアエンジニアがコーディングすることもありますが)。ソフトウェアエンジには、上級プログラマという位置づけにあるケースが多くSEとプログラマの橋渡しを行います。
(6)システム運用
システム運用フェーズでは、システムが当初の目的どおり利用できているかの評価を行います。評価は、稼働率や故障回数、レスポンスタイムなどのハード的なものと、機能が業務に合っているかなどソフト的なものがあります。もし、当初の計画どおりでないなら、機能追加や修正などの改善活動を行います。運用フェーズでは、ソフトウェアエンジニアは、ソフトウェア構造やデータベース構造の問題により、運用トラブルがないかを確認します。もし、問題があればSEと共に改善活動を行います。
このように、ソフトウェアエンジには上級プログラマ(或いは、初級SE)として、比較的早い段階からシステム開発に参加し、開発、運用まで関与することになります。
ソフトウェアエンジニアに必要なスキル
それではソフトウェアエンジニアになるために、必要なスキルについて説明します。(1)プログラミングスキル
ソフトウェアエンジニアは、ソフトウェアの設計を行うため、C言語やVC++、VB、Javaなどのプログラミング言語に精通している必要があります。それも、学校の勉強や机上論だけでなくプログラミングの実務経験が必要です。専門学校などを卒業した人は、まずはプログラマとして経験を積み、ソフトウェアエンジニアにスキルアップするのが良いでしょう。通常、プログラマとして3年から5年程度の経験が必要になるため、企業では中途採用でソフトウェアエンジニアを採用することもあります。
(2)データベーススキル
通常、情報システムはデータベースを使用することが多くあります。そのため、データベースの論理、物理設計ができるスキルも必要です。ただし、データベース設計に関しては、より専門性が高い、テクニカルエンジニアが行いますのでソフトウェアエンジニアは、テクニカルエンジニアと協力してソフトウェア設計を行います。
(3)コンピュータスキル
ソフトウェア設計を行う場合、サーバーやクライアントPC、ネットワークなどの機能や性能を理解している必要があります。ソフトウェアエンジニアは、ソフトウェアの知識や経験だけでなく、コンピュータやネットワークの基礎知識も必要となります。尚、システム設計には、ソフトウェア設計、データベース設計、ネットワーク設計などいくつかのカテゴリがあります。システム設計では、SEが中心となりそれぞれの専門家が協力することになります。
(4)協調性スキル
大きなシステムの開発になると1人のソフトウェアエンジニアでは対応できないので、チーフプログラマ、プログラマなど複数のエンジニアで対応することになります。また、システム開発にはデータベースやネットワークのテクニカルエンジにも参加します。つまり、システム開発も個人ではなくチームで対応するのです。そのため、チームメンバーと協力して仕事をするという協調性が必要になります。