「システム開発って、具体的に何をするんだろう?」
「システム開発を依頼する前に、必要な知識を身につけたい」
「システム開発の仕事をしたい、どんな能力が求められるか知りたい」
……
そういった疑問や悩みを持つ方に向けて、「システム開発とはどのようなものなのか」を、アクシアのエンジニアに聞いて記事にしました。
この記事では以下のようなことが書かれています。
- システム開発とはそもそもどのようなものなのか
- システム開発の流れ
- システム開発に関わる職種の例とそれぞれの業務内容
- 代表的なシステム開発手法の種類
- システム開発に必要な能力
- システム開発の費用相場
- システム開発を依頼する際の注意点
- アクシアではどのようにしているのか、考えているのか
かなりのボリュームがある記事となっております。この記事がお役に立ちましたら幸いです。
システム開発とは
システム開発とは、業務を効率化させるための仕組み(=業務システム)を作成することをいいます。業務システムの開発以外には、Webサービスやスマートフォンアプリ、パッケージソフトの開発があります。
システム開発の種類
システム開発には、オーダーメイドでシステムを作成する「受託開発」と、WordやExcel、会計ソフトのような「パッケージやサービスを開発し販売するタイプ」の2種類があります。
受託開発の「亜種」として、大手企業の巨大プロジェクトに多くのエンジニアが集結し、開発をすすめるSES(システムエンジニアリングサービス)という業態もあります。SESはエンジニアを常駐させて、常駐費用で売り上げを立てています。その構造から、多重下請け構造や偽装請負の温床、エンジニアの成長の阻害原因となっていることがあります。
多重下請け構造については、こちらの記事に詳しくまとめています。
アクシアでは
「オーダーメイド」で「業務システム」を開発する事業が主力となっています。業務システムは「基幹システム」とも呼ばれ、コスト削減を主な目的として開発をします。
オーダーメイド開発をすることによって、導入企業特有の要件・要望を汲み取り、汎用的にシステム構築しにくい部分もきめ細かくカバーすることができます。
逆に請求管理、人事管理、経費精算など汎用的に要件を実現できる分野は向いていません。
アクシアのシステム開発は下請けに発注せず、要件定義からシステムリリース、運用保守まで完全に自社で全工程をおこないます。
これにより、3つのメリットを提供できます。
- 多重下請け構造のマージンによる無駄な開発コストの削減
- コミュニケーションのスピード感
- チーム体制での対応で「持続可能な」システム運用の実現
実際の開発費用・期間をまとめた資料を無料で差し上げます。資料請求はこちら>>
システム開発の流れ
システム開発の流れは以下のようになります。
要件定義
外部設計
内部設計
プログラミング
単体テスト
結合テスト
システムテスト
運用テスト
システム移行
保守・運用
ひとつずつ詳しく見ていきましょう。
要件定義
何をシステム化して問題解決するか(逆に何をシステム化しないか)を明確にする工程です。
なんでもかんでもシステム化してしまうと、予算ばかり高くなり実際には使用しない機能を作成してしまうことになります。
要件定義では、システムで扱うことになるデータ量、ユーザー数、利用予定のデバイスも定義することがあります。
この工程では技術的な知識の他に、コミュニケーション能力や顧客のビジネスモデル、業務フローを聞き取り解消し、提案としてアウトプットできる能力が求められます。
アクシアでは
小規模な開発で受注段階で要件がはっきりしている場合は、要件定義の工数も込みで一括で見積もって受注することが多いです。
大規模で受注段階で要件がはっきりしていない場合は、要件定義〜設計までで一旦受注して、その後の工数見積もりをおこなうこともあります。
以下のものを要件定義の段階で決定することが多いです。
- ドメインやSSLの取得要否
- システムを運用するサーバー構成
- 使用するプログラミング言語
- ミドルウェア(システムが動作するために必要な、サーバー上で動くこととなるサーバーソフト)
お客様の業務の流れを可視化し、システム化する部分を可視化するために業務フロー図を作成することがあります。
関連記事:システム開発の重要な工程「要件定義」とは?スムーズに行うコツを解説
外部設計
基本設計とも呼ばれることがあります。一般的には、要件を満たすために必要機能を洗い出して設計し、必要なUI(ユーザーインターフェース…画面のこと)の設計と、各画面の偏移の仕様を明確にする工程です。
次の段階の「内部設計」に進むために、業務ロジック(目的の処理をするために必要な顧客特有の仕様)を明確にしておきます。
アクシアでは
基本設計と呼んでおり、主に以下の3つの設計書を作成しています。
- 画面遷移図(存在する画面の一覧)
- 処理概要(一番重要。どういう処理をするのか、ボタンを押したらどうなるのかなどの概要)
- 項目定義書(1つひとつ項目を定義している。テストや実装のために使う)
「基本設計で記載されている仕様が間違いなく実装されていること」をテスト段階で担保するために、テストチームがテスト仕様書を作成します。
関連記事:システム設計とは?設計を行う上で重要なポイントを解説
内部設計
詳細設計とも呼ばれることがあります。一般的には、具体的なプログラムの仕様書を書く工程です。
代表的な仕様書としては、以下の5つがあります。
- コード定義書(実際にプログラムを管理するコードを定義・管理する)
- テーブル定義書(テーブル=データを保存する場所 を定義する)
- ER図(テーブルの関係を示した図)
- バッチ処理設計(バッチ=定期的に処理されるもの の処理概要)
- プログラム一覧(プログラムのソースコード一覧)
アクシアでは
システムの規模に応じて作成しないケースがあります。しかし、以下のドキュメントは開発を効率的に進めるために作成することがあります。
- ER図
- バッチ処理設計
また、複雑かつクリティカルな処理(クレジットカード決済や複雑な処理)についてのみ、ピンポイントで作成することもあります。
プログラミング
プログラマが、仕様書に沿って指定されたプログラミング言語でプログラムを作成する工程です。
アクシアでは
「製造」と呼ぶことが多い工程です。Java、Ruby、PHPの3つのいずれかの言語を使用し開発します。ここ数年は、PHPの開発が7割程度を占めています。
プログラミングの工程では、新規に機能を作成する場合と、既存の機能に対して修正をおこなう場合があります。既存の機能を修正する場合、既存の機能に悪影響がないか影響範囲をプログラマが調査した上で適切な修正をおこなう能力が求められます。
プログラマによってプログラムの書き方の癖があるため、できるだけ誰が作っても同じようなプログラム構成となるよう、「フレームワーク」という、開発の枠組みとなるものを導入することが原則となります。
それでも癖が出るため、コードレビュー(書いたプログラムを他の人がチェックすること)で保守性・汎用性・可読性が低いコードを指摘して修正していきます。
※保守性が低い…作りが複雑で、変更を加える際に修正しにくい状態
※汎用性が低い…同じような処理をいろんなところに書いてしまっている状態
※可読性が低い…プログラム名やプログラム内の変数・定数と呼ばれるものの命名がわかりにくい記述になっていたり、構造が複雑で何をしているかわからない状態、必要な注釈がない状態
実際の開発費用・期間をまとめた資料を無料で差し上げます。資料請求はこちら>>
単体テスト
一般的には、機能単位で機能単体の試験を実施することを指す場合と、プログラム単位で単体で試験を実施することの両方の解釈があります。
解釈を区別するために、「プログラム単位で単体で試験を実施すること」を「ユニットテスト」と呼んで、機能単位の単体テストと区別することがあります。
機能単位で機能単体の試験は、主に画面を実際に操作して、あらかじめ作成したテストの仕様書通りの動きであるかを試験します。このテストのことは、プログラムの中身を見ないでテストをするため「ブラックボックステスト」と呼ばれます。
ユニットテストの場合は、プログラムの中身に沿って動作を試験するため「ホワイトボックステスト」と呼ばれます。ユニットテストの実施には、通常ユニットテストを実行するための仕組みが提供され、その仕組みに沿ってプログラムテスト用のコードを作成します。
アクシアでは
テストチームがブラックボックステストを実施し、プログラマがホワイトボックステストを実施します。ホワイトボックステストの一部はテストチームが実施することもあります。
ホワイトボックステストの実施が困難な場合は例外として実施しないことがあります。例えば、
- システムの構成が古くホワイトボックステストを実施できる条件が揃っていない
- 他社から引き継いだシステムがホワイトボックステストを想定した作りになっておらず、極めて非効率
などのような場合です。
関連記事:システム開発におけるテストとは?テストの種類や流れ、ポイントを解説
結合テスト
機能間が連動して動作した場合に、仕様通りにシステムが動作するかを試験する工程です。
単体テストをクリアしたパーツ同士を合わせて、それらがきちんと動くかを確認します。
アクシアでは
テストチームがブラックボックステストにて、試験仕様書に沿って実施します。
システムテスト
定義があいまいで、全体を俯瞰的に見て実施するテストと定義され、結合テストと重複していることがあります。
性能試験や負荷試験をシステムテストの段階で実施する、という解釈もあります。
アクシアでは
特別な要件がない場合は実施していません。性能要求が厳しく、性能試験をおこなった結果を納品物に含める必要がある場合などに実施します。
運用テスト
一般的には、実際の業務の流れに沿ってシステムを運用し、試験することを指します。
アクシアでは
お客様を巻き込んで運用テストを実施しています。試験段階でお客様に見ていただき、随時フィードバックをもらいます。フィードバックをいただいたらすぐに対応し、また見ていただく……という流れです。
納品後の検収時に検証がおこなわれることが多いです。
システム移行
システムの運用が開始されることを指します。「(本番)リリース」「カットオーバー」「ローンチ」などの用語で呼ばれています。
アクシアでは
テスト環境と本番環境と区別して「本番リリース」 と呼んでいることが多いように思います。
本番リリースは終業間際や金曜日など、そのあとに迅速な対応が取れない日程での実施は原則禁止しています。
大規模なものの場合、データの移行やDNSと呼ばれるドメインとサーバーの紐づけの切り替えが発生するため、リハーサルなどあらかじめの準備工程が必要です。要件によっては夜間や早朝での作業が余儀なくされることがあります。
保守・運用
保守とは、システムが動き続けるために必要な、システム的なメンテナンスやシステムの監視をおこなうことです。
保守契約の中に仕様変更を含めているケースがありますが、定義上はここに仕様変更は含みません。
運用とは、システムを運用するために必要なデータを投入したり、定例的な作業をおこなったりすることです。
アクシアでは
保守を重要視しており、保守の契約は原則セットで提案しています。お客様によりよく使ってもらいたい、長くお客様とお付き合いをしたいという思いがあります。
実際の開発費用・期間をまとめた資料を無料で差し上げます。資料請求はこちら>>
システム開発に関わる職種の例とそれぞれの業務内容
システム開発に関わる職種と業務内容は、以下のようになります。
- SE(システムエンジニア)システムの要件定義や設計、プログラミングなど
- PG(プログラマ)システムのプログラミングやテストなど
- PM(プロジェクトマネージャー)プロジェクト全体のマネジメント、進行管理など
一般的に、SEはシステムの上流工程を担当するといわれています。
PGはSEから降りてきた仕様を実装する、下流工程(詳細設計〜プログラミング) を担当するといわれています。
PMはプロジェクト管理として顧客折衝、工程管理、変更管理、リソース管理をおこなうとされています。
アクシアでは
これまでSEとPGの明確な区別はおこなってきませんでした。
アクシアでSEになるにはPG経験が必要としてきました。これからもこの方針となります。
アクシアではプログラミングができないSEは存在しません。高いプログラミング能力を身に着けたうえで、上流工程を担当するSEとなることができます。
代表的なシステム開発手法の種類
代表的なシステム開発手法は以下の4つです。
- ウォーターフォール型
- アジャイル型
- プロトタイプ型
- スパイラル型
ウォーターフォール型
一般的には、要件定義〜設計〜プログラミング〜テストを順番に実施していきます。次の工程に進行したら前の工程に戻ることができない開発手法です。
アクシアでは
受注金額が決まっているため、その収益モデルからほとんどがウォーターフォール型の開発手法をとる必要があります。当初の話にない機能が必要な場合は、追加注文をいただいています。しかし、「定額開発」の場合はその限りではありません。
アジャイル型
一般的には細かい単位で開発し、細かくリリースをおこないます。リリース結果のフィードバックを受けて次の開発サイクルに反映する開発手法です。
細かくフィードバックできるため、システムを触りながら完成形に近づけられ、最終的に仕上がったものと期待のギャップが生まれにくくなることがメリットです。その反面、全体の工期(いつ完成するか)と全体の工数(必要なお金)の見通しが立ちづらいというデメリットを持ちます。
アクシアでは
自社サービスの開発でアジャイル型を採用しています。また、「定額開発」ではアジャイル型に近い開発方式をとっており、優先順位の変更が発生した場合に予算内で柔軟に対応する開発方式となっています。
アジャイル型補足
代表的な手法として、「スクラム」「XP」などがあります。
・スクラム
ユーザーの要件を分割して分割して優先順位ごとに並べ替え、1〜4週間の「スプリント」を定義して開発を繰り返します。
スプリントの開発内容をユーザーが評価し、次のサイクルにフィードバックしていきます。短い期間で最大の成果を上げることを目的とした手法です。
アクシアで採用している手法はスクラムに近く、開発単位ごとにスプリントを定義して開発を進行しています。毎日メンバー同士で進行状況に問題がないか確認し合っています。
・XP(Extreme Programming)
プログラマを中心においた開発手法です。
①テスト駆動開発(プログラムの本体作成の前にユニットテストのテストコードを作成し、そのテストに合格するように本体の実装をおこなう方法)
②ペアプログラミング(コードを書く人とナビゲートする役割の人の2人のプログラマがペアになり、プログラムを開発する手法。メンバー同士の知識、教育向上、チームワーク、労働意欲、品質向上を目的としている)
③リファクタリング(プログラムの挙動は変えず内部の処理を改善すること。これをするにはユニットテストが完備されていることが前提となる)
などの手法があります。
プロトタイプ型
試作品(プロトタイプ)を作成し、試作品を評価します。ユーザーと開発者の認識のズレを早期に解決でき、技術的な課題も早期に発見しやすい開発方式です。その反面、開発コストが初期段階で決定しづらいというデメリットがあります。
プロトタイプを使い捨てする手法(ラピッド・プロトタイピング)と、開発したプロトタイプを活用・流用し改良してゆく手法(ブレッドボード・プロトタイピング)があります。
スパイラル型
開発期間を短い期間で繰り返し、完成形に近づける手法です。アジャイル型との違いは、アジャイル型では1サイクルの中で保証した品質と機能を守るのに対し、スパイラル型は期間内で機能を作成し、品質向上の必要があれば次の期間を設けて開発を続けるところに違いがあります。
インクリメンタルモデルとイテレーティブモデルがあります。
プロトタイプ型同様、開発コストが初期段階で決定しづらいというデメリットがあります。
システム開発に必要な能力
システム開発には以下の能力が必要となっていきます。
- プログラミング能力
- 論理的思考能力
- コミュニケーション能力
プログラミング能力は、アクシアではエンジニアとして必須の能力です。他社ではプログラミングができないSEが多くいるため、強みと言えるでしょう。
論理的思考能力は、ロジックを作成するので必要となってきます。アクシアのようなWebシステムの開発事業であれば、よほど特殊な領域でなければ難解な数学的能力は求められません。
コミュニケーション能力は、プログラマであって求められる必須能力です。1人で仕事をするわけではないため、コミュニケーション能力は必要となってきます。
システム開発の費用相場
一般的には、大規模なもので数億単位、中規模なもので数千万単位といわれています。会社規模が大きいほど高い傾向にあります。
SESの場合、エンジニアの月単価に価格をつける場合があり、1人月50〜150万円くらいで取引されることもあります。
アクシアでは
システムを構築するための工数に基づいて見積もりをおこないます。下請けに発注せず直接取引をおこなうため、マージンがない適正な価格で見積もりをします。相見積もりをとった際に、アクシアの見積もりは他社と比較して中間層くらいの価格帯となることが多いです。
アクシアではシステム開発の予算をイメージいただけるよう、料金の目安ページをご用意しております。こちらが参考になりましたら幸いです。また、実際のお客様の事例をまとめた資料もご用意しております。
実際の開発費用・期間をまとめた資料を無料で差し上げます。資料請求はこちら>>
システム開発を依頼する際の注意点
最後に、システム開発を依頼する際、良い会社を見極めるポイントを3つご紹介します。
- 営業担当者のシステムの理解度
- 開発スキル
- 下請けに出す前提か
営業担当者のシステムの理解度が低いと、できるできないの判断も適当なので予定通りに仕上がらないという事態が発生します。また、社内のエンジニアからできないと言われ、追加費用が発生する場合もあります。
開発スキルが低い会社は、そもそも要件を満たす技術力がなく、結果できないこととなってしまいプロジェクトが失敗してしまいます。
下請けに出す前提の会社は、何もせずに仕事を丸投げし、マージンだけ取られてしまうこともあります。運用後に問い合わせしたら会社と連絡が取れないなど、トラブルに発展することもあります。
関連記事:システム開発依頼の流れは?開発会社の選び方から運用開始後までポイントを解説!
システム開発とは?まとめ
- システム開発とは、業務を効率化させるための仕組みを作成すること
- システム開発の流れは以下のように進んでいく
要件定義
外部設計
内部設計
プログラミング
単体テスト
結合テスト
システムテスト
運用テスト
システム移行
保守・運用
- システム開発に関わる職種の例とそれぞれの業務内容は、以下の3つに分かれる
SE(システムエンジニア)システムの要件定義や設計、プログラミングなど
PG(プログラマ)システムのプログラミングやテストなど
PM(プロジェクトマネージャー)プロジェクト全体のマネジメント、進行管理など
- 代表的なシステム開発手法は以下の4つ
ウォーターフォール型
アジャイル型
プロトタイプ型
スパイラル型
- システム開発に必要な能力はプログラミング能力、論理的思考能力、コミュニケーション能力
- システム開発の費用相場は大規模なもので数億単位、中規模なもので数千万単位と言われ、会社規模が大きいほど高額になる傾向がある
アクシアでは工数に基づいて適正な価格で見積もりをおこなう
- システム開発を依頼する際の注意点は3つ
- 営業担当者のシステムの理解度
- 開発スキル
- 下請けに出す前提か
システム開発=プログラミングのイメージが強いですが、プログラミングをするのはごく一部で、さまざまな工程を経てシステム開発はされていきます。この記事を見て、システム開発とはなんなのか、疑問やお悩みを解決できましたら嬉しいです。
最後までお読みいただき、ありがとうございました。