声明:本文为本人在软考系统架构设计师备考期间的练手写作,不保证内容的原创性与正确性,仅供参考,请勿照抄和用于学术论文等正规场合,因不当使用产生后果一律自负。

摘要

  2019年3月,我单位联合某高校研发了《程序在线评测比赛考试系统》。系统以程序代码在线提交自动评测功能为核心,分为题库模块、评测机模块、实验作业模块、考试模块、比赛模块、抄袭判定模块、用户管理模块等,支持对接教务平台。在项目中我担任系统架构师,负责架构设计工作。
  本文以该系统为例,主要论述了软件系统建模方法在项目中的具体应用。系统采用面向对象建模方法,基于UML中的4+1视图建模,着重从场景视图、逻辑视图与物理视图三个方面介绍。场景视图以用例图分析主要用户角色与用例;逻辑视图通过包图对系统的前端Web服务、平台保障服务、业务服务功能建模;物理视图使用部署图描述微服务在硬件环境的具体部署方法。最终系统顺利上线,获得用户一致好评。

正文

  笔者在一个专为高校建设计算机专业智能教学一体化平台的单位任职,过往成果有《计算机组成原理仿真实验系统》等。2019年3月,我单位联合某大学研发了《程序在线评测比赛考试系统》项目(以下简称为“OJ系统”),以取代原有传统的编程上机考试平台。
  系统以程序代码的在线提交自动评测功能为核心,主要分为题库模块、评测机模块、实验作业模块、考试模块、比赛模块、抄袭判定模块、用户管理模块等。题库模块主要负责试题和测试用例的管理,用户根据试题要求编写程序代码提交到系统,系统将测试用例与程序代码发送给评测机模块,由评测机自动编译、执行、判分,并将结果发送给其他相关模块进行统计;实验作业模块用于在线布置作业,从题库中选取试题,设置截止日期等要求;考试模块用于学生在线考试,按教师预先设置的参数自动从题库随机抽题生成试卷,以及向教务平台上传考试成绩;比赛模块主要用于ACM竞赛的培训;抄袭判定模块用于鉴定代码与他人代码雷同率;用户管理模块负责用户信息的管理。在这个项目中,我担任了系统架构师的职务,主要负责系统的架构设计相关工作。
  常用的软件系统建模方法有结构化建模方法、信息工程建模方法、面向对象建模方法三种。结构化建模方法以过程为中心,用于分析一个现有的系统以及定义新系统的业务需求,创建的模型为数据流图(DFD),适合流程较为稳定的系统;信息工程建模方法以数据为中心,但过程敏感,强调在分析和研究过程需求之前,首先研究和分析数据需求,创建的模型为实体联系图(ERD),主要用于数据建模;面向对象建模方法将数据和过程集成到对象中,创建的模型为对象模型,通过统一建模语言(UML)描述,定义了几种不同类型的模型图,以对象的形式共建一个信息系统或应用系统。
  OJ系统使用微服务架构开发,基于面向对象建模方法中的4+1视图建模,建模工具为Rational Rose,描述语言为UML,这里着重从场景视图、逻辑视图、物理视图三个方面展开介绍。

1. 场景视图

  场景视图使用UML模型中的用例图来进行建模。OJ系统功能主要面向高校学生程序设计语言的在线学习、考试、比赛,我们经过分析,结合用户的需求,在系统中划定了四类用户角色,这些角色分别为:在校学生、任课教师、系统管理员、校外人员。在校学生用户是OJ系统学生端的主要使用者,学生涉及的主要用例有:登录系统、提交代码、自由练习、参加考试、提交实验作业、参加比赛、信息维护、查看系统帮助、交流讨论等;任课教师用户属于OJ系统的管理者,教师涉及的主要用例有:登录系统、信息维护、班级管理、助教管理、学生管理、考试管理、题库管理、实验作业管理、比赛管理、代码查重、论坛管理等;系统管理员拥有OJ系统最高的系统权限,在具备学生与教师所有用例的基础上,还增加了教师管理、评测机管理、系统管理、服务器管理等用例。校外人员用户主要面向社会以及其他高校的编程学习爱好者,仅具备登录系统、提交代码、自由练习、参加比赛、查看系统帮助五种用例。

