前几天博客园编辑推荐了一篇文章《“品质在于构建过程”吗?》,对决定软件品质的核心要素进行了许多探讨。我今天想讨论的也是这个话题。
“品质在于构建过程”并不是什么惊骇世俗的新观点,实际上类似的说法由来已久,比如“过程决定质量”,“品质在于构建过程”只是有软件行业特色的另一种表达形式而已。那么“过程决定质量”的说法是哪来的呢?答案是工业工程,如果你从事过工业制造行业,比如汽车制造、手机制造之类的,几乎不可能没听说过这句话。首先我们辨析一下工业工程和软件工程这两个概念,下面是来自百度百科的定义:
工业工程(Industrial Engineering 简称IE),是从科学管理的基础上发展起来的一门应用性工程专业技术。
软件工程(Software Engineering,简称为SE),是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。
实际上,软件工程中很多的概念、方法和观点都是从工业工程中移至过来的,其中就包括了“过程决定质量”这个观点。
大部分程序员和软件测试、软件过程管理(QA)人员可能都没有过制造业的从业经历,所以对工业和工业工程的了解多来源于别人的描述或者想象,对工业工程中的一些观点的理解自然不很透彻。刚巧我在做程序员之前在一家制造业的工厂里做过一年的伪工程师,接受过一些简单的工业工程培训,所以可以跟大家描述一下工业上的“过程决定质量”究竟是怎么回事。
在工业上,“质量”这个词有两重含义,第一重含义是指单个的产品的加工精度更高、更结实耐摔、不容易掉漆、设计的更好、不容易出故障等等,比如我们说诺基亚手机比山寨机质量更好大体上用的就是这一重含义。 第二重含义是统计意义上的,指批量生产的同一种产品中有问题的产品数比较少,平均不良率比较低,六西格玛管理管的就是这一重含义的质量,它要求每百万件产品中的次品数不超过三件,这已经接近于零缺陷了。
因为工业生产是按相同的工艺流程生产同样的产品,生产出一件次品的成本和生产一件良品的成本是一样的,可惜的是次品没法卖钱,这个成本最终会转嫁到能卖钱的良品身上,不良率越高意味着最终销售的产品成本越高,利润率也就越低,这可是关乎生死的大事。因为工艺流程通常漫长而复杂,所以在整个生产品过程中越早发现次品浪费的成本越低,没有那家工厂会傻到产品都做完了再统一做检测合格的留下不合格的丢掉,最好的方法是从生产开始到结束所有的环节都进行质量管控,这个工作做的越好最终产品的良品率也就越高。这就是过程决定质量的由来。
看到这里你有没有发现软件开发和工业生产的不同?——软件开发从来不是批量生产的,每一款软件都独一无二,每一个项目都是新的,相同的工作只需做一次,这是与工业生产的本质区别。因为这种区别,所以软件企业的组织结构和软件开发的组织过程都与工业上不同;因为这种区别,所以工业工程中的方法不能直接照搬照抄到软件工程中。
即使是在工业上,“过程决定质量”的观点也不是时时处处都成立的。刚刚转行做软件开发的时候我马上就注意到软件企业的一个特点——在软件企业中研发部门同时也是生产部门,而在工业企业中这两者是分开的。我们前面讨论的六西格玛、过程管理都是针对生产部门的,而且主要是针对量产阶段。实际上在一款产品量产之前还要经历多个不同的阶段,首先需要研发部门制定技术方案,然后出样品、试生产、小规模量产,并在这个过程中不断的改进技术方案和工艺流程,甚至更改产品的设计方案,最后一切都稳定下来之后才大规模量产。注意,在量产之前的各个阶段中并不是“过程决定质量”,而是“技术决定质量”,我清晰的记得当初我们一个机长拿着一百件新铸造出来的毛坯送检结果只拿回了两件——两件合格的;还要注意,这里的“技术决定质量”中的“质量”二字和“过程决定质量”中的不同,前者包含了“质量”这个概念的全部两重含义,而后者只包含第二重含义也就是统计意义上的良品率。
如果硬要拿软件开发同工业生产相比较的话,软件开发的过程更像是工业产品量产之前的研发阶段,在这个阶段质量是由技术决定的,而且软件的“质量”只包含了质量的第一重含义,指单个软件的稳定性、功能完备性、易操作性等等,都是个体属性没有统计学上的意义。
当然,并不是说软件过程控制毫无作用,实际上良好的过程控制确实有助于提高软件的质量,只不过同工业生产相比它发挥作用的机制和最终起到的作用都有所不同。软件过程控制主要通过两个方面对质量产生影响,第一是以制度的形式确保了对软件质量控制的资源投入的量和资源投入的时机,第二,因为软件缺陷的特点是发现的越早修复的代价越小,所以及早的对软件开发过程进行质量控制有助于节省人力和时间成本,从而使得开发团队可以投入更多资源(省下来的那部分时间和人力)用于加强质量控制和提升技术。从效果上看,因为软件不是批量生产不存在统计意义上的质量概念,所以过程控制能起到的作用顶多是保证软件的质量不低于某个值,也就是不至于烂到什么程度。
真正能决定软件质量好到什么程度的只能是技术,说是人也好说是设计也好本质上还是因为人的技术或者设计方案的技术含量。至于如何改善软件质量需要具体情况具体分析,就像分析软件性能一样,必须找到瓶颈。如果是因为质量控制力度不足就加强质量控制,如果流程太乱就改进流程,如果是技术力量不足就要想办法补充技术力量。反之,如果明明是因为技术能力不足造成质量低下却非要在过程控制上下功夫,最后付出高昂的成本不说,带来的效果也非常有限。
本文地址:http://www.buzhiqiu.com/archives/about-process-decision-quality.html