软件工程-综合性实验

一、需求概述

1. 引言

毕业论文选题系统的开发目的是,建立一个完备的毕业论文选题流程。通过信息化管理,方便教师出题、校内各学院审核、学生选题、教师选定学生以及公布最终毕业论文选题结果。

根据教育部制订的本科教学要求,对本科生毕业论文选题的要求大体如下:

(1) 每名本科生都要写毕业论文,否则不能毕业;

(2) 同一专业、同一届毕业的学生,论文题目不能相同;

(3) 每个学生的毕业论文都要求有一名指导教师,一名教师可以指导多名学生。

为此,教务处制订出一套标准化的毕业论文选题流程基本要求,经过与系统公司双方共同设计出一套能够比较好地与未来所开发的信息系统相匹配的《毕业论文选题流程》,确定了相关的规则。

2. 信息描述

该系统必须解决目前该高校由于没有使用信息系统处理业务,在毕业生选题存在诸多不便。该系统的后台数据库需要记录的基本信息包括:教师信息、学生信息、毕业论文题目列表、选题记录。

该系统的信息流和信息结构如下:

l 教师信息以及学生信息的信息流可以学校的从学籍和人事系统直接获得。

教师信息=教师编号+教师姓名+所在学院+所在专业

学生信息=学号+学院+专业+班级+姓名

l 毕业论文题目列表由教师登录该系统后录入的题目构成。

毕业论文题目列表=题目编号+教师编号+题目内容+摘要说明+分类+对选题学生的条件要求+确定状态

l 选题记录是根据学生选择题目,教师选定学生或者系统按照一定机制分配后,教师、毕业论文题目与学生对应关系的记录。

选题记录=记录编号+题目编号+学号+学生选题时间+学生个人简介+教师选定状态

3. 功能描述

学校内的用户(教师、学生、教务员)登录后,可以使用该系统的对应角色的以下功能:

(1) 教师在系统上录入所出的毕业论文题目,并会记录在毕业论文题目列表中。

(2) 学院对教师所出的题目进行审核,以避免出现雷同的题目。一旦发现雷同的题目,撤销(删除)较晚提交题目教师的题目,并通知该教师补录新的题目。论文题目经过审查由教务员和教师确认后,正式生效,不允许再次变更,并将毕业论文题目列表的对应题目状态修改为最终。

(3) 教务员在系统中公布最终确认的教师出题题目名单供学生选择题目。

(4) 学生在本学院的同专业的毕业论文题目列表中,选择自己想做的题目。学生选题时可以录入个人简介(向教师推介自己,增加被选中的机会),这些信息都记录在选题记录中。需要说明的是:

l 学生每轮最多可以选3个题目,提交后不允许撤销。

l 第2轮选题时,系统应更新可选的论文题目清单,对于在第1轮已经确定了学生的题目,显示被选中的学生姓名,不允许学生在第2轮选择。

l 对第1轮已经被教师选中的学生,不允许参与第2轮选题。

(5) 教师选定学生。教师在已报名做自己所出题目的学生中,选定其中1名学生,并在选题记录中将教师、毕业论文题目与学生对应关系进行记录。为避免不同教师同时选中1名学生的情况,按照“先选先得”的方式处理。教师选中学生后,不允许撤销。没有被选上的学生,可以进行第2轮的选题。

(6) 系统自动分配选题。两轮选题后,仍然没有落实题目的学生,由系统在尚未有学生报名的题目中自动分配,并在选题记录中将自动分配的结果记录在教师、毕业论文题目与学生对应关系进行记录。系统自动分配遵循以下规则:

l 对于有学生报名、但是没有被教师选中的题目,优先分配给报名的学生。

l 系统分配时尽量平衡教师的工作量,即尽量使教师指导学生的数量相近。

(7) 教务员在系统中公布最终毕业论文选题结果。系统将选题记录生成列表并公布,供师生查询。

(8) 补充说明:

l 教师出题、每轮学生选题以及教师选定学生的操作,均设置1周起止时间限制。即毕业论文选题开始后,教师需在1周内上传题目,并完成题目审查;公布选题后,学生需在1周内完成选题,教师在该周内完成第1轮的选定学生工作,并在次周的第1天公布第1轮的选题结果,同时开始第2轮的选题。第2轮流程与第1轮一样。

l 教师出题数目需要大于平均每个教师需要指导学生数的2到3题。

l 从学籍和人事系统导入学生和教师信息,减轻用户录入基础数据的负担。

