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

摘要

  2019年3月,我单位联合某高校研发了《程序在线评测比赛考试系统》。系统以程序代码在线提交自动评测功能为核心,分为题库模块、评测机模块、实验作业模块、考试模块、比赛模块、抄袭判定模块、用户管理模块等,支持对接教务平台。在项目中我担任系统架构师,负责架构设计工作。
  本文以该系统为例,主要论述了软件需求获取技术在项目中的具体应用。在需求的前期阶段,以用户访谈和调查问卷结合的方式来进行需求获取;在需求的中期阶段,以现场观摩的方式来进行需求获取;在需求的后期阶段,采取构造快速原型的方式,持续迭代,来进行需求细化和系统演进。利用多种技术实施需求获取,有效地降低了项目风险,最终系统顺利上线,获得了用户的一致好评。

正文

  笔者在一个专为高校建设计算机专业智能教学一体化平台的单位任职,过往成果有《计算机组成原理仿真实验系统》等。2019年3月,我单位联合某大学研发了《程序在线评测比赛考试系统》项目(以下简称为“OJ系统”),以取代原有传统的编程上机考试平台。
  系统以程序代码的在线提交自动评测功能为核心,主要分为题库模块、评测机模块、实验作业模块、考试模块、比赛模块、抄袭判定模块、用户管理模块等。题库模块主要负责试题和测试用例的管理,用户根据试题要求编写程序代码提交到系统,系统将测试用例与程序代码发送给评测机模块,由评测机自动编译、执行、判分,并将结果发送给其他相关模块进行统计;实验作业模块用于在线布置作业,从题库中选取试题,设置截止日期等要求;考试模块用于学生在线考试,按教师预先设置的参数自动从题库随机抽题生成试卷,以及向教务平台上传考试成绩;比赛模块主要用于ACM竞赛的培训;抄袭判定模块用于鉴定代码与他人代码雷同率;用户管理模块负责用户信息的管理。在这个项目中,我担任了系统架构师的职务,主要负责系统的架构设计相关工作。
  常见的需求获取技术有用户访谈、问卷调查、现场观摩、原型化方法等。用户访谈主要对三个之内代表性客户谈话沟通获取需求,优点是灵活性好,适用范围广,缺点是时间难以安排,信息量大记录困难,需要领域知识,对机密话题敏感等,适合简单小范围的需求获取;问卷调查主要通过设计调查表来收集用户需求,优点是可短时间内廉价从大量回答中收集数据,缺点是双方未见面无法澄清提问,反馈信息不全面,无法深入问题细节,适合大范围需求收集;现场观摩主要针对较复杂、难理解的流程、操作,优点是直观清晰,缺点是效率较低,适合复杂需求的获取;原型化方法通过构造一个简易原型系统,根据用户在试用过程中意见重复修改直到满意,优点是允许用户早期交互反馈,缺点是较为费时,会误导用户对未来系统有不切实际的希望,适合需求不明确的情况。
  本文主要通过前期、中期、后期三个阶段,分别论述了OJ系统项目在需求获取过程中所采用的具体技术方法。

1. 前期阶段

  在此阶段遇到的主要问题就是OJ平台需要支撑全校编程课程的教学活动,这就需要有效、快速地全面概括需求。我们采用了用户访谈和调查问卷结合的方式,来进行需求获取。由于涉及编程课程众多,为了能突出重点,我们先选择了在教学方式上有代表性的部分课程,如程序设计基础、算法与数据结构、操作系统等,优先进行,然后再逐渐铺开。我们把需求调研团队分成了几组,分别进行需求收集。课程教学组长负责课程组的教学领导工作,我们采用了访谈的方式进行需求获取,通过与课程教学组长的详细沟通,我们对OJ系统的主要业务功能、用户角色等有了整体、全面的了解。由于任课教师具体的教学活动过程较为复杂,如实验作业、考试、比赛培训等,在课程教学组长的配合下,我们制作了调查问卷表格,下发给各位任课教师,经过统计整理后,我们获悉了编程课程的教学活动、过程细节。这种安排主次分明、详略得当,在前期起到了不错的效果,给后续的需求获取活动搭起了良好的基础。

2. 中期阶段

  在前面的阶段,虽然在总体需求的获取上已经有了一定的基础,但很多流程仅仅通过访谈和问卷无法直观了解。为了防止前期需求分析的缺陷带到后续阶段,我们决定采取现场观摩的方式来进行需求获取。我们征得单位领导的同意,在课程教学组长的协助和安排下,跟随任课教师,前往学校的计算机实验室,对目前编程课程的实验教学现场进行了观摩,了解了在传统实验教学方式中,学生和教师们的具体操作流程。比如,在传统的环境下,学生按题目要求编写完程序代码,需要手动进行编译、执行,然后输入测试数据,观察是否得到预期的结果。教师批改学生提交的实验作业时,也需要手动将代码逐个拷贝到编译环境中执行、测试。在这样的过程中,大部分时间和精力都在反复地复制粘贴,随意输入的测试用例并不能全面测试出程序的设计问题,且很难进行抄袭、雷同的判定。通过现场观摩的方式,我们更清楚地了解了业务流程,为后续OJ系统解决传统实验教学中存在的问题起到了良好的作用。

