全部博文(160)
分类: IT业界
2011-08-09 13:21:53
1 问题描述
最近工作负责2个模块的软件任务,在经过设计实现和之后提交使用测试,发现实现与实际要求差距很大,需要返回重新修改,提交使用发现问题再修改……如此反复多次,直到最后暂时没有问题,消耗了大量的时间和热情。并产生如下疑问:
为什么会造成如此多次的反复?最初的需求和最终的实现之间为什么会产生很大的差距?
人员的想法是否准确的传递给了研发人员?
设计人员在研发人员开始动手写代码之前如何确认他已经明确自己要干什么了?
2 问题分析
06年曾经做过一个测试,四十个人,十个人排成一列,共四列,一位同事把一张纸条交给四队的第一位队员看过之后,让大家小声把这句话传到队尾,看哪个队又快又准确,结果是每列传到时话都变了模样,稍好的是误差了几个字,严重的是意思都变化了。
问题出在什么地方?是说话的人并没有确认听话者是否正真明白了自己的意思。
在实际的工作流程中经常需要“传话”,传话的方法也很多,高效的团队应该努力找到最有效的一个。
从角度讲,一个从构思到实现需要经过以下一系列严格的流程,
1:产品设计 2: 3:软件实现4:测试并发布;通常这几个步骤都是不同的团队完成的,所以重点就是确保设计思想一步步落实!
产品设计思想通常是市场人员提出的,软件设计人员在产品设计思想基础上进行设计,编码人员在软件的上开发,测试人员在软件上进行测试,
如果把研发比做传话游戏的话,从编码人员的角度,我遇到的问题是:我并不理解传给我的话的意思,也不确定传给我的话是否就是纸条上的那句,造成的结果是,我并不熟悉自己设计并完成的模块,完成了软件心里面也不踏实,因为当编码完成发布之后,使用的人员很容易发现“显而易见”的错误,而我自己却不知道修改的方向,使用人员见到产品才发现问题,返工,再测试,再发现问题,再返工,再测试……这的确是正规软件的流程,但是否使用的太多了?
如何才能提高效率,减少返工?怎样才能让软件使用人员在的一眼看到研发的作品之后说:好,这就是我想要的东西。
3 解决方案
3.1两种典型的研发方法方法一:重视编码
传统的研发方法是轻视设计,重视编码,大量的时间用于编码,代码任务很快完成,但是从产品整体角度讲,研发团队如果没有真正理解产品设计思想,很容易造成软件设计和开发的偏差,造成很多问题在产品完成时才发现,它们应该在没有动笔写代码之前就被避免,从而陷入无限制的发布,修改bug,再发布……的恐怖循环。
方法二:重视设计
正确的合理的设计和研发计划中,设计和理解设计是占很大的一部分时间的,大概应该是完成产品总时间的30%~40%,之后是研发人员的理解和完成测试文档,我喜欢测试优先的想法,因为实际效果很省力,最后才是编码,编码时间占30%~40%,从产品整体角度讲,这是被证明的,有效率有效果的方法。
3.2 重视设计的成功经验
这是07年我参加的一个研发团队的研发步骤,总工是是一位有丰富经验的(40岁),2个研发组,核心人员平均年龄33岁以上, 软件研发工作经验在7~16年
第一步:市场的产品设计,团队中核心人员参与人员讨论,确定产品方向;
第二步:研发团队核心人员,讨论确定研发的计划和预见技术难点,确定研发计划,讨论技术难点的解决步骤,做到心中有数;
第三步:把研发计划告知给,并要求研发工程师花时间理解需求和设计,遇到难点沟通反馈,开会统一解决研发疑问,没有疑问之后,研发开始写测试文档。
第四步:研发工程师讲述自己的测试文档,研发核心团队评审,提出不足与改进意见,把研发过程种造成的偏差扼杀在写代码之前。
第五步:研发工程师在动手开发之前,头脑里面已经很清楚自己要做的任务,之后的工作就是按照测试文档实现功能点就可以了。
按照以上步骤开发,结果是减少了研发人员的bug,提高了研发的效率,减少了测试回合;
这样的开发方式要求研发团队的核心人员,脑中有清楚的产品模样,有清楚的开发,并且把实现要求贯彻给研发人员,并确认研发人员真正理解了自己想做的事情而不会产生偏差。
3.3 怎样提高研发效率
根据以往的工作经验,从研发角度看,流行的有效的解决办法 我认为是:
第一:一份研发人员自己写的测试文档(也就是常说的,研发自己的测试方案在写代码之前完成);或者别的有被实践证明简便有效的方法;
第二:teamleader需要确认研发人员是否真懂得了自己要做的东西;至于如何确认,我的经验是研发人员在认为自己理解了设计文档之后,自己给设计和产品详细讲一下到底要做什么东西,做出来是什么样子;或者别的被实践证明简便有效果的方法。
4
软件研发的本质是用程序语言表达出产品的设计思想,软件产品的好坏在于创造产品的工程师们对于产品设计思想的理解程度。
优秀的研发团队中,很重要的一个特点是:在没有开始工作之前,思想中已经有了产品清楚的模样,并提早预见各种各样的困难,有足够的方案解决困难;
对于研发工程师,很重要的一点就是在没有开始动手写代码之前,脑子里面应该有清楚的软件实现后的模样。
无论公司、研发团队还是研发工程师,无论做何种职业,清晰的思路都是很重要的事情,我认为这也是提升效率的根本保证。