ソフトウェアって聞いたことあるけど、ソフトウェア開発ってどんなことをするの?
とあまりよく分かっていない方も多いのではないでしょうか。
ITの技術進歩によって、ソフトウェア開発はより身近なものとなってきました。
しかし、IT業界未経験の方にとっては、まだ馴染みのないものであったりします。
これからIT業界を目指す方や、また、ソフトウェアを発注する方にとっても、ソフトウェア開発について理解しておくことは重要です。
IT素人の方や、IT業界未経験の方向けに、分かりやすくソフトウェア開発についてお伝えしていきます。
1.ソフトウェアとは
そもそもソフトウェアというものを正しく理解できているでしょうか。
ソフトウェア(software/SW ※ソフトと略されることもあります)は、コンピュータを動かすプログラムのことです。
対比の言葉としてハードウェアがありますが、これはコンピュータ自体やディスプレイ、マウス、キーボードのように目に見えるものを指します。
一方でソフトウェアは、ハードウェアを動かすためのものであり、目に見えません。
ハードウェアはソフトウェアがなければ動作しないので、組み込まれていないと、ただのモノになってしまいます。
また、プログラムとは、コンピュータが順番通りに処理をするために、コンピュータが理解出来る言葉で書かれたものを指します。
ソフトウェアの種類は主に2つあります。
・オペレーティングシステム(OS)
・アプリケーションソフトウェア
オペレーティングシステムは「システム」とも呼ばれ、基本ソフトウェアの種類になります。
アプリケーションソフトウェアは「アプリ/アプリケーション」とも呼ばれ、応用ソフトウェアの種類になります。
オペレーティングシステム(OS)
情報機器を、人間が使いやすくするためのシステムのことで、アプリケーションソフトに動作環境を与えるソフトウェアです。
キーボードからの入力を受付けたり、入力されたものを画面に表示したり、等とコンピュータを使えるように機能を提供します。
上記のような入出力の制御や、ハードウェアの管理といった、基本的なコンピュータのコントロールを行います。
馴染みがありるかと思いますが、代表的なOSとして、MicrosoftのWindows、AppleのmacOSやiOS、オープンソースソフトウェア(OSS)のLinux等があります。
アプリケーションソフトウェア
オペレーティングシステム(OS)以外のソフトウェアであり、数え切れないほどの膨大な種類が存在します。
そして、オペレーティングシステム(OS)上で動作するものでもあります。
アプリケーションソフトウェアは、ユーザーがコンピュータ上で動かしたい機能を、ダイレクトに実現させるものです。
テキストの入力、表計算、画像の編集といった各用途に併せて、文書作成ソフト、表計算ソフト、画像編集ソフトというものがアプリケーションソフトウェアです。
その他ソフトウェア
先述の2つ以外に、ミドルウェア、デバイスドライバ、ファームウェアといったソフトウェアが存在します。
【ミドルウェア】
オペレーティングシステム(OS)とアプリケーションソフトウェアの中間的な役割を果たします。
アプリケーションが必要な機能を提供します。
【デバイスドライバ】
プリンタやデジカメといったパソコンに接続する周辺機器を制御します。
オペレーティングシステム(OS)の環境の下、動作します。
【ファームウェア】
パソコンやパソコンに接続する周辺機器の内部に組み込まれており、その機器自身を制御します。
オペレーティングシステム(OS)よりも、さらに基本的な制御になります。
2.ソフトウェア開発は何をする?
顧客やユーザーのニーズに対して、現行の業務をどのように効率化したいのか、現行で運用しているシステムの改善は可能なのか等を検討し、ソフトウェア製品を開発します。
ソフトウェア開発は、主に以下のような流れになります。
①要件定義
②外部設計
③内部設計
④開発
⑤テスト
⑥納品
⑦保守
①要件定義
顧客企業の要望を調査・分析して、どのようなソフトウェアが求められているのか、実現すべき機能は何かを確定させていくことが必要になります。
ソフトウェア化の目標、要件の候補洗い出し、要件の選定、選定した要件の優先順位付けをしていきます。
そして、要件定義書と呼ばれる書類に下記の項目を含め、検討事項を落とし込みます。
・現在の業務フロー・システム設計書
・顧客と開発における関係
・解決策
また、工期や予算についても確認して定めていく必要があります。
②外部設計
要件定義の内容を元に、ソフトウェア開発における全体像・仕様を検討していきます。
ソフトウェアにどのような機能を持たせ、どのような結果を求め、どのような動きをしていくか決めます。
外部設計では、主に、ソフトウェアの機能や構造を決めていきます。
全体のインターフェースを設計する必要があるため、顧客企業からの目線を持って作成することが重要になります。
③内部設計
内部設計では、外部設計したものに、より詳細な作成方法を決め、ソフトウェア仕様書を作成していきます。
主に、機能やプログラムが作られるまでのの流れの実装方法を決めていきます。
この仕様書をもって、開発していくので、具体的により明確に、詳細に作成することが重要になります。
④開発
仕様書を元に、プログラミングを行います。
何らかのプログラミング言語でコードを書いていきますが、ソフトウェア開発の場合、JavaやCといった言語が多く使われます。
このコードを書くことを、プログラミング、コーディング、実装等と呼びます。
ただ、仕様書には必要最低限の内容しか書かれていないこともあり、どのように実現するかはプログラマー任せになる場合もあります。
プログラミングはセンスが必要とも言われており、優秀なプログラマーと普通のプログラマーの生産性は100倍も違うと言われたりもしますが、優れたプログラムを書き写して勉強する等、上達する方法はあります。
⑤テスト
ソフトウェアが設計書・仕様書通りに動作するのか検証するテストを行います。
テストにはいくつか種類があります。
【単体テスト】
プログラミングが出来上がったら、個々のプログラムを検証する単体テストを行うものです。
動作検証を行い、不具合を出し尽くすのが目的です。
以降の工程で不具合が発生しないように、この単体テストで全ての不具合を洗い出します。
ロジックの確認、手続きや関数といったものを画面ごとに確認するので、以降で発生するテストよりもテストケースが多くなります。
【結合テスト】
単体テストで合格した複数のプログラムを組み合わせてユニットにします。
そのユニットを検証するのが結合テストと言います。
機能と機能の連携に問題がないか、その不具合を洗い出す工程になります。
結合テストには、主に、トップダウンテストとボトムアップテストの2つに分けられます。
トップダウンテストとボトムアップテストは、上下どちらからテストをするのか、の違いだと認識すると分かりやすいでしょう。
トップダウンテストは、上位モジュールと呼ばれるものを結合させたユニットからテストをしていきます。
上位モジュールは、システムの処理状態、リソースを把握するもので、システム内で下位モジュールを呼び出す役割を持っています。
上位モジュールを先にテストすることで、必要であるはずの機能の漏れや、仕様違いといった不具合を早い段階で潰すことが出来ます。
ボトムアップテストでは、単体テストで合格した下位モジュールと呼ばれるものを結合させたユニットからテストをしていきます。
下位モジュールは、上位モジュールに呼び出されるもので、それぞれで汎用性の高い機能を有しています。上位モジュールに呼び出されて、単体で動いていくものになります。
下位モジュールを先にテストすることで、開発とテストを並行して進めることが出来ます。ただ、上位モジュールへとテストが進んでいった場合に不具合があれば、戻って下位モジュールを修正する必要があります。
【システムテスト】
全体のテストをシステムと言います。
システムテストは、全てのプログラム、データベース、ハードウェア、ネットワークを組み合わせた本番と同じ環境でテストをするもので、総合テストとも呼ばれます。
システムテストにもいくつかの種類があり、負荷テスト、パフォーマンステスト、障害テスト、セキュリティテスト、構成テスト等があります。
作り上げたシステムが、顧客企業から要求されていた機能・性能を満たしていて、品質に不備なく納品出来るものであることをテストします。
本番環境と同じ環境でテストすることで、想定外のデータが存在していないか、使用しているソフトのバージョンでトラブルが発生しないかをチェックしていきます。
【運用テスト】
顧客が実際の扱うデータを基に、ソフトウェアが正常に動作するかを検証します。
運用テストは顧客視点でテストを行うもので、本番稼働をする前の最終テストになります。
検収して受け入れる際に行われるものであることから、受け入れテストと言われたりします。
システムテストと同様に扱われる場合もありますが、最初にも述べたように、「顧客視点」でテストする目的が大きいものになっています。
これで問題がない、と承認が得られればソフトウェアの完成です。
⑥納品
テストをクリアしたら、顧客へソフトウェアを納品します。
開発に使用した設計書やプログラム、運用マニュアルを渡します。
⑦保守
業務システムを納品した後も、ソフトウェアの不具合修正や追加機能の要望に応えていくことや、顧客企業からの質問に答えたりしていく必要があります。
ソフトウェアに不具合があった時の「トラブル対応やシステムの変更」に関する業務のことを指します。
3.ソフトウェア開発で必要なスキル
業務に携わるポジション毎に必要なスキルは異なります。
営業
顧客への企画提案をするための、幅広い業務知識、プレゼンテーション能力、コミュニケーション力が必要です。
社内のプロジェクトリーダー・マネージャー、エンジニアとのやり取りをして工数算出するためにも、社内コミュニケーションも必要になってきます。
プロジェクトリーダー・マネージャー
ソフトウェア開発の全工程をスケジューリングや、顧客と対面して打ち合わせも行っていきます。
開発現場をまとめ、ソフトウェア開発を円滑に進めていく役割を持っています。
実際にプログラムを書いたりはしませんが、リーダーシップや管理スキル、コミュニケーションスキルが必要となります。
システムエンジニア
システムエンジニア(SE/エス・イー)は、顧客からの要求を把握し、どのようなシステムを開発するのかを検討します。
プログラマーとは異なる業務領域なので、分けて理解しておきましょう。
業務を設計していくために、どのようにプログラミングすれば良いのかを考える必要もあるので、プログラミングスキルも必要です。
また、顧客とのやり取りも多いため、コミュニケーション力も必要とされます。
プログラマー
プログラマーは、システムエンジニアから指示された設計書を貰った後、プログラミング言語を使って組み上げていきます。
開発するものによって使用するプログラミング言語は異なりますが、基本的にプログラミングスキルが必要です。
また、テストも行い、事前にバグが発生していないかチェックすることも役割として持っています。
数学的な処理知識や、論理的思考スキルも必要となってきます。
4.まとめ
いかがでしたでしょうか。
ソフトウェア開発について理解出来ましたでしょうか。
IT業界のソフトウェアベンダーに入社した場合や、ベンダーに発注を依頼する場合などもあるかと思います。
事前に知識として身につけておきましょう。