【发布时间】:2010-12-19 09:39:53
【问题描述】:
我是敏捷的坚定支持者,但我的一个朋友(他还不了解敏捷——他是管理型 ^^)问我如何规划和开发一个复杂的分布式项目,其中包含一个数据库层、通信层、接口,并集成到嵌入式设备中。
敏捷方法强调早期发布和迭代的概念,但是在一个项目的场景中,有许多相互连接的组件都需要功能才能使整个事情正常工作,因此很难发布早期版本无需处理所有组件。敏捷将如何帮助我的朋友?他将如何最好地利用它?
【问题讨论】:
我是敏捷的坚定支持者,但我的一个朋友(他还不了解敏捷——他是管理型 ^^)问我如何规划和开发一个复杂的分布式项目,其中包含一个数据库层、通信层、接口,并集成到嵌入式设备中。
敏捷方法强调早期发布和迭代的概念,但是在一个项目的场景中,有许多相互连接的组件都需要功能才能使整个事情正常工作,因此很难发布早期版本无需处理所有组件。敏捷将如何帮助我的朋友?他将如何最好地利用它?
【问题讨论】:
将您的第一次迭代专门用于架构设计,包括识别必要的组件以及定义它们之间的关系和通信。
一旦您清楚地了解了组件的交互方式,就可以构建每个组件的骨架。也就是说,实现只有通信部分的“存根”组件,其余的功能什么都不做或返回测试数据。也有专门用于此任务的交互(包括测试组件通信机制)。
然后您可以计划迭代,以适当的顺序充分开发每个组件,从而使系统能够以有序的方式增长。
【讨论】:
如果您不能将大型项目分解成有用的较小部分(即启用某些用例),那么敏捷在这个项目中可能不会对您有太大帮助。您可以选择结对编程、重构等技术,但总体规划确实以传统方式完成。
【讨论】:
不太可能每一层都需要完整才能被其他层使用 - 例如,持久层最初可以将对象序列化为文件,并在需要时转换为使用数据库。我会考虑实现初始故事所需的每一层的最小值,并随着系统的增长而充实以添加功能。
以这种方式扩展系统意味着您只实现您需要的功能,而不是您认为在未来某个不确定时间可能需要的所有功能。
【讨论】:
我公司的团队面临同样类型的问题。我们正在构建具有大量移动部件和架构层的项目,这使得早期创建工作产品变得困难。此外,通常有一些专业资源需要安排或与团队稍微不同步。我们采取的一些方法如下。这一直很有挑战性,但这些方法似乎有所帮助。
尽可能垂直构建
将基础架构与产品分开
我们的早期冲刺通常以基础架构/架构为中心。例如,线程子系统、性能监控、通信和测试框架。
【讨论】: