软件研发,蓝领还是白领?
由于CMMI模型的抽象性和普适性,涉及知识工作者的内容很少,企业必须结合软件工作人员的知识工作者的特点,弄清什么岗位的工作更接近知识工作,什么岗位的工作更接近体力工作。
CMMI实施的目的之一是提高软件组织的软件生产能力,而软件生产的重要因素之一是人,从事软件开发的人具有知识工作者的特点,那么,在CMMI实施中,需要如何考虑知识工作者的特点,将两者有机结合,以提高知识工作者的生产力呢?
软件人员不是知识工作者?
软件生产到底是体力劳动还是脑力劳动?在软件行业,“软件蓝领”和“代码工人”的概念已经提出多年,在印度,已经有了上万人的软件工厂,编码人员能够按部就班地进行编码活动,有固定的模式、可重复、可替代,具备一定程度的体力劳动的特点。
而在国内,虽然“软件蓝领”的概念已经提出了多年,但在企业中尝试的结果都以失败告终,究其原因,笔者认为有以下两个原因。
一是国内企业的工程技术方法不成熟,难以分工形成工序流程,从而简化单一工种的复杂度和岗位要求。比较典型的情况是设计活动和编码活动。在实际开发工作中,这两种活动很难分开由两种角色承担,这样就无法形成编码人员这一岗位,从而降低对编码人员的要求,形成所谓的“代码工人”。
二是从业人员普遍学历较高,价值观和工作心态更趋近于知识工作者,需要学习和创新,难以安心于“蓝领”类型的工作岗位。国内软件企业从业人员大多具备大学本科或更高学历,所受的教育使得他们的需求层次较高,不愿意从事技术含量低的工作。
因此,虽然我们不能肯定国内的软件生产人员是知识工作者,但他们至少具备很多知识工作者的特点。
知识工作者的生产力
知识工作者的管理问题最早由管理大师彼得·德鲁克先生于20世纪50年代提出,中国在90年代初引进这一管理概念。对于知识工作者生产力的决定因素,彼得·德鲁克先生总结了以下六点:
1. 要提高知识工作者的生产率,我们需要问这样的问题:任务是什么?
2. 要提高知识工作者的生产率,我们要求知识工作者人人有责。知识工作者必须自我管理。他们必须有自主权。
3. 在知识工作者的工作、任务和责任中必须包括不断创新。
4. 对于知识工作,知识工作者需要不断地受教育,同样也需要不断指导别人学习。
5. 我们不能或至少不能只用产出的数量来衡量知识工作者的生产效率。质量至少与数量同样重要。
6. 组织应把知识工作者看作资本而不是成本,并给予相应的待遇。在面临其他机会时,知识工作者仍然愿意为这个组织工作。
这六个因素涉及的内容从企业文化到绩效管理,非常广泛,其中与CMMI的实施有关的可以分为以下几个方面:学习与创新、数量与质量、责任心与自主管理。
学习与创新
学习与创新是知识工作者的特点之一,这一特点在软件行业内的重要体现是可控制性和可预见性的降低。在国内的软件企业,员工通常是抱着学习的目的而加入企业,一旦觉得工作中再没有新东西可学时,往往会选择换岗和离职,因此,“边学边干”是非常普遍的现象。
CMMI主张计划驱动,制定计划的依据是人员的生产效率。而学习活动的存在,导致生产效率中包含了学习效率,在学习到具备一定的能力之后,人员的生产效率才能够稳定并持续。不同的学习能力和背景知识使得学习效率不但因人而异,而且不稳定,这导致在项目前期制定整个项目的计划很困难。
通常,项目经理会在项目前期安排学习成分较重的任务,使得学习导致的风险在项目早期得到缓解。另一种做法是采用老员工与新员工搭配工作,老员工负责难度较高的任务,新员工负责难度较低的任务,让新员工在工作中逐渐学习进步。
这些做法要求项目经理根据员工的学习情况不断调整计划,而项目初期的项目目标的承诺往往会变更。针对这种情况,对于CMMI实施中的过程定义,比较切实的做法是将项目的初期过程进行明确的定义,即为获得可行的、切实的项目计划而进行的初期准备,将学习作为内容之一,这之前的项目计划的变更不做控制,这之后制定的计划要做变更控制。
知识工作者需要创新的特点,与学习类似,给软件生产带来的也是可控性与可预见性的降低。主要是因为创新通常是研究性活动,不确定性较强,因此组织需要控制创新的影响。
在CMMI实施中比较通常的做法,是将创新型项目与工程型项目分类处理,创新型项目注重研究成果,工程型项目注重生产结果,分别制定相应的过程。企业中还有一类项目是存在技术难关的项目,一旦攻克技术难关就需要马上进入工程生产阶段。这类项目通常要求将项目分为明显的两个阶段:预研阶段和开发阶段,预研阶段重在研究,减少人员投入,避免一旦技术难关无法攻克,项目失败时损失过大。
质量与数量
CMMI模型关注质量,整个模型的理论基础之一是过程的质量将决定结果的质量,模型通过一系列的过程域来规范企业的过程行为和过程质量,CMMI模型的实施将在相当程度上提高软件工作的质量。
CMMI模型也同样关注数量问题,包括对过程活动进行度量,在度量的基础上应用统计过程控制理论来控制和预测过程能力。
在软件生产活动中,可以度量的内容很多,比如进度的偏差和缺陷等等。而软件工作者生产数量的度量方法和度量结果的使用,是CMMI实施中比较难处理的问题。
通常使用代码行(编写代码的行数)或软件产品的功能点(Function Point)做为软件生产数量的度量元,但现实中都存在问题。
功能点是一种对软件产品的度量,也就是软件生产的结果或预期的度量。然而对于同一种结果,软件生产人员却可以有多种实现方式,不同实现方式的工作量差距可能很大,因此,功能点不太适用于衡量软件生产人员个体的生产数量。
代码行能够反映生产人员个体的生产数量,但是比较容易失真,如果用于生产人员个体生产数量的评价,数据很可能无法反映实际情况,例如将本可以精简的代码故意编写得较复杂以获得较多的代码行数。还有一个问题是,认真编写的高质量代码,行数通常会少于编写粗糙的低质量代码,这就会造成数据对于工作量的错误反映。这也表明,脑力劳动的效率,使用其数量来衡量其产出确实存在问题。
这两种度量元虽然不适用于知识工作者个体生产数量的度量,但在比较宏观的层面上,如组织级,在一定条件下可以反映组织的生产数量。因为大量个体之间的不同表现可能互相抵消,大量个体的数据能够反映出组织级的特征,例如组织的平均水平,组织的历史积累情况,组织的管理能力等等。
在CMMI的实施中,建议这一类数量度量的结果,不用于评价个人,而仅用于组织级数据分析。
责任心与自主管理
CMMI模型没有涉及知识工作者的责任心与自主管理方面的内容,而由于CMMI的实施与管理活动关系密切,因此实施中会涉及到这方面的部分内容。
高层经理布置项目经理完成项目管理任务,怎样才能调动项目经理的责任心,从而达到自主管理的目的呢?
项目经理要怎样调动项目组成员的责任心,从而使得项目组成员能够自主管理,充分发挥积极性呢?这都有待研究。
小结
在软件企业中的工作人员,虽然具备知识工作者的特点,但所从事的工作并不完全是研究工作,而且,企业中不同岗位的工作特点也不同,因此对以上问题需要根据各个岗位区别对待。
作者:林 洽 来源:软件世界 2007年8期
上一篇:敏捷提升软件研发管理
下一篇:精益软件研发