"如果你不知道你要向何处去,你可以选择任何一条道路。如果你不知道自己所在何处,地图也沒有用处。"这是《软件过程管理》里面的开头语。他们更深一层的含义是说,任何事物都有发展的方向,而你要善于控制尽量使其向有益的方向发展,而不是任其发展。另一句是讲,知道事物发展的方向还要知道事物所处的状态,这样才能借助工具和智慧来引导正确的发展过程。做了近十年的软件开发,经常会迷失于软件开发的复杂过程之中。总是冥冥中感觉有一条通向睿智的康庄大道,可在寻寻觅觅中我认为还未真正找到。
如果细心的观察南方软件这几年的发展,你就会发现我们一直在努力改进的是我们的软件开发和过程管理的模式。不管是建立软件开发流程还是实施ISO,都是为了使我们的软件有更好的质量,并且让我们的开发、市场工作更合理化、更科学化。
这里简单的与大家分享一下我对软件开发过程的观点与思想。我们通常所讲的软件开发,其实是由开发过程和管理过程这两个过程组成的。传统的软件工程的思想是要基于工程化的思想来开发软件,它比较注重的是软件的开发技术和方法论以及工具的运用,比如如何获取需求,然后使什么样的方法来分析需求,最后导出一份大家能够共同理解的需求分析文档,然后再如何平滑的过渡到设计、编码和测试等各个阶段。这些过程都相应的方法、模型和工具。但仅仅依赖工程化思想并不能解决软件开发过程中的所有问题。随着技术的发展,软件复杂度越来越高,参与的人员也越来越多,协同工作在开发过程中逐渐变的越来越困难。这就产生了软件管理过程。大家在一起工作,每个人都有不同的生活阅历和知识背景,我们都有自己的行为习惯以及表达方式,但仍需要互相的交流、理解和同步协调,这就需要一个统一的标准和行为规范,这些标准和规范衍生出管理制度、管理机构和管理过程。通过上面的管理过程我们映射出软件开发管理过程,多个人开发同一个项目,就要对项目的要求、内容、任务、最终目标和时间限制等有共同的理解,所以就必须要用统一的技术规范和标准流程来协同工作。
目前我们实施软件开发过程的目标是建立一个标准的流程,并在这个标准上不断的改进,使这个标准流程在以后的软件开发工作中能够起到提高质量和效率、降低成本的实际作用,从而达到提升效益的目的。还记得2006年终会上马总形容进出口部那句话,“进出口部这么几个人一年就搞出那么多的产值”。这就是高效率,是南方人要追求的目标,同时更是我们软件人应该追求的目标。话到这里,我想大概已经明白了要去向何处。那么怎么去做呢?下面分析一下我们目前软件过程管理的状态和尚待完成的工作。我比较关注以下四个方面。
第一、 需求管理。需求是时常变化的,正是这个不断变化的需求,使得软件工程中的瀑布模型的很难适应现在的软件开发。我们做需求管理的第一个目标就是要把不断变化的需求控制起来,对较为稳定的部分优先开发,通过迭代的开发过程来降低需求变化的风险和影响。另外一个目标就是将开发过程与系统需求协调一致。这可以用需求追踪表或追踪矩阵来实现的。简单的讲就是列一个表把要实现的需求写上去,定期的核对一下大家的工作,看看是不是在做软件需要的工作,同时对比一下需求追踪表看看工作有没有遗漏。
第二、 项目计划。我们已经作了很多的项目计划,有些也做得相当的好。做项目计划的目的就是建立一个合理的并且可以实施的计划,从而把参与人员的工作统一协调起来。做计划首先要对项目的范围、规模、工作量进行估算。范围估算可以用WBS分解功能。规模估算可以根据WBS的结果,让每个成员都来估算一下各种功能模块或组件所需的代码行数或类、对象等的个数等,对各自估算的结果由项目经理设定每个成员对该项目的熟悉程度系数,来进行加权平均。工作量估算就是将规模估算的结果置换成人/天或人/月。做完之后把WBS的工作分解、工作量按项目要求的时间安排到甘特图中就可以了。计划的准确性是通过积累项目经验来提高的,计划做的越多经验就越丰富,准确性就越高。
第三、 项目跟踪。我们对项目的跟踪主要是根据周志、日志来实施的。通过周志可以发现项目的状态是否正常。通过日志可以核算项目的实际工作量及主要成本。在项目跟踪方面,我们已经收集了很多的数据,以后的过程可以使用这些数据改进,以提高项目计划的准确性和风险预测。项目跟踪的另一个作用是项目经理可以通过跟踪的结果对比项目计划,当发现实际工作与计划发生严重偏移的时候,能及时的采取一些纠偏措施或改动计划,使大家的工作能够重新协调同步。
第四、 配置管理。配置管理有版本管理、配置控制、变更管理和问题跟踪四个部分。版本管理是对组成软件的各种文件进行历史版本的控制,使得我们即便错误的修改了文件也能还原出以前的各种版本。在版本管理方面我们很早就已经使用了等一些管理工具,所以代码管理的很好。对于配置控制、变更管理和问题跟踪我们目前正在规划和建立解决方案。配置控制简单的说就是同一个软件,因为有不同的客户化和升级要求,需要不同的配置方法。比如XX软件北京的客户要求加个特殊的功能,我们叫XX北京版,上海的客户不要这个功能而要加另外的功能,我们叫XX上海版,同时这个XX软件还要不断的升级。这些都是基于XX软件的不同版本,这么多不同的版本怎么管理呢?配置管理就是要在XX软件的文件库中,标识出北京版用的是哪些文件的哪些版本,上海版用的是哪些文件的哪些版本,升级版用的是~~~。这样我们就可以根据要求的配置出软件的不同版本,方便软件的交付、还原和维护。我前面讲需求是时常变化的,其实在软件开发中不仅需求在变,设计、代码都会变。所谓的变更控制,就是要在变更发生的时候有合适的处理流程,根据不同的情况采用不同处理方式和审批级别。我们不能杜绝软件的变动,所以我们要想办法来控制这些变动,尽量的减少变更对软件的质量和项目的实施带来的负面影响。问题跟踪可以看成最轻量级的项目跟踪。变更请求一经批准或者发现了软件缺陷,那么由谁来解决,什么时候解决,采用哪种审核方式以及结果的状态记录等等这就组成了简单的问题跟踪过程。
上面所讲的都是对软件过程管理的一些观点。软件开发过程中还有需求分析方法、软件设计方法、测试方法等,正确的运用这些方法都能在特定的层面上提高软件质量和开发效率。关于软件开发过程,我们公司有很多权威的技术专家,所以这里我就不熬述了。确定目标,找准方向,在南方人的共同努力下,我坚信南方的软件会做得越来越好!