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

摘要

  2019年3月,我单位联合某高校研发了《程序在线评测比赛考试系统》。系统以程序代码在线提交自动评测功能为核心,分为题库模块、评测机模块、实验作业模块、考试模块、比赛模块、抄袭判定模块、用户管理模块等,支持对接教务平台。在项目中我担任系统架构师,负责架构设计工作。
  本文以该系统为例,主要论述了基于架构的软件设计方法在项目中的具体应用,着重从架构需求、架构设计、架构实现三个阶段展开介绍。在架构需求阶段,通过用户访谈、问卷调查、现场观摩、构造原型的方式全面获取了需求;在架构设计阶段通过UML模型中的4+1视图来对系统的架构进行建模;在架构实现阶段,对系统构件进行了获取、开发和组装。最终系统顺利上线,获得了用户的一致好评。

正文

  笔者在一个专为高校建设计算机专业智能教学一体化平台的单位任职,过往成果有《计算机组成原理仿真实验系统》等。2019年3月,我单位联合某大学研发了《程序在线评测比赛考试系统》项目(以下简称为“OJ系统”),以取代原有传统的编程上机考试平台。
  系统以程序代码的在线提交自动评测功能为核心,主要分为题库模块、评测机模块、实验作业模块、考试模块、比赛模块、抄袭判定模块、用户管理模块等。题库模块主要负责试题和测试用例的管理,用户根据试题要求编写程序代码提交到系统,系统将测试用例与程序代码发送给评测机模块,由评测机自动编译、执行、判分,并将结果发送给其他相关模块进行统计;实验作业模块用于在线布置作业,从题库中选取试题,设置截止日期等要求;考试模块用于学生在线考试,按教师预先设置的参数自动从题库随机抽题生成试卷,以及向教务平台上传考试成绩;比赛模块主要用于ACM竞赛的培训;抄袭判定模块用于鉴定代码与他人代码雷同率;用户管理模块负责用户信息的管理。在这个项目中,我担任了系统架构师的职务,主要负责系统的架构设计相关工作。
  基于架构的软件设计方法(ABSD)包括架构需求、架构设计、架构文档化、架构复审、架构实现和架构演化六个阶段。架构需求阶段明确用户对系统在功能、行为、性能、设计约束等方面的期望,包括需求获取、标识构件和架构评审;架构设计阶段根据需求生成并调整架构决策,包括提出架构模型、映射构件、分析构件相互作用、产生架构和评审;架构文档化阶段对架构设计分析与整理,产生架构规格说明书和架构质量说明书;架构复审阶段评价架构能否满足需求与实现质量属性、层次构件划分是否合理,标识潜在的风险,及早发现设计中的缺陷错误;架构实现阶段对架构进行实现,包括架构分析与设计、构件实现、组装和系统测试;架构演化阶段主要解决开发中用户需求变更问题,包括架构演化计划、构件变动、更新构件相互作用、构件组装测试与技术评审。
  系统使用基于Spring Cloud的微服务架构开发,本文着重从架构需求、架构设计、架构实现三个阶段,论述基于架构的软件设计方法在项目中的具体应用、遇到的问题和解决方案。

1. 架构需求

  在此阶段遇到的主要问题是OJ平台需要支撑全校编程课程的教学活动,这就需要有效、快速地全面获取需求。在需求的前期阶段,我们采用了用户访谈和调查问卷结合的方式,把需求调研团队分成了几组,分别进行需求收集。通过与课程教学组长的详细沟通,我们对OJ系统的主要业务功能、用户角色等有了整体、全面的了解。之后又制作了调查问卷表格,下发给各位任课教师,经过统计整理后,我们获悉了编程课程的教学活动、过程细节。在需求的中期阶段,我们在课程教学组长的协助和安排下,跟随任课教师,前往学校的计算机实验室,对目前编程课程的实验教学现场进行了观摩,了解了在传统实验教学方式中,学生和教师们的具体操作流程。在需求的后期阶段,我们基本上已经完成了大部分业务需求的收集,通过快速原型法构造出了一个仿真的OJ系统,供用户试用与反馈,让用户也参与到设计中,提供了工作流程方面、业务领域方面不可或缺的经验,也为以后项目通过验收提供了有力支持。

