http://monoist.atmarkit.co.jp/mn/articles/1107/20/news002.html

「ソフトウェア技術者の最高の能力は、見積もりだ!」――“見積もり”をテーマにした新シリーズ「見積もり:ソフトウェア技術者の最高の能力」の第3回。今回は、見積もり値の“3つの状態”について解説する。

見積もり」は、ソフトウェア開発における大きなテーマであり、ソフトウェア工学における最重要課題の1つでもあります。

 3回目を迎えるこの“見積もり・シリーズ”では、「見積もりの目的(正確に見積もるだけでは不十分)」「見積もりの具体的な方法(精度を上げるため、少なくとも、2つ以上の方法で見積もる必要がある)」「見積もりの応用(見積もり値に合わせる制御と再見積もり)」「見積もりの調整(状況に応じて開発量とスケジュールを再見積もりしなければならない)」について、具体的に解説していきます。

 今回は、見積もり値の“3つの状態”について解説します。

見積もり値の3つの状態

 昆虫の特徴の1つが、卵からかえると「幼虫」→「サナギ」→「成虫」に変態することです。例えば、カブトムシは、幼虫からサナギへと姿を変えると、幼虫時の内臓が溶けて別の臓器が形成されるなど、大きくその様相が変わります。ソフトウェア開発における見積もり値も、この昆虫と同じで、「見積もりの基本値」→「品質を考慮した見積もり値」→「実装能力を考慮した見積もり値」の3つに状態が大きく変わります。

 まず、機能をベースに、見積もりの“基本値”を計算し、次に、どの程度の品質に仕上げるかにより基本値を調整し、最後に、どんな能力や経験を持ったエンジニアが開発するかにより、どれぐらいの人数、コスト、期間が必要か? を見積もるのです。

 「このプロジェクトで、あのソフトウェアを開発するには、何人を何カ月投入すればよいか? 何カ月で出荷できるか?」を高精度で見積もる場合、見積もり値の幼虫・サナギ・成虫の3つの状態を明確に意識して、見積もることが非常に重要です。

 以下、見積もり値の3つの状態について詳しく見ていきましょう。

その1:見積もりの基本値

 “見積もりの基本値”は、「何を作るか?」をベースにして推定した値で、見積もりの基本中の基本です。この値は、実装する機能(および、非機能と性能も)が大きく、複雑なほど、見積もり値は大きくなります。例えば、「2階建てで、建坪が70坪の家を建てる」という要求を基にして、基本値を予測します。

 基本値を見積もる上で、考慮するのが「機能要求」「非機能要求」「性能要求」です。

  1. 機能要求 
    これは、ソフトウェアの機能そのものであり、例えば、要求仕様書や、操作説明書に記述してあることを実装する場合に必要となる「基本工数」です。この値は、実現する機能が同じであれば、誰が見積もっても、あるいは、開発を担当するエンジニアがどの程度のスキルを持っているかにかかわらず、同じ数値になるはずです(実際には、見積もり者のスキルにより、値に大きなバラツキが生じます)。また、基本工数は、品質の高い・低いを考慮していないことにも注意してください。基本工数は、あくまで、“素の値”です。見積もりでは、機能の大きさや複雑さと、品質は切り離して考えます。
  2. 非機能要求 
    機能以外の要求事項、例えば、ユーザーフレンドリネス(マニュアルを熟読しなくても、ソフトウェアを操作できるか?)、理解容易性(プログラムを分かりやすく作っているか?)、保守性(プログラムを改造しやすいか?)などがあります。非機能要求も、要求仕様書に記述しますが、機能要求に比べると優先度は圧倒的に低く、きちんとソフトウェアの中に実装されることは稀(まれ)で、努力目標で終わることも少なくありません。
  3. 性能要求 
    応答時間、データ処理量、メモリ占有量など、性能に関する要求です。通常、性能要求は、要求仕様書にも明記しますので、必ず守らねばならない“重要項目”ですが、リアルタイムOS系の製品以外では、真剣に考慮されていないような印象を受けます。ハードウェアが日進月歩の進歩を続けているため、「高性能なハードウェアを導入すれば、性能要求は満足できるだろう」と考えるソフトウェア開発者が少なくありません。

 ソフトウェア開発における見積もりの第一歩が、機能要求・非機能要求・性能要求を基にした“基本値”です。この3つの要求は、必ず、要求仕様書に明記してあるはずです。

 世の中には、いろいろな見積もり技法がありますが、大部分はこの見積もりの基本値を予測しています。例えば、見積もりの王様といわれるほど、大昔から圧倒的多数で使われている「LOC(Lines of Code:ソースコードの行数)の見積もり」や、LOCには及ばないものの、精度の高さで一部から熱烈な支持を受け、新勢力として注目されている「FP法(Function Point:ファンクションポイント法)」などです(LOCとFPの詳細については、本シリーズの後半で説明する予定です)。LOCによる見積もりもFPによる予測法も、まずこの基本値を見積もるのが第一歩です。

