功能驱动开发FDD的探讨

FDD是一种模型驱动开发的软件过程,和XP一样是敏捷软件开发方法的一种。FDD的主要思想是对功能的实现,也就是说FDD是以实现功能为目标。把系统分解成一个一个的功能集,每个功能集又习细分为具体的功能。比如说用户管理是个功能集,而用户管理又包括了增加用户、删除用户等具体的功能。域建模是其系统设计的方法,用到的是color uml,也就是常说的四色原型,这个目前已经有不少工具支持,比如borland的together。下面主要探讨一下其开发过程。

FDD的的开发过程分为5个阶段,分别是开发总体模型、创建功能列表、根据功能制定计划、根据功能进行设计、根据设计进行实现构建。

1、开发总体模型

此阶段需要领域专家的参与。主要是收集系统的功能需求,然后使用四色原型进行域建模。个人认为此阶段应该得出系统的架构设计。根据FDD的官方解释,该阶段需要主要的类以及类的关系、类的主要属性、方法。所以应该是要得出系统的架构设计图。此阶段的结果包括了:非正式的功能列表、系统域建模模型(也就是系统架构图)。

2、创建功能列表

在前一阶段,已经完成了系统功能的需求分析,并设计出了系统的域模型。这一阶段需要细化功能,主要是把域模型中的moment-intervals转换为功能集的形式。个人认为此阶段应该完成概要设计。阶段成果包括了:完整的功能集列表、概要设计书。

3、根据功能制定计划

对功能列表进行组织、整理,按优先级进行排序,制定完成的日期,把功能分配到具体的实现人。这个时候需要指定每个类的负责人以及功能集的主要程序员(就是team leader,呵呵)。每个功能集的完成周期一般是不超过2个星期,如果超过了2个星期,应该再进行细化。因为其强调的迭代周期是2个星期。本阶段的成果主要是项目开发计划。

4、根据功能进行设计

项目经理和上一阶段指定的各个功能集的主要程序员一起对功能进行详细设计。个人理解应该是在域模型的基础上进行分析、设计,得出分析模型、设计模型。但是也不一定要如此全面,也可以直接进入设计模型。根据设计的结果制定出项目的里程碑。这里会有一个设计评审的环节。本阶段的成功应该包括了:详细设计、项目里程碑计划。

5、根据设计进行实现构建

按照设计进行编码实现,由程序员实现各自负责的类。在代码完成后有必要的组织代码复查、评审。在测试和检查通过后检入到配置管理库中进行构建。第5和第4阶段是一个迭代的过程,迭代周期一般为2个星期。这样经过不断的迭代,不断的实现功能集中的功能。每一个里程碑的时候进行评估、回顾。并考虑下一个里程碑的继续,直到最后项目的完成。

这里面有一个问题,就是在开始设计、实现的时候如果又有新的功能要增加,这个时候是应该直接考虑进来还是放到下一个计划制定中去。个人觉得应该采用后一种方法。这个时候需求、计划都已经确定了,如果把新的功能又进来会对现有的计划执行以及系统的设计实现都会有影响,应该放到下一个版本中去考虑。也就是说会再从第1步开始的5个阶段的执行。

一点自己的思考、心得。希望与大家共同探讨。

希望 有实践经验的同学谈谈。
FDD 和MDA如何结合?