100日後にエンジニアになるキミ - 93日目 - 開発 - 見積もりについて

昨日までのはこちら

[100日後にエンジニアになるキミ - 91日目 - 運用 - 監視について](https://qiita.com/otupy/items/532d0f78b103d3b39b2d)

[100日後にエンジニアになるキミ - 90日目 - 開発 - CIについて](https://qiita.com/otupy/items/25786feaaa1b1f4d203f)

[100日後にエンジニアになるキミ - 88日目 - データ - データ転送について](https://qiita.com/otupy/items/e720e175c83a84e101c9)

[100日後にエンジニアになるキミ - 86日目 - データベース - Hadoopについて](https://qiita.com/otupy/items/0016a1b9f496627619b6)

[100日後にエンジニアになるキミ - 76日目 - プログラミング - 機械学習について](https://qiita.com/otupy/items/6a4f960ba4df06e27050)

[100日後にエンジニアになるキミ - 70日目 - プログラミング - スクレイピングについて](https://qiita.com/otupy/items/f53e2e7d16adf80b5acf)

[100日後にエンジニアになるキミ - 66日目 - プログラミング - 自然言語処理について](https://qiita.com/otupy/items/5828ac7450c5ba8d6931)

[100日後にエンジニアになるキミ - 63日目 - プログラミング - 確率について1](https://qiita.com/otupy/items/0196897ae4d2134794fa)

[100日後にエンジニアになるキミ - 59日目 - プログラミング - アルゴリズムについて](https://qiita.com/otupy/items/f1a5e81633b868f3b5ed)

[100日後にエンジニアになるキミ - 53日目 - Git - Gitについて](https://qiita.com/otupy/items/0abaad82a7f3fea73f1f)

[100日後にエンジニアになるキミ - 42日目 - クラウド - クラウドサービスについて](https://qiita.com/otupy/items/d1765f1541a104ed6133)

[100日後にエンジニアになるキミ - 36日目 - データベース - データベースについて](https://qiita.com/otupy/items/7af17635d576677606dc)

[100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1](https://qiita.com/otupy/items/6d1e5453f530e07b7aec)

[100日後にエンジニアになるキミ - 18日目 - Javascript - JavaScriptの基礎1](https://qiita.com/otupy/items/2f71d5f9c754b29d9555)

[100日後にエンジニアになるキミ - 14日目 - CSS - CSSの基礎1](https://qiita.com/otupy/items/61a97863f6df14171994)

[100日後にエンジニアになるキミ - 6日目 - HTML - HTMLの基礎1](https://qiita.com/otupy/items/cd2315dcb38671cfded0)

本日はに開発における見積もりについてです。

## システム開発について

システム開発は文字通り、システムを開発することですが
家電製品や通信機器などの電子機器を制御システムを構築したり
各企業の業務の仕組みをシステム化することを指します。

### システム開発の流れ

システム開発の主な流れは以下のような形です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/3d762c72-d3c5-972a-9a18-651d14e9e5fd.png)



システム開発を担当する職種としては
`上流`と呼ばれる概要設計・要件定義・基本設計を担当する`システムエンジニア`と
それ以降の詳細設計・コーディング・テスト・導入支援などを担当する`プログラマー`
に別れてくると思います。

### 職種

`エンジニア`という括りだと両方に跨る感じになると思いますが
`システムエンジニア`という職種では主に
システム全体の`設計`を司ることが仕事になります。

発注側の要件を整理して、開発する側の力も見極めた上で
システムの企画・設計を行っていきます。

また`システムエンジニア`という職種では
プロジェクト全体のマネジメントを行う
`プロジェクトマネージャー(PM)`を兼ねていることもあります。

`プログラマー`という職種では設計書に従って
機能を実現するコードを作っていきます。

コーディングの後はコード単体やシステム全体のテストを行い
クライアントへの引き渡しができる状態まで仕上げていきます。

システム開発を一人でやることは稀であるので
通常は様々な役割を持った人たちで構成された
チームを組んでシステムを開発していきます。

### 要件定義

まずはどういったシステムが求められているのかを
クライアントからヒアリングし把握することから始まります。

要件を分析してクライアントの課題解決のために
必要なシステム構成が何かを考えます。

システム化に当たってはハードウェアの構造やソフトウェアの機能を検討します。
同時に工期や予算についても決定する必要があります。

コミュニケーション能力やシステム全体を俯瞰して十分な機能を提供できるかどうかを
見積もる力が必要になってきます。

一般的にはこのあたりの段階で大体の費用や工期が見積もられる形になります。

### 基本設計

要件定義に従ってシステムで実現させたい機能を決定します。
データの入出力画面など、全体のインターフェースを設計することとなります。

ここではユーザー目線で作成していく必要があります。

### 詳細設計

機能の具体的な作成方法を細かく設計して、システム仕様書を作成します。
仕様書をもとにプログラミングが行われるので
仕様書はこの段階で詳細に書く必要があります。

### コーディング

仕様書にしたがい、コーディングを行っていきます。

仕様書には必要最低限の内容しか記載されていないことが多く
求められる動作をどのようなコードで実現するのかは`プログラマー`にまかされます。

システムの出目となるデザイン部分は`デザイナー`に発注されることも多く
デザイナーの作った画像や段組をシステムに取り込んだりもします。

### テスト

プログラミングが完了するとテストを実施します。
まずは単体テストという形でコードのみでのテストを行います。

テストで不具合が見つかれば、その部分を修正してまたテストを行い
不具合がなくなるまでテストを繰り返していきます。

単体テストの後は複数のプログラムを連結してテストしたり
システム全体でのテストに入ります。

出来上がりの後はクライアント側での受入テストを行い
ここで合格となれば、システム開発は概ね終了です。

### 運用・保守

テストが終われば、後は納品して終わりになりますが
納品後の運用も司ることになれば運用フェーズに入ります。

運用後も不具合が見つかることはあり、その場合は
保守という形でコードを修正して再リリースという形で運用が進んでいきます。

## 見積もりについて

さて、ここまでで大体のシステム開発の流れは抑えていただけるかなと思います。

ここからは見積もりの方に入ります。
基本的に見積もりというのは開発にかかる費用と作業時間を考えることです。

`ざっくり500万円でやりますよ!!`
とかで済んでしまうのが一番楽ではありますが
500万円で作れなかったら会社のHPは0になって死んでしまいます。

出来るだけ会社の利益が出るように見積もることができるのが理想です。

大体は項目に分けて見積もっていくことになりますが
よく用いられている項目は以下のようなものがあります。

|項番|項目|
|:--:|:--:|
|1|要件定義費用|
|2|設計費用|
|3|デザイン費用|
|4|開発費用|
|5|テスト費用|
|6|導入費用|
|7|購入費用|
|8|雑費|
|9|消費税|

### 要件定義費用

まずはシステム要件をヒアリングして、どんなものを作りたいのかを
決めるためにかかる費用です。

担当のエンジニアがヒアリングをして要件をまとめ終わるまでに
かかる費用なので、ざっくりとした計算だと
`システムエンジニアの人数 x 時間 x 単価 + α`
になります。

時給換算1万円のエンジニア2人で100時間かかりましたであれば最低でも
`2人 x 100 x 1万円 + α = 200万円 + α`
が掛かります。

大規模なシステム開発であれば、それなりに掛けないとおかしい訳です。

### 設計費用

要件定義が終わったら設計に入ります。
設計も基本だけ、詳細まで混み、色々あると思いますが
ここでは設計全部を引っくるめてとします。

ここでも基本的な考え方は一緒です。
`システムエンジニアの人数 x 時間 x 単価 + α`

### デザイン費用

設計が終わった段階で、どんな画面にするのかが決まります。
画面の見栄えをよくしたい場合は別途デザイナーに発注して
見栄えの良い画面を作ってもらいます。

ここでも基本的な考え方は一緒です。
`デザイナーの人数 x 時間 x 単価 + α`

自社にデザイナーがいなければ外注する形になります。
`デザインの外注費用`

### 開発費用

これはコーデイング部分にかかるものです。まあこれも
`システムエンジニアの人数 x 時間 x 単価 + α`
という基本的な考え方は変わりません。

### テスト費用

テストには色々なテストがあります。
まずは単体テストや結合テストなどは開発担当のエンジニアが出来ることなので
`システムエンジニアの人数 x 時間 x 単価 + α`
で済む事になります。

ただし、セキュリティーテストや負荷試験などに関しては
別途外注することもあったりするので、自社で全てを賄えない場合は
その費用を見積もらないといけません。
`テストの外注費用`

### 導入費用

テストが終われば、システムの導入が待っています。導入に関しては
・マニュアルを作る
・導入作業をする
と言った作業工程があるため、ここにかかる費用となります。

ここでも基本的な考え方は一緒です。
`システムエンジニアの人数 x 時間 x 単価 + α`

### 購入費用

システムを構築するのに特別な機材を購入しなければならない場合は
その費用は別途請求します。

例えばオラクル社のデータベースをどうしても使いたい
という要望がある場合は、このデータベースは有料であるので
その費用を別途見積もってもらいシステムの見積もりに追加します。

ベンダーさんのライセンス費用を見てみると
[Oracle Database Enterprise Edition] (http://www.hitachi.co.jp/Prod/comp/soft1/oracle/info/price/license.html)

| 製品名 | 税抜価格 | 備考 |
|:--|:--|:--|
| Oracle Database Enterprise Edition Processorライセンス | 5,700,000円 |   |
| Oracle Database Enterprise Edition Named User Plusライセンス | 114,000円 | 最少ユーザ数： 25 Named User Plus/プロセッサ |

`5700000 + 114000 * 25 = 8550000`
このくらいは最低でも掛かりそうですね。

ここを別途見積もっておかないとトラブルになりますよね。

### 雑費

まあ、ここはほとんどが交通費や文房具代金などの雑な費用です。
ざっくりいくらでまとめて請求する事になります。

### 消費税

2020年6月現在は10%ですね。
これを入れると入れないでは10%も金額が変わってしまうので基本入れます。

### バッファー

大事なのがここです。
システム開発には波乱が付き物です。

作ったことがないものを作る場合は、初挑戦であるので
工数が合うかどうかなんで分からないんです。

特にブレるのが開発とテストの部分です。
開発が難航するような場合はテストにも影響が出ますし
テストの内容がダメダメな場合は直す工数も掛かります。

こう言った開発のブレを見込んで見積もるのが
正しい見積もりだと思っています。

このくらいなら問題なく出来るだろうに少しプラスしておくことで
工期と心の余裕を持つことができます。



### 工費を見積もってみる

基本的な考え方は
`システムエンジニアの人数 x 時間 x 単価 + α`
であるので、項目ごとに掛かる工数を考えて、そこに単価を掛けていき
バッファーは工数に含めます。

要件は別で工期3ヶ月,十人くらいのチームでやる案件があったとしましょう。
ざっくり見積もりはこんな感じかと思います。

| 項目 | 総工数 | 一人当工数 | 高SEの人数 | 安SEの人数 | ¥20,000 | ¥10,000 | 費用小計 |
|:--|--:|--:|--:|--:|:--|:--|:--|
| 要件定義費用 | 60 | 30 | 2 | 0 | ¥1,200,000 | ¥0 | ¥1,200,000 |
| 設計費用 | 140 | 20 | 2 | 5 | ¥800,000 | ¥1,000,000 | ¥1,800,000 |
| デザイン費用 | 40 | 20 | 0 | 2 | ¥0 | ¥400,000 | ¥400,000 |
| 開発費用 | 500 | 50 | 2 | 8 | ¥2,000,000 | ¥4,000,000 | ¥6,000,000 |
| テスト費用 | 200 | 20 | 2 | 8 | ¥800,000 | ¥1,600,000 | ¥2,400,000 |
| 導入費用 | 20 | 5 | 2 | 2 | ¥200,000 | ¥100,000 | ¥300,000 |
| 購入費用 | 0 | 0 | 0 | 0 | ¥0 | ¥0 | ¥200,000 |
| 雑費 | 0 | 0 | 0 | 0 | ¥0 | ¥0 | ¥100,000 |
| 合計 | 960 |  |  |  |  |  | ¥12,400,000 |
| 消費税込 |  |  |  |  |  |  | ¥13,640,000 |


実際の現場では、開発者の他にも関わる人間がいるはずなので
それを考えると一人当たりの単価はもっと跳ね上がります。

利益を出す見積もりをするなら、一人当たりの単価を調整しないとダメでしょうね。

N●●●ータさんとかは工期1ヶ月に満たないしょぼしょぼ案件でも
400万円くらいの見積もりになったこともありました。

これを見て、高いと思うか、安いと思うかは
人それぞれだと思いますが、プログラマーの給料を払うのを考えてみてください。

月に80万円のプログラマーを雇うのに、案件の値段が安かったら
払えるでしょうか？

というわけでシステム開発の費用はほぼ`人件費`なんです。


工期に関しては工数を時系列で並べれば出ます。

## まとめ

高い給料をお支払いするには、見積もりの方もしっかりしないと
人を雇うことすらできなくなってきます。

高すぎても周りに案件を取られてしまうということは
あると思いますが、そこは信用を売ることでカバーできると思っています。

システム開発に関しては
安ければいいということではないと思います。

品質を保証するために
ちゃんとしたシステムを、適正な価格で作ることが
IT業界全体にとって良いことだろうと思います。

君がエンジニアになるまであと07日

## 作者の情報
乙pyのHP：
http://www.otupy.net/

Youtube：
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter：
https://twitter.com/otupython