l 学生有2轮选题机会、每次可选3题,一年后根据实际情况再做调整。

4. 行为描述

(1) 教师操作部分:

l 增:录入论文题目,点击“提交”,系统将题目的数据传输到后台数据库,并将教师姓名、学院、专业、以及题目记录在毕业论文题目列表的关系表中。

l 改:提交后,查看自己论文题目列表,可以点击“编辑”修改论文题目。修改完毕后,点击“提交”,系统将题目传输到后台数据库,更新数据库。

l 删:提交后,查看自己论文题目列表,可以点击“删除”删除论文题目,系统操作命令传输到后台数据库,删除对应的题目。

l 确认最终毕业论文题目:教务员审查完毕后,系统通知教师确认,教师确认后,系统将指令传输到后台数据库,数据库更新将毕业论文题目列表的对应题目状态修改为最终。

l 选定学生。教师可以在系统中查看自己某条毕业论文题目有哪些学生已经选择,并可以点击“个人简介”查看某个学生输入的个人简介,并从中选出自己认为合适的学生,点击“选择该生”选中,系统产生指令并传到后台数据库,将教师、毕业论文题目与学生对应关系的记录加入选题记录的关系表中。教师一旦选定了学生则不能修改。如果某个学生已经被其他教师选定,则不会显示在该教师题目的学生选题名单中。

(2) 教务员操作部分:

l 审查:教师上传题目后,教务员对学院内的教师题目进行人工审查,发现雷同后,根据约定,在该教师的题目后点击“雷同”,系统收到指令后,通知教师重新命题。审查完毕后,点击“审查完毕”。

l 公布最终确认的毕业论文题目列表。审查完毕后,教务员通过系统通知教师确认最终的毕业论文题目,教师确认后,系统自动公布该题目。

l 公布最终确定的毕业论文任务表。经过两轮选题后,教务员点击“系统分配”让系统根据既定的规则自动分配没有被选定学生的毕业论文题目,更新选题记录,生成最终确定的毕业论文任务表并在系统中显示,供师生查询。

(3) 学生选题部分:

l 查看毕业论文题目。教务员公布最终确认的毕业论文题目列表后,学生可以查看本学院同专业的毕业论文选题。但如果该题已经被教师选定学生,将不会显示。

l 选择毕业论文题目。学生可以在显示出来的毕业论文题目中选择毕业论文题目,并可以在“个人简介”中输入自己的个人简介,点击“提交”,提交选择该题目。每个学生可以在一轮选题中,最多选出3个毕业论文题目。学生点击提交后,系统会在后台数据库的选题记录的关系表中产生记录,并以时间为优先级,时间越早,优先级越高,一旦提交后不允许撤销。

l 查看选题结果。学生可以在每一轮选题后,查看自己是否已经被教师选定。如果第一轮没有被选定,则可以参加第二轮选题。如果第二轮都没有被选上,则需要等待系统自动分配。等待整个选题结束后,可以查看教务员公布的最终确定毕业论文任务表。

5. 检验标准

测试标准主要是检查该系统是否达到了功能描述中的所有功能,包括:

l 教师能够增删查看毕业论文题目。

l 学生能够正常地查看题目、选题且选题列表必须是本学院自己专业的题目;可以查看选题结果,用正确的提示信息(是否被教师选定的信息等)。

l 教务员能够完成审核题目过程,如果需要通知教师重新出题,系统能够完成这个功能。

l 系统能够完成按照既定规则自动分配学生选题。

l 该系统有较高的并发性,能够承受至少1万师生同时登录使用的能力。

<span style="color:#ff0000;">需求概述有必要写,你写得太详细了,概述就占了整个需求文档50%的内容。并且上述内容没有用,而是应该移到合适的地方,一份好的数据流图能够描述系统有哪些功能、每个功能需要输入/输出哪些数据、有哪些数据需要保存,好的数据字典能够对数据流图上出现的数据流和数据文件的细节加以描述,加工说明描述每个功能的行为。图的作用是描述系统的整体,对图上所出现的每个元素的细节问题,再用文字或者其它合适的方法说明。这个就是“自顶向下、逐级细化”思想的体现,在需求概述部分写这么多内容,不仅削弱了读者对系统整体的关注,而且,很容易导致内容前后不一致。
对于这份作业,需求概述的主要内容应该是教育部门对本科生毕业设计选题的基本要求、与软件客户(指学校)商定的基本业务流程,这些内容不仅有助于读者理解本需求文档后面出现的内容(在数据流图上为什么有这些功能、为什么产生这些数据流),而且,还可以避免你写出来的需求属于一厢情愿,软件做出来以后被客户全盘推翻。另外,再简单列举系统有哪些功能,基本上就可以了。</span>