2. 架构设计

  在此阶段遇到的主要问题是如何合理设计与描述软件架构。我们以UML模型中的4+1视图来对架构建模。场景视图使用UML模型中的用例图来进行建模,结合用户需求,在系统中划定了在校学生、任课教师、系统管理员、校外人员四类用户角色,并分别为这些角色标识了相应用例。逻辑视图使用UML模型中的包图来进行建模,我们经过分析,决定采用微服务架构风格开发,将系统分为前端Web服务、平台保障服务、业务服务三部分。前端Web服务由负载均衡与服务器集群结合;平台保障服务分为API网关、服务注册中心、监控平台,用以实现基础服务框架;业务服务分为多个微服务,实现具体业务功能。物理视图使用UML模型中的部署图来进行建模,系统微服务采用分布式的部署方法,每个微服务根据实际情况可在同一台物理机器或多台物理机器上同时部署多个实例。集群通过负载均衡做统一访问,部署为路由模式,系统内部网络与外部网络分属于不同的逻辑网络。在负载均衡算法的选择上,使用了最小连接法。

3. 架构实现

  在此阶段遇到的主要问题是系统构件如何实现和组装。构件实现分为两种方式:获取现有构件、开发新构件。OJ系统需要与教务管理和OA系统对接,我们使用开发商提供的SDK实现;微服务架构的基础框架,如Spring Cloud、Eureka,以及评测机调用的编译器等,直接集成第三方软件实现。对于常见信息系统共同具备的用户管理、角色权限管理、日志记录、内容维护、消息中心等基本功能,通过取用单位过往项目开发中所积累的相应构件来实现。对于OJ系统专属功能构件,需要专门开发,我们使用了多种设计模式,例如通过装饰器模式来实现同一试题在实验作业、比赛、考试等多种使用场景下的扩展功能,通过策略模式来实现评测机对C语言、Java、Python等多种编程语言的不同编译方法。构件实现完成后,我们根据不同业务类型,采用了不同的构件组装方式。例如考试服务从题库获取试题信息,采用同步消息方式;程序评测服务属于耗时操作,采用异步消息方式;涉及审批流程的业务,采用基于工作流的组装方式。

总结

  系统自2019年10月正式上线已运行一年有余,在学校的日常教学考试和竞赛培训中投入使用,截至目前已有3000名以上的学生用户、评测了70000份以上的程序代码,获得了单位同事领导和学校教师们的一致好评。在使用中系统也出现了一些问题,比如评测机服务需要执行用户提交的代码,部分用户短时间内提交了大量不安全代码,导致评测机集群中所有实例全部宕机。这是由于早期在可靠性方面的需求分析不够周全,系统没有进行充分的容错设计。我们引入心跳机制、快照回滚机制,以及基于机器学习技术的预判断机制,使评测服务宕机时能够在10秒内自动重置恢复运行,最终解决了该问题。
  实践证明,OJ系统项目能够顺利上线,并且稳定运行,与系统采用了合适的设计方法密不可分。经过这次基于架构的软件设计方法和实施的效果后,我也看到了自己身上的不足之处,在未来还会不断地更新知识,完善本系统在各方面的设计,使整个系统能够更加好用,更有效地服务于高校师生。

