本人学了7年电子,毕业后从事软件开发4年,磕磕绊绊,一路走到现在。今天所写的文字权当是个人的一些感悟和心得吧。
谈软件的项目管理,就不得不谈软件项目的两个构成要素:软件项目和实施项目的人员。下面我就按照这两个要素分别谈谈。
(一)软件项目
首先是软件项目的管理。我们为什么要管理软件项目?为了不让软件乱七八糟从而能工作么?这只能说是低水平的目标,而我们最根本的目标,是开发高质量的软件。什么事高质量?窃以为就是满足客户的需求,使用户使用起来不仅感到需求得到满足,更感觉非常方便,快速,两个字“巨爽”。这其实包含了两种境界,a)满足用户所有的需求;b)用额外的性能或性能给用户惊喜,以自己的创意和审美,构建一流用户体验,并把它灌输给用户,让他们也产生认同。就想乔帮主所做。不过这需要极高的天赋。
虽然我们大多数做不到第二个境界,但是我们把第一境界做好就足以立稳脚跟。那么,如何才能开发出高质量的软件呢?个人理解,要想开发出高质量的软件,那么第一要素就是非人化,即使软件的质量尽量的不要受人为因素的影响,更不能将其依赖于个别几个人甚至个别某个人的身上。工作期间,小组中某个leader或某个大牛离职,造成项目的停滞,公司中一时没有人可以接手的现象屡见不鲜。新人在项目压力下因为没有时间去理解消化原有的软件设计架构和思路,就只能按照自己的思路继续恣意的修改代码,导致代码越来越混乱,软件也没有一个统一的清晰的思路作为支撑,于是软件越来越难以维护。如果软件的开发过程中再没有相应的需求文档,设计文档,测试计划,乃至回归测试,那么好戏就越来越热闹了,需求无据可查,代码除了一点过时的注释无法理解,功能没有测试的检测,那么基本上就可以想怎么来就怎么来了,直到把项目改死算。遗憾的是,很多公司,没有吸取教训,依然我行我素。看了难免让人感慨唏嘘。
因此,我们管理软件首要原则就是,一定要让软件项目非人化,就是说,不管公司什么级别的人离职,都绝对不能导致项目停滞不前(软件走向混乱就是一种停滞不前,打个比方,这两种方式就像是两种死刑,一种是枪决,另一种是凌迟,最终都会死,只不过后者慢一点而已)。 其实,归根结底就一句话,就是将所有人的工作成果尽最大可能的留在公司。那么我们怎么做呢?
首要的措施就是项目的文档化,也就是凡是项目的重大决定和事件我们必须有记录,我们不追求事无巨细的文档,因为那毫无意义,容易过时,而且还超级耗费精力。但是绝对有必要保存项目的需求文档,软件设计文档,测试计划,测试报告。需求是一切软件设计,架构的根,只有理解了需求,我们才能更好地理解软件架构和思路。而设计文档就更不用说了,基本上记录了软件的思路,架构,流程,实现方法,乃至类图等详细内容。当然测试计划和测试报告就更重要了,测试计划基本说明了最初软件准备实现的功能,而测试报告测精确地记录了那些功能实现了,那些没有,那些地方有bug,那些地方有欠缺,那些地方有待优化。
第二个措施就是小组化,在软件的实现过程中,最好有两个人一起协同开发,不要完全依赖于某一个人,这样可以避免个人思路误入歧途,写出的代码晦涩难懂,还可以在有问题的时候一起商量,更可以不让这部分软件被一个人的水平所左右。当其中有人突然离职时,也不会造成没有人能接手的现象出现。这对于贯彻同一个软件架构和思路至关重要。
第三个措施就是流程化。所谓流程化,就是说在项目的每个阶段都要有明确的负责人,这样才可以让项目不陷入无人管的境地,在有人负责的情况下,就要充分发挥负责人的功能,使之成为该阶段的项目经理,尤其统一协调各种人员和工作,以及讨论技术方案召开必要的会议等等,这样做既可以增强员工责任感和参与感,更可以锻炼其能力,给他带来收获。同时也要在每个关键节点都有相关的review人员,哪怕只是简单的讨论和提问,然后由review人员将项目迁移到下一个阶段。这也意味着,项目要模块化,因为一个完整的功能基本上会牵扯到很多模块,这样当自己的模块代码被别人修改时,必须得经过自己小组内的人员sign off才可检入代码,这个流程必须走,我们后面具体谈到SVN部分时还会谈到这个问题。
第四个措施就是规范化,从我们常说的coding rule到文档格式,从新人的生活带入,到技术培训,从显示信息用语到界面风格,等等等。为什么这些归纳在一起作为规范化的范畴呢,因为,这些其实都是说将我们很多人开发的同一个软件让客户感觉就放佛出自一个人之手,给人一种非常专业的感觉。coding rule可以让代码风格统一,同时避免很多经验错误;文档可以让被记录的事件风格统一,也就是说该记录的必要的地方都被记录,否则你想想任凭每个人自己去写设计文档,难免有人考虑不周,有些重要的地方没有考虑,因此文档风格即可以增加review文档的效率,也可以避免新人水平或者老人遗忘造成的重要遗漏,使得被记录的事件不依赖于人。而新人的生活带入和技术培训,更是为了把新人的生活状态和技术水平提高到一个基本的工程师水平;而界面和显示信息等,完全就是站在客户的角度看这个团队的规范化(专业化)怎么样。
第五个做到非人化的措施就是自动化,对了,所有可以由机器自动完成的工作,尽量全部让机器自动做。人所做的工作就是第一次构建这个自动化所需的工作,只做一遍,以后就让机器自动执行即可。尤其是测试。只有自动化,才可以避免人员因为操作失误,情绪不好,或者忙碌忘记或者疏忽忘记。这里需要说明的一点就是,一定要珍惜QA的劳动成果,所有的bug不管有没有时间修,一定要记录在bug系统中。还有就是测例才是把需求文档,设计文档,测试计划,测试报告真正落实到实处的东西,所以一定要珍惜,处理recase和regold的时候一定要慎重再慎重。
好了,非人化部分基本就告一段了,关于软件项目管理的心得在后续的文章中继续。