对软件项目经理来说,达成项目管理三大目标(质量、进度和成本)一直是最为头痛的事,如何才能达成呢?分析与设计成果的标准化、量化是基础
如果问:软件项目中哪个岗位最辛苦、最操心,那毫无疑问的是软件项目经理!因为软件项目经理要经常面对下述的问题
■客户总是抱怨我们软件公司的软件质量低;
开发工程师总是抱怨需求分析师的需求错误多;
需求分析师总是抱怨开发工程师的bug多。等等
■软件分析与设计的交付物缺乏标准,设计结果的对否也难以判断。
软件分析与设计的成果难以量化,进度难以控制,软件项目管理大都靠经验。
开发返工时间有时比正式的开发工期还长、项目总是超成本、忙了半天不赚钱。等等
软件产品如同其他产品一样(建筑、汽车、服装等),要想实现高质、高效和低成本,就必须在关注制造手段的同时,也要关注分析与设计的方法。现实中很多的软件开发返工不是因为编码质量问题带来的,而是因为分析与设计只有不规范的定性表达、缺乏标准化的定量表达而带来的,这种需求表述模糊、似是而非。而如果软件分析与设计的资料如同建筑、机械、服装等制造业一样的标准化,就可以避免大部分的返工,从而提升质量、效率和降低成本。
软件工程的知识能否有助于解决这个问题吗?回答是肯定的!对这个问题可以将软件开发的全过程分为两个阶段来探讨,这两个阶段分别是:
□一阶段:核心工作是对客户的软件需求进行分析与设计。
□二阶段:核心工作是依据一阶段成果进行软件的开发与测试。
在为其他行业实现自动化、智能化生产提供了解决手段的同时,IT行业也在着手解决自身低质量、低效率、高成本的手工作坊式开发方式。为了追求实现上述目标,软件行业从技术实现入手对二阶段的开发方法已经进行了多年的探索,从提倡系统架构的模块化、平台化,到编码过程实现无代码、少代码、配置化、装配化等,这些方法的思路基本上是先将一行行的代码预先封装成不同作用的“构件”,然后通过“组合构件”的方式来形成“功能”,最终组合全部所需的功能完成系统。这个做法就如同建筑行业“从现场砌砖、现浇混凝土,向由工厂生产预制构件然后在现场进行装配” 的施工方式变革是同样的思路。将代码预先制成一个个的“标准构件”,不但提升了二阶段软件的开发质量、效率、而且降低了成本。这些不断的尝试,推动着软件开发二阶段工作的进步。软件开发的构件化实现了标准化生产和量化管理,从而为二阶段的软件项目管理三大目标的达成奠定了基础。
那么一阶段成果(分析与设计)的标准化如何推进、一阶段成果的标准化和量化又是如何影响到项目管理的质量、进度和成本的呢?
首先看一下现在软件分析与设计资料的表达形式,大多数的软件公司都是采用以文章体的文字描述为主、附以少量的表格和图形来完成的。这种表达方式往往是非结构化的,因此难以标准化,设计结果、格式因人而异,不容易确认,更不容易复用。同一份资料不同的人可以有不同的理解(对比其他行业,看了相同的设计资料,不同的公司可以制造出相同的产品),所以,分析设计过程和交付物的非标准化是造成软件质量低、进度慢和成本高的重要原因。
为了说明标准化对项目管理三大要素的影响,这里先以软件分析与设计中工作量最多的“功能设计”为例来说明如何进行标准化,然后在标准化对三大目标的影响。标准化的过程可以分为5步来做(步骤数仅做参考)
第1步.设计分层的标准化:首先将分析与设计的对象从总体上划分为三个层。
□架构层:对业务进行整体规划、架构设计(如分层图、框架图、流程图等)
□功能层:对功能进行整体规划、详细设计(如界面布局、字段定义、规则等)
□数据层:对数据进行整体规划、详细设计(如数据标准、主数据、数据共享等)
第2步.功能分类的标准化:以前述的“功能层”为例,再进一步标准化(难度系数1~5)。
根据作用、设计方法和开发技术的不同将功能划分为4大类,4类功能简述如下。
□活动类功能:记录过程数据的功能,约占功能总数量的50%、难度系数1~4;
□字典类功能:维护基础数据的功能,约占功能总数量的10%、难度系数3~5
□看板类功能:展示分析数据的功能,约占功能总数量的5&、难度系数4~5
□表单类功能:打印输出数据的功能,约占功能总数量的35%、难度系数3~5。
第3步.功能设计模板的标准化:对上述“功能”的详细设计结果用标准模板来记录。
采用4个模板为一套,从不同维度对功能进行唯一性描绘,4个模板的作用简述如下。
□模板1-界面原型:给出功能的具体界面形式。
□模板2-控件定义:对界面上每个控件,用结构化的格式给出说明。
□模板3-规则说明:对功能整体具有的规则进行说明。
□模板4-逻辑图形;用逻辑图形方式表达功能内外的逻辑关系。
第4步.原型界面控件的标准化:对上述4个模板上的内容再标准化。
以“模板2控件定义”为例,将界面上的控件分为两大类。
□字段控件:界面原型上所有的字段控件。
□按钮控件:界面原型上所有的按钮控件。
第5步.控件定义的标准化:对字段控件的描述属性进行标准化
比如:字段的名称、类型、格式、长度、必填、数据源等。(详见文章后面的参考书)
通过上述5个步骤的分类、定义,建立了分析与设计过程和交付物的标准,这个标准使得对“功能”分析与设计的过程和交付物具有了可操作性,确定了分析与设计的顺序、每类功能的作用、方法、模板,功能成为了可分配、可计量、可验收的“单位”。同时搞清楚了这4类功能的作用、数量、占比、难易度,为软件项目经理进行工作量统计、技术难点把控、所需资源数量和能力的选择、计划进度编制以及软件品质量控制等内容进行精细管理奠定了基础。
知道了功能的标准化方法和作用之后,下面来看一下标准化的成果是如何影响到软件项目管理三大目标(质量、进度和成本)的。
■质量:由于分析与设计的成果没有标准化,项目组成员能力参差不齐,造成分析不到位、设计不清晰、没有验收标准,所有的需求都是模糊的、且因人而异,这些问题就造成了开发中沟通时间长、开发完成后需要大量的返工。可以说分析与设计的质量低下带来的问题往往会大于编码bug带来的影响(如果需求本身就是错的,可能要从根本上推倒重来!)。
用“文章体”和不规范图、表描述需求,既不标准、也不能量化,极易容易埋下质量隐患。强化分析与设计结果表达的标准化、量化,是解决质量问题的重要手段。
■进度:控制进度的有效措施之一是提升效率,举三个通过标准化来提升效率的措施。
□标准流程和模板:按照标准化套路(流程和模板)工作,是提升效率的重要手段。
□资料复用:参考历史资料效率最高,但前提是资料要做到标准化、结构化才易于复用。
□开发返工:能够做到减少或是避免返工,就等于是节约时间、缩短工期了,标准化的分析与设计成果是不返工的重要措施(可确认、易追溯)。
■成本:有质量保证、有高效的工作方式,再按照量化的工作量、匹配相应的资源、编制可控的执行计划,标准化的作业还可以减少各类风险,因此项目的成本控制就有了保障。
可以看出标准化为软件项目管理实现三大目标打下了基础:标准化的成果容易进行量化,而量化的成果易于管理,可以这样说,没有量化的分析设计过程和交付物,就没有量化的管理,没有量化的管理就不是有效的管理。标准化是同时实现项目管理的三大目标的基础!顺便说一下,标准化的表达主要有三个手段:图形表达、表格表达、文字表达
□图形表达:逻辑图形(架构图)、界面图形(原型)。
□表格表达:各类模板(流程表格、功能表格、数据表格等)。
□文字表达:各类规格书的编写形式、文字的的表达形式等。
另外,标准化的表达不但可以满足软件项目过程的管理要求,同时还可以快速培养年轻、经验少的软件工程师,从规范的操作中在短时间内掌握更多的知识和经验。
最后谈谈一阶段与二阶段的标准化存在着什么样的关系呢?实现项目管理的三大目标是两个阶段努力成果的叠加。如果已经实现了二阶段的快速开发(平台化、少代码等),再补上一阶段分析与设计的标准化就可以做到全面完美了;如果一阶段没有进行标准化,则二阶段的开发效率再高,开发完成后的返工依旧不能避免(只是由于二级段的技术进步返工的周期缩短了),技术提升效果不能全部发挥出来。如果还没有实现二阶段的快速开发,也可以先从一阶段的分析与设计开始,虽说两个阶段的标准化没有绝对的先后,但一阶段先标准化可以影响到二阶段标准化的设计。另外,与二阶段标准化相比,实现一阶段标准化的技术门槛低、投入少、见效快。
结论:软件项目经理,要想实现有效的软件项目管理,达成软件项目管理的三大目标,首先就要建立可量化的分析设计过程和交付物标准。关于文章中提到方法的详细说明可以参考拙著《大话软件工程-需求分析与软件设计》一书。