论基于架构的软件设计方法及应用相关推荐

  1. 软考·系统架构师论文——论基于架构的软件设计方法及应用

    文章目录 说明 摘要 过渡 项目背景 论点理论+实践 结尾 说明 1.[摘要 300~330字] ① 项目介绍:时间.项目名.项目主要功能简述.作者角色及工作内容 ② 项目技术简介:正文理论/分论点的 ...

  2. 系统架构设计师-基于架构的软件设计

    简介 基于架构的软件设计(Architecture-Based Software Design,ABSD)是一种架构驱动方法.这种方法有 3 个基础: (1)功能的分解.在功能分解中,ABSD 方法使 ...

  3. 软件工程学习笔记——第六章 软件设计方法

    目录 第一章 概述 第二章 过程和活动 第三章 软件过程模型 第四章 问题定义和可行性研究方法 第五章 需求分析方法-1 第五章 需求分析方法-2 第六章 软件设计方法 第七章 软件实施与测试方法 第 ...

  4. android 记事本ppt,基于Android记事本软件设计与实现.ppt

    基于Android记事本软件设计与实现 START 基于Android记事本软件的设计与实现 研究现状 传统记事本虽然与纸质的笔记本相比,给我们的生产生活带来了巨大的便利,但随着智能化的迅猛发展和互联 ...

  5. 机械设计matlab,基于MATLAB的机械设计方法分析

    随着计算机技术的不断发展,一系列计算软件得到了开发和应用,继而为机械设计带来了新的发展方向.而MATLAB作为强大的数学计算软件,拥有可靠性强.功能多和操作方便等多种优点,所以被广泛地应用在机械设计中 ...

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

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

  7. 三层架构:软件设计架构

    三层架构:软件设计架构 1. 界面层(表示层):用户看的得界面.用户可以通过界面上的组件和服务器进行交互 2. 业务逻辑层:处理业务逻辑的. 3. 数据访问层:操作数据存储文件.

  8. 自适应控制---模型参考自适应控制(一)基于局部参数最优化的设计方法(MIT方案)

    模型参考自适应简介 基于局部参数最优化的设计方法(MIT方案) 举例 n<=4时的劳斯判据: n=1时,特征方程为:,各系数为正. n=2时,特征方程为,各系数为正. n=3时,特征方程为,各系 ...

  9. 软件工程——软件设计方法(概要设计)

    软件设计方法主要分为两个方面:1.概要设计  2.详细设计 概要设计: 一.软件设计的目标和任务 1.定义 将文字转化为结构图,根据用信息域表示的软件需求,以及功能和性能需求进行数据设计,系统结构设计 ...

  10. 【软件设计】软件设计方法归纳总结

    软件设计方法有:结构化设计(数据流图为依据).面向对象设计(面向对象概念为依据): 结构化设计方法的模块化体现为:过程.函数.子程序: 面向对象设计的模块化体现为:类.对象.构件. 以上为主流的两种, ...

最新文章

  1. 购买IBM System x3650 M4十大理由
  2. UITableView性能提升和优化(第3章) 之一
  3. vue-quill-editor上传内容由于图片是base64的导致字符太长的问题解决
  4. react中使用构建缓存_通过在React中构建Tic Tac Toe来学习ReasonML
  5. TQ210——交叉编译器的安装
  6. 计算机考研985院校不歧视,考研最不歧视的985大学有哪些
  7. 即这样的WZSZF01代码是错误的
  8. 如何使用开源工具制作YouTube系列
  9. ora-28500 ora-02063 mysql_oracle dblink mysql 报错ORA-28500
  10. pythondef元组参数传递_Python参数传递(传值传引用)
  11. 盒马员工因工资单意外被同事看到,遭强制开除;微博被传大面积裁员、员工被要求主动离职,官方否认;豆瓣在截图中添加盲水印|雷峰早报...
  12. 【转】VLAN(Virtual LAN)“虚拟局域网”
  13. three.js 键盘w、s、a、d控制几何体移动
  14. 关于使用OpenXml向Excel插入数据的一点总结
  15. 数据挖掘与python实践心得体会_数据挖掘心得体会
  16. 数学建模笔记-斜抛运动建模
  17. ACM常用算法模版(常用函数与STL、重要公式与定理)
  18. Unity中的角色属性芒星比例图
  19. app播放无声音乐实现app后台运行
  20. 技术交流微信群欢迎小伙伴前来交流

热门文章

  1. QT安装遇到的问题及解决
  2. 步进电机驱动器怎么设置细分
  3. c语言均衡器,拿什么拯救你的音色——初识均衡器
  4. nbu 7.5备份oracle,NBU7.5备份oracle
  5. 【Unity3D】初学加密技巧(反破解)
  6. 二进制转格雷码c语言编程,格雷码简介及格雷码与二进制的转换程序
  7. signature=34db6f8e3cd9ad368186a42fa9bb3c02,ad.html
  8. 条码打印机如何打印流水号
  9. 计算机考试excel基础试题,计算机基础(Excel2010)试题及答案解析
  10. html select 默认不选,解决设置select默认选中不生效的方法