システムの開発規模を、プログラムステップ数で表すことがけっこうある。
また、仕様書から、想像して開発規模を出す場合、画面数、せいぜいそれに加えてテーブル数から出すしかないようなときもある。
そのため、見積もりや費用計算などから、1人月あたり、何ステップ作れるか?というのを知りたいときがないだろうか?
もし、それが分かれば、システム全体のプログラムステップ数÷1人月あたりステップで、人月数が出て、それに1人月単価をかけると、おおよその費用が、想像つく。
といっても、システム全体のプログラムステップ数は、出ないのが普通なので、総画面数÷1人月あたり、何画面つくれるかでも、人月数が出て(DBに関しては、入出力部分は、ツールを使う。編集部分は、画面工数に含まれる)、それに1人月単価をかけても、おおよその費用が、想像つく。
じゃあ、1人月あたり、何ステップできるのか?というと、これがまた、まちまちな答えが返ってくる。逆の聞き方のほうが分かりやすい。
1.5Kステップ(1500行)をつくるのに、どれくらいかかる?と聞くと
1日
2、3日
1週間
2週間
1ヶ月
などが、代表的な答えだと思う。
で、「そんなこと、言語も聞かないで、分かるわけないじゃん!」って、プログラマの人は言うけど、今日は、その「分かるわけない」はずの仕組みについてのお話
実は、こう考えると、不確定要素の部分が、どこだかはっきりする&どうして、上記の回答になるのかが分かる。
この1.5Kをつくるのに、何日かかるか?というのは、どういう要因できまるかというと
(1)1時間あたりのステップ作成量
(2)はたらくじかん
(3)システム全体に対するコーディングの割合
(4)危険率
で、(3)が不確定要因、(4)がまちまち、なので、大きな差が出る。
以下説明します
■■ 1時間あたりのステップ作成量
簡単にするために、こういう条件を付けます
・こぴペ、ツールなどを使わずに、純粋にキーボードから文字を打って作成するとする
・なにも、考え込むことなく、すらすらとキーボードにプログラムが打ち込める状態であるとする
そうすると、たぶん、1時間に100ステップくらいじゃないかなーと思います。
安定して、コーディングできる量って。。。
まあ、{ 1文字しか打たない行がある一方、80文字くらい、打つ行もあったりするけど、平均すると、。。
■■ はたらくじかん
この量、ふつうは8時間です。でも、コーディングに割ける時間は5時間くらいかもしれない
(他は管理時間、おやすみなど)
8時間だと、1.5Kは、2日
5時間だと、1.5Kは、3日
15時間だと、1.5Kは、1日
15時間ぐらいが、平均して残業して働かせられる限度で、それ以上働かせると(たとえ会社に寝泊りさせても)生産性が落ちてきます。つまり、1.5K、よくて2Kぐらいが限度かも??
■■ システム全体に対するコーディングの割合
先ほどの聞いている割合が、コーディングだけの量を聞いているのなら、上記のとおりなのですが、そうでなく、システム全体の期間を聞いているとすると、システム全体に対する、コーディングの割合は、どれくらい?ということになります。
で、この比率がまちまちです。そのために、おおきな見積もりの差が出ます。
画面や、帳票編集、データコンバートのような、決まったものだと、この比率は、大きくなります。
(1にちかいものもある。もう、仕様をきけばすぐに、コーディングに入れて、流しのテスト1発でOKみたいなやつ。逆に、仕様がはっきりしてないのなんかになると、コーディングはほとんど関係ないケースもある)。
25%ってとらえるのが、ふつうくらいかな?
そうすると、
この比率が1に近いと
8時間だと、1.5Kは、2日
5時間だと、1.5Kは、3日
15時間だと、1.5Kは、1日
この比率が25%だと
8時間だと、1.5Kは、8日=1、2週間程度
■■ 危険率
この計算どおりにいくとはかぎらないので、危険率をかけます。
1倍以上、2倍がおおいかなあ。。。
そうすると、
危険率2倍で、全体割合25%のとき
8時間だと、1.5Kは、2~4週間程度=1ヶ月
ということで、結果から言うと、
1.5Kは、1人日(15時間労働、コーディング割合1、危険率1)
~
1.5Kは、1人月(5~8時間労働、コーディング割合0.25、危険率2)
まで、さまざまな結果がでるということになります。
実際に、細かく分析する場合は、上記の危険率と、コーディング割合を適当に考えてきめます
(予定の段階では、原則8時間以下労働である。1週間は5日で、1月4週)
なお、人によって能力の差が、どーのこーのとかは、
はじめの、「1時間あたりの開発量」に影響します。
ただし、この場合、人月単価にも影響するため、
(1時間当たり開発量が少ない人は、単価も安いと考えるとということ)
いま、基準としている単価の人が、対象の言語で、どれくらい、1時間に組めるか
を決めてしまえば、まあ、この考えで、OKです。
で、1画面あたりに直すと、
1画面あたりのコーディング量と、コーディング割合が求まれば、1画面あたりのかかる期間が求まることになります。
画面出力は、たいてい、フレームワークを利用します。そうすると、ハリウッドの法則により、部分的にのみ、コーディングするということになります。
そのため、実際のコーディング部分は少ない。。。とはいえ、400~500ステップくらいは組むのがふつう。
で、テストとか、画面をツールで作成する手間をかんがえると、
1画面1人日
っていうのが、限界じゃないでしょーかねー。どんな言語でも
(もっとかかることも、もちろんある。
つーか、ふつうは、もっとかかる。あくまでも、限界値。
まっさらから作っている状態で、1日で2画面も、3画面も。。。っていうのは、よっぽど、なんか理由がないとき以外は、危険かも。。)
では、1機能において、画面は、どのくらいになるの?っていうと、
1つの機能で、たいてい、一覧と詳細の2画面あるのが多い。
で、一覧画面では、削除ができ、編集や新規入力のとき、詳細画面。
詳細画面では、エラー表示、確認(更新していいYES/NO)、正常更新メッセージの
3メッセージ出すタイミングがあるのが多い。
つまり、だいたい2画面以上。
ということは、10機能(仕様書の業務フローの項目見出しが10個くらい)あった場合、1ヶ月だと、手作業で書くと間に合わないということになる。
なぜか?
10機能*(1機能)2画面*(1画面)1人日=20人日=1人月
なので、仕様書をぺらぺらとめくり、機能が10個以上あって、
どのくらいでやってほしいんですか?
と聞いたら、(仕様が決まった後の)実質画面作成に1ヶ月以内の日にちを指定された場合、手作業でなく、なんらかの工夫が必要になるという意味になる
(ツールをつくるなど、プログラムを手で組む以上の工夫が必要になる)。
で、その工夫とは。。。
時間がないので、この続きは、気が向いたときに。。。
(じつは、今日のは、本当に書きたいことの、前フリなのだ。。。)
この件について、2015年版UPDATEがあります。
1人月あたり、何ステップ?1画面あたり、何人日でできる?の考え方(2015 Update)
http://blog.goo.ne.jp/xmldtp/e/185f154ad62451fd442098da468a360f