论文关键词:轻量级迭代软件体系结构基于场景分析层式系统
论文摘要:软件系统的体系结构是在对系统的需求分析后确定的,他决定了软件系统的质量,因此在设计系统之初就应该重视系统的体系结构。结合某银行系统的部分功能系统设计,提出轻量级迭代分析方法,通过对系统场景分析,找出系统各个组件的基本关系,从而确定系统的体系结构。强调了软件体系结构在软件开发过程中的作用,并提出一种有效的分析设计方法。
1引言
软件体系结构是软件工程的一个重要研究领域,他提供了软件系统的高层抽象。随着软件系统规模越来越大、越来越复杂,整个系统的结构和规格说明显得越来越重要。使用体系结构模式作为软件系统结构设计策略,是提高软件复用程度和降低软件设计复杂度的一种重要的方法。
对于软件项目的开发来说,一个清晰的软件体系结构的建立应位于需求分析之后,软件设计之前。在建立软件体系结构时,设计者主要从结构的角度对整个系统进行分析,选择恰当的构件、构件间的相互作用以及他们的约束,最后形成一个系统框架以满足用户的需求,为软件设计奠定基础。
然而,在系统开发的初始阶段就设计好系统的最终结构是不可能的,也是不现实的,因为需求还在不断地发生变化。需求总是在变化的,并且不完整]。所以,一个好的软件体系结构应该具有创建或再创建功能、用户界面和问题域模型,进化原型以满足新的软件需求。
因此,在软件项目设计之初,选择合适的体系结构是必要的。WwW.133229.COm在本文中提出一种简单迭代的方法,对需求轻量迭代,通过分析系统的功能需求和非功能需求,构建合适的体系结构。不同于craiglarman的rup过程口],通过迭代开发,分析系统的细节,逐步设计出完整的系统,而是经过轻量级迭代分析,以得出系统应该具有的体系结构属性为目标,是对系统整体属性的分析,而非细节的分析。整个过程和结果为选择设计合适的体系结构做必要的准备。采用场景分析作为主要的分析工具,得到各个场景的主特点、从特点。
2方法
不同的体系结构根据适合情况不同其特点也不同。如pipe层式等各有优缺点口]。因此在开发设计初始,应对系统分析,选择体系结构。而这种分析不是细节的,而是着重于找出组件与组件的关系,及连接子。系统转接处应该是主要的。分析要从需求人手,对需求分类,即是功能性需求还是非功能性需求。在分析的过程中,采用基于场景的分析。主要的难点是需求如何划分可以得到体系结构属性;再者,如何分析才能使体系结构的特点同系统的特点关联起来。
3系统业务
在某银行的“新一代核心业务系统”部分系统设计中采用了轻量迭代的方法取得了良好的效果。图1是轻量级迭代的主要流程整个银行业务系统是由核心一前置一前端的组成的。前端系统即是银行的柜员系统(teller系统),是银行柜员直接使用处理客户业务的系统。teller系统是在已有的fsframe平台基础上开发实现的,是一种bs的实现方式。在fsframe平台中,普通的交易的业务逻辑是由js实现的,对于较为复杂的处理是由java程序编写的服务完成,teller系统除了处理各种业务外,还要实现复杂的打印功能。在银行业务中需要打印很多材料,如存取款凭条、外币兑换水单、客户开户明细、交易流水等。这些打印材料内容繁杂,如果全部在其相关业务模块中实现,不但工作量大,而且不灵活,不能按客户的不同需要分别实现。因此,需要设计一个比较通用的方式来实现打印功能。
4打印系统设计
通过对系统做轻量级的迭代分析,总结分析得出该系统设计及各部分之间的关系特点,从而找一种合适的架构。利用场景分析的方法对这个打印系统的轻量级迭代分析,发现打印模块的设计比较复杂。首先系统需要打印的业务比较多,且比较分散,难以统一管理;其次,不同业务的打印格式也是不尽相同,而且随着需求和设计的反复,打印材料的格式还要增加;再者,现在的平台环境也限制了打印功能。最终要通过js调用打印功能,而在具体实现打印功能的时候,由于打印机厂商所提供的库所限制,需要使用c“,delpthi等高级语言。
根据以上的简要需求点,对该系统进行分析。这个打印系统的特点应该是模块与模块之间的耦合性不应该太强,个别的功能模块是对少数模块依赖性比较强,并非所有的模块都相关。而且每个模块应该有很好的可扩展性,即能够适应需求的变化,鉴于以后功能扩展的必要,对模块的扩展修改,要尽量屏蔽其他模块的内部变化。模块与模块之间的调用关系应该是比较清晰的。我们把这个分析过程称为体系结构组件需求分析过程,模块也对应于体系结构中的组件,如图2所示。
根据以上分析得出层式体系结构比较适合作为这个系统打印部分的架构设计。
层次式系统的特点是分层组织,每层为其上层通过服务,而接受其下层通过的服务。在某些层次式系统中,内层对除相邻外层之外的所有外层是隐藏的(不包括那些经过仔细选择供出口的功能)。他的优点是支持基于抽象层次增长的设计,将复杂系统划分成系列的步骤。支持增强,由于每层只同上下两层交互,对一层功能的改变至多只影响两层。支持重用,允许一层的多个实现进行互换,只要他们对相邻层有相同的界面即可。
(1)设备驱动层
设备驱动层是对现有外部设备所提供的功能所需要发送的指令的管理,对很多设备,需要发送指令进行交互后,该设备才能实现所提供的功能。这样,通过将这些指令保存在驱动文件中,在使用这些功能时再提取保存的指令并发送到设备即可完成对设备的操作。
(2)设备定义层
设备定义层是将终端上连接的全部外部设备信息保存到配置文件里面,对这些已进行登记的设备,在程序中才是可以使用的,如果没有进行登记,则在程序中不能使用。
(3)表定义层
表定义层主要是在对一个任务执行的过程中,可能需要用到一些外部数据,这些数据是保存在关系表中,通过从这些表中提取相应的数据,即可完成任务。该层主要提供外部数据的获取并应用的功能。
(4)应用调用层
应用调用层主要是提供给应用程序一个统一调用的度,系统运行十分流畅。以下为综合视频数据显示部分程序:
intx,y;
intr,g,b;
intw,h;
unsignedchargrab_data;
grab.data=(unsignedchar*)vd一>getdata();
if(vd一>iscapdone()一一1)(
’qpainterpaint=newqpainter(this);
paint一>end();
paint一>begin(tab.2);
qlmageimg;
qrgbpoint;
w—vd一>getw():
h—vd一>geth();
if(img.create(w,h,32,0,qlmage::ignoreendian))
{
·
for(x一0;x<h;x++)
{
for(y=0;y<w;y++)
{
b一(*(grab
_
data++));
g一(*(grab_data++));
r:(*(grab_data++));
point一(qrgb*)img.scanline(x)+y;
point—qrgb(r。g,b);
}
}
}
paint一>drawlmage(0,0,img);
vd一>startcap();
)
6结语
上述基于intelxscalepxa27o处理器的嵌入式开发平台liod上实现的usb摄像头视频采集系统,为了进一步观察采集的图像效果,笔者通过已在此平台上实现了的web服务器把采集到并保存为bmp的图像文件通过网络传输到pc机上进行显示,并对所显示的图像效果的分析,再回馈到采集程序中重新设置video—picture中的参数,如亮度、对比度等和voide_mmap中的分辨率,以使采集到的视频图像显示效果达到最佳。