为了对软件开发过程进行有效控制,需要了解软件生命周期不同开发阶段的成本分布规律。本文通过分析一个大规模真实软件工程项目数据集-EDS,对不同开发阶段成本的分布规律进行了全面地揭示,发现各开发阶段成本符合正态分布,New Development类型和Enhancement类型的项目成本分布一致,Other Projects & Services类型和其他三种开发类型项目成本分布存在显著差异。随着项目持续时间的增加,Produce阶段成本呈上升趋势,Implement阶段成本呈下降趋势。本文的研究结果与传统基于单个项目或小规模数据集上得出的结果有较大不同,对软件项目成本的管理和进度控制有较好的促进作用。 In order to effectively control the software development process, understanding the distribution rules of different life cycle phases is needed. This paper analyzes the effort distribution of devel-opment phases on the basis of a large-scale real software project data set-EDS. It is found that the phase effort is consistent with the normal distribution, and the effort distribution of New Development type and Enhancement type is consistent. There are significant differences in the distribution patterns between the Other Projects & Services type and the other three development types. As the duration of the project grows, the effort of Produce phase is on the rise and the Implementation phase effort is declining. The results of the study are quite different from the traditional results based on the individual project or small-scale data sets, which have a good effect on software project effort management and schedule control.
王勇,张敬
中国海洋大学信息科学与工程学院,山东 青岛
收稿日期:2017年5月7日;录用日期:2017年5月21日;发布日期:2017年5月24日
为了对软件开发过程进行有效控制,需要了解软件生命周期不同开发阶段的成本分布规律。本文通过分析一个大规模真实软件工程项目数据集-EDS,对不同开发阶段成本的分布规律进行了全面地揭示,发现各开发阶段成本符合正态分布,New Development类型和Enhancement类型的项目成本分布一致,Other Projects & Services类型和其他三种开发类型项目成本分布存在显著差异。随着项目持续时间的增加,Produce阶段成本呈上升趋势,Implement阶段成本呈下降趋势。本文的研究结果与传统基于单个项目或小规模数据集上得出的结果有较大不同,对软件项目成本的管理和进度控制有较好的促进作用。
关键词 :软件项目管理,开发阶段,正态分布,进度控制
Copyright © 2017 by authors and Hans Publishers Inc.
This work is licensed under the Creative Commons Attribution International License (CC BY).
http://creativecommons.org/licenses/by/4.0/
软件开发过程中合理的成本分配是促进软件项目规划的基础 [
现有的研究中,Norden [
在这些已有的研究工作中,有按照传统瀑布模型和COCOMO模型进行成本分布的研究,也有按照RUP模式进行的分布研究,重点对某一工业类型项目的成本分布研究 [
本文在大规模的历史项目数据集-EDS进行研究,数据集共包含14054个软件项目,各类信息数据上万条,是目前世界上规模最大的软件工程数据集之一。其中,项目集属性众多,如表1所示。原始数据集中包含多种开发方法学,每种方法学都具备相应细化的开发活动阶段。同时,数据集中的项目来源于多种行业,例如电信业、制造加工业、政府机构等;开发类型也多种多样,既有新开发的软件项目,也有对软件产品的维护项目;项目所属国家包含美国、新西兰、法国等;项目所采用的开发团队规模也大小不一;项目开发时间从上世纪七十年代至今。
数据集中各开发阶段所包含的详细开发活动,如表2所示。其中Define & Analyze阶段对应于问题
Attributes | Description |
---|---|
项目持续时间 | 每个项目所占用的时间跨度,单位:月 |
总成本 | 项目工作量总成本,单位:人小时 |
阶段成本 | 各开发阶段所花费的成本,单位:人小时 |
开发类型 | 项目所属开发类型,例如新开发类型、增强类型等 |
工业类型 | 项目所属行业,例如电信通信业、制造加工业、财政业等 |
开发时间 | 项目各类开发阶段的开发时间,单位:年月 |
开发语言 | C、C++、SQL、HTML、SAS、JAVA、ASP、PASCAL、Oracle等语言 |
所属地区 | 亚太区、美国、加拿大等地区 |
所属国家 | 美国、加拿大、津巴布韦等非洲、亚太地区国家 |
开发团队规模 | 单人开发,单个开发团队,多个开发团等 |
项目复杂度 | 低级、中级、高级 |
功能点数目 | 项目开发过程中的功能点,包含未调整的功能点、调整的功能点等方面 |
开发方法学 | 项目所使用开发方法学,共46种,不同方法学包含的项目子阶段不同 |
开发工具类型 | 项目开发时使用的各类工具,例如网页开发工具、测试工具、文本分析等 |
表1. 数据集部分属性集列表
Phases | Activities included |
---|---|
Define & Analyze | Define, Document current environment, Refine & Analyze Requirements, Planning. |
Design | Design System, Design Application, Technical Design, Business Design. |
Produce | Development, Integration, Produce application. |
Optimize | User Acceptance Test, Software Test-System Test, System Test, Testing. |
Implement | Release control, Release Application, Implement Application, Production Preparation, Deploy. |
表2. 数据集各开发阶段所包含的开发活动
定义和需求分析阶段;Design阶段对应于系统设计和详细设计阶段;Produce阶段对应于编码阶段;Optimize阶段对应于测试阶段;Implement阶段对应于实施交付阶段。
为了获得实验数据集,对原始数据集中的项目进行筛选,步骤如下:
1) 在原始数据集14,054个项目中,筛选出通用方法学ID为20的项目,得到8540个项目;
2) 将包含开发阶段成本数据的项目筛选出来,共6879个项目;
3) 按照生命周期中的开发阶段进行成本汇总,得到6879个项目的成本数据;
4) 筛选出包含完整生命周期的项目,共计2588个项目;
5) 去除这些项目中各开发阶段成本中存在零值的项目数据,剩余2570个项目。
如表3,各开发阶段的均值和中位数差别较大。由于项目规模、开发类型等因素的影响,软件项目各
生命周期阶段成本数值大小各异,不利于研究软件项目的阶段成本分布,因此,对数据进行归一化处理。
归纳统一样本的统计分布性,可以更清晰地分析软件项目的阶段成本分布情况。本文将阶段成本数统一转化为各阶段比例关系,即各开发阶段成本所占项目开发总成本的比例,如表4。
由表4可知,阶段成本进行归一化后,均值和中位数之间的关系,与未进行归一化之前的数据关系大有不同:经过归一化之后的成本中位数和均值的差异不明显,在Produce阶段仅仅相差0.26%,而Design阶段相差1.56%,Define & Analyze阶段相差2.63%,Implement阶段相差最大是3.71%,进行归一化之后的数据更加直观合理。对阶段成本进行归一化操作,转化为各开发阶段成本所占该项目总成本的比例,得到实验数据集。
根据项目阶段的成本信息绘制出各阶段成本分布的频数直方图和概率密度估计曲线,如图1。其中,左坐标表示成本分布的频数,右坐标表示成本分布的概率密度估计大小。图像表明,Define & Analyze阶段、Design阶段、Produce阶段成本的概率密度曲线光滑,类似正态分布的趋势,尤其是Produce阶段的成本分布曲线与正态分布曲线一致性较高,呈现正态分布的完整曲线,Optimize阶段,Implement阶段的概率密度曲线光滑,大致呈现正态分布曲线的半峰形态,向右滑动。同时,Produce阶段的分布范围比较广泛,大致在10%~70%的范围内,呈现比较大的跨度,而Define & Analyze阶段、Design阶段、Optimize阶段、Implement阶段的分布大致局限在5%~30%范围内。这对于未来项目的成本分配在一定程度上提供了参考意见。
开发类型主要包括四类:New Development、Enhancement、Maintenance、Other Projects & Services,各开发类型对应Type_ID如表5。表6是四种开发类型项目信息,New Development类型花费的成本是最
max | median | mean | min | |
---|---|---|---|---|
Total Effort | 308339.2 | 1757.5 | 4588.79 | 5 |
Define & Analyze | 31283.5 | 207.5 | 631.27 | 0.25 |
Design | 35677 | 286 | 871.88 | 0.75 |
Produce | 160351 | 754 | 2082.23 | 0.5 |
Optimize | 58432.7 | 143.7 | 573.62 | 0.25 |
Implement | 49386 | 99 | 429.78 | 0.25 |
表3. 软件项目成本数据统计描述
Define & Analyze | Design | Produce | Optimize | Implement | |
---|---|---|---|---|---|
max | 94.73% | 77.15% | 94.96% | 90.74% | 99.33% |
median | 12.47% | 17.32% | 44.47% | 8.79% | 5.66% |
mean | 15.1% | 18.78% | 44.61% | 12.13% | 9.37% |
min | 0.036% | 0.048% | 0.058% | 0.011% | 0.001% |
表4. 各开发阶段成本比例统计描述
图1. 各阶段成本分布频数直方图和概率密度估计曲线
Type_ID | Type_ description |
---|---|
1 | New Development |
2 | Enhancement |
4 | Maintenance |
5 | Other Projects&Service |
表5. 开发类型对应ID
1 | 2 | 4 | 5 | |
---|---|---|---|---|
Total Effort | 8043.2 | 3781.39 | 3112.42 | 3957.19 |
项目数 | 510 | 1761 | 174 | 124 |
项目占比 | 19.84% | 68.52% | 6.77% | 4.82% |
表6. 各开发类型项目信息
多,显著大于其他开发类型的项目成本,其他的三种类型的总成本在3000到4000人小时之间,其中Maintenance类型的项目总成本花费最少。
根据不同开发类型项目的阶段成本信息绘制成本分布折线图,如图2。各开发类型项目Design阶段的成本约是Produce阶段的一半。在开发阶段的成本之间,可能存在重要的分布关系。各类型项目花费在Implement阶段的成本是最少的,而Other Projects & Services类型在Implement阶段的成本比例在所有开发类型中最高。New Development类型和Enhancement类型的项目成本分布比较一致,Other Projects & Services类型与其他类型项目在成本分布上有显著差别。New Development类型项目在Produce阶段的成本较Enhancement类型项目高(约2.29%);Enhancement类型项目在Optimize阶段成本比New Development类型项目较高(约2.77%),这和杨叶关于开发类型这一属性的研究结果 [
图2. 各开发类型项目阶段成本分布折线图
Enhancement类型的项目编码并不是对于整个项目编码,只是针对某一部分功能编码,而在测试时,进行的是功能模块单元测试以及整个系统的集成测试。因此,相对来说,Enhancement类型在Optimize阶段的成本比例较高。另外,Enhancement类型和Maintenance类型的分布,在后期开发阶段的成本分布折线几乎是重合的,主要区别在Define & Analyze阶段和Design阶段:Maintenance类型在Define & Analyze阶段高出大约4.18%,而Enhancement类型在Design阶段高出3.31%,这是因为Enhancement类型在添加新功能时进行设计,与Maintenance类型侧重阶段不同。在成本规划过程中应注意开发类型对成本分配的影响。
项目持续时间,指从软件项目开始一直到测试、交付等软件活动结束所占的时间跨度。本文中以月为基本单位进行度量。实验数据包含持续时间为4至20个月的项目,按照不同持续时间对项目进行分类。
如表7,根据成本均值和中位数可知,项目总成本和项目持续时间呈正比例关系,以此数据画出项目持续时间与项目总成本散点图。同时,绘制相应的指数趋势线和线性趋势线,得出项目总成本随项目持续时间而变化的趋势情况,如图3、图4。
判定系数R2可以衡量回归曲线拟合样本的优劣程度,其值越接近1说明拟合的效果越好。相比项目持续时间和项目总成本之间的线性增长关系(判定系数R2为0.8808、0.8975),它们之间的指数增长趋势线(判定系数R2为0.9373、0.967)与数据之间的拟合效果更好,这一点不论是从趋势线的拟合程度还是判定系数R2上,都可以得到体现:指数趋势线的相关程度大于线性趋势线的相关程度。项目持续时间和项目总成本之间的这种回归关系在项目管理和成本控制方面提供了重要的参考。
持续时间为4至20个月的项目阶段成本比例数据,如表8所示。
根据表8绘制阶段成本比例与项目持续时间折线图,更直观看到结果,如图5。
项目持续时间在4~10个月时,各开发阶段的成本分布趋势比较平稳。随着项目持续时间的增加,在10~20个月之间,Define & Analyze阶段、Design阶段的变化趋势大致同步:Define & Analyze阶段的相对花费成本上升或者下降时,Design阶段随着Define & Analyze阶段的变化而变化。Produce阶段成本随项目持续时间的增加呈上升趋势,Implement阶段相对成本呈下降趋势,也就是说随着项目持续时间的增加,在Produce阶段的成本增多,在Implement阶段的成本减少。
持续时间 | 项目数 | 项目占比 | 项目总成本(mean) | 项目总成本(median) |
---|---|---|---|---|
4个月 | 196 | 9.32% | 1329.34 | 848.25 |
5个月 | 278 | 13.22% | 1722.26 | 1115.25 |
6个月 | 295 | 14.03% | 2526.11 | 1403 |
7个月 | 260 | 12.36% | 2773.65 | 1689.5 |
8个月 | 228 | 10.84% | 2752.01 | 1728.13 |
9个月 | 188 | 8.94% | 4028.32 | 2342.5 |
10个月 | 147 | 6.99% | 6639.77 | 3208.75 |
11个月 | 114 | 5.42% | 4335.25 | 2669.25 |
12个月 | 87 | 4.14% | 6511.53 | 3005.75 |
13个月 | 78 | 3.71% | 6945.49 | 3750.88 |
14个月 | 47 | 2.23% | 9983.63 | 6209.25 |
15个月 | 41 | 1.95% | 7901.69 | 6099 |
16个月 | 44 | 2.09% | 13227.12 | 7648.25 |
17个月 | 35 | 1.66% | 13951.51 | 7639.5 |
18个月 | 27 | 1.28% | 13823.34 | 8886.75 |
19个月 | 18 | 0.86% | 11397.53 | 7611 |
20个月 | 20 | 0.95% | 19400.28 | 11953.25 |
表7. 持续时间为4~20个月的软件项目信息
图3. 持续时间与项目总成本指数趋势图
图4. 持续时间与项目总成本线性趋势图
持续时间 | Define & Analyze | Design | Produce | Optimize | Implement |
---|---|---|---|---|---|
4个月 | 12.74% | 16.96% | 40.7% | 8.99% | 7.52% |
5个月 | 11.64% | 18.69% | 44.91% | 8.47% | 6.38% |
6个月 | 11.58% | 17% | 45.7% | 9.58% | 5.61% |
7个月 | 12.46% | 17.63% | 43.46% | 10.33% | 6.34% |
8个月 | 12.22% | 17.95% | 42.69% | 10.07% | 5.65% |
9个月 | 12.8% | 19.29% | 43.08% | 9.68% | 5.08% |
10个月 | 11.5% | 19.64% | 42.98% | 10.24% | 5.49% |
11个月 | 12.61% | 16.03% | 48.01% | 7.71% | 5.23% |
12个月 | 13.69% | 17.62% | 45.32% | 8.5% | 5.84% |
13个月 | 10.05% | 14.77% | 45.77% | 8.24% | 5.49% |
14个月 | 13.15% | 19.06% | 48.84% | 6.43% | 3.59% |
15个月 | 12.22% | 20.07% | 47.44% | 8.37% | 3.53% |
16个月 | 14.82% | 17.42% | 45.84% | 7.43% | 5.14% |
17个月 | 16.22% | 19.63% | 46.98% | 7.29% | 5.52% |
18个月 | 11.38% | 15.2% | 46.8% | 7.26% | 4.57% |
19个月 | 15.45% | 20.2% | 48.06% | 7.37% | 4.25% |
20个月 | 11.33% | 11.78% | 50.55% | 11.13% | 3.77% |
表8. 持续时间为4-20个月项目的阶段成本比例(mean)
图5. 不同持续时间下阶段成本比例变化趋势
本文基于大规模软件项目数据集EDS,研究了软件开发成本的阶段分布情况。本研究从数据集总体、多种开发类型以及不同项目持续时间等方面分析了项目成本分布情况。研究结果显示软件生命周期各开发阶段成本符合正态分布的规律;New Development开发类型和Enhancement开发类型的项目成本分布一致性较高,而Other Projects & Services开发类型项目和其他开发类型项目成本分布存在显著差异;Produce阶段成本随着项目持续时间增长而上升,相反,Implement阶段成本随着项目持续时间增长而降低,同时在项目持续时间为10~20个月时,Define & Analyze阶段、Design阶段成本的变化趋势同步。本文的研究对阶段成本的建模预测提供了一定的理论基础作用,对各开发阶段的成本分配有重要的参考价值,在软件项目成本管理和进度控制方面提供了有效地指导。后续研究将继续探索其他因素对软件阶段成本分布的影响,如团队规模、软件大小等因素,为改进软件项目管理提供更丰富的指导意见。
本论文得到国家自然科学基金面上项目(61170312)及软件工程国家重点实验室开发基金项目(SKLSE 2012-09-14)的支持。
王 勇,张 敬. 软件开发阶段成本分布研究The Effort Distribution of Software Development Phases[J]. 计算机科学与应用, 2017, 07(05): 428-437. http://dx.doi.org/10.12677/CSA.2017.75052