很多软件项目中的质量问题都是由一些小任务之间的中断而引起的。由于团队成员把他们的工作定义的过于狭隘或者在把工作从一个人手中移交给另一个人时出现困难,所以会经常发生中断的情况。

 

背景故事

几周前,我在一家机场的饭店等一次午夜航班。有一个服务员拿了一大堆脏盘子往厨房走,她竟然能一下子拿那么多的盘子,对此我印象特别深刻。在朝厨房走了一半时,有一个餐叉从盘子里掉了下来。由于那个服务员两手都拿满了盘子没法去捡那个餐叉,所以她就把餐叉留在地板上继续往厨房做了。

这时走来另外一个两手空空的服务员,在她身后约15英尺。我想这个服务员肯定知道刚才发生了什么,为了不踩到那个掉在地板上的餐叉她往前跨了一大步。但是她只是继续往前走并没有把餐叉捡起来。尽管那时饭店客人并不多而且她看上去也没有什么着急的事。因为捡餐叉不是她的工作,所以那把餐叉只好躺在那里等别人踩了。

普通小吃店与高级饭店的区别之一就是:在高级饭店里,通过培训要让员工把提供额外帮助作为他们自己的工作对待从而确保让顾客满意。如果顾客桌上的水杯是空的,他们就要为顾客加满水,即便这不是他们所负责的桌子甚至不是他们的工作。如果顾客看上去需要服务员的话,他们要么就通知相应的服务人员,要么就上前为顾客提供帮助。因为他们知道,为了使饭店保持先进,所有员工都必须尽全力让顾客感到满意。

几个月前我评审了一个杂乱无章的项目。就在我与每一个团队成员讨论各种项目问题及其解决方法的时候,我不断听到他们说:“这不是我的工作。”每个团队成员对什么是他们的工作似乎都定义的很狭隘,很明显,许多责任都不在任何人的工作定义范围内。所以没有任何人觉得他们要对处理需求问题、确保需求与测试用例同步或者改进开发人员的测试,以便确保交付给测试团队的是有质量的代码等问题负责。

简而言之,任何项目的成功都是每一个团队成员的责任,也就是说每一个人都要尽全力去做一切能够使项目成功的事。但并不是说你要替其他团队成员做他们份内的工作,而是当你看到有些而任务需要有人去完成的时候,要么通知负责人去做,要么就自己去做。

 

新理念

为了交付高质量的最终产品,团队成员需要具备怎样的理念?

交付高质量的最终产品需要分析人员、开发人员、设计师、测试人员、管理人员以及客户之间的紧密协作。这种不断加强的协作对责任、沟通方式、组织以及人们如何看待他们在团队中的角色都有影响。简而言之,它需对每一个团队成员的理念提出新的要求。

1.         经理关注的焦点应从日常管理工作、中间制品及固定计划转向领导能力、基于结果的管理方法及团队协作。

a)         做一个领导者:作为领导者,你要保证让整个团队都知道要实现怎样的目标,并且要极力团队成员团结一致并实现最终目标;建立共同的价值标准——哪些行为是可以接受的,哪些行为是不可以接受的——并且要通过实际行动不断加强这些价值标准。

b)        为团队授权

c)        公开项目所面临的各种风险,不断重新评估风险并按照风险区分项目工作优先级:迭代开发方法最重要的特征是在生命周期的早期驱除主要风险

d)        通过可证明的结果而不是完成的各种活动进行状态评估:作为经理,你所关注的焦点必须从活动转向可证明的结果。已经完成的活动不足以度量成功,因为仅仅完成一项活动并不能说明最终结果的质量。由于最终目标是软件本身,所以成功的首要度量应该是被交付的工作软件

e)         在项目初期为整个项目制定高级计划,职位当前迭代和下一次迭代制定详细计划:项目初期的详细计划花费大量时间并存在不确定性因素,相反,这个高级计划要简单地描述出每一次迭代所期待的成果,并且只为当前和随后的迭代制定详细计划

f)         随时平衡对需求、架构、设计、实现以及测试的投资,以确保解决风险:“哪些类型的活动能最好的环节当前的风险”

2.         分析人员的理念应该从“负责将需求文档化”转变为负责将正确的需求文档化、使需求被理解,而且可以被开发人员和测试人员所反映。

a)         与最终用户交换意见并征求最终用户的参与,以确保开发的系统是正确的

b)        鼓励早期实施关键能力以便了解哪些需求将会解决业务要求

c)        与开发人员、测试人员一起对需求按照优先级排序

d)        根据你所处的阶段及项目要求正确地对需求进行细化

3.         开发人员的理念需要从“仅仅负责实现需求”转变为负责开发能够解决最终用户需求的高质量应用软件。

a)         将你的责任范围扩大到详细设计、实现以及开发测试:你希望将移交给不同的人员的信息数量将到最少,从而把可能的潜在错误减至最少并且使效率最大化。为了使移交数量最小化,一定要让你的团队成员承担的责任范围尽可能地广;一定确保编写的所有代码都是高质量的

b)        承担部分需求工作,协助为需求寻找解决方案

c)        承担部分测试工作:测试先行设计能够帮助你从一个开发人员的角度关注测试。这种方法十分注重生产高质量的代码,并促使团队集中精力构建高质量的应用软件

4.         测试人员的理念应该从负责在项目的最后期“为质量注射疫苗”转变为负责整个项目过程中的测试工作,并以测试专家的身份知道其他团队成员进行与测试相关的问题。

a)         定义测试策略:测试策略包括利益相关者对质量的定义以及项目团队的优先级。只有所有团队成员对质量定义及项目成功的标准都意见一致后,他们才能正确地关注自己的工作,项目才会成功

b)        成为团队的导师,指导测试的步骤和方法:测试人员应该与整个开发团队分享他们的专业知识,例如指导管理人员制定与测试相关的决策、向分析人员建议可测试的需求计划以及帮助开发人员执行开发测试等

c)        在项目初期进行测试:在迭代开发中,每一次迭代都涉及测试,这就意味着你需要将集中在项目后期的测试工作均匀地分布到整个项目过程中,并使所有人都知道每一次迭代的测试内容

d)        集中处理定义过的测试目标:了解你的测试目标是什么,而不是去试图解决所有的缺陷——这是不可能的。确定正确的质量级别并且要明确是否应用软件的所有细节都对质量要求较高,然后相应地关注你的测试工作

e)         不断对稳定的能力进行自动测试

5.         架构师的新理念:略

6.         对大型团队的指导:略