二、数据流图

1. 画出系统的输入和输出

<span style="color:#ff0000;">对于一份给客户和软件开发人员看的需求文档、而不是一份案例讲解或者是学习心得,以下内容有许多是不必要的,请记住,读者看到了一些纯属多余的内容,就不会有好的体验,就会大段跳过,就有可能忽略了对他有用的内容。</span>

系统的输入和输出用顶层图来描述,主要描述系统从外部源接收的输入数据流和对外部宿的输出数据流。

(1) 确定源和宿

分析系统的功能说明,系统外部的源或宿有:学校学籍和人事系统、教师、教务员和学生,他们都向系统提供信息(数据流),并接受系统输出的信息(数据流),因此,他们既是源又是宿。

(2) 确定加工

顶层图只有一个加工,即毕业论文选题系统。

(3) 确定数据流

顶层图中的数据流就是系统的输入输出信息。根据系统的需求概述,可以确定以下输入数据流和输出数据流。

<span style="color:#ff0000;">以上属于我在课堂上教你们的内容,对一份需求文档而言没有用。</span>

输入数据流:

l 来自学校学籍和人事系统:学生信息、教师信息。

l 来自教师:毕业论文题目(增、删、查)、论文审核结果(确认最终的毕业论文题目)、选定学生信息。

l 来自教务员:论文审核结果、自动匹配信息(让系统自动匹配生成未选定学生选题名单)。

<span style="color:#ff0000;">以上内容在数据流图上已经能够体现,而且图比文字更为直观,不需要。</span>

由于软件系统应该对输入数据进行合法性检查,以提高系统的健壮性,避免错误数据对系统造成不良的后果,因此增加一些反馈的输出数据流。因此,输出数据流有:

l 送往学校学籍和人事系统:错误教师信息(数据格式错误时)、错误学生信息。

l 送往教师:毕业论文题目(教师查询时输出)、不合格毕业论文题目、选题学生信息、毕业论文任务表。

l 送往教务员:待审核论文题目、自动匹配信息(自动匹配为被选定学生的指令)。

l 送往学生:毕业论文题目、不合格选题信息、毕业论文任务表。

<span style="color:#ff0000;">以上内容有的属于不必要,例如,错误教师信息,系统拒绝接受不满足完整性约束条件的数据,并向用户提供出错提升信息,属于天经地义的事情,只要你在数据字典、加工说明中说明清楚规则,程序员懂得如何去做。</span>

根据以上分析,画出该系统的顶层图,如图1所示。


图 1

2. 画出系统内部

(1) 确定加工

这里讲的加工是指对顶层图中的加工分解而成的子加工。根据需求概述中的功能描述,可以将父图的加工分解为8个子加工。

<span style="color:#ff0000;">我不知道在你的心目中,是否将分解出来的8个加工,等同于软件的8个功能,直截了当地说,就是这个软件只要开发出来这8个功能就够了。这是数据流图能否正确分解的关键,要具备这个意识。</span>

(2) 确定数据流

0层图中的数据流主要是继承自顶层图,其中有改动的输入输出流分别有:

l  原教师到系统的“论文审核结果”输入输出流拆分为“审核结果”的输出流和“确认审核”的输入流。

l  由于加入了“系统自动匹配学生与题目”的加工,因此将原教务员到系统的“自动匹配信息”的输入输出流拆分为“未被选定学生信息”的输出流和“自动匹配指令”的输入流。

<span style="color:#ff0000;">(这样不好,违反了上下层数据流图之间保持平衡的基本原则,如果在细化过程中发现前面有考虑不周的地方,将前面的图也同时修改)</span>

(3) 确定文件

根据需求概述,需要建立4个新文件,供加工读写,分别是记录学生的信息的学生信息、记录教师的信息的教师信息、记录毕业论文题目的毕业论文题目列表、记录学生选题记录,老师选定学生记录的选题信息表。

(4) 确定源和宿

0层的源和宿继承于顶层图。

因此,该毕业论文选题的0层图如图2所示。


图2

