一.引言
随着软件需求的日益增长和系统功能的日益增强,过去一个人开发软件的历史已不复存在,现在软件的开发一般需要一个或多个小组合作才能完成。因此软件的项目管理也越来越被个人和企业所重视。人们逐渐意识到,虽然目前好的项目管理还不能保证软件开发的成功,但是不适当的软件管理却一定会导致软件开发的失败——软件交付使用的日期将大大拖后,成本可能比预计的高几倍,而且最终开发出来的软件很难维护。
从概念上讲,管理是通过计划、组织、控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。然而软件开发不同于其他产品的制造,软件的整个过程都是设计过程(没有制造过程);另外,软件开发不需要使用大量的物质资源,而主要是人力资源;并且,软件开发的产品只是程序代码和技术文件,并没有其他的物质结果。基于上述特点,软件项目管理与其他项目管理相比,有很大的独特性。
对软件项目而言,最关键的因素是人。软件工程师可以按照不同的小组结构来组织,从传统的控制层次到“开放式范型”的小组。项目的管理者必须合理的组织项目组,使项目组有较高的生产率。“最佳的”小组结构取决于管理风格、小组里的人员数目和他们的技术水平,以及所承担的项目的难易程度。
所谓软件项目管理就是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员(People)、产品(Product)、过程(Process)和项目(Project)进行分析和管理的活动。软件项目管理先于任何技术活动之前开始,并且贯穿于软件的整个生命周期。按照Roger S. Pressman的划分,项目管理活动包含测度和度量、估算、风险分析、进度安排和跟踪、质量保证、配置管理等环节。下面我们对一些主要方面进行探讨。
二.软件项目的计划
软件项目计划是一个软件项目进入系统实施的启动阶段,主要进行的工作包括:确定详细的项目实施范围、定义递交的工作成果、评估实施过程中主要的风险、制定项目实施的时间计划、成本和预算计划、人力资源计划等。
软件项目管理过程从项目计划活动开始,而第一项计划活动就是估算:需要多长时间、需要多少工作量、以及需要多少人员。此外,我们还必须估算所需要的资源(硬件及软件)和可能涉及到的风险。
为了估算软件项目的工作量和完成期限,首先需要预测软件规模。度量软件规模的常用方法有直接的方法——LOC(代码行),间接的方法——FP(功能点)。这两种方法各有优缺点,应该根据软件项目的特点选择适用的软件规模度量方法。
根据项目的规模可以估算出完成项目所需的工作量,我们可以使用一种或多种技术进行估算,这些技术主要分为两大类:分解和经验建模。分解技术需要划分出主要的软件功能,接着估算实现每一个功能所需的程序规模或人月数。经验技术的使用是根据经验导出的公式来预测工作量和时间。可以使用自动工具来实现某一特定的经验模型。
精确的项目估算一般至少会用到上述技术中的两种。通过比较和协调使用不同技术导出的估算值,我们可能得到更精确的估算。软件项目估算永远不会是一门精确的科学,但将良好的历史数据与系统化的技术结合起来能够提高估算的精确度。
当对软件项目给予较高期望时,一般都会进行风险分析。在标识、分析和管理风险上花费的时间和人力可以从多个方面得到回报:更加平稳的项目进展过程;更高的跟踪和控制项目的能力;由于在问题发生之前已经做了周密计划而产生的信心。
对于一个项目管理者,他的目标是定义所有的项目任务,识别出关键任务,跟踪关键任务的进展情况,以保证能够及时发现拖延进度的情况。为此,项目管理者必须制定一个足够详细的进度表,以便监督项目进度并控制整个项目。
常用的制定进度计划的工具主要有Gantt图和工程网络两种。Gantt图具有悠久历史、直观简明、容易学习、容易绘制等优点,但是,它不能明显地表示各项任务彼此间的依赖关系,也不能明显地表示关键路径和关键任务,进度计划中的关键部分不明确。因此,在管理大型软件项目时,仅用Gantt图是不够的,不仅难于做出既节省资源又保证进度的计划,而且还容易发生差错。
工程网络不仅能描绘任务分解情况及每项作业的开始时间和结束时间,而且还能清楚地表示各个作业彼此间的依赖关系。从工程网络图中容易识别出关键路径和关键任务。因此,工程网络图是制定进度计划的强有力的工具。通常,联合使用Gantt图和工程网络这两种工具来制定和管理进度计划,使它们互相补充、取长补短。
进度安排是软件项目计划的首要任务,而项目计划则是软件项目管理的首要组成部分。与估算方法和风险分析相结合,进度安排将为项目管理者建立起一张计划图。
三.软件项目的控制
对于软件开发项目而言,控制是十分重要的管理活动。下面介绍软件工程控制活动中的质量保证和配置管理。其实上面所提到的风险分析也可以算是软件工程控制活动的一类。而进度跟踪则起到连接软件项目计划和控制的作用。
软件质量保证(SQA,Software Quality Insurance)是在软件过程中的每一步都进行的“保护性活动”。SQA主要有基于非执行的测试(也称为评审)、基于执行的测试(即通常所说的测试)和程序正确性证明。
软件评审是最为重要的SQA活动之一。它的作用是,在发现及改正错误的成本相对较小时就及时发现并排除错误。审查和走查是进行正式技术评审的两类具体方法。审查过程不仅步数比走审多,而且每个步骤都是正规的。由于在开发大型软件过程中所犯的错误绝大数是规格说明错误或设计错误,而正式的技术评审发现这两类错误的有效性高达75%,因此是非常有效的软件质量保证方法。
软件配置管理(SCM,Software configuration management)是应用于整个软件过程中的保护性活动,它是在软件整个生命周期内管理变化的一组活动。
软件配置由一组相互关联的对象组成,这些对象也称为软件配置项,它们是作为某些软件工程活动的结果而产生的。除了文档、程序和数据这些软件配置项之外,用于开发软件的开发环境也可置于配置控制之下。
一旦一个配置对象已被开发出来并且通过了评审,它就变成了基线。对基线对象的修改导致建立该对象的版本。版本控制是用于管理这些对象而使用的一组规程和工具。
变更控制是一种规程活动,它能够在对配置对象进行修改时保证质量和一致性。配置审计是一项软件质量保证活动,它有助于确保在进行修改时仍然保持质量。状态报告向需要知道关于变化的信息的人,提供有关每项变化的信息。
四.国际标准
1. IEEE1058.1软件项目管理计划标准
在IEEE标准1058.1中给出了软件项目管理计划的框架,它实质上是一个通用的结构,不论承担何种软件项目,在制定项目管理计划时都可以参考它。
2. ISO9000质量标准
ISO9000是一族标准,其中ISO9000-3是使ISO9001标准适用于软件开发、供应维护的指南,它为软件开发过程各阶段提供保证质量的质量体系,由质量体系框架、质量体系的生命周期活动和质量体系的支持活动等三部分构成。文档在ISO9000-3标准中占有十分重要的地位。
3. ISO/IEC 12207软件生命周期过程标准
ISO/IEC 12207软件生命周期过程标准,是指导软件过程实施的一个标准,它从多个角度说明了软件生命周期各个过程中的活动,对规范软件开发过程,协调各类人员之间的关系,都具有指导作用。
4. ISO/IEC TR 15504软件过程评估标准
ISO/IEC TR 15504软件过程评估标准,是从过程评估角度对软件过程进行规范的标准。该标准具有两维的结构,其中一维是过程维,另一维是能力维。
5. 能力成熟度模型
能力成熟度模型(CMM,Capability Maturity Model for Software),是改进软件过程的一种策略。它的基本思想是,因为问题是管理软件过程的方法不恰当引起的,所以运用新软件技术并不会自动提高软件生产率和软件质量,应当下大力气改进对软件过程的管理。对软件过程的改进不可能一蹴而就,因此,CMM以增量方式逐步引入变化,它明确的定义了5个不同的成熟度等级,一个软件开发组织可用一系列小的改良性步骤迈入更高的成熟度等级。
总之,软件项目管理涵盖了技术和管理等多方面的知识,对软件项目开发的成败有着非常重要的意义,它是一个软件项目成功与否的关键因素之一。在软件开发过程中,要树立既要注重技术,又要注重管理的意识,努力提高软件项目的水平。