技术开发 频道

活用XP:(一)发挥过程和人的力量

【IT168 技术文章】

    XP作为敏捷方法的一种,拥有很多优秀的实践,用好这些实践,在软件组织中能够起到很好的效果。问题在于,要用好这些实践并不简单,本系列文章的目标就是围绕着 XP 的实践,讨论隐藏在实践内部的敏捷性实质,研究如何灵活的应用 XP 的实践,从而达到改进软件过程的目的。

    软件开发虽然有多个环节,但是我们不能只强调某些环节,任何一个环节出问题最终都会影响产品的质量。因此我们在软件开发中应该考虑整个过程,并且重视人这个因素。

    质检员的工作

    在以前的工厂作业流程中,产品在生产出来之后,都需要经过质检员的检查。在质检员身边,有两个筐,一个筐上写着合格,一个筐上写着不合格。对于合格的产品,贴上合格证,进入销售的环节,对于不合格的产品,禁止出厂。很久以来,我们一直采用在产品的最终阶段进行质量检验的方式,这种方式用来避免有质量缺陷的产品出厂,但是既没有办法提高产品的质量,也没有办法降低差错率。这种质检方法的基本思想是,产品出现废品是正常的,只要能够找出废品,产品的质量就不受影响。

    那我们看看软件开发的工艺流程。当软件经历了需求、分析、设计、编码之后,质检员同样需要检验软件是否满足质量要求。各种各样的测试人员共同担任了质检员的角色。而质检员的工序也不简单。黑盒测试、白盒测试、集成测试、用户测试、并行测试。和工厂不同的是,出现问题的软件并不能够简单的扔到不合格的产品堆中。另一个不同,软件产品一定会出现质量的问题。既然不能简单的抛弃产品,那么只好把产品退回到生产线上。于是,需求人员、分析人员、设计人员、编码人员开始对软件进行调整,力图使软件能够出厂。这个反复的过程往往要持续上一段时间。幸运的软件可以顺利出厂(交付),否则,可能会遭到项目失败的命运。

    很明显,我们发现这种做法不够聪明。把问题堆积起来,直到最后才来集中解决,这种做法的代价是非常高昂的。软件开发的特性,决定了越是后期的变更,成本越高。那么,我们应该如何调整我们的做法,来降低成本,提高质量呢?

    精益原则

    软件开发总是从其它学科中借鉴管理思路。最早的软件工程从土木工程中借鉴经验,但是后来人们发现建筑和软件开发有很大的差异性。故而新的软件开发方式开始兴起,其中就包括了XP方法论。同样的,新的软件开发方式仍然在理论上寻找立足点,这一次众人的焦点落在了现代管理理念上。土木工程管理的一个很大的问题就在于忽视了人的作用,而现代的管理理念将人的作用提到了一个新的高度,这和新兴的软件开发思想是相同的。而对软件开发思路影响最大的,应该算是丰田公司提出的精益生产(Lean Production)的概念。

    二战后的美国,以福特公司为首的汽车制造公司在大肆提倡规模制造(Mass Prodution)的同时,东方的日本,丰田英二等人在考察了美国的制造思路之后,认为美国的制造方式不适合日本,提出了自己的精益制造(Lean Production)的思路,精益制造成就了一代霸主-丰田公司,丰田的制造方式被人称为TPS(Toyota Production System)。丰田公司的丰田英二和大野耐一等人进行了一系列的探索和实验,根据日本的国情,提出了一系列改进生产的方法:及时制生产、全面质量管理、并行工程,逐步创立了独特的多品种、小批量、高质量、低消耗的生产方式。这些方法经过30多年的实践,形成了完整的"丰田生产方式",帮助汽车工业的后来者日本超过了汽车强国美国,产量达到1300万辆,占到世界汽车总量的30%以上。

    回顾这段历史,和软件开发的历史何其相似。大规模制造理论认为,一定程度的浪费,一定程度的废品是正常的,允许的。而在软件开发中,浪费、成本居高不下也同样成为阻止软件开发迈向工程化的一大障碍。像XP这样的敏捷方法从精益制造的思路中吸取了很多的优秀思想,例如,不断改进质量,设计决策应该交给最贴近生产的人员,根据客户的需求来推动生产。虽然我们一直在强调软件开发和制造行业截然不同,但是,处于变革的十字路口的软件开发行业,总是不断的从其它的行业中寻找可借鉴的理论。这种借鉴来的思路就被称为精益编程(Lean Programming)。精益编程的思路包括:

    消除浪费。 任何不能够为最终的产品增加用户认可的价值的东西都是浪费。无用的需求是浪费,无用的设计是浪费,超出了功能范围,不能够被马上利用的代码也是浪费,工件在不同的开发组之间无意义的流转,也是浪费。

    强化学习,鼓励改进。软件开发是一个不断发现问题,不断解决问题的过程。而学习能力的强化,能够令软件开发工作不断的获得改进。

    延迟决策。软件开发如果工作在一个不确定的环境中,变化性会对软件开发本身造成伤害。延迟决策,当环境变得逐渐清晰之后,才有充足的理由来进行决策。而对软件设计而言,如何构建一个可支持变化的系统则成为关键的问题。

    尽快交付。自从互联网流行之后,速度成为了商业中的至关重要的因素,从而直接影响了快速软件开发的成熟。软件阶段性交付的周期越快,软件的风险就越容易识别,用户的需求就越清洗,软件的质量就越高。

    谁做决策。谁做决策?是高高在上的高级经理,还是贴近代码的编码人员。决策取决于准确的信息,但是掌握这些信息的权威者往往就是做实际工作的编码人员,将编码人员的建议、决定和实践纳入到决策的范畴来,是成功决策的关键。

    精益编程代表了一种思想,很多的Agile方法都从各自的理论基础出发,支持了这种思想。而在我们的讨论中,讨论的重点就是放在XP上。XP方法论中最有价值的是他的思想。我们研究、学习XP,不能够光了解他的实践活动,还需要时刻注意XP的价值观,并仔细的思考,在实践活动的背后,到底隐藏着什么样的思想。就好像我们在阅读设计模式一书的时候,书中给出的是各种各样的关于面向对象的设计方法,但是书中仍然有一条主线贯穿其中,那就是面向对象的编程原则。

    过程

    前一段时间,书店中很畅销的书大多数都和6σ相关。6σ是全面质量管理理论的发展。其中一个很重要,和软件开发非常类似的思路是,过程的每一个步骤,都会对产品最后的质量产生影响,要提高质量,降低成本,提升客户的满意度,最关键的是要对过程进行研究和分析,发现对产品影响较大的步骤,并制定改进的措施。

    一家专门提供外卖的公司,常常被客户投诉说送货的时间太慢了。于是他们加强了送货的力量,包括使用更好的工具,雇佣更多的送货人员。但是成本增加了,客户的投诉依然不断。问题出在了哪里?在对整个流程进行了量化评估之后,他们发现,送货的时间对整个的时间影响很小,而更多的时间是花费在了制作外卖的过程中。所以,原先投入对送货流程改进的投资,算是白费了。

    做任何一件事情,都需要经历一个过程。从外卖店接到客户的订货电话开始,一个过程就已经启动了。记录客户的地址、地址特征、菜名,给厨房下单,分配外送人员,将地址信息传递给外送人员,送货,寻找目的地,交付外卖并收款,后续过程忽略。一个似乎平常的生活活动,其背后都包含了复杂的过程。对软件开发而言也是一样的。从客户提出软件的构想,一直到客户真正开始使用软件,其间的过程非常的复杂,充满了各种各样的不可预测的因素。

0
相关文章