多项选择题

A.把项目拆分为多个阶段的小项目,多次交付和验收,尽早发现不符合需求之处
B.拥抱需求的变化,而不像瀑布那样通过详尽的文档约束需求不可变
C.需求区分优先级
D.极限编程倡导测试驱动开发(TDD),即开发人员先写测试代码,后写业务代码