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