目录

系统架构设计师论文论基于构件的软件开发

【系统架构设计师】论文:论基于构件的软件开发

论文:论基于构件的软件开发

文章目录

论文一

摘要

2021年3月,我单位联合菏高校研发了《程序在线评测比赛考试系统》。系统以程序代码在线提交自动评测功能为核心, 主要分为题库模块、评测机、 实验作业模块、考试模块、比赛模块、抄复判定模块、用户管理模块等,支持对接教务平台。在项目中我担任系统架构师,主要负责架构设计工作。 本文以该平台为例, 论述了基于构件的软件开发技术在本项目中的具体应用。系统基于 Spring Cloud 微服务框架来进行构件化开发,在构件获取阶段通过对接现有系统、使用构件库、和集成第三方软件来实现需求, 在构件开发阶段使用了多种设计模式来保证构件的可重用性, 在构件组装阶段使用了同步消息、异步消息、工作流方式来实现不同业务类型下构件的组合。最终项目顺利上线并稳定运行,获得用户一致好评。

正文

我在一个专为高校建设计算机专业智能教学一体化平台的单位任职, 过往成果有 《计算机组成原理仿真实验系统小 等。2019 年 3 月,我单位联合某大学研发了《程序在线评测比赛考试系统》项目《〈以下简称为 “0J 系统”) ,以取代原有传统的编程上机考试平台。

系统以程序代码的在线提交自动评测功能为核心, 主要分为题库模块、评测机模块、实验作业模块、考试模块、比赛模块、抄效判定模块、用户管理模块等。题库模块主要负责试题和测试用例的管理, 用户根据试题要求编写程序代码提交到系统, 系统将测试用例与程序代码发送给评测机模块, 由评测机自动编译、 执行、判分,并将结果发适给其他相关模块进行统计;实验作业模块用于在线布置作业,从题库中选取试题,设置截止日期等要求; 考试模块用于学生在线考试,按教师预先设置的参数自动从题库随机抽题生成试卷,以及问教务平台上传考试成绩;比赛模块主要用于 ACM 竞赛的培训; 抄奢判定模块用于鉴定代码与他人代码雷同率; 用户管理模块负责用户依息的管理。在这个项目中, 我担任了系统架构师的职务,主要负责系统的架构设计相关工作。

构件技术是指通过组装一系列可复用的软件构件来构造软件系统的软件技术。通过运用构件技术, 开发人员可以有效地进行软件复用, 减少重复开发,缩短开发时间, 降低软件的开发成本。 主流的构件技术有三种: CORBA、EJB 和 COM。CORBA分为对象请示代理、公共对象服务和公共设施三个层次,优点是大而全, 互操作性和开放性好,缺点是庞大且复杂,技术标准更新缓慢; EJB 基于 Java 语言,支持跨平台, 提供了远程访问、安全、持和久化和生命周期等机制,支持分布式计算,缺点是服务治理能力差,逐渐被 Spring Cloud 等轻量级框架取代; COM 基于Windows 平台,功能强大、效率高,有一系列开发工具支持,缺点是跨平台性差。基于构件的软件开发过程主要分为模块划分、构件标识、构件获取、构件组装与测试、构件管理等步骤。

0J 系统采用了基于 Spring Cloud 的微服务架构开发。这里重点从构件获取、构件开发、构件组装三个阶段说明本系统采用构件化开发的过程。

一、构件获取

在0J 系统中,可复用的功能需求和非功能需求从实现方式上分为三类。第一类需要对接现有系统实现,比如需要将学校在用的 04&、教务管理两套系统中的学生信息与课程信息同步到 0J 系统中, 我们通过访问 0A、 教务管理的开发商网站 ,联系开发商,取得了相关接口调用的 SIK。第二类是常见信息系统中共同具备的用户管理、角色权限管理、日志记录、内容维护、消息中心等基本功能,我们通过取用单位过往项目开发中所积累的构件库中的相应构件〈例如 RBAC 权限管理框架) 来实现。第三类需要集成第三方的软件来实现, 例如微服务注册中心、API消息路由网关、负载均衡机制、程序评测时调用的编译器、代码抄效判定的文本比对功能等,无需另行开发,我们使用了 Spring Cloud 中的 Eureka 框架来作为微服务注册中心, Nginx 反疝代理来作为负载均衡机制, GCC、JRE 等作为编译器,针对文本比对功能, 我们使用GitHub 上的开源程序。 此外我们还根据 0J 系统的使用场景,重新开发了一些功能构件,以支撑本系统特定的用户需求。

二、构件开发

构件的优势体现在其粗粒度的重用性, 因此为最大限度保证构件的可重用性和重用力度,保持其高内聚、低耦合的特性,我们在开发中用到了一些经典的设计模式,例如装饰器模式、策畴模式、工厂模式等。在题库构件中,存放了全部的试题数据, 包括题目介绍、测试用例等公共内容, 同一试题在自由练习、实验作业、考试、比赛等不同使用场景下,需要增加不同的扩展功能。

我们使用了装饰器模式, 来给试题对象动态添加不同职责。 在评测机构件中, 需要同时支持对(语言、C++、Java、PHP、Python 等多种常用编程语言程序的评测,不同语言对应的编译与执行方法存在较大差异。 我们使用了策略模式,将不同语言的编译和执行方法封装起来, 并使它们可以相互替换。 在数据库连接构件中, 因不同的业务需求,需要同时支持不同类型的数据库,和包括 MySOL、0racle、SQL Server 三种。我们使用了工厂方法模式,有效解决了不同数据库类型对软件程序的影响, 具有很好的可扩展性。这样的设计有效地体现了构件的优势。

三、构件组装

0J 系统中不同的业务类型 ,需要采用不同的构件组装方式。在本系统的开发过程中, 我们用到了以下三种方式。首先是同步消息方式,以考试功能为例, 用户进入考试时, 考试构件需要核验考生信息,然后调取题库中的试题信息组成试卷,在此过程中,考试构件使用同步方式,依次问考生构件、题库构件请求数据,等待返回结果后再加工、组合,提供给调用者。其次是异步消息方式,以程序代码的在线提交评测功能为例, 评测机构件对代码的编译、执行、判分过程,相比于其他构件的数据处理过程,属于耗时操作,这时如果采取同步方式,将引起调用者阻塞,严重影响了用户体验,甚至出现雪崩效应。因此采用了异步消息队列,代码提交后写六消息队列立即返回原程序执行, 待评测机评测完成后再异步显示评测结果。

最后是基于工作流的方式,能够通过图形化的界面,动态编排系统构件之间的交互和依赖关系, 灵活改变多个构件之间协同工作的顺序, 通过简单构件的组台,以实现复杂功能的定制。

总结

系统自 2021 年 10 月正式上线已运行一年有余 , 在学校的日常教学考试和竞赛培训中授入使用,截至目前已有 3000 以上的学生用户、评测了 70000 条以上的程序代码,获得了单位同事领导和学校教师们的一致好评。

实践证明,0J 系统项目能够顺利上线,并且稳定运行,与系统采用了基于构件的开发方式密不可分。经过这次构件化开发的方法和实施的效果后, 我体会到了软件元素重用对开发过程的重要价值。从软件开发的方式看, 由机器语言、汇编语言, 到面向过程开发、面问对象开发,再到现在基于构件、面向服务的软件开发,软件元素在两个维度上呈现进化趋势: 内部功能越来越强大、全面,对外的接口越来越简单、标准。最终各领域软件可在一个统一标准下无缝组装,届时面向协作的软件开发、基于职能的软件开发等新技术都将出现, 上层应用功能的实现也将变得异常简单,计算机软件将会无所不在,数字化生活、智能地球等现在还处于概念阶段的事物,将会走进现实。这个目标值得我们每一位软件从业人员为之努力奋斗。

论文二

摘要

基于构件的软件开发是提高软件生产效率和软件产品质量的有效途径,本文结合我们的实践,以"在线学习支持服务平台"项目为例,讨论了基于构件的软件开发的技术的应用。由于我校现有的各级软件系统都是基于微软Windows系列平台,因此我们确定使用微软的COM组件技术来开发该平台,并介绍了该平台所使用的几种COM组件,主要采用VB6语言编写通用模块并生成DLL文件及注册成为COM程序,客户端用ASP语言来实现并通过ADO技术来调用SQL SERVER 2000和COM组件。在本项目中的开发过程中,我担任了系统架构设计工作。

正文

在线学习支持服务平台是面向我校开放教育学生进行远程学习教学辅导,经过多年的远程教育模式的探索,确立了成熟完善的远程教育教学模式–利用先进的网络数字信息技术,为广大的学生提供开放的教育平台和最优秀的教育资源,突出个性、学生自主学习的教学。

在线学习支持服务平台是一个综合性的在线式基于WEB的远程教学平台,存储着核心信息数据,提供网上课程、信息发布、查询、BBS、VOD视频点播等教学服务,该系统的开发技术主要集软件复用、企业级应用程序开发等技术于一体的基于构件的软件开发。系统运行于WINDOWS SERVER 2000,用SQL SERVER 2000为后台数据库,用ASP+IIS5.0来架构网站。

由于COM组件既可以被嵌入动态Web页面,还可以在LAN或桌面环境的VB、VC等应用中使用。另外该组件之间是彼此独立的。当应用需求发生变更时,可能需要更换中间层的个别COM组件,但并不影响其他组件的继续使用。组件具有若干对外接口(属性和方法),可以根据不同的应用需求,有选择地使用不同的接口。即使不再使用某些接口时,COM组件本身仍然可以继续使用。同一COM组件可以在不同的应用环境中重复使用。因此,结合我校的实际情况,我校现有的各级软件系统都是基于微软Windows系统平台,且开发人员对COM组件技术也较熟悉,对开发语言VB6也很熟悉,因此我们确定使用微软的COM组件技术来开发该平台。

该平台采用B/S结构进行设计,把整个系统分为三个层:数据库层、应用逻辑层、用户界面层。用户界面是浏览器,并通过ASP语言来实现同应用逻辑层构件交互。应用逻辑层负责事务处理。应用逻辑层主要通过COM组件方式来实现,数据库层用SQL Server。

我们依据平台的主要功能,在平台开发中,如果采用传统的方法来开发,则每实现一个功能都要编写同样的代码,为了节省开发时间和提高维护效率,我们把共用的代码模块都做成组件,例如我们把记录操作、数据库操作、查询做成用户管理组件,把用户身份认证和用户类型识别做成用户管理组件,把所有实现与数据库的连接做成连接组件,把用户的错误操作、与系统的交互出错等做成错误处理组件。对于各组件我们采用VB6语言进行编写并生成DLL文件,通过注册成为COM程序,供各个组件调用。在数据库连接方面,采用了ADO技术。由于ADO采用了OLE-DB技术,使能访问各式各样的数据并提高了访问性能。在该平台的开发过程中,主要设计和实现了以下一些COM组件:

一、用户管理组件,包括身份认证功能

我们主要定制COM组件用户管理组件UserCheck.dll进行用户管理处理。该组件主要完成两个功能:一是身份认证,主要是提供用户登陆时验明身份,保证应用的安全性。二是根据用户所输入的账户名确定该用户的类别。

因此,该组件具有三个接口,每个接口代表组件的某个属性或方法,对用户的登录请求作出相应的处理。如果是学生登陆则转入学生学习平台,如果是教师登陆则转入教师平台,如果是管理员登陆则转入管理员平台。

二、查询和提交信息组件

我们主要定制COM组件QuerySys.dll进行查询和提交信息处理。该组件主要完成两个功能。一是供学生用于查询学生成绩和查询课程信息。三是提交学生注册信息。

该组件具有两个接口,每个接口代表组件的某个属性或方法。如果学生的请求是查询功能,则将查询信息请求作出相应的处理,并将查询结果集返回给学生。如果学生的请求是提交注册信息,则将提交信息请求作出相应处理,并将信息提示返回给用户。

三、连接组件

我们主要定制COM组件Cerror.dll,该组件主要完成与数据库的连接。该组件具有一个接口,那就是确定数据源,以便自动连接后台数据库。

四、错误处理组件

我们主要定制COM组件Cerror.dll,该组件主要确定错误类集,该组件具有一个接口,主要是输出错误信息,方便用户排错。

我们把编译好的组件,将其在MST中注册,并将其分布在服务器上,这样就可以在设计平台过程中进行调用这些组件了。在本系统中,我们通过以下几种方式把组件集成到系统中来:

  • 一是连接集成,即我们将组件直接嵌入ASP主页中,即在ASP脚本中通过SET对象名=Server.CreateObject(“类名”)来引用,使此二进制组件可以运行于服务器端。
  • 二是容器集成,即如果一个组件需要调用另一个组件时,就在需调用的组件中引用另一个组件的方法。例如在使用查询和提交信息组件时就需要先调用连接组件。

我们结合连接集成和容器集成两种方式来组装系统,以登陆界面为例,在客户端我们只提供两个输入项和一个提交信息的功能按钮,主要通过ASP来实现。在服务器端,主要根据用户输入的信息来进行相应的处理。这就要调用各种组件。如果学生以错误的学号和用户名登陆,则系统调用用户管理组件、错误处理组件和连接组件,返回非法用户的信息。如果学生以合法的身份登陆进入学生平台,这就要调用用户管理组件、连接组件。如果教师以合法的身份登陆进入教师平台,也要调用用户管理组件、连接组件。

总结

目前,该平台运行收到良好的效果,我们采用COM组件技术进行开发,减少了重复输入代码的工作,缩短软件的开发周期。同时,在进行系统维护时,我们只关心组件的接口参数,而不用再考虑组件内部的具体实现,提高了系统的可维护性。在以后的工作中,如果我们要扩展某些功能,也可以重复利用这些组件,提高了系统的可复用性。

目前该平台运行存在的缺点是:由于在ASP中运行的COM组件是二进制代码,当COM组件工作出错时,ASP不能指出COM组件发生错误的具体位置,只能简单显示对象创建不成功。这样就给我们在调试该平台过程中增加了难度。

论文三

摘要

本文以我主持的某商业银行交易监控分析系统项目为实例,探讨了作为开发方公司基于构件技术开发项目碰到的问题以及解决的方法。文章首先解释了基于构件技术开发软件的基本概念,认为目前大多数开发单位的产品存在重复的功能模块,而重复的开发工作,直接导致了项目周期以及成本不必要的增加,针对这一问题,提出了应该及时整理已有的系统,形成企业构建库,针对性的选择构件,从而基于构件开发新的软件项目,在保证软件产品质量的前提下,缩短项目周期和开发成本,最终使企业盈利。

我在项目中担任了开发方的项目系统架构设计师,自始至终参与了整个项目的建设,自2021年3月项目启动至2021年10月验收历时8个月,系统至今稳定运行,取得了客户的一致好评,项目能够保证质量的前提下迅速完成,最终节约了成本,很大程度上得益于基于构件开发软件的应用。

正文

目前,银行间竞争已日趋激烈,降低银行的服务成本,提高对客户的服务质量,已成为银行竞争的关键。随着服务种类的增多、日交易量的增大,针对这些交易数据进行有效的管理变得迫在眉睫。首先,需要将各种交易实时监控,保证能够对异常交易进行及时处理,提高客户满意度。其次,需要对这些交易数据进行统计分析支持高层管理人员的决策,提高银行的竞争力。基于上述需求,2018年初,某市商业银行招标建设一个交易监控分析系统。我所在的单位中标后,我有幸参加了该项目的建设,承担了开发方的架构师一职。

交易监控分析系统主要包括4个子系统:基于B/S结构的管理平台、处理多种不同报文格式交易信息的数据转换平台,基于B/S结构的联机分析处理平台,数据维护子系统。众所周知,基于构件的软件开发是一种自底向上的、基于包装好的构件来构造应用系统的方法,主要包含构件的检索与提取,理解与评价构件,修改构件,组装构件,应用部署等工作。

目前软件行业间的竞争程度趋于白热化,建设方更倾向于选择一件有成功案例或者有类似项目成功案例的开发方。我认为,对于开发方来说,大多数开发单位的产品存在重复的功能模块,而重复的开发工作,直接导致了项目周期以及成本的不必要增加,如何利用已有的软件项目构造新的系统,而不仅仅是将其作为投标的筹码变得越来越重要。针对这一问题,我在采用即时整理已有的系统,形成企业构件库,针对性的选择合适的构件,加大对已修改构件的管理力度等方法,有效的实施了基于构件的软件开发工作。形成构件库是基于构件开发软件的前提。我们在已经成功实施的项目中,抽取一些共有的模块作为单独的组件,封装其内部操作,对外提供一致的调用接口。

我们分析发现,一些常用的模块例如登陆模块,只需要很少的改动就可以复用到新的系统中,对于一些看似不同的模块,例如查询银联交易流水,查询POS交易流水,查询设备状态信息等。如果对数据库操作的方式去分类的话,都离不开增删改查四个操作,因此,我们对表示层、业务层、数据层进行了面向接口的整理工作,封装成一个组件。使用Hibernate技术管理数据库操作,对于表示层集中在了Model层对象设计上,建立Model层对象与数据库的映射关系之后,直接使用构件组合待查询的交易信息,极大的减少了系统的重复性开发工作。针对性的选择构件上基于构件开发软件的关键。

构件的选择有多种途径,一是从构件库中提取符合要求的构件,而是从市场上购买现成的构件,三是根据特殊应用需求开发。在本次项目中,我们选择的构件来自第三方和企业构件库。

考虑到银行的前置机,核心主机都是Unix操作系统,而部分外围服务运行与Windows或Linux平台,所以我们采用了与系统无关的J2EE平台架构。关于系统与后台主机的通讯,DCOM和CORBA都是适合于服务器与服务器通信的成熟规范,由于选定了开发平台,我们选择使安装Java自带的ORB进行通信,后台主机将处理的交易信息使用UDP协议放到监控系统,从而实现了交易数据的获取。获取的报文需要经过转化为监控平台统一格式才可以使用,因此,我们需要数据转换服务,如果选择第三方的构件,面临的问题是无法对其进行源码级的修改,所以我们选择自主开发新的构件用于数据转换服务,平台处理XML格式的数据,数据转换服务实现XML报文与银行后台报文的转换。

几乎所有的信息管理系统都包含了登陆模块,这一块我们直接从构件库中提取,业务层、数据层都不需要修改,只需要更换表示层中的界面图片即可。系统使用验证客户端IP的方式,限制可访问系统的客户端,避免非法连接。用户权限使用角色,用户组等方式进行管理,便于权限分配。这些组件都是我们经过长期使用并且不断完善的模块,可直接从构件库中提取。

加大对已修改构件的管理力度是为今后的构件开发软件项目做好准备。在每个项目中,我们都或多或少的生成一些新的功能模块。在本次项目中,对数据维护子系统,就是新开发的一个组件,它负责定期进行对应用系统中的数据进行抽取,清洗工作,并将操作结果存储到数据仓库中,用于支持决策分析,其接口使用XML定义。对于这样的新开发的构件,经过测试之后,我们将其按照企业目前的标准进行严格定义,形成相关的文档,一起录入到企业构件库中,以便复用于后续的项目。对于一些修改过的构件,如数据转化模块,我们对它也进行了详细的描述,指定版本号以及各个版本之间的差异,便于以后针对不同的情况使用不同版本的构件。

在项目中,我们也发现了一些不足之处,例如要使已经完成的构件能有效的支持项目开发,对构件的管理与维护,员工对构件的理解程度都是不容忽视的问题。通过本项目的对其理解程度一致,在项目开发过程中,开发人员通常从构件库中检索获取构件,而随着构件的增加,不同的构件也可能存在部分的功能冗余,要在合适的系统上使用合适的构件就对开发人员提出了较高的要求。针对这一问题,我们除了采用培训员工的办法,还定期以知识竞答的方式组织员工进行知识竞猜,创造一种积极的氛围,促使员工对企业构件库有较高程度的理解。

总结

综上所述,经过整个项目组精心准备和严密实施,项目如期完成,自2018年3月项目启动至今,系统稳定运行,得到了用户的一致好评。回顾项目的实施过程,我体会最深的是,随着基于构件技术开发软件的成功实施,我们在享受它带来的便利的同时,也要注重企业内部的构件积累。 从通用性的角度来看,企业新开发的构件不如经过市场验证的第三方的成熟构件,从行业的角度来看,企业开发的构件能够满足其业务领域的大部分开发工作,这正是第三方构件无法做到的。感觉自己在结合第三方构件与企业内部构件进行软件开发的能力还有待加强, 我将在后续的项目中努力做好这些工作。

更多内容请见