ソフトウェア開発

の基本

システムを構成するものとは?

ハードウェア

ハードウェアは実体を持ち目に見える機器です。 例)サーバ、ネットワーク機器、ストレージ、PCなど
ソフトウェアがないと動作しません。複数のハードウェアを組合せシステムを構成することが多いです。

ソフトウェア

こちらは物理的な実体を持ちません。プログラミング言語で記述されハードウェアを動作させます。
ソフトウェアの種類により以下のものがあります。
OS、ミドルウェア、アプリケーション等

ハードウェアの種類

種類概要
サーバサービスを提供するコンピュータ PCと比べ、高性能/高可用/高価格
ネットワーク機器コンピュータ同士をつなげる機器、スイッチとも呼ばれる L2スイッチ/L3スイッチ/ルータ/ファイアウォール等がある
ストレージデータを保管しておくための装置 複数のドライブで構成し、大容量/高速アクセス/ドライブが故障時のデータ復旧が可能
PC業務で使用するコンピュータ、いわゆるパソコン クライアント/サーバにおけるクライアントしても機能する

ソフトウェアの種類

種類概要
OS       Operation Systemの略 5大機能(タスク管理/メモリ管理/ファイル管理/周辺機器管理/APIの提供)を有し、ハードウェアの制御とソフトウェアの管理を行う Windows/Linuxなど
ミドルウェアOSとアプリケーションの中間に位置し、OSではできない機能を提供するソフトウェア DB/運用管理など
アプリケーション特定の目的のために作られたユーザが利用するソフトウェア

システム構成

フレームワーク

汎用機と呼ばれる1つのコンピュータが基幹業務やデータの処理を担う集中処理システムです。
利用者はコンピュータに接続されている入力機能のみの端末から操作します。

クライアント/サーバ

利用者が操作する端末(クライアント)とサービスを提供するコンピュータ(サーバ)で構成し、クライアントとサーバで処理を分担させるシステムのことです。
サーバはAP(アプリケーション)やDB(データベース)など用途に応じて複数用意することが多くあります。

クラウド

インターネット経由でサーバ、データベース、ストレージ、アプリケーションなどのITリソースを利用したシステムのことです。
自社でサーバ、ストレージなどのハードウェアを用意する必要がありません。

《システム構成例》

ソフトウェアライフサイクルとは?

ソフトウェアライフサイクル

ソフトウェアライフサイクルとは、システムは"作って終わりではない"という考え方です。
下図のように運用/保守を繰返し、保守対応ができなくなったら新システムの企画から行っていきます。

プロセス概要
企画経営事業の目的、目標を達成するために必要なシステム化の方針と実現するための計画を立てる
システム開発要求分析、要求定義、設計、実装、テストを行う
運用システムの管理、業務的なイベント対応を行う
保守システムの維持、改善、拡張を行う

システム開発モデル

ウォータフォール開発
最初に立てた計画通りに工程毎に開発を進めていきます。
開発工程とテスト工程を対応させた
上図のようなV字モデルがあります。

〈アジャイル開発〉
スプリントと呼ばれる短期間で要件定義→設計→開発→テスト
を繰返しながら開発を進めていきます。
早い時期からテストを行うため
重要な問題を早期に発見することが可能です。

ウォーターフォール開発とアジャイル開発の特徴

ウォータフォール開発アジャイル開発
開発期間長い短い
開発規模大規模開発向き小~中規模開発向き
変更対応難しい柔軟に対応できる
進捗管理管理し易い管理し難い
品質担保し易い担保し難い

システム開発工程(開発工程)

工程名作業担当概要
ユーザ開発 ベンダ
要求分析ユーザがシステムで何を実現したいのかを定義する。
要件定義ユーザがやりたいことを漏れなく確認し、システム構築の仕様を定義する。
基本設計ユーザと開発者がともにソフトウェアがどのように動作するかイメージできる様、機能の洗い出しとユーザの目に見える部分を設計する。
詳細設計開発者向けの設計書として入力と出力間のユーザの目に見えない内部処理を設計する。
実装   詳細設計に基づきプログラミングを行う。

システム開発工程(テスト工程)

工程名作業担当概要
ユーザ開発 ベンダ
コードレビュー以下のような観点にてコードのレビューを行う。 ロジックが正しいか、コーディング規約に則っているか
単体テストプログラムを構成するモジュール単位にテストを行う。
結合テスト複数のモジュールを結合しテストを行う。
システムテスト全てのプログラムを結合しシステム全体のテストを行う。
受入テスト要求を満たしているかシステム全体のテストを行う。

プログラムの種類

オンラインプログラム

オンラインプログラムとは、イベント(ユーザからのWeb画面操作など)を契機に処理を実行します。
リアルタイム処理とも呼ばれ、即時性を求められます。(数秒~数十秒程度)

バッチプログラム

バッチプログラムとは、ある決められたタイミング(毎時/日次/週次/月次)で定期的に処理を行います。
バックアップ処理のように数時間かかる処理もあり、JP1(ジョブ管理)やHULFT(ファイル転送)などのアプリケーションを
使用することが多いです。別名、一括処理とも呼ばれています。

WebアプリケーションのMVCモデル

Webアプリケーション開発では、MVCに対しフロントエンド/バックエンド開発と呼ばれています。
View開発                  :フロントエンド開発
Model/Controller開発:バックエンド開発

Model

入出力用のデータ処理/管理、DBへのアクセスを行う

View

画面のデザインやレイアウトのHTMLを生成する

Controller

ModelとViewの仲介を行い、Viewから受け取ったデータをModelに渡し、Modelに処理されたデータをViewに渡す

Webアプリケーションで使用する主な言語

言語特徴
フロントエンド  HTML/CSSHTML:Webページの構造を作成する CSS   :Webページのレイアウトやデザインを整える
JavaScript動的なWebページを作成するプログラミング言語 元々ブラウザで動作するプログラミング言語だが、サーバサイドで動かすフレームワークも登場している
バックエンド  Ruby日本人が開発したプログラミング言語 フレームワークがほぼRuby on Railsに限られるためフレームワークを学ぶ学習時間が少なくて済む
PHP動的なWebサイトを簡単に開発できる フレームワークはいくつもある
JavaJavaVM上で動作し、Windows/Linuxなど色々なOS上で実行できる デスクトップアプリ/スマホアプリなど開発の汎用性は高い フレームワークはいくつもある

その他主な言語

言語特徴
PythonWebアプリケーション開発も可能 ディープラーニングのようなAIの分野で使用されることが多い
C#Webアプリケーション開発も可能 Unityというゲームエンジン上でゲームプログラミングとして使用されることが多い
C言語アプリケーション、組み込みなど汎用性が高い LinuxのOSにも使用される
C++C言語にオブジェクト指向を取り入れたもの アプリケーション、組み込み、スマホアプリなど汎用性が高い

ソフトウェアの開発手法

スクラッチ開発

ゼロからオーダーメイドでオリジナルシステムを開発する手法です。

パッケージ開発

販売されているサービスやパッケージソフトをカスタマイズし開発する手法です。

スクラッチ開発とパッケージ開発の特徴

スクラッチ開発パッケージ開発
開発費用高コスト低コスト
開発期間長い短い
運用保守必要必要
カスタマイズ性高い低い