2. 逻辑视图

  逻辑视图使用UML模型中的包图来进行建模。我们经过分析,决定采用微服务架构风格开发,将系统分为前端Web服务、平台保障服务、业务服务三部分。前端Web服务由负载均衡与服务器集群结合,解决前台界面并发问题;平台保障服务分为API网关、服务注册中心、监控平台,用以实现基础服务框架,所有业务服务都注册到服务注册中心;业务服务分为多个微服务,实现具体业务功能,解决协同问题。当用户通过网络访问系统时,首先会访问到前置的负载均衡服务器,负载均衡服务器会将请求转发到前端网站的集群,前端网站通过发起http请求来和后端交互。API网关收到前端的请求,会从服务注册中心根据当前请求,来获取对应的服务配置,随后通过服务配置再调用已注册的服务。当后端微服务存在多个实例时,将采取负载均衡的方式调用。后端微服务通过同步消息、异步消息、工作流三种方式协同工作,完成具体业务功能。服务监控平台注册到服务注册中心,获取所有后端业务服务的运行状态信息。

3. 物理视图

  物理视图使用UML模型中的部署图来进行建模。系统微服务采用分布式的部署方法,每个微服务单独编译、打包、部署,基于Docker容器连同运行环境一起封装,根据实际情况可在同一台物理机器或多台物理机器上同时部署多个实例来提高系统的性能。服务启动后会将自身信息注册到已部署好的分布式服务注册中心,所有客户端请求一律进入路由网关,路由网关根据请求通过服务注册中心来进行服务发现,然后通过反向代理的方式调用具体服务。在分布式部署多个服务的基础上,前端服务器集群通过Nginx负载均衡服务器做统一代理访问,部署为路由模式,系统内部网络与外部网络分属于不同的逻辑网络,以实现系统内部与外部网络的隔离。在负载均衡算法的选择上,使用了最小连接法,每当客户端的请求来临时,任务分发单元会将任务平滑分配给最小连接数的微服务节点,这样的部署方法以廉价且透明的方式扩展了服务器和网络的带宽,可以大大提升系统的并发量,同时保证系统整体的稳定性和可靠性。

总结

  通过4+1视图的场景视图、逻辑视图和物理视图等建模方式,对系统进行了详细的分析,为系统的设计和接下来的项目开发提供了有力的支持。
  系统自2019年10月正式上线已运行一年有余,在学校的日常教学考试和竞赛培训中投入使用,截至目前已有3000名以上的学生用户、评测了70000份以上的程序代码,获得了单位同事领导和学校教师们的一致好评。不可避免的,我们在设计过程中,也存在一些问题和不足,不少开发人员在实现过程中有时还是习惯于原有的结构化设计方法,对4+1视图模型的使用有些抵触。而且,这些视图在应用过程中,往往不是单独使用,需要多个视图综合运用。这方面,我们还缺少相关的经验。
  实践证明,OJ系统项目能够顺利上线,并且稳定运行,与系统采用了合适的软件系统建模方法密不可分。经过这次4+1视图的建模方法和实施的效果后,我也看到了自己身上的不足之处,在未来还会不断地更新知识,完善本系统在各方面的设计,使整个系统能够更加好用,更有效地服务于高校师生。

