- 一个新的或者是基于以前的系统的框架结构,并在此基础上作出目标系统的设计和计划
在这个案例中,目标是明确的,叫色和成员都已经选定。他们会选择一些可以实现我们的项目目标的方法和工具,以及开发项目所必须的一些原则。由于这个项目组一贯主张敏捷方法,因此选择了极限编程(XP)和功能驱动计划的方式。
5.1 极限方法
极限编程(XP)是为了实现敏捷开发而选择的一套方法和原则。XP的发明者,Kent Beck和Ward Cunningham,都是敏捷宣言的发起人。
Astels对极限编程的方法和原则作了一个简洁的概括,
极限编程方法
正如敏捷方法关注的是人,XP方法以开发者、开发团队以及开发组和客户之间的共同方式为核心。
5.2 开发过程
NBIP项目组的每个人都要收集需求、修正软件结构和设计方案、做初步的测试和集成。由于开发环境引入和很多的工具,开发组成员还需要将安装、配置和数据恢复程序文档化。
传统的软件开发过程在这里被认为都是同等的程序,它们平行的进行,并频繁的同步,以便能够有迹可循。
为了能够对软件的设计和架构有一致的理解,每当一个主要的组件成熟的时候,这个部分的完成人将为项目组的其他成员组织一个讨论会或者培训,以便项目组的其他成员了解该模块的信息。这样的合作也提供了一个在模块的开发者和用户之间的协调机会。
5.3 小组实践
XP方法的最大特点是不断的鼓励开发组形成需求和理解。为了能及时了解需求的变化情况,敏捷方法要求经常和客户沟通,XP方法可以保证开发组随时都可以取得客户的支持。
在紧密的合作过程过程中,需求的反馈和变化都可以很快的被吸收。为了及时响应,开发组可以通过短时间的交互关注变化的情况。
NBIP通过每天的会议来同步他们的行为。为了保证例会在短的时间内结束,并能取得效果,项目组采取了“立会”的形式。虽有的参与者站着参加会议,在一个简短的会议后马上回到工作中。项目成员汇总前一天工作的成功经验和遇到的问题,并考虑在下一步工作中如何调整。项目组的每一个成员可以指导小组现在在做什么以及以后需要做什么,小组成员也可以自由的请求帮助,以便解决遇到的问题。既是一个开发者没有参加某一次会议,他也可以很快知道项目的信息。
这些工作是由开发者完成的,当产生了一些新的问题需要和客户沟通的时候,客户也可以很自由的参加这项工作。
为了能够更好的沟通,XP提供了很多共享资源。例如,项目组的成员都可以使用已有的仪器设备,并可以共享仪器操作界面的图片。
5.4 功能驱动计划
Coad在书中用了独立的一章概要的描述了FDD方法。这提供了一种一个相对大的、在技术和经验上有相当的差异的租来开发复杂的软件应用的方法。
FDD方法包括五个过程:
开发一个全面的模型
建立功能列表
基于功能做出计划
基于功能开发
给予功能构建系统
图 5.2 功能驱动方法的步骤
NBIP没有采用FDD方法,但是借鉴了FDD功能的概念,以及通过一系列功能制定计划和构建系统的优点。
功能是在需求获取过程受手工形成的。
功能是对于系统的某一个部分为了获得特定的结果而执行的一个操作的简单描述。
User stories是软件系统的用户执行的操作的自然语言描述。
开发组记录在同客户进行的例会上收集的User stories。通过这些User stories可以获得一系列的功能,这样可以一直保持克辉对于各种功能的理解。客户代表还可以帮助确定这些功能的优先级。
通过这种方法,开发足可以记录独立于实现细节和软件架构的用户需求。
为了和里程碑的概念区分,实现一个功能所需要的范围被称为粒度。FDD每个功能用不超过两周的时间实现,这样,对于实现功能列表的工作所需要的任务分配、工作量平衡、进度度量等都会比较容易实现。进度可以以单元为单位,这样既便于用户理解下一个版本所作的修改,也可以很方便的测试。
在FDD的方法中,基于功能的开发和构建会反复地进行,直到所有的功能都已经实现。功能计划仅仅提交目前的修改,说明哪些功能列表被实现,这些修改针对的是那个用户群。
按照他们的优先级和依赖关系,功能集排成一个实现序列。在每一个交互过程结束时,计划的变化都会反过来影响到那些已经实现的功能。这样的反复过程有助于更好的管理需求的变更。
6 外部协作
“在一个开发组中传输信息最有效的方法是面对面的交谈。”[1]
6.1 控制系统
NBIP选择了SICS(SINQ Instrument Control System,SINQ指令控制系统)作为奇迹与服务器的控制软件的基础。SICS是一个在PSI应用的操作简便、稳定、经过严格测试的平台。在Hauser的著作帮助我们确定了这个系统的标准和决定。
2004年上半年,NBIP项目组邀请了SICS的主要作者之一,Mark Koennecke参加了ANSTO关于开发的一系列研讨会和培训。除了介绍有价值的开发理念和SICS的使用,还介绍了一些有关SICS的进展。
这项协作的最直接的影响是,可以通过修改SICS的结构改站点的结构,通过一组驱动程序和脚背把对于站点的维护同核心系统分开。同时,PSI所使用的模块提供了很多可以被ANSTO使用的模块和例子。
只有SICS的服务器和设备驱动库可以同ANSTO的系统完全结合起来。每台仪器在虚拟的局域网上运行一个SICS服务程序,他可以通过TCP/IP和设备控制器以及数据服务器在局域网上交换数据。
这样的连接图可以使SICS服务器不必同设备分享内部总线,而是通过网卡连接。这样,服务器可以运行在仪器附近一个可靠的、独立的PC上,可以通过任意数量的客户机访问服务器,不管是在仪器附近还是在远程,只要有一定的授权,就可以访问。服务器是基于面向对象结构的,内嵌的Tcl解释器可以实现以下功能:
- 解析客户端发来的命令行指令
- 在服务器启动的时候执行初始化角本,定义仪器的配置参数
- 翻译和执行服务器发来的提供扩展功能的角本
- 翻译和执行用Tcl编写的客户角本
设备驱动程序是为各种特殊设备编写的,它们在启动时候通过一个角本为特定的仪器定义数据、组合方式和配置数据等。
通过提高系统的可靠性,开发过程中减少了测试工作,这样使对仪器的访问得到了限制,维持在了一个典型的水平。为了保证维护计划的弹性,需要增加新的设备以扩展系统的容量。
SICS的模块通过PSI和注册表同步。
6.2 客户端
基于Hauser提出的原因,NBIP很快选择了C/S的结构。
ESRF的软件工程师,Andy Gotz为我们的SICS控制的仪器提供了选择平台无关的框架的图形化用户界面客户端的指导。为了达到这些要求,通过一定的调研,我们很快决定选择基于Java的平台。
RCP(Eclipse Rich Client Platform,Eclipse胖客户端平台)天然集成了Eclipse开发工具,它为我们提供一套成熟的、可以客户化的、标准的、独立于操作系统的开发工具。我们把客户端软件称做Gumtree。Gumtree本身足够灵活,足以满足ANSTO的规范(GumNIX),完全有可能很成功地在以后的控制系统,例如EPICS或TANGO上应用。
6.3 其他合作的可能
敏捷开发提高了稳定开发的可能。发起人、开发组、用户都可以取得比较稳步的进步。[1]
只要有可能,开发组总是想办法提高系统的效率。
SICS可能为以后的站点提供同步的扩展。SICS服务器程序的核心部分是PSI(Paul Scherrer Institut,Paul Scherrer研究所)的Mark Koennecke开发的。
核心代码已经扩展到可以支持站点描述的设备和方法。伴随着系统的扩展,核心系统恩深已经被一个新的小组在一定程度上得到了修改。
开源思想在仪表控制客户端的开发中起到了重要的作用,开发组从开源工具获益,并因此提高了效率。我们的客户端软件,Gumtree在SourceForge注册为一个开源项目,对其他同我们的开发组同等地位的合作者开放,来自ESRF和PSI的开发者已经表示出了对我们的平台的兴趣。
由于采用了开放的态度,事实上,很多其他用户和程序员扩展的程序和工具被我们所采用并加入到我们的系统,例如Eclipse,他的插件,NeXus以及TANGO。
7 敏捷开发工具集
随着一个新的开发组的建立,必须选择一个开发方法论和核心工具集。这一定要是简单易学的工具,并有比较高的效率可以在一定范围的设备上建立稳定的方案,还要有充分的扩展性,以便能够满足仪器科学发展的需要。
开源集成开发环境
Eclipse是一个集成开发环境和应用程序平台。除了为项目提供Java和C/C++的编辑工具,Eclipse的插件还给了我们同我们的源代码管理工具(cvs或者vss)集成的图形化的和基于菜单的工具。
- 源代码管理工具(cvs或者vss)
- 调试工具(gdb)
- 源代码文档化工具(javadoc和doxygen)
- 外部编辑器(针对Tcl, perl, Python等)
插件也提供了本地功能的支持。
- 针对java和C/C++的优化工具
- java单元工具
- 用SQL输出建模的数据库环境
- UML支持(自行开发)
- 可执行程序的分析工具(Hyades)
此外,Eclipse还有很多其他免费的或者商务的插件,这些插件为软件提供了扩展的功能或界面。
整个开发组都使用相同的集成开发环境,不论是C/C++或者Java的开发,调试,测试,还是形成相关的文档。这样提高小组成员交换工作的可能性。
其他基于社区的工具
文章来源于领测软件测试网 https://www.ltesting.net/