<span style="color:#ff0000;">总体而言,分解后的数据流图还是不错的,符合规范,数据流清晰。下面提出几条改进的建议:
1)提高可读性,用词规范(每个数据加工、每个数据流、每个数据文件),将错误信息之类的属于天经地义的内容去掉,将数据加工按照业务流程依次排列,将基础数据管理(指从外部系统导入学生和教师信息之类)排在一边。请注意,提高可读性不是为了方便我改作业,而是为了让程序员能够更加清晰地理解这个软件的需求,这是评价一份需求文档是否有价值的一项基本要求。
2)仔细推敲数据文件和数据加工之间的数据流,例如,软件功能“学生选择题目”(给你加了2个字,其意图是不是变得更加清晰了?)没有从数据文件“毕业论文题目列表”流入的数据流,没有论文题目,如何选题?我之前肯定的数据流图“符合规范,数据流清晰”,并不代表你的内容正确,而是读者能够比较容易地理解你的意图,而且,也容易发现内容的错误。</span>

三、数据字典

1. 数据流条目

(1) 教师信息=教师编号+教师姓名+所在学院+所在专业

(2) 正确教师信息=*教师信息

(3) 学生信息=学号+学院+专业+班级+姓名

(4) 正确学生信息=*学生信息

(5) 毕业论文题目={题目编号+教师编号+{题目内容+摘要说明+分类+对选题学生的条件要求}}

(6) 合格毕业论文题目=*毕业论文题目

(7) 待审核论文题目=*合格毕业论文题目

(8) 正式毕业论文题目=合格毕业论文题目+是否通过审核

(9) 审核结果=审核教师编号+{*待审核论文题目+是否通过审核}

(10)选题信息={学号+{记录编号+题目编号+学生选题时间+[学生个人简介]}13}

(11)合格选题信息=*选题信息

(12)正式选题信息=*选题信息+教师选定状态

(13)选题学生信息={*学生信息+*选题信息}

(14)选定学生名单={被选中学生学号}

(15)未被选中学生信息={*学生信息}

(16)毕业论文任务表={*出题教师信息+*被选中学生信息+*毕业论文题目}

(17)出题教师信息=*教师信息

(18)被选中学生信息=*学生信息

备注:*号代表某个实体,以学生信息为例,完整区分一个学生,包含学号、学院、专业、班级、姓名共5项信息。

2. 文件

(1) 教师信息表=教师编号+教师姓名+所在学院+所在专业

(2) 学生信息表=学号+学院+专业+班级+姓名

(3) 毕业论文题目列表=题目编号+教师编号+题目内容+摘要说明+分类+对选题学生的条件要求+是否通过审核

(4) 选题信息表=记录编号+题目编号+学号+学生选题时间+学生个人简介+是否被选定

文件组织:顺序文件,按学生选题时间升序排列。

<span style="color:#ff0000;">上面这句话属于多余,你们学过数据库课程,应该知道这句话没有意义。

关于数据文件在数据流分析方法中的地位,请阅读我给2班杨伟杰同学作业写的评语,希望你能够理解,我就不重复写一大段文字了。对于这份作业,我非常关注你所分析出来的数据结构,能否支持“2轮双向选题、1轮系统自动分配”的应用模式,第1轮选题相对好办,从第2轮开始就需要费脑筋了,举几个我所想到的问题:
1)第2轮学生选题目,能否只让第1轮没有被教师选中的学生?得到的结论是好像可以。思路是:先在《选题信息表》中找出这个学号的记录(可能有0-3条记录),如果所有记录的“是否被选定”字段值均为“否”,则让这个学生第2轮选题目。
2)第2轮学生选题目,能否让学生只在第1轮没有被安排学生的题目中进行选择?结论是好像可以。思路是:将《毕业论文题目列表》和《选题信息表》以“题目编号”为关键字进行关联,如果前表的某1个记录,在表2中没有出现“是否被选定”字段值为“是”的记录,就表明这个题目当前还没有排定学生,可以让学生在第2轮报名选择。
3)第2轮教师选学生时,能否让教师只在学生第2轮的报名中进行选择?结论好像是不可以。思路是:①根据教师编号,可以在《毕业论文题目列表》中找出这名教师所出的题目;②按照与第2点相同的思路,可以判断这名教师所出的题目,还有哪些在第1轮没有被安排学生,这些题目可以让教师在第2轮选学生;③在按照与第2点相同的思路,找出这些题目有哪些学生报名,但是,选题信息表的数据结构无法区分选题记录到底是学生在第1轮、还是第2轮报名的,除非你的软件设计出这样一个规则,就是在第2轮报名前将《选题信息表》中“是否被选定”字段值为“否”的记录全部删除。
我的上述讲评,希望能够使你认识到,①数据文件结构是数据流分析方法的重点和难点,要认真推敲,我不知道你在写有关数据文件的字典词条时,是否像我那样下功夫?②抽象很重要,我在上面举了3个应用场景,到数据文件找数据时都需要“迂回曲折”,你能否抽象出一个更加合理的数据结构,一是方便程序员理解需求,二是对做好数据库设计有帮助,你在前面不是写了一句“该系统有较高的并发性,能够承受至少1万师生同时登录使用的能力”,如果没有做好数据库设计,查询数据时经常要写一些“迂回曲折”的SQL语句,很难实现你的愿景。</span>

四、加工说明

1. 基本加工“选择题目”的判定表

第一轮选题判定表由4个部分组成,如图3所示,以下为详细说明。另外,由于第二轮选题判定表与第一轮选题判定表大致相同,如图4所示。。

(1) 条件桩

第一轮选课判定表的条件桩由第一轮题目选择情况、个人简历和选择时间三个条件对象组成。

其中,第一轮题目选择情况反映当前题目是否可供选择的情况。此对象影响着学生是否有第二轮选题的资格等问题;

个人简历反映该学生是否有录入个人简历的操作,用以影响提高选题成功率的功能实现。

选择时间反映学生选题时间的差异,用以遵循以时间优先原则的功能实现。

(2) 条件条目

l 第一轮题目选择情况有可供选择和不可选择两项取值;

l 个人简历有录入和不录入两项取值;


图 3

选择时间有前期和后期两项取值。

(3) 动作桩

由条件组合触发的动作反映,在第一轮选题的判定表中设定有以下动作桩:

l 发提示录入简历通知。触发条件组合:没有录入简历的学生;

l 发第一轮首轮选择成功通知。触发条件组合:题目可供选择+前期选择;

l 发第一轮次轮选择等待通知。触发条件组合:题目可供选择+后期选择;

l 发第一轮次轮选择成功通知。触发条件组合:题目可供选择+后期选择;

l 发第二轮选择资格。触发条件组合:题目不可选择;


图 4
发出已选题目清单。触发条件组合:题目可供选择。

(4) 动作条目

具体组合可见动作桩说明的触发条件组合。

<span style="color:#ff0000;">时间关系,就不对上述判断树是否正确作出点评了。可以看出,你花了很多功夫,试图在加工说明中将“学生选择题目”的规则写清楚,这个意识非常重要,是写好加工说明的基础。之所以我不对上述内容的正确性作出点评,主要原因是你的描述还是不够直观清晰,可以思考一下如何改进。针对这个案例,我提出自己的思路:
1)从业务的角度将规则列出来,让读者清楚其背景。我在“需求概述”部分的点评中提出,将有关功能、行为的大部分内容移到加工说明,对照这个案例,你应该明白有什么道理吧。
2)做好抽象,对“学生选择题目”而言,最重要的判断问题就是:在第2轮,哪些学生有资格选题、哪些题目可以让学生选择,只要你在前面做好对数据结构的分析,抽象出合理的数据结构,能够很方便地写出如何实现上述2个判断,一切就变得很简单了。我在课堂上讲过“抽象”这个名称,这个名词太抽象了,不好理解,对照这个例题,不知道能否给你一些启示,抽象包含数据抽象和过程抽象,前者往往更重要,从编程的角度,语句跟着数据结构走,从需求分析的角度,行为是针对数据的,数据抽象好了,行为描述就变得简单了。</span>

2. 基本加工“系统自动匹配学生的题目”的判定树

系统自动分配选题判定树的组成和判定表的组成是相同的,知识表示形式不同。如图5所示。

(1) 条件桩

系统自动分配选题的条件桩由分配次序、学生选题情况和选题人数情况三条件对象组成。

(2) 条件条目

l 分配次序:首轮分配、次轮分配;

l 学生选题情况:有自选、没自选;

l 选题人数情况:已满、未满。

(3) 动作桩

l发成功选题通知

l发次轮分配资格

l发等待人工分配通知

(4) 动作条目

l 发成功选课通知=首轮分配+学生有自选+选题人数未满

或 次轮分配+选题人数未满

l 发次轮分配资格=首轮分配+学生有自选+选题人数已满

或 首轮分配+学生没自选


发等待人工分配通知=次轮分配+选题人数已满


图 5


感谢老师的指正,说句实话,你表扬的加工说明不是我写的,上学这么久还没有人对我这么不客气过,不过我很欣赏、也很感谢你对我这么直白地说出你的感受,谢谢!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值