软件开发怎么管?
----产品、过程、人员三要素
软件世界记者 红莲
软件开发过程中所特有的如质量、进度、人员流动等管理问题,让不少公司也曾痛下决心来试行软件工程的管理,但是往往从书本章程入手,注意力集中在概念和规则上,缺乏具体的操作手段。经过一段时间的坚持之后,管理慢慢流于形式,劳民伤财,效果不佳,最后成了纸上谈兵,不了了之。
成功实施软件工程管理的两个条件
无论是在新成立的公司中,还是在一个已有的软件队伍中实行一种新的管理方法,要想成功有两点是必须的:首先是要对软件工程活动的主体,程序员和一线管理人员,有实用价值。使他们的工作更加有条理,有效率,因此更加轻松。他们是软件工程活动的主体,必须是管理方法的受益者,才能乐于采用,而不是“配合”。如果一个方法是增加他们的工作难度,很难指望他们能够长期配合。
其次是要符合循序渐进是事物发展的客观规律。因为人们对新的事物都有一个逐渐适应的过程,各个部门之间也要有磨合的时间。有些公司试图一次到位,部署实施某某体系,决心很大代价很高,结果是欲速则不达。大到苏联的休克改革,小到有些外科手术要分几次进行,都说明了同一个道理。
科泰世纪在和欣操作系统的研制过程中,从软件工程管理的三个主要方面入手:产品Product、过程process和人员People,可以简单称为3P开发管理方法。这套管理方法涵盖软件开发管理的基本内容,适用于我国大多数软件公司。它的具体体现就是软件工程中常用的几个基本工具,具有很高的可操作性,能实际解决具体的问题。
3P工具是管理理念和实际操作的浓缩
3P管理工具从提高一线人员的效率入手,简单易行,行之有效。从下载评估,到安装使用,最快的一周时间就能完成。大多数人所使用的基本功能只需要的一小时培训,就能见效。通过工具的实际使用,落实管理的理念的规则。
科学技术每前进一步都伴随着工具的发展,任何行业的进步都离不开工具的改良。而工具是否齐全配套,是衡量一个行业是否成熟的重要标志。对于一个企业也是一样,是否采用先进的工具对于企业的生产效率、产品质量有着决定性影响。修自行车靠几把扳手螺丝刀就能开张,而开设正规的汽车修理厂至少需要几十万元的工具和设备。不少软件企业给人的感觉是“作坊”,其中一个重要的原因就是连基本的软件工程工具都没有采用,让人联想起乡间公路旁边“精修各种汽车”的铺子。
世界其他软件工业发达的地区,经过几十年的摸索,已经逐步发展出很多有效的开发和管理工具。掌握了这些工具,就基本上掌握了软件工程的实际内容。通过学习使用这些工具,可以了解在正规的专业化的软件生产过程中,有哪些是必须注意的主要问题,采用什么方法才能够解决。从解决这些基本的实际问题开始,逐步完善软件生产管理体系,是实施软件工程的有效途径。
产品管理(Product)
软件开发队伍的管理是最突出的问题。任何行业中技术骨干离职对公司都不利,但是在软件行业最为严重,甚至会影响到公司的生存。 如果离职的人要另立门户,或者投奔竞争对手,对于公司就是一场灾难。
如果一个公司的产品生命线是掌握在几个人手中,这些人自然就有了某种特权。这种“少了他玩不转”的人,在公司中比管理者更具有优势。在这种局面下,劳动纪律,奖惩制度等等管理措施都失去了着力点。有人把这种现象称为老板给下属打工,十分形象地道出了管理者的被动地位。
出现这种现象的根本原因在于没有规范管理。构成公司产品的各个部分散落在个人手中。即使能够在离职之前移交,也难免残缺不全, 别人无法在短期内掌握,或者发现问题。要想彻底避免这种情况出现,需要把公司的产品Product管起来,使软件生产过程随时处于大家都可控制,可重复,可复制的状态,减少对个人的依赖。
科泰世纪所采用的版本管理系统不仅仅管理源程序,而且可以管理开发环境,测试程序等等和最终产品有关的所有资料。有了这些资料,任何人都可以在一台新机器上重复产品的生产全过程。
谈到严格的管理,有人就会担心怎样为员工提供宽松的工作环境从而提高工作效率。其实在正确工具的辅助下,二者不但不相互冲突, 反而是相辅相成的。产品管理不但能够方便个人的工作,还能够有效协调多人的合作,参加的人越多,效果越明显。这正是科泰世纪的管理工具受到程序员欢迎的根本原因。
过程管理(Process)
理想化的软件生产过程是从需求分析开始,整体设计,模块设计,编码,测试,等等。但是在实际过程中,往往是到了用户手中,又提出了新的修改或者增加功能的要求,工程的目标发生了变化。
从工程实现的手段上看,由于对于技术的掌握程度不同,迫于竞争压力还要不断采用新的技术和方法,结果形成用不确定的手段去实现不确定的目标。管理的困难程度自然就更大了。
人们经常会借用其它工程领域里面的管理经验来管理软件生产,但是最终却发现不能适应。软件生产过程具有一些特殊性,其中最突出的一点就是充满了不确定性。在某个意想不到的环节上出现的问题都可能导致整个计划的调整。常常看到“就差一点”的项目一拖再拖, 这时候按照各个工序的前后顺序画出来的进度表会变得毫无意义。
许多软件项目都是由先期的试探开始,逐步确定方案和技术路线。先期的代码也就成了后来的基础。这就引出了了软件开发中的一个重要问题:任务跟踪。
在先期试探的过程中,为了尽快达到验证的目的,许多细节都被忽略。大楼已经封顶,可是遗留下来的工作却还很多。这些工作有些是写在计划之中,有些是程序员随手丢下的。为了解决某一个问题,发现涉及到其他问题,而时间和精力又不允许把所有问题一次解决,这在开发和维护软件的过程中,是经常出现的正常情况。这些没有完全解决的问题数量很大,靠人的记忆是没法管理的。有些问题涉 及到其他模块,需要别人的配合才能解决,有时候甚至不知道应该由谁来处理最合适。所有这些特点都使得软件工程的流程控制比起其他工程更加复杂。如果没有相应的工具,管理起来十分困难,往往形成许多似曾相识的问题一再出现。
过程管理,就是要不断记录新出现的工作头绪,随时掌握工程进度,科泰世纪的“缺陷(BUG)跟踪系统”就是针对这一需求开发的 。需要跟踪的BUG不仅仅是指代码中存在的错误,而是泛指全部有待处理的事情,包括功能改进的建议等等。
从管理角度看,BUG的状态和负责人是两个最重要的信息。一个BUG从登记,修理,复查,验收到最后关闭,形成一个完整的生存周期,在每一种状态下都要有明确的负责人。每个人对于BUG的描述、判断,和所做的测试、修改等工作都被记录到数据库中。这些都是宝贵的工程档案,对于解决软件中的缺陷和今后维护软件都是十分宝贵的。
通过科泰世纪的BUG跟踪系统,系统中还有哪些有待解决的问题,它们的困难程度,谁在负责等重要信息都可以做到一目了然。产生的各种报表可以实现对BUG的全面监控,随时掌握软件的质量和工程进度。特别是在工程收尾阶段,BUG清单是了解工程状态的最好手段。
人员管理(People)
软件生产不确定性也困扰着对软件工程队伍的管理问题。当工程遇到困难的时候,究竟是技术本身的问题还是个人的能力问题?当工程进度受到挫折时,是属于正常的摸索试探,还是由于工作没有做到位?一个最明显的例子是对于修复BUG的工作量估计。有些问题看起来很严重,实际上修复起来却很容易。另一些问题正好相反,表面上看起来问题不大,可是深层里盘根错节,修起来牵扯太多,不仅费时,还存在引出其他问题的风险。
软件开发需要创造性思维,也是精力高度集中的工作,个人的精神状态对于工作效率影响很大。 按时打卡上下班,对于软件开发人员来说是限制的作用大于管理的作用。有些公司采用“计件”的方法,用每周编程的行数多少来衡量程序员的工作量。在这种制度下,不管程序员是否有意,程序越写越长是难以避免的。也有的定下每周要修理三个BUG的工作定额,结果造成大家在不停地修小BUG,真正的大问题一拖再拖,还有人可能一周修了五个BUG只报告三个,留着两个下周再报。管理到了这个份上,调动员工的积极性就无从谈起了。
工作量的衡量已经如此捉摸不定,工作态度就更加难以把握了。程序员最有价值的劳动是发生在脑子里,如何才能避免出工不出力得情况?有些人很有能力,可以做更多的工作,可是如果周围的人是出工不出力,他们的积极性就很难长期维持了,时间长了甚至会造成和他人格格不入的局面。因此也就放慢脚步,做到心里有数,完成自己的本份工作就行了。大家在这种情绪互相影响之下,结果往往是能力有限的员工影响那些有潜力的员工,使得“本份工作”的标准变得越来越低。
个人工作尚且如此,多人合作的任务考核起来就更难了。软件开发过程中需要工程人员相互合作配合,几乎每一项工作都要和别人衔接。工作中的这种交叉的相互依赖关系,没法像生产线上划分得那样清晰,如果有了问题应该由谁来负责?有些事情双方都需要有所改动,也有的时候双方之中哪一方改动都行。如果相互等待就会消耗很多时间,造成整体的工作效率下降。
科泰世纪的绩效评估系统能够帮助管理层对于开发人员作出公正的评估,以此为基础才能建立有效的奖惩制度。公开的评价体系可以为员工树立明确的努力目标。有效的激励机制能够调动每个人的积极性,建立一支配合默契,团结奋斗的队伍。