「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
私は入社15年超になる本社事業所勤務の40代前半中堅社員です。主に組み込み系のソフトウェア開発を担当しています。私は最近、とあるきっかけで、独立行政法人情報処理推進機構(IPA)が発行している書籍「組込みソフトウェア開発データ白書2019」(※1)を読む機会がありました。この書籍には国内の組込みソフトウェア開発企業15社から収集した599件のプロジェクトから、開発規模、工数、工期、生産性などの分析を行ったデータが収められています。PDF版はIPAのホームページから無償でダウンロードできます。想定読者を、実際にソフトウェア開発に関わるプロジェクトマネージャやプロジェクトリーダに置いていることもあり、ソフトウェア開発に関わったことのない方には少々読み取りづらい部分もあるかと思いますが、私たちのようなエンジニアにとっては貴重で有益なデータが多数掲載されています。受託開発を専門に行っているソフテックにとっては、通常の業務で他社のソフトウェア開発の実情を知る機会はほとんどありませんので、そのような意味でも貴重な情報と言えます。
「組込みソフトウェア開発データ白書2019」のデータはソフトウェア開発の規模をSLOC(Source Lines Of Code、コード行数、ステップ数とも言います)で判別しています。ソフトウェアの規模を示す指標としては、FP(ファンクションポイント)法と並んで、古くからある一般的な指標です。開発言語は、組込みソフトウェア開発ということで、C言語、C++言語に限定したデータとなっていますが、SLOC規模から工数、工期などを逆算することが可能です。
今回のソフテックだよりでは、ソフテックで実際に開発を行った組込みソフトウェア開発案件のSLOC規模をもとに工数、工期を逆算してみたいと思います。この試みは、ソフトウェア開発の概算見積もりを行う際に有効です。SLOC規模さえ想定できれば、大まかな工数、工期を算出することができます。当然ながら、ソフトウェア開発には案件ごとに異なる事情や難しさがあり、ソフトウェア規模だけで、正確な工数、工期を算出することは不可能です。ここで算出したデータはあくまでも参考程度に考える必要があります。
なお、ソフトウェア開発の見積もりに関しては、過去のソフテックだより第66号「ソフトウェア開発の見積もり」、ソフテックだより第70号「ソフトウェア開発の見積もり2」でもご紹介させていただきました。ステップ数に基づく見積もりという点で、今回の試みはCOCOMO(COnstructive COst MOdel)に近い手法と言えます。
今回サンプルとして、すでに開発が終了している改良(派生)開発の案件2つのSLOC規模を使用してみたいと思います。案件の具体的な説明は控えますが、小規模な開発案件Aと大規模な開発案件Bの2つです。どちらも組込みソフト、C言語での開発になります。以下に具体的なステップ数を記載します。
表1. サンプル案件のSLOC規模
案件 | 総ステップ数[行] | 実ステップ数[行] | SLOC |
---|---|---|---|
A | 51,999 | 7,558 | 3,223 |
B | 889,977 | 508,981 | 88,701 |
表のうち総ステップ数は、コメント行を含む行数を指しており、実ステップ数はそこからコメントの行数を除いたものです。「組込みソフトウェア開発データ白書2019」におけるSLOC規模は、”コメント行および空行を含まないコード行数”と規定されています。実ステップ数=SLOCとなっていないのは、実ステップ数からさらにOSやパッケージソフトなど自社で開発を行っていないプログラムや、流用したプログラムのステップ数を差し引いているためです。SLOC規模の定義では、”「改良(派生)開発」においては、改修部分(追加・変更・削除)のみを規模の対象範囲とし、母体は対象範囲外とする” との記述がありましたので、追加・変更部分のステップ数のみをSLOCとしました。
それでは実際に、「組込みソフトウェア開発データ白書2019」に記載されているデータをもとに工数を算出してみたいと思います。開発言語C/C++のSLOC規模別SLOC生産性のデータは以下の通りです。
表2. SLOC規模別SLOC生産性の基本統計量(改良(派生)開発、開発5工程、開発C/C++)
SLOC規模 | 生産性(中央値)[SLOC/人時] |
---|---|
全体 | 2.15 |
1K未満 | 0.01 |
1K以上10K未満 | 1.85 |
10K以上50K未満 | 3.58 |
50K以上100K未満 | 3.86 |
100K以上 | 5.89 |
※出典 IPA「組込みソフトウェア開発データ白書2019」、再転載不可、引用不可
なお、比較のため、ここでもう一つの生産性指標を紹介したいと思います。同じくIPAが発行している「ソフトウェア開発データ白書2018-2019 製造業編」(※2)に主開発言語別のSLOC生産性(新規開発)のデータが記載されています。こちらのデータはSLOC規模別にはなっておらず、C言語については全体で11.21[SLOC/人時]という、改良(派生)開発と比べて高い数値になっています。
以上のデータをもとに案件Aと案件Bについて、該当するSLOC規模の生産性から算出した開発工数は以下の通りとなります。
表3. サンプル案件の工数算出結果
案件 | SLOC | 改良(派生)開発、C/C++言語 | 新規開発、C言語 | ||||
---|---|---|---|---|---|---|---|
SLOC生産性 [SLOC/人時] |
算出工数 [人時] |
算出工数 [人月] |
SLOC生産性 [SLOC/人時] |
算出工数 [人時] |
算出工数 [人月] |
||
A | 3,223 | 1.85 | 1,742 | 10.9 | 11.21 | 288 | 1.8 |
B | 88,701 | 3.86 | 22,979 | 143.6 | 11.21 | 7,913 | 49.5 |
※算出工数は実際の開発にかかった工数を示すものではありません。
ここで算出された工数は、設計からテストまでの「開発5工程」(アーキテクチャ設計、詳細設計、実装・単体テスト、結合テスト、総合テスト)にかかる時間を指します。また、人月工数は、1ヵ月の労働時間を160時間(20日×8時間)として人時工数を除した値です。
改良(派生)開発前提と新規開発前提では、工数に大きな開きがあることがみてとれます。生産性の数値を比べると、案件Bの規模で3倍近く、案件Aの規模では6倍の差があります。この差の理由については複数の要因が考えられますが、新規開発に比べて、改良(派生)開発がいかに難しいかを表した結果ととらえても、差し支えないと思います。
なお、答え合わせではないですが、案件Aと案件Bの実際の開発工数はどうだったかというと、案件Aは約5人月、案件Bは約50人月の規模でした。どちらも 新規開発と改良(派生)開発 の間の工数に収まってはいますが、例えば50人月と100人月では、開発にかかる予算が倍(しかもかなりの額)違ってしまうわけで、概算見積もりとしてはもう少し精度がほしいところです。母体に対する改良(派生)の比率や、個々の案件の事情によるところも大きく影響してきますので、そこは簡易的な計算に頼らず、案件ごとに精査するしかないのかなと思います。
「組込みソフトウェア開発データ白書2019」には、工程別の工数に関するデータも記載されています。これらのデータから案件Aと案件Bについて、工程別の工数を逆算してみたいと思います。表3で算出した改良(派生)開発前提の全体工数[人時]に、工程別の実績工数比率の平均値をかけて、算出した数値が以下になります。
表4. サンプル案件の工程別工数
案件 | 算出工数(全工程)[人時] | アーキテクチャ設計算出工数[人時] | 詳細設計算出工数[人時] | 実装・単体テスト算出工数[人時] | 結合テスト算出工数[人時] | 総合テスト算出工数[人時] |
---|---|---|---|---|---|---|
A | 1,742 (10.9) |
296 (1.9) |
279 (1.7) |
453 (2.8) |
383 (2.4) |
314 (2.0) |
B | 22,979 (143.6) |
3,906 (24.4) |
3,676 (23.0) |
5,975 (37.3) |
5,055 (31.6) |
4,136 (25.9) |
※算出工数は実際の開発にかかった工数を示すものではありません。()内は[人月]。
案件A程度の規模であれば、プロジェクトにかかわる人数は、1〜2名程度が妥当と思います。上のデータをもとに各工程でアサインする担当者の人数を決めることで、全体の大まかな工期も算出が可能です。アーキテクチャ設計など開発初期段階には複数人の参入が難しいことを考慮すると、工期は半年以上必要であることがわかります。
一方、案件Bほどの大規模な開発になると、プロジェクトにかかわる人数は数名〜10名程度まで膨れるため、各工程に参入できる人数で工期は大きく変動します。工期の算出には、具体的な担当者の確保状況など踏まえて、詳細な検討が必要です。
「組込みソフトウェア開発データ白書2019」に話を戻しますが、工程ごとの工期算出のもとになっているサンプルプロジェクトは、全体の86.3%が品質面で成功したプロジェクト(=リリース後の不具合数が0件、または予測の範囲内に収まっている)となっています。残りの13.6%が品質面で失敗したプロジェクト(=リリース後の不具合数が予測値を超過)になりますが、失敗したプロジェクトには、工程ごとの工数配分に特徴があるそうです。案件Aの全体工数をもとに、成功例、失敗例、それぞれの工数配分を計算した結果が以下になります。
表5. 成功例と失敗例の工程別工数
案件 | 算出工数(全工程) | アーキテクチャ設計算出工数[人時] | 詳細設計算出工数[人時] | 実装・単体テスト算出工数[人時] | 結合テスト算出工数[人時] | 総合テスト算出工数[人時] |
---|---|---|---|---|---|---|
A 成功例 |
1,742 (10.9) |
314 (2.0) |
279 (1.7) |
400 (2.5) |
366 (2.3) |
383 (2.4) |
A 失敗例 |
1,742 (10.9) |
174 (1.1) |
296 (1.9) |
697 (4.4) |
314 (2.0) |
261 (1.6) |
※算出工数は実際の開発にかかった工数を示すものではありません。()内は[人月]。
失敗例の工数配分の特徴として、設計工程、テスト工程にかける工数の比率が低い一方で、実装・単体テストにかける工数の比率が極めて高いことがおわかりいただけるかと思います。ウォーターフォール型の開発においては、”品質を上流で作り込む”ことが基本と考えると、納得のいく結果と言えるのではないでしょうか。結果論ですが、失敗例では、実装・単体テストにかかる工数を基準に考えた場合、それに見合う分の設計工程、テスト工程への工数積み増しが必要だったのではないかと思います。失敗例のような工数配分を行わないよう、弊社の今後の開発でも、参考にしたいデータです。
今回のソフテックだよりでは、IPA発行の書籍「組込みソフトウェア開発データ白書2019」の内容から、組込みソフトウェア開発における見積もりや工程について考察してみました。
今回ソフテックだよりを執筆してみて、過去のデータを検証し、今後の改善につなげることの重要性を改めて痛感しました。その点でIPAの取り組みは、非常にありがたいことだと感じています。このようなデータも適宜活用しながら、プロジェクトを成功へ導き、お客様により安心していただけるよう、今後も実績を積み上げていきたいと考えております。最後までお読みいただき、ありがとうございました。
(T.S.)
関連ページへのリンク
関連するソフテックだより