PSP(Personal Software Process,个体软件过程)是一个过程描述、测度和方法的结构化集合,能够帮助软件工程师改善其个人性能。通过采用一些表格、脚本和标准,可帮助软件工程师估算和计划其工作,从而体现了定义过程及测量其质量和生产率的意义。
一个基本的PSP原则是:每个人都是不同的,对于某个工程师有效的方法不一定适合另一个,PSP帮助工程师测量和跟踪他们自己的工作,使得他们能够找到最适合自己的方法。
软件工程师在做项目的开发计划时,或是由经验而来,或是由用户需求而定,往往存在计划与实际相差比较大的情况,或者是前松后紧,遗漏过多,造成维护量的增加。如何减少这种情况的发生?就需要把经验量化并做出分析。通过记录项目的估算情况与实际情况,并进行比较分析,则既利于有经验的软件工程师提高以后项目的预测率,也利于新手软件开发人员参考其他工程师的经验。
项目的开发成本是一个很重要的问题。通过记录项目的估算成本与实际成本,提高软件开发人员对项目成本估算的准确度,这对在项目早期就有一个清楚的认识大有帮助,以利于以后工作的规划与开展。
通过记录软件工程师在项目设计及编写代码阶段出现的错误及解决办法,以及记录测试与维护阶段出现的错误、缺陷及解决办法,并产生报告,列出经常出现的错误及错误类型,可把错误尽量控制在交付用户使用前,并尽量减少错误的发生。
需要注意的是,PSP的目的是为了改善软件工程师的开发性能,而提高性能在于早期对项目有一个比较准确的把握。项目评估的准确度依赖于历史数据的积累,只有正确的历史数据越来越充分,在评估新项目时所采用的指标数才会越准确。在项目进展过程中,还需要根据影响因素的变化不断调整估算指标。
现在软件在大多数基于计算机的系统中已成为最昂贵的部分,如果软件成本估算的误差很大,就会使盈利变成亏损。
软件项目估算是一种解决问题的形式,在多数情况下,要解决的问题非常复杂,想一次性整体解决比较困难。因此,对问题进行分解,把其分解成一组较小的接近于最终解决的可控的子问题,再定义它们的特性。
估算技术一般有代码行(LOC)和功能点(FP)估算法,这是两种不同的估算技术,但有许多共同特性。项目计划人员首先给出一个有界的软件范围的叙述,再由此尝试着把软件分解成一些小的可分别独立进行估算的子功能。然后对每一个子功能估算其LOC或FP(即估算变量)。接着,把基线生产率度量用做特定的估算变量,导出子功能的成本或工作量。将子功能的估算进行综合后就能得到整个项目的总估算。
LOC或FP估算技术对于分解所需要的详细程度是不同的。当用LOC作为估算变量时,功能分解是绝对必要的且需要达到很详细的程度。而估算功能点所需要的数据是宏观的量,当把FP当做估算变量时所需要的分解程度可以不很详细。LOC是直接估算的,而FP是通过估计输入、输出、数据文件、查询和外部接口的数目,以及复杂性校正值间接地确定的。除去所用到的估算变量,项目计划人员必须对每一个分解的功能提出一个有代表性的估算值范围。利用历史数据或凭实际经验,计划人员对每个功能分别按乐观的、可能的、悲观的三种情况给出LOC或FP估计值。
为了反映开发特性的影响,应当随时修正平均生产率。
1 LOC(Lines of Code,代码行)估算代码尺寸
把项目划分为若干个功能,分别计算每个功能的代码长度,所有功能代码行之和即项目的代码长度。
LOC估算表包括:
每个功能的代码长度估算值=(乐观值+4*可能值+悲观值)/6
估算工作量=代码总估算长度/估算生产率
估算总成本=日薪*估算工作量
估算行成本=估算总成本/估算代码长度
估算生产率由经验获得
2 FP(功能点)估算代码尺寸
项目的功能点数是几个测量参数(用户输入数、用户输出数、用户查询数、文件数、外部接口数)的功能点之和。
用户输入数:计算每个用户输入,它们向软件提供面向应用的数据。输入应该与查询区分开来,分别计算。
用户输出数:计算每个用户输出,它们向软件提供面向应用的信息。这里,输出是指报表、屏幕、出错信息,等等。一个报表中的单个数据项不单独计算。
用户查询数:一个查询被定义为一次联机输入,它导致软件以联机输出的方式产生实时的响应。每一个不同的查询都要计算。
文件数:计算每个逻辑的主文件(如数据的一个逻辑组合,它可能是某个大型数据库的一部分或是一个独立的文件)。
外部接口数:计算所有机器可读的接口(如磁带或磁盘上的数据文件),利用这些接口可以将信息从一个系统传送到另一个系统。
FP估算表包括:
每个测量参数的估算FP计数=估算值*加权因子
项目估算FP=各参数FP计数之和*复杂度调整因子
估算生产率由经验获得
估算工作量=项目估算FP/估算生产率
估算总成本=日薪*估算工作量
单个FP估算成本=估算总成本/估算FP
项目测量
项目测量的目的是双重的。首先,这些度量能够指导进行一些必要的调整以避免延迟,并减少潜在问题及风险,从而使得开发时间减到最少。其次,项目度量可在项目进行的基础上评估产品质量,并且可在必要时修改技术方法以改进质量。
随着质量的提高,错误会减到最小,而随着错误数的减少,项目中所需的修改工作量也会降低,就导致整个项目成本的降低。
软件测量可分为直接测量和间接测量。软件工程过程的直接测量,包括花费的成本和工作量。产品的直接测量,包括产生的代码行、执行速度、内存大小及某段时间内报告的缺陷。产品的间接测量,包括功能、质量、复杂性、有效性、可靠性、可维护性及其他能力。
测量技术有LOC测量和FP测量法,LOC测量是直接测量,FP测量是间接测量。
1 LOC(Lines of Code,代码行)测量代码尺寸
把项目划分为若干个功能,分别计算每个功能的代码长度,所有功能代码行之和即项目的代码长度。
LOC测量表包括:
实际工作量由菜单项“项目实际进展”中的信息得到。
实际总成本=日薪*实际工作量
实际行成本=实际总成本/实际代码长度
实际生产率=实际代码长度/实际工作量
2 FP(功能点)测量代码尺寸
项目的功能点数是几个测量参数(用户输入数、用户输出数、用户查询数、文件数、外部接口数)的功能点之和。
用户输入数:计算每个用户输入,它们向软件提供面向应用的数据。输入应该与查询区分开来,分别计算。
用户输出数:计算每个用户输出,它们向软件提供面向应用的信息。这里,输出是指报表、屏幕、出错信息,等等。一个报表中的单个数据项不单独计算。
用户查询数:一个查询被定义为一次联机输入,它导致软件以联机输出的方式产生实时的响应。每一个不同的查询都要计算。
文件数:计算每个逻辑的主文件(如数据的一个逻辑组合,它可能是某个大型数据库的一部分或是一个独立的文件)。
外部接口数:计算所有机器可读的接口(如磁带或磁盘上的数据文件),利用这些接口可以将信息从一个系统传送到另一个系统。
FP测量表包括:
每个测量参数的实际FP计数=实际值*加权因子
项目实际FP=各参数FP计数之和*复杂度调整因子
实际工作量由菜单项“项目实际进展”中的信息得到。
实际总成本=日薪*实际工作量
单个FP成本=总成本/FP计数
实际生产率=实际FP计数/实际工作量
项目进度
无论有经验的软件工程师还是新手软件开发人员,在开始开发项目之前,都会有一个或粗或细的开发计划,如何使计划更接近实际?
为了更精确地制订计划,可以把项目划分为若干个小任务,分别制定每个任务的完成计划。
工作量的安排可参考LOC估算工作量或FP估算工作量,通过LOC估算表或FP估算表,可以查看估算工作量的值。
错误记录
记录项目各个阶段的错误及解决办法,不仅可以查看每个项目出现的错误列表,而且可对所有项目中的错误按类型分类查看。
软件工程师们都知道,缺陷排除效率(DRE)是软件质量度量的指标之一。当把一个项目作为一个整体来考虑时,DRE按如下方式定义:
DRE=E/(E+D)
其中E=软件交付给最终用户之前所发现的错误数
D=软件交付之后所发现的缺陷数
最理想的DRE值是1,即软件中没有发现缺陷。但现实中,D会大于0,如何把错误发现的阶段尽量控制在软件交付使用前?PSP能改善这一点。
使用PSP详细记录了错误的类型、出错次数、出错原因、错误说明及解决办法,使开发人员可以随时查看以前所犯的错误。把错误直观集中地显示出来,能够起到经常提醒开发人员的作用,以减少犯同样错误的机会,把错误尽量限制在交付使用前。
项目报告
对比分析与项目有关的数据,使软件人员对估算、实际数据认识更深,提高以后的预测率。
从报告中,可以对每一个项目清楚地比较其估算工作量、计划工作量与实际工作量的值,它们的比值越接近1,说明估算、计划越准确。
还可以对LOC、FP的估算实际生产率做比较。同时报告还应提供项目中出现的错误数、出错最多的错误名称及错误类型等。