建立组织的软件基准数据库,对于组织来说具有非常重大的意义。一旦建成并使用这个数据库,就可以很容易的帮助我们预测新项目的结果:比如规模,进度,质量等等,因为我们只要在这个数据库中去匹配和新项目相同或类似的项目数据就可以了。
但是,实际上组织要建立这样的一套软件基准数据并不容易。与软件有关的信息多种多样。据不完全统计,有超过3500万个影响因素,所以要建立这样的基准数据,需要研究一套行之有效的分类系统,它可以覆盖到所有的影响因素。
在《软件工程最佳实践》一书中,给出的,建立“可复用的软件需求分类系统”值得我们借鉴。
这个分类系统包含三个部分:基本信息、项目信息和工程信息。
基本信息
基本信息包括行业领域,CMMI等级,项目起止日期,编程语言,软件规模等。
项目信息
项目信息由7个部分组成,每个部分及其组成要素如下:
项目属性 :
全新开发的软件应用
已有软件应用的改善和增强(对已有的软件增加一些功能)
已有软件应用的维护(对已有软件的缺陷进行修复)
已有软件应用的转换和移植(将已有的软件迁移到新的平台上)
已有应用的再设计(遗留应用的再次应用)
应用修订包(修复所购买的软件)
项目范围 :
运算逻辑
子程序
模块
可重用的模块
一次性的项目原型
进化的项目原型
子项目
独立应用
系统组件
系统软件版本(非韧始版本)
全新的部门级系统(韧始版本)
全新的公司级系统(初始版本)
全新的企业级系统(初始版本)
全新的国家级系统(初始版本)
全新的全球级系统(韧始版本)
项目分类 :
个人项目.仅限于私人使用
个人项目.供其他个体使用
学术项目.用于学术环境
内部项目,供在同一个场所的用户使用
内部项目,供在多个场所的用户使用
内部项目,供内部网络用户使用
内部项目,由外部的承包商开发
内部项目.包含分时使用的功能
内部项目.包含军事上的特性
外部项目,产品会用于公共领域中
外部项目产品会用于互联网中
外部项目产品会租借给用户
外部项目和特定硬件绑定供应
外部项目无绑定产品,产品会推向商业市场
外部项目和商业公司签署合同
外部项目和政府签署合同
外部项目和军方签署合同
项目类型 :
非程序项目(自动生成的
批处理程序
网络应用程序
和用户有互动的程序
为用户提供了图形化界面进行互动的程序
数据库应用的批处理程序
和用户有互动的数据库应用程序
客户机/服务器(c/s)架构的程序
计算机游戏
科学运算或数学运算程序
专家系统 ’
支持性的系统或程序.
面向服务架构(soA)
通信或电信项目
流程控制项目
可信系统
嵌入式或即时通信类项目
图形、动画制作或图像处理类程序
多媒体程序
机器人技术或机械自动化程序
人工智能程序
神经网络程序
混合型程序(以上多种类型的组合)
算法复杂度 :
算法不需要计算或仅有少量的逻辑
算法主要由一些简单的计算及简单的逻辑运算组成
算法主要由简单的逻辑运算组成,但有少量中等复杂度的运算
算法中简单的和中等复杂度的计算和逻辑运算并存
算法主要由中等复杂度的计算和逻辑运算组成
算法中既有简单和中等复杂度的逻辑运算,也包括小部分高难度的逻辑
算法中高难度的逻辑多于简单的或中等复杂度的逻辑
算法中绝大部分都是高难度的复杂的逻辑
算法全部为高难度的逻辑,其中包含部分极其复杂的逻辑
算法中的计算和逻辑全部都极其复杂
代码复杂度 :
大多数的“编程”可以通过点击按钮和下拉列表选择来完成
简单的非过程代码(自动生成的、数据库、电子表格)
同时包含简单的和中等难度的非过程代码
使用项目主体框架及可复用模块来编程
中等难度的软件结构及简单的模块和路径
优秀的软件结构但包含一些复杂的模块和路径
代码中包含部分复杂的模块、路径及不同数据段落之间的链接
代码中包含较为复杂的模块、路径及不同数据段落之间的链接
代码中主要的路径和模块都非常庞大且复杂
非常复杂的代码结构并包含大型的模块和难以处理的锈接
数据复杂度 :
软件应用不需要维护任何永久性的文件或数据
软件应用仅需要维护一个文件并仅有很少的数据交互
软件应用仅需要维护少量包含简单数据的文件
软件应用需要维护多种数据元素,但数据元素间的关联很简单
软件应用需要维护多个包含中等复杂度数据的文件
软件应用需要维护多个文件.部分文件包含复杂的数据元素及数据交互
软件应用需要维护多个文件.这些文件都包含复杂的数据元素及数据交互
软件应用需要维护多个文件,这些文件的大部分内容都是复杂的数据元素并有大量数据交互
软件应用需要维护多个文件,这些文件均为复杂的数据元素并有大量的数据交互
软件应用需要维护大量包含复杂数据元素的文件并伴有复杂的数据交互
工程信息
虽然书中对于将这一部分纳入分类系统中持有保留的态度,仅将其作为扩展方式。但是对于组织内部使用来说,书中担心的加入这部分会给系统带来的不好影响,可能会很小。
工程信息大致包括估算方法、开发方法、质量保证方法、缺陷去除方法等内容。综合以上因素,这套分类系统的示例如下:
类别 | 示例 |
---|---|
行业 | 电信 |
CMMI等级 | 3级 |
项目开始日期 | 2018年6月20日 |
计划结束日期 | 2018年12月30日 |
实际结束日期 | 2019年2月28日 |
项目延迟 | 2月 |
初始规模估算 | 1000(功能点) |
重用规模 | 200(功能点) |
变更规模 | 300(功能点) |
最终交付规模 | 1500(功能点) |
编程语言 | 63(Java) |
项目属性 | 1(全新开发的软件) |
项目范围 | 8(独立软件) |
项目分类 | 11(专家系统) |
项目类型 | 15(外部项目) |
算法复杂度 | 5.25(多种复杂度混合) |
代码复杂度 | 6.00(多种复杂度混合) |
数据复杂度 | 2.45(低复杂度) |
规模估算方法 | 1(IFPUG功能点估算法) |
风险分析 | 0(未使用) |
需求收集方法 | 1(联合应用设计) |
需求描述语言 | 5(混合使用) |
质量需求 | 1(质量功能展开) |
软件质量保证方法 | 1(正式的质量保证方法) |
开发方法 | 3(TSP) |
预先使用的缺陷去除方法 | |
需求审查 | 1(实施) |
设计审查 | 1(实施) |
代码审查 | 0(未实施) |
静态分析 | 1(实施) |
六西格玛方法 | 0(未实施) |
自动化测试 | 0(未实施) |
测试阶段 | |
单元测试 | 0(未实施) |
集成测试 | 0(未实施) |
功能测试 | 1(实施) |
性能测试 | 1(实施) |
安全性测试 | 0(未实施) |
回归测试 | 1(实施) |
系统测试 | 1(实施) |
验收测试 | 1(实施) |
组织可以在这套系统的基础之上,结合自己的实际情况,增加或删除一些数据项,来建立自己的软件基准数据库。组织的每个项目结束时都进行数据的采集、存储和统计分析,以不断壮大这个软件基准数据库。有了这个软件基准数据库,必定会使组织对软件项目的管控能力大大提高。
这正是: