持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
如何分解一个系统设计的需求
今年被称为卢雷元年,广大毕业生又受罪了,这写个小小论文有这么难吗?我一直认为难的不是实现一个东西,而是有这个东西的想法,选择比努力更重要,诺贝尔奖会颁发给提出这个概念的人而不是后面做实验的人。导师既然已经给出了题目,那么最难的一步其实已经跨出去了。
虽然已经错过了做毕业论文开始的时间,但我想我这系列的思路能够帮助到下一届的学弟学妹们。
这一篇开始我们从零使用django搭建一个在线考试系统。
分析这个系统会有什么
考试系统是一个很常见的系统,网上有很多描述,我在一些网上搜了点资料并加以研究。我们使用原型化的设计方法,暂且先提出这是个常规的数学考试系统,每次考试都是100分的满分,用于高中3个年级的考试。这样我们可以用以前的经历来对照拟合这个系统的实际功能。
首先是向下拆解这个需求,这是一个发散思考的过程,看起来会比较乱,因为这是想到什么写什么,在拿到题目的时候一开始并不一定有明确的思路,认定这个东西最后会是怎么样的,我们把它全部写下来,然后再修改修改,这样可以得到一个大致的框架。
考试我们肯定不陌生,在我们还是个孩童的时候,我们参加了各种各样的考试,即便毕业为成人,依然会有一些考试在等着你。
就考试本身,它肯定要分科目,是什么课的考试?也要分难度,是几年级的考试?然后还有时间、时长、地点、监考人等额外的属性。这就是一场考试。
再思考考试的内容,他肯定有什么选择题、填空题、判断题、简单题之类的。组合在一起就是一张完整的卷子。
对于题目,选择题不管是多选还是单选,肯定是题目和选项,填空题与判断题就是题目和答案,简单题就是题目和参考答案。然后一张卷子必然会有难度不一致的地方,所以题目是有难度级的,简答题还有分数的不同,毕竟最后的大题肯定不能和普通简答题相提并论。这些内容组合在一起就是一张试卷。
采用随机组卷的话,那么每个人拿到的试卷就是不一样的,采用固定组卷的话,那么每个人的试卷是一样的。
人员上,首先肯定是有考试的人。参试人员具有一个唯一的身份标识id,是学号或者身份证号码,然后还有名字、性别、学校、班级等一些看似无关紧要,却可以加快辨识出这个人的属性。
然后是答题的试卷,我这里称呼它为答题结果集。有明确答案的客观题目我们可以直接在系统中处理分数,主观的题目就由老师来处理。
既然提到了老师,那么人员就没必要区分开,给人员加上身份的类型,我认为暂且可以划分为学生、老师、可以出卷子的老师、派试卷人员、系统管理员。其中派试卷人员是我想的可以派发卷子给别的老师批改或者派给一些学生去考试的管理人员。老师这个权限本身不能直接改卷子,因为考试的科目、年级这些都是不一样的。本身也只是主观题需要批改,所以配置起来只需要将某次考试分配给一些老师就可以了。
到这里,一个数学考试系统的雏形就能在脑海中有了点意思。