论软件系统建模方法及其应用相关推荐

  1. IDEF企业软件系统建模方法

    IDEF是为学术界和工程界普遍接受的企业建模方法论.IDEF丰富强大的表达能力与直观性使其得到广泛的应用 从IDEFO到IDEF14(包括IDEF1X在内)总共有16套的方法,每套方法都通过建模程序来 ...

  2. 软件工程结构化建模的方法和工具_系统架构师之——软件开发方法

    不管你是开发人员,还是互联网行业人员,基本上经常看到各种各样的软件相关的图,如什么架构图什么设计图什么模式图甘特图等.很多时候总是傻傻分不清.对此,我们很有必要对系统开发基础知识有认知.对于一名程序员 ...

  3. 什么是软件形式化方法

    软件形式化方法(Formal Method)在软件开发中一直都受到多方面的争议.持肯定态度的拥护者认为形式化方法会引起软件开发的革命,另一些持否定态度者则怀疑甚至反对将数学引入软件开发过程中. 形式化 ...

  4. [架构之路-131]-《软考-系统架构设计师》-软件工程-1-软件工程方法大全(软件开发过程方法、软件开发过程模型、逆向工程、净室软件工程)

    前言: 第3章 软件工程 3.1 软件开发过程方法 3.1.1 什么是软件工程 软件工程是一门研究用工业硬件生产的工程化方法构建和维护有效.实用和高质量的软件的学科. 它涉及程序设计语言.数据库.软件 ...

  5. 面向过程的软件设计方法

    面向过程的软件设计方法 前面主要是对系统的分析,从而明确我们系统的逻辑模型.也就是说,通过前面几章我们清楚了"系统需要做什么?".而软件设计阶段主要任务则是要实现系统逻辑模型向物流 ...

  6. python画简单的图形的代码-Python实现画图软件功能方法详解

    概述 虽然Python的强项在人工智能,数据处理方面,但是对于日常简单的应用,Python也提供了非常友好的支持(如:Tkinter),本文主要一个简单的画图小软件,简述Python在GUI(图形用户 ...

  7. 单片机 10种软件滤波方法的示例程序

    单片机学习笔记_10种软件滤波方法的示例程序 假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad(); 1.限副滤波 /*  A值可根据实际情况调整     v ...

  8. ubuntu更换软件源方法和实验成功软件源地址

    ubuntu更换软件源方法 转载部分内容: 这些bionic.main.restricted.universe.multiverse是什么意思呢,该怎么修改才对,实在是让人头大.简单了解一下:bion ...

  9. madagascar 软件安装方法

    [引用]madagascar 软件安装方法(ubuntu下) (2013-07-17 04:49:22) 转载▼ 标签: 教育 分类:madagascar 本文转载自永远的垦荒者<madagas ...

  10. 操作系统(十九)进程互斥的软件实现方法

    2.3.2 进程互斥的软件实现方法 目录 2.3.2 进程互斥的软件实现方法 2.3.2.1 单标志法 2.3.2.2 双标志先检查法 2.3.2.3 双标志后检查法 2.3.2.4 Peterson ...

最新文章

  1. Nature调查:读博难,在中国读博难上加难
  2. 1.4操作系统的变革
  3. PHP 6:PHP 基本数据类型
  4. 微信小程序隐藏菜单栏目下转发按钮的几个方法
  5. 【Python】自动轨迹绘制
  6. Pickle Finance:BAC-DAI Pickle Jar将在迁移到BAS v2后更新
  7. JS中对象赋值只传值不传对象(地址)的方法,改变新值不影响旧值的两种方法...
  8. ubuntu文字界面与图形界面切换
  9. delphi7 获取dll的类_上传quot;定时任务quot;获取系统权限
  10. Django学习笔记之Ajax入门
  11. Process 获取子进程输入流、杀死子进程
  12. 超轻量级Web安全漏洞扫描工具Netsparker使用教程介绍
  13. ubantu20刷新DNS缓存的命令
  14. 二维码图片处理换logo,加文字
  15. mysql热备份使用方案_MySQL双机热备份实施方案
  16. 程序化生成(PCG)算法的改进——基于以地学为主的多基础学科
  17. EffNet图像分类--分类精子图片优化!
  18. IMX6 VPU解码流程
  19. 正确进入Iphone DFU模式
  20. 关于pyrit安装失败最新解决

热门文章

  1. C#收集中控ZKTeco考勤数据
  2. Vuejs中字符串判空处理--如何判断字符串是否为空或不为空
  3. 手工清除Windows服务器上的Steam挖矿病毒:HackTool/CoinMiner.a及Trojan/Miner.ac
  4. 将读书笔记自动生成思维导图(Markdown)
  5. 语音识别算法_开源语音识别算法_语音 识别 - 云+社区 - 腾讯云
  6. k8s安装calico网络插件
  7. IOS开发之-人脸识别
  8. 基础学习——MySQL基础
  9. 国外统计学课程主页Statistical Books, Manuals and Journals
  10. 用pe做2012服务器系统教程,微软WDS网络启动PE做系统的服务器配置和PE修改教程...