敏捷开发方法在澳大利亚核科学与技术协会
仪器控制软件中的应用
P.V.Hathaway, T.Lam, N.Hauser, A.Gotz, F.Franceschini
Bragg 研究所, ANSTO
“让有能动性的人去做项目。给他们合适的环境,满足他们必须的条件,
并相信他们能把工作做好。” [1]
1 摘要
ANSTO(Australian Nuclear Science and Technology Organisation,澳大利亚核科学与技术协会)的中子波仪器项目最多控制八台和特定辅助设备相关联的仪器。该项目预计在2006年中期完成。
这个系统的控制软件的需求由一个国际委员会提出,软件架构将取决于来自于至少三个洲的专家的建议。项目的成功在很大程度上依赖于开发队伍的沟通能力,以及他们对于突发需求和资源变更做出适当反应的能力。
同传统的有严格的文档、确定的计划和过程的软件开发方法不同,敏捷软件开发方法更强调对于项目目标的持续逼近、开发者的个人能力,以及小组成员之间的沟通。
本文探讨了在科技组织中应用敏捷开发方法的一些主要原则,并说明了到目前为止这些原则在中子波仪器项目中的效果。
2 科技组织中的软件开发过程
“每隔一段时间,开发组反思一下如何能够提高效率,
然后相应的调整以后的开发过程。” [1]
目前的软件工程通过一些要素来界定软件的规模,这些要素至少包括时间、范围、包括预算在内的各种资源。在项目开展的过程中,这些要素经常会有一些突发的变化,某一个要素的变化往往会对其他因素造成很大的影响。对这些变化的不成功的处理往往会导致整个项目的失败。
科研项目往往会有更多的变更,允许项目根据以后研发的情况做出调整,甚至为了迎合项目成果的变化重新定义项目的范围和资源。在项目规划的时候,往往对项目的情况作出最坏的打算,允许项目花费比收益高很多的成本,或者仅仅取得远远比它可能获得的效果少得多的效果。
目前,科研软件开发的成功往往在很大程度上依赖开发者的个人能力,以及一个在这个领域积累了多年经验的开发小组。这种情况在已经发布的科研软件中占有越来越大的比例。
下一代的项目需要的是将开发者的技术经验和他们应用工具的能力尽量的结合起来。
3 敏捷软件开发宣言
过去十年中提出的很多软件开发方法都是建立在开发者的实力的基础上的。他们认识到了个人的贡献,密切的和频繁的交流,以及和软件本身多次的交互的重要作用。其实,软件本身才是项目的唯一目标。
这些方法论的提出者和实践者在2001年组织了专门的会议,提出了他们对于这些方法的宣言:
我们试图通过实践或者帮助别人来探讨开发软件的更好方法。
通过探讨我们达成一致:
个人能力和人际关系 胜过于 过程和工具
可正常工作的软件 胜过于可理解的文档
和客户合作 胜过于 合同谈判
对变更做出反应 胜过于按照计划开发
一般,别人关注右面的项目,而我们更关注左面的。
此外,开发组根据宣言制定了一些原则,并把它们形成文档。这些原则和一般的开发方法的主要区别如下:
- 敏捷方法更强调在预测的基础上的变化。设计和构建的计划中包括了对于需求、设计概念等的变更的管理,并通过有效的沟通把风险降低。
- 敏捷方法更强调人而不是过程。开发者被认为是具有专业技能和主动性的技术专家。小组中最适合做出计划的人来充当管理的角色。客户被认为是评判系统应该如何更有效运行的裁判。
被称为敏捷的方法很多,例如XP,功能驱动程序设计,Scrum, Crystal,以及渐进软件开发。这些方法在各自一定的领域内发挥重要作用,因此很难成为对所有项目都适用的方法。
Fowler认为,渐进的过程适合于以下类型的项目:
- 需求不明确,或者不稳定。
- 有责任心和主动性的开发者。
- 客户了解项目的情况,也愿意参与项目。
此外,科研组织内很多项目是有小团队完成,组织内有比较好的合作氛围,开发内容会警察尕省变化,这些都很适合使用敏捷方法。
4 案例学习:中子波仪器项目
"朴素—把工作效率尽量提高的艺术—是最基本的。" [1]
NBIP(The Neutron Beam Instruments Project,中子波仪器项目)的主要任务是为一个正在准备实施的仪器提供一个先进、稳定、可扩展的控制系统,并能够积累操作员的经验。这个项目的特殊之处在于,开发组是在没有硬件设备,甚至有时连元器件都没于的条件下开始工作的。
目前,准备各个仪器所需要的组件正在快速的进行,在当前的条件下开发一个一般性系统的时机已经成熟。最关键的问题是,随着仪器设备的到位和安装,必须同步开发相关的验证软件。控制系统必须能够同八台完全不同的仪器和辅助设备集成使用。
为了实现这些目标,必须开发以下适用于所有的仪器的系统:
- 控制系统:一个公共的核心控制系统,可以是应所有的仪器。
- 用户界面:在公共框架的基础上可以用户订制的界面。
- 开发方法、实践和工具:确保这些系统的开发是可控制的,能够在一定的时间内实现。
最终我们选择了一套已有的软件模块,一些开源工具,传统的软件开发方法和敏捷开发技术。
5 NBI项目管理和软件开发方法
“只有自律性强的组织才可能产生出最好的软件架构、需求、设计。”[1]
NBI项目作了严格的计划,详细的预算、风险控制,进程跟踪以及文档管理,这些使得该项目成为一个非常成功的案例。在实现这些需求的同时,项目组希望该项目的开发过程是最好的。
大多数软件开发都包括一些共同的部分,例如:
- 目标
- 具有不同背景、完成不同任务的角色
- 具有足够的经验和技术,可以完成这些任务的团队
- 为开发系统建立的一组正式或非正式的规范
- 一套技术,例如开发语言、工具、组件以及用于开发目标系统的其他产品