l 在TDD中,按照Failed -> Passed –> Refactoring的步骤进行,写完Test Case并在写Code或改Code前,应该先运行一下Test Case,这时应得到一个Failed或Error的结果,以确保Test Case不是在任何情况下都会Pass,以确保它确实能验证程序的结果。
l 最好用小步伐的节奏进行TDD。
如果要写的程序有10个function要完成,应该按照以下的方式进行:
写function1的Test Case -> 写function1的Code并使Test Case通过 -> Check-in -> Code Review/FingBug/Refatoring -> Check-in -> 写function2的Test Case…
这样的好处是:
n 每步的范围越小,测试、查错和Roll Back越容易,也有利于最简设计和最简实现。
n 完成的部分完全可交付。
l 以Iteration为单位进行计划(Planning)、开发和跟踪(Tracking)。定义Iteration的原则是:
n Simple:一个Iteration不应能被拆分为Task,如果可以拆分,应考虑继续拆分为若干个Iterations。
n Clear:Iteration的需求/User Story应该是清楚的、确定的。如果一个Requirement Point部分确定,部分未确定,而已确定的部分已可独立开发,应该把确定的部分定义为一个Iteration,减少未确定部分对整个进度的影响。
n Independent:一个Iteration应相对独立,不应与其他部分有太多的依赖。
n Short:一个Iteration不应超过3周。
我们应该结合这4个原则进行Iteration定义。
l 不管是auto test还是manual test,都是testing的手段而已,Testing的有效性取决于Test Case的质量和覆盖率。可以通过以下方法提高Testing的有效性:
n 邀请Customer提供或者和他们一起制定Functional Test Case。
n Pair Programming
n 如果不能进行Pair Programming,也必须在前期和中期与其他同事Walk Through或讨论Test Case,减少遗漏。
l 如果Customer不能配合我们进行短Iteration开发,不妨把Release分为Internal Release和External Release。对外发布按照Customer的要求和步伐,而内部我们按照自己的步伐进行持续集成和测试。
l XP Planning的一个重要原则:
One of the most important principles in planning for Extreme Programming is that the dates are hard dates, but scope will vary.
当Deadline临近,我们已确定无法完成本Iteration计划的全部时,应该及时和Customer沟通,把剩下的部分进行Prioritize,把最重要的、可在Deadline前完成的部分先完成,按时交付,把未完成的部分定义为新的Iteration,并把它和其他所有未开始的Iteration一起进行Prioritize。这样可避免一味延时带来的恶性循环,也可确保整个Project最重要的部分被优先完成,因为很有可能,未完成的部分并不那么重要。