その2:品質を考慮した見積もり値

 “品質を考慮した見積もり値”とは、その家をどの程度の品質で建築するかを考慮して、基本値を調整した値です。例えば、同じ70坪の2階建て家屋であっても、雨風が凌げさえすれば、倉庫みたいに居住性が悪くてもよいのか、きちんと設計し、最高の建材を使用して1ミリも狂いのない精密な家を建てるのかにより、投入工数は大きく(数倍?)変化します。

 基本値が、「What(ソフトウェアの何を作るか?)」を基に算出した値とすると、「品質を考慮した見積もり値」は、「How(ソフトウェアをどう作るか?)」を考慮した“推定値”といえます。

その3:実装能力を考慮した見積もり値

 “実装能力を考慮した見積もり値”は、その「機能要求+品質要求」を誰が作るのかにより、変化する見積もり値です。基本値を求め、品質レベルを考慮して調整し、さらに、開発を担当するエンジニアの能力・経験を考えて、最終的な見積もり値を計算するのです。

 この見積もり値は、「Who(ソフトウェアを誰が作るか?)」により、大きく変化します。同じ家を建てるにしても、経験3カ月の見習いばかり10人で作るのか、経験20年で超一流の腕を持った大工の棟梁ばかりが10人集まって建てるのかでは、工数やスケジュールは大きく異なります。

 ソフトウェア開発の場合、この“人的要素”は、個人の経験や能力だけでなく、プロジェクト全体として、きちんとした開発プロセスが確立されているかに大きく依存します(正確に表現すると、CMMIにおける「プロセスの成熟度」が関係します。CMMIに関しては、別テーマとして取り上げる予定です)。素人が料理をする場合、毎回、順序が違い、味や調理にかかる時間は一定しません。一方、プロの調理人は、毎回カツ丼を同じ調理順序で作り、同じ味、同じ分量、同じ外見のものを同じ時間で仕上げます。これが、プロの技であり、ソフトウェア開発でも同様です。

 この実装能力を考慮した見積もり値は、「生産性」や「プロセス成熟度」を基に計算します。

 昆虫が卵からかえり、幼虫・サナギ・成虫に変態するように、ソフトウェアの見積もりも、「What」「How」「Who」を考慮して、調整やチューニングをしなければなりません。これにより精度の高い見積もりが可能になるのです。


 次回は、見積もりの基本技法として、「類推法」「積み上げ法」「パラメトリックス法」の3つについて解説します。ご期待ください! (次回に続く)

