一、考试系统需求之二:固定试卷考试。
用户说:所有考生使用同一套试卷,但是保证前后,左后的同学的试题顺序不一样,也就是说,你得把试卷打乱顺序重组成几套,相邻的同学,抽取不同的重组试卷。
于是有了如下的思想变化:
浅分析:一套卷子,乱序重组成几套,相邻同学抽取不同重组试卷。
解决方案:1、将导入的试卷,根据传入的“变形套卷数”进行随机打乱,生成顺序不同的套卷,保存。
2、学生抽取试题,系统从数据库中读出的‘乱序套卷’中随机选中一套给学生,抽题成功。
问1:生成2,3,4套试卷保存,还勉强说的过去,如果要生成N套试卷,也要这样一套一套保存下去吗?关键是这些套卷都是读取的相同的试题,只是试题顺序不一样,造成了数据量的大量冗余?
问2:保证临近同学试卷不一样,不就是为了防止学生抄袭吗?那还不如让所有同学都不一样呢?
再分析:为什么要在存试卷的时候进行套卷重组呢?既然在数据库里保存内容一样,那么为什么不可以在读取的时候再打乱顺序呢?这样数据量就不会冗余了,同时,抽题的时候在乱序,可以随着抽提的同学个数,进行随机打乱,有多少人抽题,就会有多少次乱序,保证了试卷的不同。
解决方案:1、保存试卷,不发生变化,只保存一套试卷。
2、学生抽取试题,从数据库中读出试卷,随机打乱试卷的顺序,给学生,抽取试题成功。
二、剖析思想的误区:
1、当用户说:要重组成几套的时候,思想就被固定,忘记了,1即使n的道理:可以重组1套,那么久可以重组N套,其实就是一回事,只是参数不同而已。
2、还是用户说:重组成几套,想当然就以为,要把“重组试卷”放到数据库中,没有进一步分析到本质:这些重组试卷其实就是一套试卷,不需要再次保存。
3、用户需求需要用“编程语言转化”。有上述的思想变化,是被“几套”给束缚住了,这些思想的局限性都是由“用户的描述给”绑住了。用户的话需要,我们用户“编程”的思想来转化,这点,我们还差的很远。