文/质安部
一、心得感受
一年前,我开始了我的CMMI5旅程。顺境、逆境,坎坷的、平坦的,处处碰壁的死胡同、豁然开朗的桃花源,我们一路走来,风雨过后终见彩虹。
刚刚接触CMMI时,对基本术语的理解还很含混,感觉就像进入另一个工作领域。什么是PA,什么是CAR,什么是PPB和PPM,什么是Minitab、水晶球和蒙特卡洛,CMM与CMMI有什么区别,要通过CMMI5要哪些方面的工作,我们还有哪些方面需要改进,收集了一堆看似杂乱、不规则的数据,如何应用到项目中,并给项目带来实质性的效用,所有这些问题都要得以解决,在整个CMMI5实施过程中,我们从众多数据入手,分析并挖掘它们之间的关系,结合相关培训,在咨询顾问的指导下,我从略知一二到理解掌握了CMMI5的基础知识,并开始慢慢地理清思路。
其实学习CMMI5是个融会贯通的过程,而在工作中,CMMI5的思想又是触类旁通的,过程改进的思想在工作中、生活中各个方面皆可运用。我们将有用的数据抽离,并建立了基线和模型,在反复的实验中得到验证,用数据说话,指导项目实施。为了实现CMMI5,我们深入地参与到CMMI5试点项目中,实际运用基线和模型、数据和模板,在实践中不断完善表格模板和体系文件,规范项目实施工作和管理机制,并做好公司过程改进,组织相关培训,在公司自上而下落到实处。用实例证明我们的实力,成功地说服了主任评估师,最终华丽地完成CMMI5认证目标!
宝剑锋从磨砺出,梅花香自苦寒来。历尽千辛,最终尝到甜头,这次的胜利可以说是我职业旅途中的一座里程碑。前方还有很长的路要走,持续的过程改进还在继续,我也会保持CMMI5工作的劲头,坚定地走下去!
二、基线建立
基线建立的前提是公司的项目管理过程趋于稳定,项目过程数据趋于可控。基线反映了公司的过程性能能力。我们是用Minitab工具以控制图的方式做出基线的,需要注意的是:
●控制图中的异常点不能随意删除,需进行根原因分析;
●表现差异较大的项目不能放在一起,应分类做出基线;
●项目经理在制定项目目标时,应参考组织级基线,结合项目特性确定本项目的目标;
●MiniTab的I-MR图对数据的检验规则如下:
1)1个点距离中心线大于3个标准差
2)连续9个点在中心线同一侧
3)连续6个点,全部递增或递减
4)连续14个点,上下交错
5)2个点中有1个点,距离中心线(同侧)大于2个标准差
6)4个点中有3个点,距离中心线(同侧)大于2个标准差
7)连续15个点,距离中心线(任一侧)1个标准差以内
8)连续8个点,距离中心线(任一侧)大于1个标准差
三、模型建立
3.1模型建立的八步骤:
(一)获取组织目标
1)获取商业目标:结合往年的市场投入、同行竞争力分析得出当年的商业目标。
2)量化组织绩效目标:从商业目标出发,采集目标分析法,逐步分析出关键的组织绩效目标。(确定目标)
(二)比较当前基线与组织绩效目标的差距
1)采集上一年的历史绩效数据:以组织绩效目标为基础,采集上一年的绩效数据,并分析出基线。
2)假设检验分析差距:用假设检验的方法分析当前过程能力与组织绩效目标的差距。
例:模型工作量控制在均值52人天为目标,用假设检查分析为:
即假设未引进革新点时,模块工作量大于52人天(即μ>52)
备择(Ha):μ>52
原假设(H0):μ≤52
用minitab的单样本(t)检验进行分析,若P值小于0.05,即拒绝原假设(H0).
(三)分析影响目标的因素(大鱼-中鱼)
1)CAR分析影响目标的因素:采集与组织绩效目标有关的项目数据,对每一个数据的表现进行原因分析,并逐层找出根原因(确定因子1)。
2)头脑风暴分析影响目标的因素:组织公司内核心人员进行讨论会议,以头脑风暴的形式讨论出影响因素。
3)投票选择:对上一步头脑风暴产生的多个影响因素按照一定的规则,投票选择产生强相关的影响因素(确定因子2)
(四)分析上一年的性能基线(采集中鱼)
1)采集上一年历史性能数据:根据上一步确定的因子,采集该因子的上一年项目数据。
2)形成上一年历史性能数据基线:用I-MR图的方法形成因子的性能基线,对异常点需进行根原因分析。
(五)相关性分析关键因素(中鱼-小鱼)
1)相关性分析:用Pearson(柏松)系数方法,分析因子1、因子2与目标的相关性,相关性强的因子可用于回归模型的建立。
根据柏松系数,0.8-1.0属于极强相关,0.6-0.8属于强相关,0.4-0.6属于中等程度相关,0.2-0.4属于弱相关。
2)关键子过程的改进计划(矩阵):对小鱼、中鱼、大鱼所有的因子,找出对应的关键子过程,并依次按照高、中、低的优先级顺利,计划改进周期。
(六)建立性能模型
用统计分析工具Minitab>>统计>>回归>>回归,“响应”设定为目标值,“预测变量”设
定为因子后,可得出回归方程。
(七)达成目标模拟
1)水晶球分析:用水晶球工具Crystal Ball(蒙特卡洛原理)分析模拟出,当前过程能力对目标达成的Certainty值,以及改进因子后对目标达成的Certainty值。
2)引入革新点和改进措施:从数据层面,分析因子的历史数据中,可改进的空间,并引出改进措施。(需启动DAR确定革新点)
注:(1).引出革新点时,一定要针对X使用CAR的方法分析其提升空间;
(2).改进前后,分别用Crystal Ball模拟对目标的达成度,当Certainty值大于90%时,即认为达成目标的风险较小。
(八)引入革新点的成本效益分析
1)成本分析:预测出实施革新点的各项成本(如资源、人力、开发、维护、推广等),并将成本数据进行量化。
2)预计收益分析(可节约成本):预计实施革新点后,可收获的价值。(如成本降低、绩效提升等)
3)成本-收益率:计算收益与成本的比值。即判定是否值得实施革新点。
3.2回归方程解读
以模块工作量模型(Y-工作量,X1-调整后功能点数,X2-重用库)为例,解读回归方程中各参数的意义:
建立模型应注意:
◆模型的使用者需评审模型。
◆刚开始建立的模型肯定不正确,需不断采集数据,要逐步优化模型。模型可以不断优化,但是模型的使用场景不能常变。
◆应重视异常点的分析,可识别改进的机会。异常点分析需使用CAR。
◆基线与模型的异同点:都有预测能力,基线只可预测一个过程;模型可以预测多个过程。基线没有因子,模型定义了因子,基线和模型需结合使用。
3.3模型使用
模型使用场景总体分为:估算和回归模拟,使用场景的关系如下图所示:
各场景中对模型的使用步骤如下图所示:
3.3.1模型使用场景
假设上年度模型回归方程为 y =f(x1,x2),本年度在项目过程中使用模型时,分为以下7种情况:
(1)当Y不确定时
1、当x1,x2不确定时,
① 估计x1、x2。
② 通过f(x1,x2)预测y值,分析异常值。
2、当x1部分确定时,
① 估计剩余的x1,估计x2;分析x1确定部分的异常值。
② 通过f(x1,x2)预测y值,分析异常值。
3、当x2部分确定时,
① 估计剩余的x2,估计x1;分析x2确定部分的异常值。
② 通过f(x1,x2)预测y值,分析异常值。
4、当x1全部确定时,
① 估计x2;分析x1的异常值。
② 通过f(x1,x2)预测y值,分析异常值。
5、当x2全部确定时,
① 估计x1;分析x2的异常值。
② 通过f(x1,x2)预测y值,分析异常值。
(2)当Y确定时
6、当x1、x2全部确定,y部分确定时,
① 使用确定的x1,x2,部分y进行归回得到新方程 y= f1(x1,x2),使用水
晶球模拟新回归方程的可信度。
② 使用新回归方程预y= f1(x1,x2)测剩下的y值。
③ 异常值分析,包括:x1,x2,y(已确定及预测部分)。
7、当y全部确定时,
① 使用全部确定的x1、x2、y进行归回得到新方程 y= f1(x1,x2),使用水
晶球模拟新回归方程的可信度。
② 异常值分析,包括:x1,x2,y。
3.3.2异常值分析
假设回归模型为 y=f(x1,x2),下面分别列出对x与y指标进行异常值分析时的注意事项:
(1)针对y的异常值分析时注意以下几点:
① 根据y的位置及分布进行分析:
当y分布在以下3种位置时,需要分析异常点存在原因。
当y的分布不满足控制图检验时(参考控制图检验原则),需要分析异
常点存在原因。
② 需对y的实际值进行异常值分析。
③ 需对y的预测值进行异常值分析。
④ 异常值分析时,需分析造成该异常值的具体问题。
(2)针对x的异常值分析时注意以下几点:
① 根据x的位置及分布进行分析:
当x分布在以下2种位置时,需要分析异常点存在原因。
当x的分布不满足控制图检验时(参考控制图检验原则),需要分析异
常点存在原因。
② 需对x的实际值进行异常值分析。
③ 异常值分析时,需分析造成该异常值的具体问题。
3.3.3问题分析及改进方案
(1)初步分析
假设对x与y指标进行异常值分析时,梳理出以下异常点及问题:
(2)根原因分析
使用帕累托图(Perato Diagram)分析各种原因类型的频率及累计比率,根据帕累
托法则(二八原理),即百分之八十的问题是百分之二十的原因所造成的,找出产生大多数问题的关键原因,用来解决大多数问题。
(3)改进方案
(1) 根据根原因,提出改进方案:
方案一:引进新工具
方案二:引进新工具
方案三:流程改进
(2) 分析执行改进方案后y的改进效果,分为以下两种情况:
A. 预测执行改进方案后x值提升幅度,并使用回归方程预测y值提升效果。
B. 当y出现实际值时,再次回归后用新的模型预测y,并用水晶球模拟。
四、重用率估算
⏹实际功能点,是指《需求规格说明书》中归纳分析的功能点。
⏹重用功能点,是指《需求规格说明书》中归纳分析的且被重用的功能点。若功能点沿用其他项目或本项目中其他功能点的代码视为重用。
⏹重用功能点(折算) 的两种算法:
(1)重用代码行/有效代码行*实际功能点数*100%。
(2)(前台重用方法个数+前台组件重用个数+后台重用方法个数)/(前台方法总个数+前台组件总个数+后台方法总个数)*实际功能点数*100%
⏹重用率 = 重用功能点个数 / 实际功能点个数*100%
五、功能点估算方法
5.1估算流程
功能点估算方法,是从软件项目的功能需求角度来评估项目规模,功能点估算流程如下图所示。
功能点估算方法的应用场景分为项目前期、需求明确及需求变更:
⏹项目前期,指从项目规划开始至需求规格明确期间。
⏹需求明确时,指已完成需求调研,并形成了正式的需求规格说明书。
⏹需求变更时,指在项目建设过程中,客户提出了变更需求,且已将变更需求更新到新版本的需求规格说明书中。
5.2调整前功能点计算
5.2.1复杂度矩阵(项目前期)
通过复杂度和功能点分类两个维度构建功能点分类-复杂度矩阵,并识别出每一个功能点所对应复杂系数Ki,调整前功能点数量的计算公式为:UFC=∑(Ki)。
功能点分类-复杂度矩阵如下所示:
功能点分类 | 复杂度描述 | 复杂度 | 复杂系数(K) |
接口 | 调用外部系统已实现的接口 | 低 | 5 |
实现外部接口,提供外部系统调用 | 高 | 10 | |
数据处理 | 无算法 | 低 | 3 |
有算法,实现方法暂不清晰,但也不难 | 中 | 4 | |
多个算法,且较难实现 | 高 | 6 | |
统计 | 定时统计 | 低 | 4 |
实时统计 | 高 | 7 | |
查询 | 单表查询 | 低 | 3 |
多表联合查询 | 高 | 6 |
以数据项数量和数据文件数量为维度,构建功能点的复杂度矩阵,功能点复杂度矩阵如下所示:
接口 | 数据处理 | 统计和查询 | |||||||||
数据文件数量 | 数据项数量 | 数据文件数量 | 数据项数量 | 数据文件数量 | 数据项数量 | ||||||
1-19 | 20-50 | 51+ | 1-4 | 5-15 | 16+ | 1-5 | 6-19 | 20+ | |||
1 | 低 | 低 | 中 | 0或1 | 低 | 低 | 中 | 0或1 | 低 | 低 | 中 |
2-5 | 低 | 中 | 高 | 2 | 低 | 中 | 高 | 2-3 | 低 | 中 | 高 |
>6 | 中 | 高 | 高 | >2 | 中 | 高 | 高 | >4 | 中 | 高 | 高 |
复杂度系数
功能类型 | 低 | 中 | 高 |
接口 | 5 | 7 | 10 |
数据处理 | 3 | 4 | 6 |
统计 | 4 | 5 | 7 |
查询 | 3 | 4 | 6 |
5.2.3调整系数
下面将分别说明7个系统特性的定义及影响程度的划分标准。
序号 | 系统特性名称 | 等级 | 影响程度说明 | 分值 |
1 | 算法 | 0 | 无算法 | 0 |
1 | 有算法,且实现方法清晰 | 2 | ||
2 | 有算法,实现方法暂不清晰,但也不难 | 4 | ||
3 | 算法较难或多个算法 | 6 | ||
4 | 多个算法,且较难实现 | 8 | ||
5 | 内部力量不能攻克的算法,或需要专门研究 | 10 | ||
2 | 重用 | 0 | 直接重用,几乎不需要修改 | 0 |
1 | 基本可直接重用,单需要做些简单的调整 | 2 | ||
2 | 重用50%~70%;或大部分内容需要较大调整即可重用 | 4 | ||
3 | 重用20%~50%;或大部分内容需要较大调整即可重用 | 6 | ||
4 | 重用20%以内,或整体调整后方可重用 | 8 | ||
5 | 无重用 | 10 | ||
3 | 新技术 | 0 | 无新技术; | 0 |
1 | 有新技术,但预期简单(几乎可视为旧技术); | 2 | ||
2 | 新技术存在1-2个局部不清晰; | 4 | ||
3 | 存在多个新技术,或3个以上局部不清晰; | 6 | ||
4 | 新技术大部分不清晰; | 8 | ||
5 | 目前力量不能攻克的新技术,或需要专门研究; | 10 | ||
4 | 业务成熟度 | 0 | 客户已发布管理制度和作业规范,且已执行一年以上。 | 0 |
1 | 客户已发布管理制度且已执行一年以上,相关作业规范正在拟定但尚未发布。 | 2 | ||
2 | 客户已发布管理制度且已执行一年以上,但尚未拟定相关作业规范。 | 4 | ||
3 | 客户已发布管理制度和作业规范正在拟定,但尚未发布。 | 6 | ||
4 | 客户未发布管理制度和作业规范,依靠约定的业务流程经验进行管理。 | 8 | ||
5 | 新兴业务,业务流程和管理规范尚处于研究阶段。 | 10 |
5 | 性能要求精细度 | 0 | 用户没有提出性能方面的要求 | 0 |
1 | 用户提出了性能和设计方面的要求,但不需要采取特定措施 | 2 | ||
2 | 响应时间和吞吐量在系统峰值时是关键的,但是不需要采取相应的CPU 使用方面的特殊设计。处理的最后期限是在下一个工作日。 | 4 | ||
3 | 在任何时候响应时间和吞吐量都是关键的,但是不需要采取相应的CPU 使用方面的特殊设计。处理的完成期限比较严格 | 6 | ||
4 | 除了上面一项的要求外,由于对需求的要求比较严格,在设计阶段就要进行性能分析 | 8 | ||
5 | 除了上面一项的要求之外,在设计和实施阶段需要使用性能分析工具来判断性能要求的完成情况 | 10 | ||
6 | 系统界面设计的明确程度 | 0 | 沿用原有系统的界面风格。 | 0 |
1 | 有类似界面风格的系统可以参考 | 2.5 | ||
2 | 客户对界面的要求较明确,且所有客户对界面要求一致。 | 5 | ||
3 | 客户对界面的要求不明确,但所有客户对界面要求一致。 | 7.5 | ||
4 | 客户对界面要求不明确,且客户间对界面的要求不一致。 | 10 | ||
7 | 兼容性 | 说明 | 兼容性要求包含以下内容:操作系统、数据库、中间件、浏览器 | |
0 | 客户需求不含兼容性的要求 | 0 | ||
1 | 考虑了兼容性的要求,包括以上的1个 | 2.5 | ||
2 | 考虑了兼容性的要求,包括以上的2个 | 5 | ||
3 | 考虑了兼容性的要求,包括以上的3个 | 7.5 | ||
4 | 考虑了兼容性的要求,包括以上的4个 | 10 |
根据以上7项系统特性的影响程度(DI)计算功能点的调整系数(AF),计算公式为:
AF = ∑(DI)*0.01+ 0.65
根据调整系数(AF),最终可得到调整后的功能点数(FP),计算公式为:
FP(调整后功能点) = UFC(未调整功能点数目) * AF (调整系数)
六、单元测试的归零方法应用
6.1归零分析法原理
技术归零五要素:定位准确、机理清楚、问题复现、措施有效、举一反三。
定位准确:层层分析、分解到质量问题发生的深层事件,即确定问题发生的准确部位。
机理清楚:通过理论分析或试验手段,确定质量问题发生的根本原因。
问题复现:通过试验或其他验证方法,再现或确认质量问题发生的现象,验证定位的准确性和机理分析的正确性。
措施有效:针对发生的质量问题,采取纠正措施,经过验证,确保质量问题得到解决。
举一反三:把质量问题信息反馈给其他部位,检查有无可能发生类似问题,并采集预防措施。
6.2单元测试应用归零分析法
⏹程序员分析
1)程序员单元测试后将问题记录缺陷跟踪表;
2)分析引入该问题的阶段或原因;
3)进一步分析引入该问题的根原因,并定义原因类型;
4)从技术层面确定解决方案,并确保问题得到解决;
5)举一反三,分析其它关联模块或功能是否会出现类似问题,并预防。
⏹项目经理分析
1)以缺陷跟踪表为基础,以“引入阶段”为维度,分析每个阶段的缺陷比率;
2)以缺陷跟踪表为基础,以“原因类型”为维度,分析缺陷集中出现的原因类型;
3)采用帕累托图分析出导致大部分缺陷的根原因;
4)从管理的角度确定解决方案,并确保问题得到解决;
5)举一反三,分析其他方面是否会出现类似问题,并预防。
七、统计分析知识
7.1控制图
控制图:一种以实际度量指标值与过程经验所得出的数据控制界限比较,并以时间顺序表示出来的图形。有三条直线组成:控制上限(UCL)、中心线(CL)、控制下限(LCL)。
纵轴:一般为度量指标值,以过程变化的数据为刻度。
横轴:为检验数据的变化趋势,以数据时间或采集先后,依次绘在图上。
7.2挣值分析
(一)挣值分析的三个基本参数包括:计划值(PV)、实际成本(AC)和挣值(EV):
1、计划值(PV,Plan Value),又叫计划工作量的预算费用。是指项目实施过程中某阶段计划要求完成的工作量。
PV主要反映进度计划应当完成的工作量,而不是反映应消耗的工时或费用。
2、实际成本(AC,Actual Cost),又叫已完成工作量的实际费用。指项目实施过程中某阶段实际完成的工作量所消耗的工时(或费用)。主要反映项目执行的实际消耗指标。
3、挣值(EV,Earned Value),又叫已完成工作量的预算成本(。指项目实施过程中某阶段实际完成工作量及按预算定额计算出来的工时(或费用)。
(二) 挣值分析法的两个评价指标: 费用执行指标(CPI)和进度执行指标(SPI):
1)费用执行指标(CPI):是指挣得值与实际费用值之比,即CPI=EV/AC。
当CPI>1时,表示效率较高,花费较小的工时获取更大的价值;
当CPI=1时,表示效率一般,花费的工时与获取的价值等效;
当CPI<1时,表示效率较低,花费较大的工时获取更小的价值;
2)进度执行指标(SPI):是指项目挣得值与计划值之比,即SPI=EV/PV。
当SPI>1时,表示进度提前,花费较小的工时完成了额定的工作;
当SPI=1时,表示进度按时完成,花费的工时与计划的工时一致;
当SPI<1时,表示进度延后,花费较大的工时才完成额定的工作;
7.3帕累托图
帕累托图(Pareto):是一种条形图,条的长度代表事件发生的频率或成本(财力、时间),因此可从图中直观地看到哪些情况是比较重要的。
Pareto原理:80%的问题是由20%的原因导致的,虽然百分比不一定总是恰好为80/20。
7.4参数解释
⏹Trails:实验次数,即用蒙特卡洛方法模拟的次数;
⏹Mean:均值,样本数的平均值。
⏹Median:中值,当变量值的项数N为奇数时,处于中间位置的变量值即为中位数;当N为偶数时,中位数则为处于中间位置的2个变量值的平均数。
⏹Mode:众数,样本数中出现次数最多的数。
⏹Standard Deviation:标准差,所有数减去其平均值的平方和,所得结果除以该组数之个数(或个数减一,即变异数),再把所得值开根号。
⏹Variance:方差,各个数据分别与其平均数之差的平方的和的平均数。
⏹Skewness:偏差(描述变量取值分布对称性的统计量)。
⏹Kurtosis:峰度(描述变量取值分布形态陡缓程度的统计量)。
⏹Coeff.of variability:变异系数,是标准差与其平均数的比,单位和(或)平均数不同时,比较其变异程度就不能采用标准差,而需采用标准差与平均数的比值(相对值)来比较。变异系数 C·V =( 标准偏差 SD / 平均值Mean )× 100%
⏹Mean Std. Error:平均标准误差,是样本均值的标准差。
7.5假设检验
假设检验,通过样本对总体的假设进行的检验。
原假设H0,又称虚无假设、解消假设。
备择假设Ha,又称研究假设。
用显著性水平α,表示在原假设成立的条件下,统计检验中所规定的小概率标准。
通常有α=0.10,α=0.05,α=0.01
显著性水平,表示样本统计量落在拒绝域的机会。
举例:假设未引进革新点时,模块开发效率小于0.83个/人天(即μ<0.83),且是显著的。
Ha:μ<0.83
H0:μ≥0.83
通过Minitab的单样本(t)检验分析结果为:
从上可以看出由于P< 0.05 ;所以拒绝原假设H0。即:目标值大于0.83个/人天是当前过程能力所达不到的(并且是显著的),所有需要分析影响开发效率的关键因素。