【プログラミング知識だけでは不十分】システムエンジニアに必要なスキルについて考えてみた

私は自動車部品製造業で社内SEをしています。その中でも主にシステム内製開発業務を行っており、要件定義から基本設計、プログラミングと単体テスト、結合試験と総合試験、システム移行・運用保守まで全工程を行なっています。

最近は様々なプログラミングスクールがありますので、プログラミングを学ぶハードルがかなり下がっています。

しかし自分としてプログラミングを知っているだけではスキルとしては不十分だと感じており、とても仕事を依頼しにくいと感じています。

この記事ではシステムエンジニアとして必要なスキルセットを記載します。

1. テストスキル

プログラミングしてある程度完成したプログラムは6割〜7割は問題なく動くと思いますが、残りの3割〜4割はバグが潜んでいる可能性があります。

テストスキルとしては以下が必要だと考えています。

  • 単体テスト・結合テスト・総合テストなど各テスト工程で押さえるポイントを理解する
  • テストケースをドキュメントとして作成できる
  • テスト結果をエビデンスとして残せる
  • プログラムの品質が問題ないことを定量的・定性的に説明できる

2. 設計スキル

画面設計だけでなく、バッチ処理であればジョブフロー設計、データパターンを意識した詳細設計、エラー制御なども必要です。

大規模システムであればシステム構成図も必要です。新たな業務手順が発生するのであれば、業務フローも必要になります。

  • 画面設計、ジョブフロー設計、プログラム詳細設計
  • システム構成図、インターフェース設計
  • 業務フロー設計

3. システム要件を聞き出すスキル

システムを使用するユーザーは必要な機能をある程度説明してくれます。ただし、ユーザー自身気付いていないが必要となる機能もありますので、上手く聞き出す必要があります。

  • システム要件を文章や図にして、ユーザーに説明する
  • 不明点を確認事項一覧として記録・管理する

4. 非機能要件を定義するスキル

非機能要件とは、処理時間や処理可能最大件数、ディスク容量などのリソースを定めることです。要求機能が実現できていても処理が遅くては使い物になりません。

非機能要件はユーザーに聞いても曖昧な回答しか返ってこないことが多いので、業務内容から予想して決めていく必要があります。

  • 処理時間設計
  • 最大・限界設計
  • リソース設計(ディスク容量・レコード件数、など)
  • 運用設計

5. システム運用設計スキル

システム運用をスムーズに行うためには、定期的な過去データ削除であったり、エラー発生時に出力するエラー情報、エラー通知方法を考慮しておく必要があります。エラーが発生したらどこからどうやってリカバリ処理を実行するのか、リカバリ手順も構築しておかなければいけません。

システムを開発する時間より運用する時間の方が多いですから、運用を意識した設計を行う必要があります。

  • エラー通知情報設計
  • エラー通知設計
  • リカバリ設計
  • 過去データ保存期間設計

6. OS概要

OS側で用意されている機能を知っていればより良いシステムを構築することができます。例えばデータベースに接続する場合はODBCを使用すると簡単に構築できます。ログはファイルに出力するよりはイベントログに出力した方が管理や発見・検索が簡単です。ログイン機能を構築する場合は、Active Directory を使用するとシングルサインオンを実現できます。

  • Windows概要
  • Linux概要

7. ネットワークスキル

今やネットワークに繋がってないシステムはありません。機能要件にTCP/IP通信がある場合は尚更必要です。通信要件がなくても、OSI7階層参照モデルと具体例を知っているだけでシステム提案やトラブルシューティング幅が広がります。

  • OSI7階層参照モデル
  • プロトコル概要
  • ファイアーウォールの仕組み

8. アルゴリズムスキル

アルゴリズムといっても複雑なスキルは不要です。キー突合や最大値・最小値・最頻値の取得、業務カレンダーに基づいた日付計算など、要件実現のために必要なアルゴリズムを書けるようになっておく必要があります。

プログラミング言語フレームワークによっては既に用意されているものもあると思いますが、言語が指定される場合は使えないこともあります。必要な言語で柔軟に構築できるようになっていると強くなります。

  • キー突合
  • レポート出力(改ページ処理)
  • 最大値・最小値・最頻値取得
  • ランク付け

さいごに

プログラミングスクールで勉強すれば確かにプログラムが作れるようになりますが、これらのスキルがあるとエンジニアとしての幅が広がり、質の高いプログラムが作れるようになると思います。

意見がありましたらコメントか Twitterで連絡いただけると幸いです。

返信を残す

メールアドレスが公開されることはありません。