谈软件项目及管理

软件项目

软件项目相对于其他项目比较特殊,它是一个纯知识产品,其开发进度和质量很难估计和度量,生产效率也难以预测和保证。其次,软件系统的复杂性也导致了开发过程中各种风险的难以预见和控制。

软件项目管理

软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员(People)、产品(Product)、过程(Process)和项目(Project)进行分析和管理的活动。

软件项目管理的根本目的是为了让软件项目尤其是大型项目的整个软件生命周期(从分析、设计、编码到测试、维护全过程)都能在管理者的控制之下,以预定成本按期,按质的完成软件交付用户使用。而研究软件项目管理为了从已有的成功或失败的案例中总结出能够指导今后开发的通用原则,方法,同时避免前人的失误。

软件项目管理的内容主要包括如下几个方面:人员的组织与管理,软件度量,软件项目计划,风险管理,软件质量保证,软件过程能力评估,软件配置管理等。

项目计划

软件项目计划是一个软件项目进入系统实施的启动阶段,主要进行的工作包括:确定详细的项目实施范围、定义递交的工作成果、评估实施过程中主要的风险、制定项目实施的时间计划、成本和预算计划、人力资源计划等。

为了估算软件项目的工作量和完成期限,首先需要预测软件规模。度量软件规模的常用方法有直接的方法–LOC(代码行),间接的方法–FP(功能点)。这两种方法各有优缺点,应该根据软件项目的特点选择适用的软件规模度量方法。

根据项目的规模可以估算出完成项目所需的工作量,我们可以使用一种或多种技术进行估算,这些技术主要分为两大类:分解和经验建模。分解技术需要划分出主要的软件功能,接着估算实现每一个功能所需的程序规模或人月数。经验技术的使用是根据经验导出的公式来预测工作量和时间。可以使用自动工具来实现某一特定的经验模型。

对于一个项目管理者,他的目标是定义所有的项目任务,识别出关键任务,跟踪关键任务的进展情况,以保证能够及时发现拖延进度的情况。为此,项目管理者必须制定一个足够详细的进度表,以便监督项目进度并控制整个项目。

常用的制定进度计划的工具主要有Gantt图和工程网络两种。Gantt图具有悠久历史、直观简明、容易学习、容易绘制等优点,但是,它不能明显地表示各项任务彼此间的依赖关系,也不能明显地表示关键路径和关键任务,进度计划中的关键部分不明确。因此,在管理大型软件项目时,仅用Gantt图是不够的,不仅难于做出既节省资源又保证进度的计划,而且还容易发生差错。

工程网络不仅能描绘任务分解情况及每项作业的开始时间和结束时间,而且还能清楚地表示各个作业彼此间的依赖关系。从工程网络图中容易识别出关键路径和关键任务。因此,工程网络图是制定进度计划的强有力的工具。通常,联合使用Gantt图和工程网络这两种工具来制定和管理进度计划,使它们互相补充、取长补短。

项目控制

对于软件开发项目而言,控制是十分重要的管理活动。下面介绍软件工程控制活动中的质量保证和配置管理。其实上面所提到的风险分析也可以算是软件工程控制活动的一类。而进度跟踪则起到连接软件项目计划和控制的作用。

软件质量保证(SQA,Software Quality Assurance)是在软件过程中的每一步都进行的”保护性活动”。SQA主要有基于非执行的测试(也称为评审)、基于执行的测试(即通常所说的测试)和程序正确性证明。

软件评审是最为重要的SQA活动之一。它的作用是,在发现及改正错误的成本相对较小时就及时发现并排除错误。审查和走查是进行正式技术评审的两类具体方法。审查过程不仅步数比走审多,而且每个步骤都是正规的。由于在开发大型软件过程中所犯的错误绝大数是规格说明错误或设计错误,而正式的技术评审发现这两类错误的有效性高达75%,因此是非常有效的软件质量保证方法。

软件配置管理(SCM,Software configuration management)是应用于整个软件过程中的保护性活动,它是在软件整个生命周期内管理变化的一组活动。

软件配置由一组相互关联的对象组成,这些对象也称为软件配置项,它们是作为某些软件工程活动的结果而产生的。除了文档、程序和数据这些软件配置项之外,用于开发软件的开发环境也可置于配置控制之下。

一旦一个配置对象已被开发出来并且通过了评审,它就变成了基线。对基线对象的修改导致建立该对象的版本。版本控制是用于管理这些对象而使用的一组规程和工具。

变更控制是一种规程活动,它能够在对配置对象进行修改时保证质量和一致性。配置审计是一项软件质量保证活动,它有助于确保在进行修改时仍然保持质量。状态报告向需要知道关于变化的信息的人,提供有关每项变化的信息。

软件开发

软件开发主要分为六个阶段:需求分析阶段、概要设计阶段、详细设计阶段、编码阶段、测试阶段、安装及维护阶段。不论是作坊式开发,还是团队协作开发,这六个阶段都是不可缺少的。根据公司实际情况,公司在进行软件项目管理时,重点将软件配置管理、项目跟踪和控制管理、软件风险管理及项目策划活动管理四方面内容导入软件开发的整个阶段。在进行软件项目管理时,也应该遵循这七条原则:

(1)用分阶段的生命周期计划严格管理;

(2)坚持进行阶段评审;

(3)实行严格的产品控制;

(4)采用现代程序设计技术;

(5)结果应能够清楚地审查;

(6)开发小组地人员应该少而精;

(7)承认不断改进软件工程实践的必要性。

我的理解

其上都是一些专业名词的定义,在实践过项目后再来看看确实更加使人条理清晰。我想用自己的语言谈谈软件项目开发过程中应该注意的问题:

很多项目在项目初期需求都是不明确的,老板想研发一款产品,或者客户想要一种产品,但都是模糊不清的,需求会随时变更或增加的。我们也只能根据大致需求做一步看一步,或许市场上有同类产品可以参考的一定要宝贵的去借鉴,没有的也要尽可能的想到之后的需求变更。软件一定要进行模块划分,分模块实现,以使得每一个模块可以自由的变化,不影响其它模块,当然这就对接口定义很重要了,接口应尽可能的灵活,对于变化多变的模块考虑使用xml和json等字符串参数。软件的配置项一定不要写死,最好通过配置文件做到可以灵活修改,比如做界面的就要考虑安装在不同分辨率机器上,界面是否能自适应,或者通过修改一些配置参数就可以。

参与软件开发的人员应尽可能的精简,这条原则我深表赞同,软件开发不是说人越多就开发的越快,有时反而会因为人员技术参差不齐,编码风格多异,导致代码质量下降,不好维护,所以分模块由不同人员开发是必须的,此外人员多代表意见不合,沟通时间和成本增加。

总之,我的原则是:
人员精简、模块划分清晰、软件配置灵活

猜你喜欢

转载自blog.csdn.net/gg_simida/article/details/78801714