软件开发工期估算系列(3)——見積もり値の「幼虫」「サナギ」「成虫」相关推荐

  1. 软件开发工期估算系列(1)——正確な見積もりはデスマーチ・プロジェクトを救うか?

    [转载按] 日本软件开发工期估算的系列文章,文中提出一个观点:"软件开发技术者的最高能力是--工期估算". 姑且不论这种观点是否正确,工期估算确实是项目开发中的一个比较大的难题, ...

  2. 软件开发工期估算系列(5)——規模見積もりの王様「LOC見積もり」 ~見積もりの基本技法 その2

    http://monoist.atmarkit.co.jp/mn/articles/1109/14/news011.html 「見積もり」は.ソフトウェア開発における大きなテーマであり.ソフトウェア工 ...

  3. 敏捷软件开发实践——估算与计划02

    目录 一.使用故事点估算大小 1.故事点是相对的 2.速度 3.小结 二.使用理想人天进行估算 1.理想时间和软件开发 2.以理想人天作为对大小的度量 3.给出一个而不是多个估算值 4.小结 三.估算 ...

  4. 敏捷软件开发实践——估算与计划(01)

    目录 一.计划的目的 1.为什么要进行估算和计划 2.优秀的计划是什么 3.敏捷计划是什么 4.小结 二.计划失败的原因 1.基于活动而不是基于特性进行计划 1.1.活动不会提前完成 1.2.延误沿着 ...

  5. PMP软件开发规模估算——代码行估算、功能点估算、PERT加权估算

    在进行软件开发之前,需要进行软件成本估算,计算项目的经济可行性.成本估算是立项的依据,是项目计划的基础. 软件估算方法包括:规模估算.工作量估算.进度估算和成本估算. 本节主要介绍规模估算.软件成本. ...

  6. 软件开发前言技术系列讲座

    一.最开始的题目 1.大数据 1)大数据背景下软件开发的特点(分条), 2)大数据背景下软件开发要注意什么(或需要关注的是什么). 价值,数据量,速度,复杂度,多样性 2.什么是云计算?(给出你使用过 ...

  7. 软件的成本与定价如何决策?PMP软件开发规模估算和成本估算方法详解

    在进行软件开发之前,需要进行软件成本估算,计算项目的经济可行性.成本估算是立项的依据,是项目计划的基础. 软件估算方法包括:规模估算.工作量估算.进度估算和成本估算. 本节主要介绍规模估算的调整.工作 ...

  8. C#面向插件级别的软件开发 - 开源研究系列文章

    在现在的面向对象的分析与设计软件开发过程中,最开始就是面向对象的软件开发.但是,在实际的软件开发过程中,很多都是面向接口的开发方式,这种是一种面向对象开发的模式.但是,今天笔者给大家带来的是面向插件的 ...

  9. 《软件开发性能优化系列》之主键、索引设计

    无主键.索引或者没有查询索引无效,是产品查询慢的最常见问题,以下是数据库表主键和索引设计的主要原则 1.主键 主键ID,主键既是约束也是索引,同时也用于对象缓存的键值. 2.索引 *组合或者引用关系的 ...

最新文章

  1. benke计算机课程设计,(本科课程设计.doc
  2. http://www.cnblogs.com/youfan/articles/3216816.html
  3. Bitmap使用PictureBox后提示Bitmap占用
  4. 记录一下水下相机标定
  5. java8入门 错误:找不到或者无法加载主类
  6. excel可视化图表插件_Axure 教程:利用图表前端插件实现高级可视化图表
  7. Chmod 提升一个文件夹下所有文件(夹)的权限
  8. 移动端,fixed bottom问题
  9. 手机连接电脑wifi
  10. 【技术文档】jeecg3.7.1-maven版本搭建环境手把手入门-eclipse
  11. 避免游戏中的批量 sql
  12. 平行四边形背景的制作
  13. 互联网加速职场变革 大数据催生业界十大热门职业
  14. panic: reflect: reflect.Value.SetString using value obtained using unexported field
  15. RRP拷贝目录内的所有文件及子目录到指定目录
  16. 原生js春节倒计时@酷酷航
  17. 程序员思维僵化_僵化趋势
  18. UG二次开发-加工篇:获取刀具的直径,总长,刃长等
  19. 冬季你最需要什么水果?
  20. 存储圈装逼必上TOP 10网站

热门文章

  1. 低级程序员和高级程序员的区别在于?
  2. 飞行控制系统中速度的表示
  3. T_SQL和SQL的区别
  4. android compose webview视频播放横竖屏切换
  5. 经常玩电脑正确的坐姿_如何保持正确坐姿?(多图)
  6. paip.花生壳 服务启动失败 以及不能安装服务,权限失败的解决
  7. Java Jersey使用总结
  8. 408中的计算机组成原理,2019考研408计算机组成原理知识:总线概述
  9. 面试算法-青蛙跳台阶问题(JAVA实现)
  10. 旁路由Openwrt设置