开篇:润墨网以专业的文秘视角,为您筛选了八篇软件体系结构范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
关键词:体系结构;分层;OSI
中图分类号:TP311 文献标识码:A文章编号:1007-9599 (2011) 07-0000-01
The Hierarchy of SoftwareArchitecture
Li Qiang,Yang Wenqing
(Jiangxi BlueSky University,Ministry of Public Education,Nanchang330098,China)
Abstract:This article mainly introduces software architecture the basic thought that carries on the layer division,has comprehensively analyzed the architecture division layer necessity,the corresponding rules and the good and bad points.
Keywords:Architecture;Stratify;OSI
20世纪90年代以来,随着计算机网络技术的发展和成熟,特别是Internet的普及,将应用扩展到局域网、广域网,甚至Internet已成为用户的普遍需求,另一方面,随着应用的拓展和系统规模的扩大,计算机软件的复杂程度也在不断地增加,软件体系结构在软件设计和开发过程中所起的作用越来越重要,采用层次式软件体系结构的设计思想也越来越受到人们的重视。
一、软件体系结构的概念
虽然软件体系结构已经在软件工程领域中有着广泛的应用,但迄今为止还没有一个被大家所公认的定义。许多专家学者从不同角度和不同侧面对软件体系结构进行了刻画,其中一个较为典型的定义是由Mary Shaw和David Garlan所提出来的,他们认为:软件体系结构是软件设计过程中的一个层次,(即不但软件体系结构具有层次性,从整体上来看软件体系结构本身也是作为软件设计过程中的一个层次)只不过这一层次超越计算过程中的算法设计和数据结构设计。
二、软件体系结构的层次
“分层”可将庞大而复杂的问题,转化为若干较小比较易于研究和处理的局部问题。分层是表示将功能进行有序的分组:应用程序专用功能位于上层,跨越应用程序领域的功能位于中层,而配置环境专用功能位于低层。层的数量与组成取决于问题领域和解决空间的复杂程度。
从整体上看一般可以分为三个层次:客户端层、中间层和数据源层。
1.客户端层是将数据呈现给用户或处理用户输入的应用程序或系统一部分。客户端也称为前端,它并不执行数据函数,而是通过输入向服务器请求数据,然后以一定的格式显示结果。
2.中间层是用户接口或Web客户端与数据库之间的逻辑层。
3.数据源层是用来控制你程序的流程。
(一)分层规则
分层是从逻辑上将一个完整的系统划分成许多个子系统的集合,而层间关系的形成必然要遵循一定的规则。通过分层,可以限制子系统间的依赖关系,使系统以更松散的方式耦合,从而更易于维护。其具体规则如下:
1.可见度。各子系统只能与同一层及其下一层的子系统存在依赖关系。
2.易变性。最上层放置随用户需求的改变而改变的元素。最底层放置随实施平台的改变而改变的元素。中间的夹层放置广泛适用于各种系统和实施环境的元素。如果在这些大类中进一步划分有助于对模型进行组织,则添加更多的层。
3.通用性。一般将抽象的模型元素放置在模型的低层。如果它们不针对于具体的实施,则倾向于将其放置在中间层。
分层反映实体模块之间的依赖关系,层数并不是越多越好,适当最好。对于小型系统,三层就足够了。对于复杂系统,通常需要5-7层。(二)采用层次系统的优缺点
层次系统有许多可取的属性:
1.系统的开发和设计可以逐步的分层次的进行,从底层的简单的功能逐步建立高层的复杂和抽象的功能。这样就可能把一个复杂的系统按递增的步骤进行分解;
2.支持功能增强,因为每一层至多和相邻的上下层交互,因此功能的改变最多影响相邻的上下层;
3.支持重用。只要提供的服务接口定义不变,同一层的不同实现可以交换使用。这样,就可以定义一组标准的接口,而允许各种不同的实现方法。
但是,层次系统也有其不足之处:
1.并不是每个系统都可以很容易地划分为分层的模式,划分清晰、逻辑上一致的层次是非常困难的(OSI的失败和TCP/IP的成功说明了这一点);
2.严格的层次调用结构会降低系统的性能;
3.很难找到一个合适的、正确的层次抽象方法。
(三)分层协议的体系结构
(Open Systems Interconnection)简称OSI,OSI标准采用的方法是将整个庞大而复杂的问题划分为若干个容易处理的小问题,这就是分层的体系结构方法。OSI是分层体系结构的一个实例,每一层是一个模块,用于执行某种主要功能,并具有自己的一套通信指令格式。根据分而治之的原则,OSI将整个通信功能划分为七个层次,划分层次的主要原则是:
1.网中各结点都具有相同的层次;
2..不同结点的同等层具有相同的功能;
3.同一结点内相邻层之间通过接口通信;
4.每一层可以使用下层提供的服务,并向其上层提供服务;
5.不同结点的同等层通过协议来实现对等层之间的通信。
虽然OSI在法律上已经成为国际标准,然而却由于OSI的协议实现起来过分复杂,且运行效率很低以及OSI的层次划分也并不太合理,有些功能在多个层次中重复出现等诸多原因使得OSI并没有得到市场的认可。TCP/IP是四层的体系结构:应用层、运输层、网际层和网络接口层。然而TCP/IP最下面的网络接口层也并没有具体内容。因此往往采取折中的办法,即综合OSI和TCP/IP的优点,采用一种只有五层协议的体系结构,将TCP/IP的网络接口层又分为数据链路层和物理层。
参考文献:
[1]刘真.软件体系结构――21世纪高等学校规划教材[M].北京:中国电力出版社,2004
关键词:软件体系结构;案例教学;实践教学平台
中图分类号:G642 文献标识码:B
建大厦必须进行设计,而建平房则不需要设计。传统观点认为需求分析是项目开发成败的一个关键,项目的失败或夭折主要是由于需求分析不充分造成的,但对如何做好需求分析却苦无良策。在软件开发的早期,软件代码量不大,对设计重要性的认识也不充分,程序员可以设计、编码一肩挑,但随着软件规模的扩大,人们在大型软件的开发面前显得力不从心,因而产生了软件体系结构理论。现代观念认为通过需求与设计之间的迭代,并根据设计建立系统原型,能够较为充分地理解需求并得到满足需求的设计。
软件体系结构的设计在中大型软件项目中更易于显示它的意义,这也是软件体系结构课程产生的原因。“软件体系结构”作为高等学校软件工程专业的一门核心课程,是根据人们的软件设计经验总结出来的理论与实践相结合的课程。“上梁不正下梁歪”,体系结构的设计是现代软件开发中最为重要的一环,它设计得是否合理直接关系到软件的成败。随着软件规模变得越大越复杂,软件开发对软件架构师提出了更高的要求。
1课程特点与面临的问题
1.1软件体系结构课程的特点
(1) 软件体系结构的设计原则、技术、方法较为抽象
软件体系结构的设计原则、技术、方法可以应用在不同的软件项目中,其目的是为了在给定的时间、经费等条件限制下设计出高质量的软件,它们位于所有具体项目之上,针对全体软件项目,因而是抽象的。
(2) 软件设计的效果体现在软件开发的后续阶段中
软件生命周期包括可行性分析、需求分析、设计、编码、测试、运行维护等多个阶段,设计对软件成败的影响往往在这个阶段反映不出来。设计阶段做出的一个决定,可能要到编码、测试甚至是后续的维护阶段才能显现它的效果。
(3) 软件体系结构的设计往往是折衷与权衡的产物
软件中的一些质量要素经常是相互冲突的,即软件的质量要素之间既有正相关,也有负相关,因此在实际的软
件系统设计过程中,必须根据具体情况对各种要素进行折衷与权衡,从而得到总体上满足用户要求的软件。怎么折衷和权衡,必须结合具体项目,根据项目的实际情况去把握。
1.2教学中面临的问题
(1) 软件体系结构的抽象理论容易使学生感到枯燥乏味
由于授课对象是大三学生,项目开发经验有限,学生很难在头脑中将软件体系结构的抽象理论和实际联系起来,因此较难对这门课产生兴趣。在接受抽象的理论时,容易产生枯燥乏味的感觉。
(2) 学生缺乏完整项目的体验
学生参与的课程设计实践一般仅限于小型项目,很少有机会参与软件开发和运行的全过程,难以体会到软件体系结构设计中关于正反经验的总结。例如,可维护性是软件的一个重要质量指标,但学生很少有机会去参与真正的软件维护,所开发的系统大多只是给任课教师大概地检查一下,一般不会交付使用,没有经受用户的真正检验,设计里的很多错误被隐藏起来了。但学生看不到错误,就不能对这些错误进行维护,也就不能体会到设计阶段工作对可维护性造成的影响。而且对于经验欠缺的多数学生来说,软件设计中的折衷与权衡难以想象,不容易理解和把握,包括各种质量属性之间以及与很多非技术因素的折衷与权衡。
如何搞好这门课的教学,是摆在教师面前的一道紧迫课题,对教学方法、手段和个人经验都提出了很高的要求。我们提出通过本课程学习要达到以下三个目标:
(1) 帮助学生了解软件架构的基本概念,初步掌握中大型软件系统构架的分析与设计方法。
(2) 使学生了解软件系统的成败不仅取决于用户的功能需求是否被满足,还和各种外部约束条件有关,如设计师的素质与经验、开发组织的目标以及政策法规限制等,从而提高软件设计的基本素养。
(3) 引导学生认识系统的性能、可用性、安全性等质量属性都是受软件构架制约的,或者说这些属性的实现影响着设计师的设计选择。
2强化案例教学,建设符合学生接受能力的案例
本课程较为抽象,要求学生有一定的软件设计经验,为了弥补学生在设计经验上的不足,我们在本课程中采用以案例教学为主的方法和手段,尽量将理论讲授和实际案例结合起来。案例选取有三方面的要求:一是要选取学生能听得懂、能理解的案例,案例本身不能过于复杂,超出学生的可接受范围;二是案例不能太简单,应稍高于学生的现有经验,这样才能提高学生的学习兴趣并帮助学生提高;三是案例要和每阶段的教学内容相匹配。经过几年的教学积累,我们以实际系统为基础,建立了多个符合学生理解和接受能力的案例,如软件学院的研究生选课系统、软件学院的图书管理系统、学生宿舍管理系统、订票系统、软件学院校友管理系统、超市进销存系统等。这些系统都是真实的,也是学生经常接触的,有很强的参照性,学生容易接受。我们还把这些系统作为课程实践的选题,提供原有设计方案和源代码,让学生使用并提出意见,找出原先设计的不足并改进,大大提高了学生实践的感知能力。
在学时分配方面也做到向案例教学倾斜,本课程总共48学时,除了8个学时的专门案例分析和8个学时的上机实践,在课堂理论教学时还穿插大量案例,案例教学占课堂授课比例的40%左右。我们还采用启发式教学手段,在课堂上留有一定时间专门就案例展开讨论,鼓励学生通过争论来比较和掌握软件构架设计方。例如,学生都实际使用过选课系统,选取该系统作为案例,学生就很乐意参与讨论并给出建议。这些手段的采用取得良好的教学效果,加深了学生对抽象的软件架构设计思想的理解。
3教学内容与教学手段
(1) 激发学习兴趣和热情
我们从课堂气氛、内容选择、语言表达三个方面入手。在营造课堂气氛方面,讲解时尽量营造探究气氛,鼓励学生参与讨论,避免学生被动地听,增强教师与学生的交流互动。在内容选择方面,选一些容易引起学生兴趣的素材。例如,在讲到架构风格时,我拿了一个自己编写的对战游戏程序给学生看,由于这种游戏学生普遍都感兴趣,因此在讲解架构风格时,学生注意力都很集中,收到了较好的教学效果。语言表达方面,在讲课时多用一些形象、有趣的事例或类比来说明或代替那些抽象、枯燥的理论陈述。例如,在谈到满足不同质量属性需要权衡时,列举了斑马为什么有黑白条纹的例子。
(2) 注意与其他课程的衔接
软件体系结构的教学内容与软件工程、软件项目管理以及软件文档写作等课程紧密相关、甚至有部分重叠,我们针对不同课程的特点进行了妥善安排,在教学内容上注意相关课程内容的相互渗透。大三上学期首先讲授软件工程,使学生对软件工程有一个初步认识,紧接着是软件文档写作的训练。大三下学期软件体系结构和软件项目管理同步讲授,要求学生运用软件体系结构的理论、技术和方法进行软件设计和评审,同时运用项目管理的知识组织项目开发,最终验证软件设计的合理性。设计和实现的题目鼓励沿用软件工程课程上所用的项目、人员组成也鼓励保持一致,使学生对某个项目能保持一个学年左右的长期接触。
(3) 建立以设计师为主的开发团队
以小组(四人为一组)为单位开展课程实验,每个人扮演不同角色。首先他们是一个设计师团队,但其中要有一人负责,这也是软件设计的一条重要原则;其次,还有项目经理、需求分析师、程序员和测试员等角色需要担当,也就是说每个人要承担多个角色。实验综合运用软件工程、软件体系结构设计、软件文档写作、软件项目管理以及其它课程的知识,来体会如何围绕软件体系结构进行开发,体会软件体系结构设计的原则和方法。
(4) 建立实践教学平台
软件体系结构的教学应使学生通过对这门课的学习,加上对其他专业知识的综合运用,能够在实际工作中应付真正的项目设计,因此有必要让学生参与一个长期(不少于一学年)的软件项目。为此我们设计多个规模较大的、完整的软件项目作为实践教学平台,这种项目包括分析、设计、实现、软件维护、软件重用、对现有软件的扩展,以及团队合作、项目管理等等。让学生长期接触某个项目,使他们可以在这个平台上观察和动手实践自己的软件设计方案,或者对现有方案进行改进,这样既有机会获得正面成功经验,也有机会得到反面失败的教训。
实验与教学进度保持匹配,使学生在实验中主动运用所学设计理论,并和传统设计方法进行对比,帮助学生迅速地把所学知识转换成实际的软件设计能力。设计过程要求采用Raional等工具进行分析和设计。
课程结束时,安排专门的时间,由每个团队向全班同学演示自己的实验成果,并由学生和教师共同对实验结果进行评价和给分,极大地调动了学生的积极性,评分过程中的议论则帮助学生进一步加深了对软件架构设计方法的理解。
团队提交的实践结果:需求说明书、体系结构设计说明书、体系结构评审报告、个人总结报告、演示Demo,要求说明每个人的角色和工作量。
评分标准:项目文档描述60%;个人总结报告20%;Demo20%。
上述评分标准以团队为基础,改变了传统的针对个人实践结果的考评模式,避免了相互抄袭。通过以团队评分为主,个人表现为辅的评价方式,达到培养学生学会与他人合作,培养团队精神的目的;通过以软件文档评分为主,以实践结果为辅的评分体系,达到学生对软件设计过程和方法的掌握。
其次,让学生参与教师的研究课题,加强实践基地建设,构建课程实训环境,鼓励学生到社会上的软件公司去实习、兼职。学院已与国内外多家软件领域的著名公司和研发基地建立了合作关系,建立了全方位、多层次的课程实践教学环境。
(5) 构建高素质的师资队伍
根据国家示范性软件学院工程型人才的培养目标,考虑软件体系结构设计课程实践性很强的突出特点,构建了三三制的师资队伍结构,即专职教师、IT公司教师和境外教师。完善了校内专任教师到软件企业一线参与实际软件项目研发和交流、软件企业的工程技术和项目管理人员到学校兼职授课的制度和机制,形成了一支了解行业需求、教学经验丰富、专兼结合、国内国外、校企联合的高素质的教师队伍。
4教学效果
我院针对软件体系结构课程教学中存在的不足,从教学方法、手段等方面提出了改进方案,融理论、案例与实践为一体,系统地阐述了软件体系结构的设计过程,体系结构设计师的主要工作和职责,辅助以实际案例向学生传授软件架构的理论、方法和技巧,并以小组为单位完成课程实验。通过本课程学习,学生可以在较短时间内掌握软件体系结构的基本知识和实践能力。
参考文献
关键词:ABC方法 软件开发 体系结构
中图分类号: 文献标识码:B 文章编号:1007-9416(2013)06-0149-02
网构软件的开发过程的原则是从下往上、从乱到顺,开发的重点从系统完成之前转移到系统运行中;在选择开发方法时一定要结合软件的自适应性进行考虑;支持技术要基于整个软件的开发周期对开发环境与工具进行整合,其中开发环境应给软件的自适应性一定的条件。
1 ABC方法
2 基于特征模型的网构软件开发
网构软件系统的开发是在一个软件资源较为丰富的平台上进行的,其开发过程遵循的是一种自下往上的模式,也就是根据用户的要求大部分软件资源进行整合变成一个新的系统。
FODM的特征模型是一种对领域需求予以支持的特征模型结构框架,它是以特征与特征之间的相互依附关系为中心。它们之间的关系表现为以下几个方面:精化、约束、影响、交互。前面两点会在很大程度上影响着模型创建需求的一些特性。精化呈现的是各个高层次与特征之间的非动态结构的关系,根据这种关系特征模型会产生一种具有层次的容易被理解的结构;约束则是对绑定状态下特征的依赖关系的呈现,这种关系的模型创建使得特征模型的便于定制的特性得到看保证,从而方便复用。而后两者关系对以特征模型为基础的设计有着重大的影响,对于呈现的特征在程序要求方面的依赖关系有一定的影响。交互呈现的则是运行过程征的依赖关系。
为了方便设计人员在基层平台的众多资源中挑选出合适的构件进行整合以形成新的系统,在需求这个环节,要建立特征之间、资源之间关系的对应体制。经过分辨及分配需求责任,FODM提供了一种比较规范的方法,由特征模型变换为高层软件体系结构。这种变换必要解决的问题包括模型变化的基础与模型变化的重点;模型变换的基础指的是两个模型之间的跟随关系,即源模型与目标模型;模型变换的重点是目标模型的构造。以上两个方面在FODM中具体表现为:特征与构件之间的跟随关系;在特征模型的基础上对软件体系结构的构造。
特征与构件之间的关系较为复杂,为了使这种复杂的跟随关系得到改善,连接特征与底层构件的元素为责任。责任具有比较强的凝聚力,对于软件程序有一种约束作用,同时还能对任务进行分配。有了这个元素的连接,特征与构件之间的复杂关系就能够简单化,将其分为两组一对多的关系。也就是一个特征可以被分解为多个责任,而且这多个责任可以通过一个构件去实现。通过分解建立特征与构件之间的跟随关系可以根据两个步骤来实现:将特征分解为多个责任;将多个责任分配给相应的构件。
例如网上购物软件系统,现在的购物网站很多,它们所使用的软件各式各样,基本上都不一样,这里可以采取建立特征模型的方法来分析和整理这类软件在市场上的需求,其抽象化需求可以分为八个方面的服务:客户登陆服务、客户注册服务、商品定购服务、商品信息查询及浏览服务、商品信息管理服务、订单手工处理服务、订单自动处理配置服务、订单自动处理服务等,前四种服务是针对商品购买者;接着的三种服务是针对网店的工作人员;最后一种是网店软件自身具备的一种智能化服务。
3 结语
过去几十年,软件技术经历了一系列重要的变化和发展,其发展的主线是:构成软件的软件实体的粒度不断增大,文中利用ABC方法对网构软件的支持仍存在一些不足,如白适应体系结构的设计自动化程度有待提高、网构软件的协同性支持不够、符合网构软件的构件模型尚未成形等,这些都是ABC进一步的工作重点.
参考文献
[1]梅宏,黄罡,赵海燕,焦文品.一种以软件体系结构为中心的网构软件开发方法[J].中国科学E辑:信息科学,2006,10:1100-1126.
[2]周立,陈湘萍,黄罡,孙艳春,梅宏.支持协商的网构软件体系结构行为建模与验证[J].软件学报,2008,05:1099-1112.
[3]王远,吕建,徐锋,张林.一种面向网构软件体系结构的信任驱动服务选取机制[J].软件学报,2008,06:1350-1362.
关键词:SEEK;软件体系结构;设计模式;教学模式
中图分类号:G642 文献标识码:B
1引言
自20世纪40年代第一台数字电子计算机问世,人们对于计算机的应用就以惊人的速度发展起来。以信息技术为核心的高新技术发展极大改变了我们的生产、生活以及经济、政治关系。计算机软件在我们日常生活的各个方面正扮演着一个核心角色,它涉及政府、银行和金融、教育、交通、娱乐、医疗、农业和法律等各个领域。软件产业已成为信息产业的核心和灵魂。国内外高等学校、科研院所纷纷建立起软件工程学科,采取系统、规范的方式培养市场所需的软件工程人才。
软件工程作为一个专业方向,必须通过一套完善的课程体系来实施教学,ACM和IEEE-CS联合工作组织制定的软件工程知识体系SWEBOK(Software Engineering Body of Knowledge)、计算教程软件工程卷CCSE(Computing Curriculum Software Engineering)及其中的软件工程知识体系SEEK(Software Engineering Education Knowledge)都明确给出了相应的课程体系构成。我国于2006年推出了《计算机科学与技术本科专业规范(软件工程方向)》,该专业规范结合我国高等教育的实际情况,详细描述了软件工程教育知识体系、核心课程等内容。“软件体系结构与设计模式”是软件工程方向专业重要的专业核心课程之一,目前还处于专业课程体系建设的起步阶段,要建设高水平、高质量的“软件体系结构与设计模式”课程,还需要进一步深入的研究和探讨。本文在总结SEEK及专业规范对课程的具体要求的基础上,结合南华大学的实际教学情况,对该课程的教学模式提出了一些建议。
2该课程在SEEK和专业规范中的构成
2.1该课程在SEEK中所涉及的知识领域和知识单元
软件工程知识体系SEEK分为三层结构,最高层是教育知识领域(area),它代表了软件工程的子学科,通常被认为是本科生应该掌握的软件工程知识体的重要部分。知识领域是对软件工程知识进行组织、分类和描述的高层结构元素,每个领域使用一个缩写进行标识。每个知识领域又分成许多知识单元(unit),表示一个领域中的独立主题模块。在知识领域标识的后面,添加两到三个字母的后缀标识知识单元。每个知识单元被进一步分成知识点(topic)集合,知识点是层次结构的最底层。表1是SEEK总结的知识领域,列出了知识单元的集合,并推荐了每个知识领域和知识单元所需的最少学时数。表2则列出了SEEK中软件设计知识领域中包含的软件体系结构和设计模式的内容(其他四个知识单元的内容在此省略)。
由表1和表2的内容可知“软件体系结构与设计模式”涉及到SEEK十个知识领域中的软件设计(DES)这一知识域,其中软件体系结构对应于体系结构设计(DES.ar)知识单元,而设计模式则属于详细设计(DES.dd)知识单元的知识点之一。
SEEK中知识域的划分是以本科教学和课程体系建设为目标进行的,尽管SEEK不代表教程,但是SEEK为构成软件工程教程的教学单元提供了设计、实现和交付的基础,在课程建设中需要研究各个知识域之间的关系,并进行合理的权衡和安排。
2.2专业规范中该课程的构成和要求
在教育部制定的《高等学校计算机科学与技术本科专业规范(软件工程方向)》中,软件设计(DES)知识领域所包含的内容有:
软件设计策略(str):其主要内容为面向功能的设计、面向对象的设计、以数据结构为中心的设计、面向主题的设计。
体系结构设计(ar):其主要内容为体系结构风格、多属性间的体系结构折衷、软件体系结构中的硬件问题、特定领域的体系结构和产品线、体系结构的表示。
详细设计(dd):其主要内容为设计方法、设计模式、构件设计、构件和系统接口设计、设计表示。
设计支持工具与评价(ste):其主要内容为设计支持工具、设计属性的度量、设计标准、形式化设计分析。
专业规范中软件设计知识领域的知识构成跟SEEK中大体一致。规范中还对软件设计和体系结构的课程内容、教学目标等做了具体的描述。对软件设计和体系结构知识的学习,旨在使学生能够在各种软件设计中应用多种设计模式、框架和体系结构,使用不同的中间件技术设计并实现软件,能使用合理的变更控制方法更改设计以及使用逆向工程技术重新获得软件设计。课程内容涵盖设计模式、框架和体系结构、当前中间件体系结构综述、用中间件技术设计分布式系统、基于构件的设计、度量理论和设计中的合理性准则、设计质量、设计的评估和演化、软件演化、再工程和逆向工程的基础知识。专业规范结合了我国高等教育的实际情况,对课程的规划和建设具有极大的指导意义。
3该课程目前的教学模式及分析
软件工程专业是南华大学2005年新办的专业,并将迎来第一届毕业生。“软件体系结构与设计模式”已完成了第一轮教学。目前的教学计划将该课程列为专业必修课程,安排在学生第6个学期学习,学分为3分,以考试的形式进行考核,总学时为54课时,其中理论课时占30课时,实验课时占24课时。通过本课程的学习,要求学生对软件体系结构和软件设计模式有一定的认识和理解,掌握软件体系结构的基本概念和主要方法,熟悉在面向对象软件体系结构中常用的23种设计模式,并能够将这些设计模式应用到软件系统设计中。要求先修课程为“面向对象程序设计”、“离散数学”、“软件工程”。
从SEEK和专业规范中可以看到,软件体系结构和设计模式虽然同属于软件设计这一知识域,但是分属不同的知识单元,软件体系结构描述的是软件工程实施中概要设计的部分,是一个抽象层次上的设计,而设计模式则输入详细设计阶段的内容,具体指导了编码。因此,将软件体系结构和设计模式放在一门课程中进行讲授不太合理,事实上在目前的教材中也很少要将二者放在一起的,在第一轮的教学中我们选用的教材是设计模式经典之作――机械工业出版社的《设计模式―可复用面向对象软件的基础》,并以机械工业出版社的《面向模式的软件体系结构 卷1:模式系统》作为辅助教材,因前者仅对设计模式部分进行了介绍,选择后者补充体系结构知识的内容。
实践环节主要针对案例进行分析设计,让学生熟悉使用统一建模工具进行软件设计,我们选用了IBM的Rational Software Development Platform 和 Rational Rose Enterprise Edition,就实验教学的情况看,部分学生对统一建模工具的使用稍显生疏,需要在此之前加强学生对建模工具的运用。
4几点建议
(1) 课程安排:将目前本门课程的内容划分为两门课程,我们已在新的教学计划中对此作出了调整。
(2) 教学内容:设计模式的教学仅仅局限于23种设计模式是不够的,还应该将构件设计、构件和系统的接口设计等知识添加进来,以丰富详细设计阶段涉及的内容。
(3) 教师队伍:开设这门课的教师,最好由参与过面向对象的软件开发过程的人员承担,这样更有利于结合实际案例和经验进行授课。
(4) 前导课:软件工程、离散数学、面向对象的程序设计这几门课程必须讲授到位才会给本门课程的教学打下良好的基础,比如设计模式中,对于模式应用的举例主要源自.NET和JAVA,在面向对象的程序设计基础上,还需要学生对这些语言有一定的了解。
(5) 考核方式:本课程主要介绍各种体系结构风格与适用情况、23种常用设计模式及其应用、构件设计等,目的是要求学生能够在软件开发的实际过程中进行合理的设计应用,对于各种体系结构、设计模式没有必要强行记忆,因此,如果单独出卷进行闭卷考试意义不大,重在学生对知识点的理解,可要求学生根据对某些知识的学习体会、模式的使用情况等写总结报告,最后以所写报告、实验情况以及平时的表现综合给予评定。
关键词:嵌入式系统;TCP/IP;软件体系结构;优化设计
2006年9月24日收到本文。廖日坤:博士,从事下一代网络、EPON接入网、嵌入式VolP研究。
国家高技术研究发展计划(NO.2004AAl22110)、国家杰出青年科学基金(No.60325104)、教育部科学技术研究重大项目资助计划项目(NO.0215)支持。
随着计算机网络技术和电子信息技术的迅猛发展,Internet的普及,接入Internet的非PC设备越来越多,各类电子设备像Web个人数字助理、Web可视电话、TV机顶盒接入Internet的需求也越来越大,嵌入式TCP/IP的Internet网络化将成为网络发展的趋势。
嵌入式系统中大量存在的是8/16位低速处理器,在进行Internet接入时,嵌入式TCP/IP对于计算机存储器、运算速度要求比较高,占用大量系统资源,因而常嵌入TCP/IP协议簇的子集或用UDP代替TCP实现。
本文提出一种基于嵌入式TCP/IP软件体系结构的优化设计和实现方案,从实现相应的功能又节省系统资源角度出发,对嵌入TCP/IP优化设计,实现嵌入式的Internet接入。
嵌入式TCP/IP接入方法
嵌入式电子设备接入Internet有多种解决方案:在低速微处理器运行剪裁的TCP/IP协议栈;使用一些ASIC实现TCP/IP的芯片如ADI的Internet Modem;也可以使用嵌入式操作系统自带的完整的TCP/IP协议栈。在某些对网络速度要求不高的领域,可以精简的TCP/IP实现;在对性能要求高的场合,则可以选择后两种方案。嵌入式设备接入Internet网络常用的方案比较如表1所示。
但以上接入方法一般专门为某种微处理器设计,不具有通用性,而且效率较低或功能不够全面。本文提出的经过优化设计的嵌入式TCP/IP适合移植到各种嵌入式处理器中,如单片机、ARM或ARM+FPGA多核嵌入式处理器中,具有较小的代码量、RAM使用量和较高的效率,同时支持套接字形式的多个TCP连接和多个网络设备连接,支持通过网关发送数据包和数据包转发,支持TCP包的整序、重发和窗口控制流量控制等等。
嵌入式TCP/IP的软件体系结构与优化设计
嵌入式TCP/IP软件体系结构
与PC TCP/IP协议相似,嵌入式TCP/IP采用协议分层的结构:应用层、TCP层、IP层和网络设备接口层。图1描述了嵌入式TCP/IP输入和输出数据包流程以及调用的函数。
其中,Timer()函数调用TCPTimer()处理TCP数据包重发,以及调用每个接口的In―put()函数接收到达的数据包。Timer()函数必须在短时间(一般
输出时,TCP层先查看unsend队列,发现非空,将数据包插入队列;发现为空,则查看对方窗口是否够大能够接收这个数据包,然后填写TCP头部信息。IP层选择网络设备接口,目的IP和该接口的子网掩码相与是否等于子网掩码。然后调用这个接口的Output函数来发送。
输入时,Timer()函数调用每个接口的In―put函数。IP层判断IP版本、IP校验和、判断是否应该转发数据包,然后根据IP头部的protocol字段将包传给相应的高层处理。TCP层,需要判断TCP校验和,然后在现有的套接字中查找,判断是否有套接字可以接收这个数据包,判断TCP序号是否为希望的,然后更新这个连接的状态(包括释放被应答的数据包和TCP状态机的转化等),调用该套接字的回调函数recv。
图2程序主流程是一个大循环,在循环中处理发送数据包等应用层协议同时查询变量bTimeOut,在定时中断中将bTimerOut设置为真,应用层在程序流程中反复查询bTimerOut是否为真,真则调用Timer(),然后置bTimerOut为假。
嵌入式TCP/IP设计优化
因为网络中数据非常多,如果把所有的数据都读到内存中再判断是否应该丢弃帧显然效率不高。所以边读取数据边判断而没有一开始就把整个帧全部读到内存中,同时在程序里定义帧中各个部分的相对地址,可以方便的对帧的各个字节寻址。这样的设计是基于提高访问速度考虑的。
为了减小RAM使用量,当数据包需要重新发送时,如果能够重新产生数据包所需的数据,可以不存储需要被应答的TCP包。图3给出了嵌入式CPU中TCP/IP的内存划分,以及内存中帧的各个字节的定义和相对位置,其中PacketRAM为存放帧的首地址。
发送TCP/IP过程中主要的运算量集中在三个部分:应用程序将数据拷贝到RAM、计算TCP校验和、将RAM中的数据包拷贝到网络设备的发送缓冲区。对每一个字节数据,两次拷贝大致共使用12×2=24个指令周期;计算TCP校验和使用为16个指令周期。为提高速度可采用快速CPU或提高晶振频率。例如采用12M晶振时,网络传输速度为25K字节/s;而在高频PCB电路板使用233M晶振时,网络传输速度能达到为384K字节/s。
另外,TCP/IP一般采用C语言或者混合汇编,而使用可重入函数和一般指针(genericpointer)使得程序代码增大,运行速度变慢.所以使用函数指针时,应手动重建调用树(Calltree),或将函数指针调用的函数设置为可重入函数,同时使用“指定存储类型”的指针(memory―specific pointer),防止数据包的不必要的拷贝以及优化计算校验和和内存拷贝函数。另外,Reentrant类型的函数比一般函数速度要慢很多,但是某些时候为了程序结构的需要必须使用Reentrant,这就需要在速度和结构之间作一个选择。
嵌入式TCP/IP的实现
TCP/1P的嵌入式实现一般通过以软件方式嵌入到ROM中,然后通过轻网络通讯技术与专用嵌入式网关连接,在嵌入式处理器中运行TCP/IP协议,提供TCP/IP到用户的轻型网络的连接和路由功能。
内存管理方法和无多余数据包拷贝的实现
嵌入式TCP/IP的内存管理可以用链表方 法,即根据数据包大小分配相应大小的内存块。如图4所示,链表将内存块链接起来,used字段表示该内存块是否正在使用,pS start和pEend则表示数据部分有效数据的开始地址和结束地址。搜索内存链表找到一个没有分配的比所需空间大的内存块,截取所需的大小。该内存块被截取以后可能还有较多剩余,这时将剩余部分从原内存块中分离出来,成为一个新的内存块,并插入链表。释放时,将used值置为假,如果pNext或者pPre指向的链表单元也是空闲的,则将其和自己合并,以防止内存分片。在协议层之间传送数据包只需传送内存块的起始地址。这种内存管理方法,空间浪费小但是运算量相对较大。
整序、重发和窗口控制的实现
对于嵌入式TCP/IP系统,可以使用队列缓存的方式来实现整序、重发和窗口控制。队列的一个元素指向一个数据包,队列的最大长度没有限制。
对于整序,使用ooSeq队列,如果发现接收的TCP包序号并不是期望的,但序号在接收窗口内,此时不能立刻接收这个包也不应丢弃,可先将这个包放入ooSeq队列。当期望TCP包被接收后,再查看ooSeq队列现在是否有TCP包成为了期望的数据包,如果有则将其取出并处理。
对于重发,使用unacked队列,每一个需要被应答的TCP数据包发送以后都要放入unacked队列,等到被应答以后才从队列中删除。TCP重发定时只针对unacked队列第一个TCP包,如果定时超出,重新发送,重发次数超出规定值,则报错。
对于窗口控制,使用unsend队列,如果发现对方的窗口过小无法接收这个数据包,则只发送部分数据,将多余部分放入unsend队列,等待对方发来TCP包通知新的窗口大小时,再次判断是否可以发送。如果在unsend队列不为空的情况下,需要发送的数据包都应插入unsend队列。
嵌入式TCP/I P的性能分析
图5给出了将优化设计后的TCP/IP移植到ARM9处理器、CS8900A网络控制器中,时钟频率为133MHz下,与Internet连接的情况。
系统支持最大发起连接数约为380,最大并发连接率约为170cps。随着呼叫数的增加,平均分组到达也随之增加,导致网络传输数据的增加,从而最大建立时间变长。但最小的建立连接时间基本保持不变,说明系统具有良好的性能。
图6给出了随建立时间变化的接通率。图中存在一个临界点,成功的连接率随着TCP连接尝试数目增加而减少,直至为0,而响应时间也急剧上升,这是由嵌入式处理器的处理能力有限造成的。
结语
本文从实现相应的功能又节省系统资源角度出发,对嵌入式TCP/IP协议簇进行优化设计,可以在各种嵌入式处理器上实现Internet接入。
经过优化设计的嵌入式TCP/IP支持套接字形式的多个TCP连接、支持多个网络设备、支持通过网关发送数据包和数据包转发功能,以及支持TCP包的整序、重发和窗口控制流量控制。实践证明,这种设计方式灵活,能按用户需求实现复杂的功能。
参考文献:
1.Bilek J,Ruzicka IP.Evolutionary trends of embedded systems.IEEE InternationaI Con―ference on lndustrial Technology,2003.2(3):901―905.
2.Perry.DE.Software engineering andsoftware architecture.In:Feng Yu-fin.Beijing:Electronic lndustry Press,2000.
3.Batory D.O'Malley S.The design and implementation of hierarchical software sys―tems with reusable components.ACM Trans.on Softwa re Engineer and Methodology.1 992,1(4):355-398.
4.Hutchinson N,Peterson L.The x-kernel:Architecture for implementing network proto―cols.IEEE Trans.0n Software Engineering.19911 7(1 J:64-76.
5.Postel J.Internet Official Protocol Stan―dards,RFC 1 720.Network Working Groupf_996.
6.Rastofer U,Bellosa F.Component-basedsoftware engineering for distributed embed―ded real-time systems Softwa re.1EE Proceed-ings,2001,148(3):99―1 03.
7.Swaminathan V.Chakraba rty K.Nef-work flow techniques for dynamic VOltage scal・ing in ha rd real―time systems.1EEE Trans.onComputer-Aided Design of Integrated Circuitsand Systems,2004,23(10):1385―1398.
8.Schmidt DC,Box DF,Suda T.Adaptive:A dynamically assembled protocol transfor―marion,integ ration and evaluation environ―ment.Concu rrency:P ractice and Experi-ence,1993,5(4):269-286.
关键词:软件体系结构;层次;开放性
1.引言
计算机科学技术在飞速发展,软件复杂程度也不断加大,现所有软件设计基于软件体系结构。软件工程是指导软件开发过程、提供认知和表达软件系统思想和方法的一门学科。在软件工程技术的发展中,软件系统的体系结构一直是管理者、开发者和用户十分关注的问题。究其原因主要有三:一是软件系统的规模越来越大,无论是开发还是运行、维护,软件系统都已变得非常困难。二是软件系统中实现的功能块之间的耦合度、冗余度太高,难于单独升级和重复使用。三是软件系统的兼容性、集成性太差,不同应用平台上运行的软件难于相互融合。开放性、集成性和复用性是评价软件系统体系结构性能优良的三个重要指标。开放性主要是指软件系统中数据的开放性、功能的开放性和系统的可扩充性。一个系统的开放性是否良好主要取决于该系统的体系结构模型。一个开放性好的应用系统,应该容易实现集成,而集成性的高低又取决于系统部件的复用性;集成性和复用性的改进、提高又能促进系统的开放性。
2.软件体系的结构模型
2.1体系主要组成部分
一个软件系统是由若干个组成部分,按照一定的组织结构形式构成的。这个组织结构形式从概念上就是一个总体性框架。部件是软件系统中具有独立功能的部分,也是软件体系结构中重要的组成要素,它在功能和数据上构成了一个软件系统的基础。从技术上说,软件部件是一种定义良好、功能独立、可以重复应用的二进制代码集,它可以是一个功能服务块、一个经过封装的对象组、甚至可以是一个系统框架或软件应用模型。近年来,计算机应用逐渐步入以网络为应用平台的阶段。基于网络而建立的各类应用系统不仅实现了数据共享,并能支持各类计算资源的共享。
中间件是一种独立于应用系统的特殊部件。在功能上它是介于体系结构中应用层和操作系统之间的一个通用服务层次,而在技术上中间件的作用是隔离应用系统与运行环境的关联关系,即:屏蔽网络硬件平台的差异性和操作系统与网络通信协议的异构性,而使传统的客户/服务器应用模式扩展为客户/中间件/服务器的三层或多层模式。
2.2软件体系结构的建模
软件体系结构研究的是如何表达软件系统的结构连接关系,定义构成该系统的所有计算部件和部件之间交互的连接件,以及如何将部件和连接件结合在一起的规程。软件系统建模技术的提出,主要目的是为了解决随着技术的发展,软件应用系统的规模日益扩大,结构模型变得日益复杂而导致的系统设计方面的问题。从早期提出的以数据为中心的体系结构模型、以功能执行为中心的体系结构模型,逐步发展到今天以系统内核为中心的面向对象的体系结构模型和基于总线结构的体系结构模型。这些体系结构模型的演变进化是为了不断适应计算机应用领域的扩大而引出的新的问题需求。软件系统建模技术的共同目标就是要提高实际应用系统的开放性、集成性、适应需求变化的扩展性以及开发与执行的高效性。一个软件应用系统的设计过程中,计算部件及其中间件的规格定义以及这些部件的结构体系是决定系统开发质量的重要因素。研究软件体系结构方面的问题,对于提高应用系统的集成性、复用性以及质量和效率有着重要的指导意义。
3.以系统开放性为中心的结构模型
3.1常用软件体系结构模型的分析
在管道/过滤器模型里每一个组件有一组输入和输出,组件读输入的数据流并产生输出的数据流。管道/过滤器模型有若干个过滤器和管道组成。每个都有输入端口,从输入端口读入数据流,进行局部的数据变换以后,在输出端口输出新生成的数据,管道则负责数据的传输,把数据从一个过滤器的输出端口传送到另一个过滤器的输入端口,这个过程是顺序渐增的过程。过滤器是独立的实体,它不能和其它的过滤器共享数据。任何两个过滤器只要在相互的输入,输出管道上格式一致,那么这两个过滤器就连接一起使用。管道/过滤器也有一些缺点,比如容易导致系统处理过程成为批处理方式。因为具有很强的独立性,设计师必须考虑每个过滤器完成输入到输出的转换,这种方式带来限制。由于该模型限制了输入形式和输出形式,所以不适合于交互式应用系统的设计和运行。因为在数据传输上没有通用的标准,这就需要每个过滤器都解析输入数据和合成数据,因此增加了实现的复杂性。
面向对象系统,该系统把系统中的所有资源如数据、模块等看作为对象。数据的表示方法和他们的相应操作封装在一个对象中,各对象之间通过信息传递发生联系,它是实现对象之间相互联系和作用的惟一手段。对象是构件,连接器通过过程调用来实现。此模型有两个重要方面:①对象负责保持数据表示的完整性②对象的表示是对其它对象是隐藏的。面向对象模型为信息隐藏提供具体的实现手段,用户不必知道对象的内部状态,只需了解其功能描述就可使用可减轻开发一个软件系统的难度和周期。对象的继承性既信息隐藏和局部化,提供了代码共享的手段。避免编程人员重复编写代码,编程人员可以方便地共享已有的软件资源和程序代码,从而大幅度提高软件的开发效率和减少今后的软件维护工作量。某对象出现错误,就可限制在本对象之内,不向外传播。就对本对象进行修改,容易找到错误处理。如果一旦改变了某一对象的标识符,就必须修改所有其它对象,并清除由此带来的一些副作用。
3.2具有较强开放性的体系结构框架模型
以上分析并论证了几种软件体系结构模型的技术特性。从目前软件应用技术的发展方向看,软件系统的设计目标是:开发开放性更好,集成性更灵活的应用体系结构。这种结构模型在软件的工程化方面具有指导意义。
第一层为用户应用程序层,主要由面向用户实际问题的需求而构造的各类应用程序组成。该层是一个按照统一的标准规范编制的、实现用户所需功能的面向对象应用程序的集合。第二层为面向不同的问题领域,适用于各类应用需求而构造的接口部件集合。这类部件的主要作用是实现应用程序的对象之间的通信过程,即:将应用系统的接口功能从应用程序中分离出来,以软件智能体的形式提供公共通信接口,Agent具有较高的自主性,能够对周围环境有一定的感知性,并且可以根据需要在网络节点间移动。设置该层的目的是使应用程序更关注于用户功能实现。第三层为面向不同网络环境的应用部件的集合,其作用主要是为上一层面向不同应用领域的接口部件提供一个网络环境下通用的公共接口的标准规范,用于屏蔽网络中本地对象和远程对象的位置属性,使得与之进行通信的其它对象来说,它们都是等价的。第四层由面向异构宿主平台的核心应用部件构成。核心应用部件的作用主要是实现网络运行在不同宿主平台之间的数据交换和功能的互用,它屏蔽了异构宿主平台之间的差异,将适用于不同应用需求的部件内部的异构数据转换为同构数据,并向上一层的应用总线提供统一的面向平台的服务。
基于可复用部件的分层体系结构模型的概念框架,综合了以上介绍的几种软件体系结构模型的优点,使得开放性更好,集成性更高。更重要的是在这个概念框架中,面向用户需求的应用程序的结构更简单,功能更单一,代码更容易编制实现。而涉及到通信、接口、环境、平台的那一部分功能已被充分地对象化,并以符合标准规范的软件部件的形式提供,最大限度地支持了系统功能的复用。这不仅提高了应用系统的开发效率和执行效率,还在技术上保证了应用系统的质量。
4.总结
软件体系结构是一门新兴学科,近年来,人们逐渐认识到软件体系结构在软件开发中的重要地位,软件体系结构决定软件的重要因素,用这些公用的体系结构范型,便于对软件进行分析、设计。以提高软件系统开放性为中心的结构模型综合了几种主要的软件体系结构模型的技术与工程特性,在软件项目的工程化方面具有指导性作用。
参考文献:
[1] 付燕.软件体系结构实用教程[M].西安:西安电子科技出版社,2009.
[2] 李千目.软件体系结构设计[M].北京:清华大学出版社,2008.
[3] 温昱.软件架构设计[M].北京:电子工业出版社,2007.
[4] 徐萍,刘静,桑胜举.浅谈软件体系结构风格[J].科技资讯,2008.
[5] 张承瑞,刘璐,郭丽娜.基于CORBA组件技术的开放式数控组件应用开发[J].组合机床与自动化加工技术,2007.
[6] 付东普.SOA技术标准的应用[J].计算机与网络,2008.
论文摘要:软件系统的体系结构是在对系统的需求分析后确定的,他决定了软件系统的质量,因此在设计系统之初就应该重视系统的体系结构。结合某银行系统的部分功能系统设计,提出轻量级迭代分析方法,通过对系统场景分析,找出系统各个组件的基本关系,从而确定系统的体系结构。强调了软件体系结构在软件开发过程中的作用,并提出一种有效的分析设计方法。
1引言
软件体系结构是软件工程的一个重要研究领域,他提供了软件系统的高层抽象。随着软件系统规模越来越大、越来越复杂,整个系统的结构和规格说明显得越来越重要。使用体系结构模式作为软件系统结构设计策略,是提高软件复用程度和降低软件设计复杂度的一种重要的方法。
对于软件项目的开发来说,一个清晰的软件体系结构的建立应位于需求分析之后,软件设计之前。在建立软件体系结构时,设计者主要从结构的角度对整个系统进行分析,选择恰当的构件、构件间的相互作用以及他们的约束,最后形成一个系统框架以满足用户的需求,为软件设计奠定基础。
然而,在系统开发的初始阶段就设计好系统的最终结构是不可能的,也是不现实的,因为需求还在不断地发生变化。需求总是在变化的,并且不完整]。所以,一个好的软件体系结构应该具有创建或再创建功能、用户界面和问题域模型,进化原型以满足新的软件需求。
因此,在软件项目设计之初,选择合适的体系结构是必要的。在本文中提出一种简单迭代的方法,对需求轻量迭代,通过分析系统的功能需求和非功能需求,构建合适的体系结构。不同于CraigLarman的RUP过程口],通过迭代开发,分析系统的细节,逐步设计出完整的系统,而是经过轻量级迭代分析,以得出系统应该具有的体系结构属性为目标,是对系统整体属性的分析,而非细节的分析。整个过程和结果为选择设计合适的体系结构做必要的准备。采用场景分析作为主要的分析工具,得到各个场景的主特点、从特点。
2方法
不同的体系结构根据适合情况不同其特点也不同。如pipe层式等各有优缺点口]。因此在开发设计初始,应对系统分析,选择体系结构。而这种分析不是细节的,而是着重于找出组件与组件的关系,及连接子。系统转接处应该是主要的。分析要从需求人手,对需求分类,即是功能性需求还是非功能性需求。在分析的过程中,采用基于场景的分析。主要的难点是需求如何划分可以得到体系结构属性;再者,如何分析才能使体系结构的特点同系统的特点关联起来。
3系统业务
在某银行的“新一代核心业务系统”部分系统设计中采用了轻量迭代的方法取得了良好的效果。图1是轻量级迭代的主要流程整个银行业务系统是由核心一前置一前端的组成的。前端系统即是银行的柜员系统(Teller系统),是银行柜员直接使用处理客户业务的系统。Teller系统是在已有的fsframe平台基础上开发实现的,是一种BS的实现方式。在fsframe平台中,普通的交易的业务逻辑是由js实现的,对于较为复杂的处理是由Java程序编写的服务完成,Teller系统除了处理各种业务外,还要实现复杂的打印功能。在银行业务中需要打印很多材料,如存取款凭条、外币兑换水单、客户开户明细、交易流水等。这些打印材料内容繁杂,如果全部在其相关业务模块中实现,不但工作量大,而且不灵活,不能按客户的不同需要分别实现。因此,需要设计一个比较通用的方式来实现打印功能。
4打印系统设计
通过对系统做轻量级的迭代分析,总结分析得出该系统设计及各部分之间的关系特点,从而找一种合适的架构。利用场景分析的方法对这个打印系统的轻量级迭代分析,发现打印模块的设计比较复杂。首先系统需要打印的业务比较多,且比较分散,难以统一管理;其次,不同业务的打印格式也是不尽相同,而且随着需求和设计的反复,打印材料的格式还要增加;再者,现在的平台环境也限制了打印功能。最终要通过jS调用打印功能,而在具体实现打印功能的时候,由于打印机厂商所提供的库所限制,需要使用C“,Delpthi等高级语言。
根据以上的简要需求点,对该系统进行分析。这个打印系统的特点应该是模块与模块之间的耦合性不应该太强,个别的功能模块是对少数模块依赖性比较强,并非所有的模块都相关。而且每个模块应该有很好的可扩展性,即能够适应需求的变化,鉴于以后功能扩展的必要,对模块的扩展修改,要尽量屏蔽其他模块的内部变化。模块与模块之间的调用关系应该是比较清晰的。我们把这个分析过程称为体系结构组件需求分析过程,模块也对应于体系结构中的组件,如图2所示。
根据以上分析得出层式体系结构比较适合作为这个系统打印部分的架构设计。
层次式系统的特点是分层组织,每层为其上层通过服务,而接受其下层通过的服务。在某些层次式系统中,内层对除相邻外层之外的所有外层是隐藏的(不包括那些经过仔细选择供出口的功能)。他的优点是支持基于抽象层次增长的设计,将复杂系统划分成系列的步骤。支持增强,由于每层只同上下两层交互,对一层功能的改变至多只影响两层。支持重用,允许一层的多个实现进行互换,只要他们对相邻层有相同的界面即可。
(1)设备驱动层
设备驱动层是对现有外部设备所提供的功能所需要发送的指令的管理,对很多设备,需要发送指令进行交互后,该设备才能实现所提供的功能。这样,通过将这些指令保存在驱动文件中,在使用这些功能时再提取保存的指令并发送到设备即可完成对设备的操作。
(2)设备定义层
设备定义层是将终端上连接的全部外部设备信息保存到配置文件里面,对这些已进行登记的设备,在程序中才是可以使用的,如果没有进行登记,则在程序中不能使用。
(3)表定义层
表定义层主要是在对一个任务执行的过程中,可能需要用到一些外部数据,这些数据是保存在关系表中,通过从这些表中提取相应的数据,即可完成任务。该层主要提供外部数据的获取并应用的功能。
(4)应用调用层
应用调用层主要是提供给应用程序一个统一调用的度,系统运行十分流畅。以下为综合视频数据显示部分程序:
int x,y;
intr,g,b;
intw,h;
unsignedchar grab_data;
grab.data=(unsignedchar*)vd一>getData();
if(vd一>isCapdone()一一1)(
’QPainter paint=new QPainter(this);
paint一>end();
paint一>begin(tab.2);
Qlmageimg;
QRgb point;
w—vd一>getW():
h—vd一>getH();
if(img.create(w,h,32,0,Qlmage::IgnoreEndian))
{
·
for(x一0;x
{
for(y=0;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();
)
关键词:SEV;软件体系结构;态势推演系统
中图分类号:TP311.52文献标识码:A文章编号:1007-9599 (2010) 15-0000-02
The Deduction Trend System Development Technology on SEV Architecture
Du Jiawei,Yan Liaoliao,Zhang Xing,Liu Haiye,Xue Fangxia
(PLA 63892 Troops,Luoyang471003,China)
Abstract:The state deduction is widely used in large-scale military activities as scheduled during the simulation program.Involving multi-objective,multi-organization of large distributed interactive deduction systems,scalable and flexible software architecture,dynamic real-time control system design effectiveness is difficult.This interactive software architecture based on distributed SEV,in order to deduce a trend of UAV missions,for example,use case diagrams,class diagrams and sequence diagrams and other presentation on software requirements and principle,concise and effective description based on SEV situation deduction system architecture analysis and design process for the development of similar environments and systems to provide a value reference.
Keywords:SEV;Software architecture;Situation inference system
一、引言
态势推演系统广泛应用于军方,主要对战斗过程和战场环境进行模拟,以期用最小的代价来演示未来假想战场环境。针对态势推演系统基于分布式交互存在的结构问题和动态过程的控制问题,本文采用基于分布式交互结构的SEV(Service-Engine-View)来实现系统推演过程的实时控制和多元素并发。SEV软件体系结构,是进行分布式交互系统设计的很好的软件体系结构模型。Service服务,将静态数据模型实现为统一的对象服务,提供静态数据服务;Engine是模型核心,包括动态数据引擎、控制引擎和客户控制界面,动态数据引擎负责将服务Service中的数据转化为动态数据模型,系统运行控制方通过控制引擎模块和客户控制界面对动态数据引擎的转换过程和向视图View的展示过程进行控制;View是最终用户界面,完成系统对数据的推演展示。
在SEV结构中,如何实现Service的静态数据服务和Engine内部的引擎控制是重点。静态数据服务分为四个步骤:通过对象请求接收数据访问请求;请求处理生成语句,并通过调用接口对数据库进行访问;根据查询结果集构造用户需求数据;返回数据。引擎控制模型是SEV结构中实现同步控制的核心模块。引擎通过对对象引用的传递和回调机制,实现了对动态数据的同步控制过程。当启动一个动态数据服务时,首先向控制器进行注册,将动态数据服务接口对象的对象引用传递给控制引擎,控制引擎将该对象引用保存到本地对象引用列表;当控制引擎收到用户的控制命令时,将依次调用对象引用列表中的各个动态数据对象,向其转发控制命令,各动态数据接收到命令后将进行相应处理,调整数据处理过程以适应用户要求。本文总结提出并举例说明了基于SEV结构的态势推演系统分析和设计过程。
二、基于SEV的推演系统结构
根据SEV的体系结构特征,结合分布式交互系统的事务、总线结构和跨平台性等特点,可以设计出态势推演系统基于分布式交互系统的软件体系结构。
在该结构中,State Server、Control Client和Control Server是SEV中的Engine引擎部分,对推演的动态数据进行内部控制,接收客户请求,实现推演的同步控制。Data Server是SEV中的Service服务部分,为态势推演提供静态数据。State Server根据控制要求向View发送图形显示要求,从而实现态势数据的模拟推演过程。
三、某无人机飞行任务态势推演系统的开发实例
下面以某无人机飞行任务规划推演为例进行简要的系统分析设计,来说明SEV体系结构的应用。
(一)需求
在无人机飞行演练之前,用户利用选定的计划方案,通过该系统对活动方案数据进行动态演绎和展示,以模拟出方案实施的过程和可能的结果,辅助组织者确立行动间协同的要点,并最终定下实施方案。态势推演系统能够以态势图、行动矩阵、滚动信息的形式动态表现活动的实施过程。在推演进行过程中,模拟推演过程可以根据需要进行控制,态势图形能实时展示对推演过程的控制效果,用例图见图2。
态势推演用例图体现了态势推演系统的功能需求,有6个Use Case,分别为:1.推演数据准备:为模拟推演准备数据。2.推演方案制定:推演用户制定无人机飞行的行动方案,是推演数据的一部分。3.推演行动选择:拟推演活动的计划和推演元素的行动过程。4.矩阵显示:推演过程的矩阵显示。5.文字滚动条:用文字滚动信息的方式展现推演过程中的关键信息。6.态势显示:推演过程中的态势图显示。态势推演就是推演用户进行2个部分的工作,一是推演数据的准备,即首先制定推演行动方案,并将其输入推演系统,然后选择推演行动数据;二是进行模拟推演,该过程是推演用户对推演行动选择的数据进行推演过程控制,即推演进程控制。
(二)分析与设计
1.态势推演系统的静态结构(Service)。
在整个系统中,数据服务类完成了对各种数据库的接口,实现了数据准备、计划分析、数据处理等功能,如图3所示。Data Server类负责转发分布式交互系统与DataServe_impl之间的对象调用;DataServe_impl类是数据服务的核心实现类,提供所有数据处理和数据访问的接口;ActionDataServer类是行动数据库访问接口类,负责处理各种数据;CommonDataServer类是负责提供访问公共数据库的接口。
态势服务类是态势推演系统的图形显示实现类。在该类控制下,调用数据服务的接口获取数据,向第三方图形显示软件发送数据,以图形方式动态展现计划数据,如图4。其中,SimulationClient、ControlServer和DataServer是本地对象,负责实现基于分布式交互系统的客户端服务对象。GeStateClient_impl类是态势服务向外提供态势服务控制的接口。SimActionRender类是态势服务中播放模拟行动的行动轨迹和轨迹点的模拟线程类,一个模拟行动对应一个SimActionRender线程。StateRender类是态势服务的图形显示类。StateBalancer类负责控制发送报文的最小间隔时间。
控制服务类是推演同步控制的主模块。其根据控制客户的指令,基于分布式交互系统对象注册与回调机制,控制已注册态势服务的推演进程和速率,以实现推演态势按照客户控制要求进行模拟展示,如图5所示。其中,ControlServer是分布式交互系统框架类,其包含的虚操作由ControlServer_impl实现。SimulationClientInfo类是封装了模拟客户对象引用和模拟客户注册信息等内容。SimulationClient类是模拟客户类。SimulationStatus类是封装了推演进度和速率的相关状态信息。
2.态势推演系统的动态流程(Engine和View)。
态势推演系统动态流程由态势数据访问、态势服务注册、态势推演控制、态势推演图形显示4个主要流程组成。态势推演系统动态流程的时序图见图6。
用户调用GetSchemeList()获取某综合计划制定的所有推演方案,对态势数据进行访问。用户调用ClientRegister()方法来进行态势服务注册,同时调用GetClientList()和ClientUnRegister()来实现对推演客户的控制和管理。态势推演的控制包括初始化推演状态、清除状态、设置状态和服务状态检测。初始化推演状态通过调用InitSimulationStatus()和ReadyToPlay()来完成。清除推演状态调用ClearStatus()方法。设置状态调用ControlServer_impl类的相应方法来实现。服务状态检测调用Ping()方法来测试推演服务状态。控制服务在接受到控制客户的各种控制命令后,依次调用已注册态势服务的SetSimulationStatus()方法,以改变态势服务的推演进度和速度,进行态势推演图形显示。
(三)运行
态势推演系统按照以下步骤启动和设定后,就可以进行方案模拟推演。系统启动,态势推演系统有三个服务程序:数据服务、控制服务和态势服务;其中态势服务必须在数据服务和控制服务都已经启动的情况下才可以启动;导入飞行计划,并制定活动方案;启动控制客户端软件,选择不同的方案进行模拟推演;在推演用户的控制下,进行图形显示模拟。
四、结束语
本文采用能区分静态数据和动态数据的SEV软件体系结构,以某无人机飞行任务态势推演系统为例,简要而有效地说明了基于SEV体系结构的态势推演系统的设计和开发过程,虽然本文以某无人机飞行任务态势推演为背景,具有一定的局限性,但是对开发类似环境下的交互式系统具有一定的借鉴和参考价值。
参考文献:
[1]Grady Booch,James Rumbaugh,Ivar Jacobson.UML用户指南[M].北京:人民邮电出版社,2006,6
[2]Mary Shaw,David Garlan.软件体系结构.清华大学出版社,2007,3