ソフトウェア開発
の基本
Contents
システムを構成するものとは?
ハードウェア
ハードウェアは実体を持ち目に見える機器です。 例)サーバ、ネットワーク機器、ストレージ、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/CSS | HTML:Webページの構造を作成する CSS :Webページのレイアウトやデザインを整える |
JavaScript | 動的なWebページを作成するプログラミング言語 元々ブラウザで動作するプログラミング言語だが、サーバサイドで動かすフレームワークも登場している | |
バックエンド | Ruby | 日本人が開発したプログラミング言語 フレームワークがほぼRuby on Railsに限られるためフレームワークを学ぶ学習時間が少なくて済む |
PHP | 動的なWebサイトを簡単に開発できる フレームワークはいくつもある | |
Java | JavaVM上で動作し、Windows/Linuxなど色々なOS上で実行できる デスクトップアプリ/スマホアプリなど開発の汎用性は高い フレームワークはいくつもある |
その他主な言語
言語 | 特徴 |
Python | Webアプリケーション開発も可能 ディープラーニングのようなAIの分野で使用されることが多い |
C# | Webアプリケーション開発も可能 Unityというゲームエンジン上でゲームプログラミングとして使用されることが多い |
C言語 | アプリケーション、組み込みなど汎用性が高い LinuxのOSにも使用される |
C++ | C言語にオブジェクト指向を取り入れたもの アプリケーション、組み込み、スマホアプリなど汎用性が高い |
ソフトウェアの開発手法
スクラッチ開発
ゼロからオーダーメイドでオリジナルシステムを開発する手法です。
パッケージ開発
販売されているサービスやパッケージソフトをカスタマイズし開発する手法です。
スクラッチ開発とパッケージ開発の特徴
スクラッチ開発 | パッケージ開発 | |
開発費用 | 高コスト | 低コスト |
開発期間 | 長い | 短い |
運用保守 | 必要 | 必要 |
カスタマイズ性 | 高い | 低い |