本文共 1219 字,大约阅读时间需要 4 分钟。
敏捷开发对于中小型项目还是非常适用的,不过我在实践过程中遇到两个问题:
1、重构 = 返工?
(1)需求和设计角度。
我对敏捷的理解,是允许需求人员在开发过程中不断地更新需求,而开发人员靠版本迭代来实现。迭代过程中,对于无法满足新需求的模块、以及前面迭代周期里性能不良的模块进行重构。从另个角度来讲,重构 = 返工,浪费了时间和人力。
如果有可能的话:
a. 还是要尽量让需求人员在项目初期就把需求定清楚,尽量减少在开发进行中进行重大调整的次数。不能因为敏捷了就放弃对需求制定的严格把关,想着反正迭代周期可以解决一切。
b. 设计中留下一定的可扩展性。这是个度,不同产品团队得自己把握。完全不留扩展性,在需求变更的时候往往不得不重构;而留下过度的扩展性,可能在前期浪费了大量时间而后面不一定用得着。
(2)项目后期、维护阶段的重构
我发现一个很有趣的事情,程序员一般不喜欢给维护别人的代码,给别人“擦屁股”。因此项目后期加入团队的程序员、和维护代码的程序员一般都会骂前任留下的代码如何垃圾,“需要重构”。实际上这是一个冠冕堂皇的陷阱。
一方面,重构后会出多少BUG还是未知数, 而且重新开发和测试并不能使客户掏出更多的钱为这些工作买单;
另一方面,重构后只是重构者自己后期做维护和开发轻松了,因为他在自己的代码基础上修改。对团队其他人来说,效率提升并不明显,因为他们需要重新熟悉新的接口甚至框架。
而最最严重的问题是,敢提出重构的程序员会认为自己的设计是最好的,前人留下的那是垃圾。因此即使他对代码重构过自己很满意了,一旦代码转手,这岗位上的下一任仍然会大骂垃圾并试图把这些代码再重构一遍, 然后只维护自己写的代码. 这会是项目进度控制和风险控制的无间地狱。
2、测试驱动开发
这里面有个很危险的陷阱。因为多数团队不可能把需求定得很细,需要在开发中让程序员和需求工程师边做边讨论细节,最后定下来,这种模式用图来表示是
需求 -> 测试
-> 开发
传统的V字型结构,但这里的箭号方向表示了产品需求理解的传递路线和方向。而如果测试驱动开发的话,结果是这样的:
需求 -> 测试 -> 开发
也就是说,开发者并不直接去和需求打交道,其工作目的不是实现需求,而是让测试能跑通。这样就要求测试团队,尤其是测试经理要对需求有很强的理解力,并且在需求制定者和开发团队之间承担沟通的责任。而国内的普遍情况是,重开发轻测试。体现在测试人员的学历要求和薪水普遍比开发人员低,有些草班子甚至在项目计划中不给集成测试和DEBUG留时间。所以在这种现状下,试图用测试驱动开发的方法,隔离开了开发团队对需求细节的直接把握,让能力较弱的测试团队来做这事,基本上就是——找死。
本文转自Walzer博客园博客,原文链接:http://www.cnblogs.com/walzer/archive/2009/12/12/1622372.html,如需转载请自行联系原作者