3. 后期阶段

  在此阶段我们基本上已经完成了大部分业务需求的收集,通过快速原型法构造出了一个简易的OJ系统,供用户试用与反馈。这个原型只是一个系统框架,很多操作是空动作,目的是向用户说明系统的功能和操作方法,以后再随着开发进程以及需求明确逐步求精。例如程序代码评测和考试功能,暂时不会进行实际的程序评测和累分,而是直接显示一个固定的评测结果和成绩,展示给用户看。整个构建过程,让用户也参与到设计中,提供了工作流程方面、业务领域方面不可或缺的经验,也为以后项目通过验收提供了有力支持。在每一次迭代过程中,通过和课程组交流,在完善需求的基础上,完善对象模型。某次试用中,课程组向我们提出一个需求“用户提交的程序代码,评测应当在较短时间内完成出结果,不能让用户等待”,但无法明确“较短时间”是多少合适。为完成这一需求,采取模拟延迟的方式,让课程组教师现场试用,明确了这个时间应该在10秒内,并反复修改原型,完成了这一迭代需求。

总结

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

论软件需求获取技术及应用相关推荐

  1. [架构之路-202]- 常见的需求获取技术=》输出=》用户需求、客户需求(As...., I want.....)、用例图

    目录 前言: 11.2.1 直接的用户访谈 1 . 准备访谈 2 . 访谈过程 3 . 访谈的后续工作 4 . 用户访谈的优缺点 11.2.2 问卷调查 1 . 调查表的制作 2 . 问卷调查的优缺点 ...

  2. 实验四 基于原型的软件需求获取

    实验四 基于原型的软件需求获取 Deadline:2018-4-18 10:00,以博客发表日期为准 评分标准: 按时交 - 有分(满分15分,博客),检查项目包括: 此次作业为结对项目,单干户不得分 ...

  3. 软件需求管理(二) 需求获取

    一. 需求获取概述 1.1相关概述 软件需求获取是软件工程的主体. 主要表现为: 发现问题->分析问题->解决问题 的过程. 需求获取阶段主要产生的文档:1.前景和范围文档 2.用例说明文 ...

  4. 《软件需求》学习笔记

    为什么80%的码农都做不了架构师?>>>    <软件需求>学习笔记 前几天读了Karl E.Wiegers<软件需求>,书的内容写得非常好.我这里谈谈读了此 ...

  5. 软件工程——需求获取

    目录 前言 一.需求工程师 需要具备的能力 目标 二.需求定义 需求定义涵盖以下 什么是需求? 存在问题的需求描述 需求规约 三.撰写需求文档 软件需求规格说明 软件需求规格说明的风格 生成不同风格S ...

  6. 软件项目获取用户需求的沟通技巧(摘自IT168技术频道)

    软件开发生命周期包含需求.设计.编码和测试四个过程阶段,其中需求过程是第一个也是最重要的一个阶段.软件需求包括三个不同的层次:业务需求,说明了提供给客户和产品开发商的新系统的利益,反映了组织机构或客户 ...

  7. 软件开发获取客户需求的十大沟通技巧

    2019独角兽企业重金招聘Python工程师标准>>> 成功的软件产品是建立在成功的需求基础之上的,而高质量的需求来源于用户与开发人员之间有效的沟通与合作.当用户有一个问题可以用计算 ...

  8. 用户需求测试软件,用户需求和软件需求的区别

    原标题:用户需求和软件需求的区别 一些刚实施GJB5000A组织的开发人员,不是很理解软件研制任务书和软件需求规格说明的区别.这里再次解读下这个问题. 软件研制任务书就是用户需求,而用户需求是从用户的 ...

  9. 《软件需求十步走》阅读笔记06

    开发因需求而来,需求开发以需求规划的成果为主要依据.软件需求开发首先要做的是获取需求,得到目标,系统关联情况以及用例的分析:其次是需求分析,软件系统的可行性,用户接口,系统功能,数据,优先级等在这些需 ...

最新文章

  1. Java网络编程从入门到精通(2):创建InetAddress对象的四个静态方法
  2. async function_掌握 Async/Await
  3. 矩阵论思维导图_矩阵求导与矩阵微分
  4. 常用函数(字符和字符串)
  5. ubuntu 虚拟机 串口 socket_上篇 | 虚拟机Ubuntu向开发板AMR传送文件
  6. Asp.Net MVC5入门学习系列⑤
  7. mysql 合并相加_mysql 多条记要判断相加减合并一条
  8. 运行原理_JMeter运行原理
  9. [猜你喜欢]冠军 yes,boy! 分享 | 推荐系统也可以很简单 做个记录 以后方便学习
  10. 怎么将excel中的url批量转化为图片_Python+Wind 批量下载上市公司年报 - Part 1/2
  11. 豪!华为放话:3年培养100万AI人才!网友神回应了
  12. python连续写入文件操作_Python实现的读取文件内容并写入其他文件操作示例
  13. 一图看懂什么是集成电路?
  14. 使用Java打印三角形
  15. pcie gen3 bios设置_性价比无敌or搞笑? A卡传统回来了!(附刷bios教程)
  16. 聊点不一样的,初级软件测试岗需要做些什么?
  17. Master of Typing Tutor 1.2.3 特别版 Mac 打字练习软件掌握打字
  18. 打造自己的HelloDrone 无人机APP过程《3》
  19. 「读书笔记」第五项修炼-学习型组织的艺术与实践(一)
  20. 为什么你还没有买新能源汽车?

热门文章

  1. 基于JavaWeb的传染性疾病的了解与预防网站设计
  2. 【硬件】电脑主机结构 | 总分总
  3. python实现MACD均线择时策略
  4. 忠于孤独——《刺猬的优雅》
  5. 工作,你需要注意的20个规则
  6. 一文搞懂JDK8与Java1.8的区别
  7. win10系统常用办公技巧
  8. 大数据的5个V是什么
  9. 怎样不删除聊天记录退出微信群
  10. 天玑720支持鸿蒙系统吗,天玑720和麒麟820哪个好_天玑720和麒麟820对比评测