APP下载

支持逻辑跳转及填答约束的网络问卷调查系统设计与实现

2015-03-02卢锦运等

软件导刊 2015年1期

卢锦运等

摘要:随着互联网的普及和信息技术的迅猛发展,网络问卷调查已成为数据、资料收集的一种常用手段。传统网络问卷调查系统普遍缺少题目逻辑跳转和用户填答校验功能,针对这一情况提出一种支持逻辑跳转和填答约束的网络问卷调查系统的实现方法。该方法基于校验规则实现了对用户填答的约束,同时通过设置跳转逻辑增强了问卷的灵活性和适应性。该方法在2013年重庆市基础教育质量监测教师问卷调查中得到应用,结果表明,该方法能够提高回收数据的准确性与规范性,具有较强的适用性。

关键词:网络问卷调查系统;JSON;逻辑跳转;填答约束;MongoDb

DOIDOI:10.11907/rjdk.143621

中图分类号:TP319

文献标识码:A 文章编号文章编号:16727800(2015)001010704

0 引言

问卷调查是数据、资料收集的一种常用手段。传统的问卷调查通过人工方式发放、回收、统计问卷。随着互联网的普及和信息技术的迅猛发展,传统人工问卷调查方式越来越无法满足社会发展和人们生活的需求,网络问卷调查以其低成本、高可靠性、高效性、互动性等特点逐渐成为当前一种主流的调查方法[7]。

当前网络问卷调查实现方式主要有两种:①HTML静态页面。这种方式将所有要调查的问题做成HTML页面后上传至服务器,当更新题目信息时需要重新更新HTML页面。因此,静态页面方式效率低下且需要专业人员完成;②基于ASP、PHP等编程语言与数据库相结合制作而成的动态页面。该方式效率较高,操作更为方便,是目前的主流做法。

迄今为止,市面上出现了多种网络问卷调查软件,这些软件基本可以实现数据采集功能,但是大多缺乏对用户输入数据的动态校验,从而使后期对调查数据清理的工作量巨大,同时由于无法设置跳转逻辑题而使问卷灵活性和适用性较差。本文拟结合重庆市基础教育质量监测教师问卷调查系统的设计与实现环节探讨在网络问卷调查系统中如何实现用户填答的约束校验及题目的逻辑跳转功能。

1 系统设计

1.1 系统架构

三层模式具有安全性高、维护成本低、各层之间耦合度较低等优点,因此本文采用了Web显示层、业务逻辑层和数据层(即B/S/D)的三层模式架构,如图1所示。

图1 三层模式架构

Web显示层主要用于提供人机交互界面,本文中Web显示层通过JavaScript脚本语言实现以下功能:接收用户输入数据、校验用户输入数据、向服务器回传数据、根据用户填答动态生成下一题。

业务逻辑层主要接收客户端请求并将数据传给数据层,同时将处理结果返回至客户端。本文在业务逻辑层采用三层开发框架RTC(RealThinClient SDK)。RTC采用HTTP 协议实现数据传输,具有效率高、稳定性好等优点。

数据层主要用于存储系统使用过程中产生的数据。传统的数据存储方式主要采用Oracle、SQL Server、MySQL等关系型数据库,然而在大数据背景下,传统关系型数据库在高并发读写、高效率存储等方面越来越显得力不从心[1]。鉴于重庆市基础教育质量监测教师问卷调查系统要在两小时内完成数万名教师问卷调查,在高频率的数据读写操作中,为了保证系统的稳定性,本文采用了并发性高、灵活性强、支持海量数据存储的NoSQL(Not-Only SQL)存储系统MongoDb[9]。

1.2 数据库结构设计

MongoDb以keyvalue形式存储数据。相比于传统关系型数据库系统的数据库、表(table)、记录(record)3个层次,MongoDb则由数据库、集合(collection)、文档对象(Documentoriented、BSON)3个层次组成[2],其中MongoDb中的collection对应于关系型数据库里的table。

与传统关系型数据库在使用前必须定义数据存储模型不同,MongoDb的数据存储模式是自由的(schemafree),即在同一个collection里可以有不同格式或类型的文档对象[3]。MongoDb中一个collection的实例如下:

{"_id":"1","USERNAME":"Tom","PASSWORD":"123456"}

{"_id":"2","USERNAME":"LILY","AGE":"10","GENDER":"female"}

{"_id":"3","USERNAME":"Peter","PWD":11111}

虽然MongoDb的数据存储模式自由,但在一般情况下,为了便于数据管理,同一个集合内的文档对象都会以相同格式定义存储。结合重庆市基础教育质量监测教师问卷内容及网络问卷调查的特点,本文设计了以下几个集合:用户集合(USER_INFO)、问卷集合(SURVEYS)、问卷题目集合(SURVEY_QUESTIONS)、结果集合(SURVEY_ANS)。用户集合主要存储教师相关信息,包括教师登录问卷系统所需的账号和密码。问卷集合用于存储问卷基本信息,包括问卷、问卷指导语以及问卷其它相关属性。问卷题目集合用于存储每套问卷所包含的题目信息,包括、题目类型(本文设计了单选、多选、填空、问答4种题型),以及单选或多选类型问题中可供选择的选项信息、填答约束规则、跳转逻辑设置等。结果集合则用于存放回收的调查数据,其结构根据问卷题目动态生成。

2 关键技术设计与实现

2.1 数据传输格式

在大规模、高并发的Web系统应用中,选择一种合适的数据传输格式至关重要。JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,易于阅读和编码,同时它是JavaScript规范的子集[8],因此能很好地被大部分浏览器解析,避免了不同浏览器带来的兼容性问题。另一方面,JSON在数据传输效率方面明显优于其它数据传输格式[4,5]。另外,本文所采用的MongoDB数据库以BSON格式存储,而BSON是一种类JSON二进制形式的存储格式,两者之间转换较为容易。鉴于以上几点,本文选择JSON作为问卷系统的数据传输格式。

以下是以JSON描述一道题目的示例:

{

"ID" : "1",

"TITLE" : "目前,您正在使用的手机是什么品牌?",

"OPTIONS":"1=IPhone;2=三星;3=华为;4=联想;5=其它",

"TYPE" : "多选题",

"ATTACH" : "2;2;;5,6;",

"ISREQUIRED" : "1",

"CONSTRAIN": "{'atype':'multchoise','minc':'1','maxc':'2','mutex':'5'}"

}

该JSON对象包括7个元素:①题目编号(ID)为1;②题目(TITLE)为“目前,您正在使用的手机是什么品牌?”;③选项(OPTIONS)一共包括“IPhone、三星、华为、联想、其它”等5个选项,其对应的选项值分别为“1、2、3、4、5”,5个选项以“;”连接;④题目类型(TYPE)为多选题;⑤附加题(ATTACH)存储题目的跳转逻辑;⑥是否必做题(ISREQUIRED)值为1时表示必做,0表示选做;⑦填答约束(CONSTRAIN)为此题的填答规则。

2.2 填答约束

为了减轻后期对问卷调查结果数据的清理工作,需要对用户填答的数据格式加以约束才能确保回收数据格式的统一,因此在问卷发布前需要设置好问题的填答规则。

上文介绍了题目JSON数据中CONSTRAIN元素为题目的填答规则。本文通过对CONSTRAIN值的解析,调用相关校验功能实现对用户输入的约束。若题目无需对用户输入进行约束,则该元素对应值为空。

题目的填答规则由问卷编制人员根据实际情况进行动态设置。本文采用模块化思想,对用户填答校验部分进行模块化设计,传入约束规则、填答结果以及题目相关信息即可获得用户填答的校验结果,如图2所示。

图2 问卷填答校验模块

下面分别以填空题、多选题为例介绍对用户填答约束的实现方法。

(1) 填空题的填答规则主要用于约束用户输入为统一格式的值。

如:你的年龄?

若此题没有设置填答规则,用户的填答可能会五花八门:30、30岁、三十岁、30、200等各种格式甚至是非合理的答案,要使填答结果统一为合理的英文数字,且对于教师而言年龄段一般在18到70岁之间,这道题的填答规则可设置如下:{'atype':'integer','minvalue':'18','maxvalue':'70'},这个规则中atype表示只允许用户填答整数,minvalue表示允许用户输入的最小值为18,maxvalue则表示允许输入的最大值为70。通过设置这一规则,可以约束用户的输入只能为介于18~70之间的整数。若无需限制用户输入的最小值或最大值,则可通过将minvalue或maxvalue对应的值设为空来实现。

同样,如果要约束填答结果为小数,则设置规则中的atype为number,如果填答结果为时间格式,则设置atype为date,并可以通过设置mindate和maxdate的值限制用户输入的时间范围。

图3为此题对应的效果图。

(2)多选题的填答规则主要包括限制用户选择选项的个数以及互斥选项的设置。以2.1中的题目为例,该题的填答规则为:{'atype':'multchoise','minc':'1','maxc':'2','mutex':'5'} 。该规则中atype值为multchoise,表示此规则为多选题的约束规则;minc值为1,表示最少需要选择一个选项;maxc值为2,表示最多只能选择两个选项;mutex为互斥选项,其对应的值为某一选项值,表示该选项不能与其它选项同时被选中。若此题没有互斥题,mutex对应的值则为空。在多选题约束规则中,minc对应的值应大于等于1且小于等于maxc对应的值,而maxc对应的值则应大于等于minc对应的值而小于等于选项的个数。

图4为此题对应的效果图。

图3 填空题填答约束效果

图4 多选题填答约束效果

2.3 逻辑跳转

随着问卷内容的多样化,逻辑跳转逐渐成为了网络问卷调查系统的重要功能之一。逻辑跳转的主要思想是在用户填答问卷时,系统能够根据被访者当前题目的答案和编制问卷时定制的跳转逻辑动态地生成下一题,以供用户继续作答[6]。

本文通过对相关题目设置附加题的形式实现题目逻辑跳转的控制。在问卷发布前首先将问卷题目分为两类:一类是必做题,另一类是附加题。必做题指在用户填答过程中必须回答的题,它不依赖于其它题目而出现;附加题则不一定出现在用户填答过程中,它的出现依赖于用户对其它题目的填答及跳转逻辑。以图5所示的例子解释本文的逻辑跳转设计思想。

图5中,问卷共有5道题,其中只有题目一为必做题,题目二、三、四、五均为附加题,题目二、三、四的出现依赖于用户对题目一的填答及跳转逻辑设定。若用户在题目一中选择的答案为A,那么下一道题则为题目三;若选择了B,下一道题为题目二;若选择C,则下一道题为题目四;若选择D,则题目二、三、四均不出现而直接结束问卷;同样,当用户对题目三的填答符合跳转逻辑,则系统动态生成题目五。

图5 问卷填答流程

选择题和填空题的跳转逻辑有所区别,选择题的跳转是在用户选择设定了逻辑跳转指令选项后进行,而填空题跳转则在用户填答的答案满足逻辑跳转条件后进行。2.1中介绍了题目JSON中ATTACH元素存储题目跳转逻辑,根据选择题和填空题的填答差异,本文分别设计了选择题和填空题的跳转逻辑格式。下面分别介绍选择题和填空题逻辑跳转的实现方式:

(1) 选择题的ATTACH中存储的是每个选项对应的附加题题号,当用户选择了某个或某几个选项后,下一道题则根据选中选项对应的附加题题号动态生成。本文将每个选项对应的附加题题号以“;”相连,因此N个选项就对应有N组附加题题号(若某个选项无附加题则留空,若有多个附加题则附加题题号以“,”隔开),在ATTACH存储中就有N-1个“;”。

以2.1中的题目为例,该题共有5个选项,因此ATTACH存储有5组附加题题号:第1个选项“IPHONE”和第2个选项“三星”对应的附加题题号都为2,表示当用户选择了第1或第2个选项后,下一道题将会是第2题;第3和第5个选项对应的附加题题号为空,则表示当用户选择“华为”或“其它”选项后将不会有附加题而直接进入下一题;第4个选项对应的附加题题号为5和6,表明当用户选择了“联想”选项后,系统将第5题和第6题附加到此题之后。

(2) 填空题的ATTACH中存储的则是跳转逻辑表达式,其语法规则是:表达式=附加题题号,即当用户的答案满足了表达式后则下一道题为附加题题号对应的题目。

如:>0&&<50=10,20表示如果输入的答案介于0~50之间则在其后附加第10题和第20题。

本文问卷生成步骤如下:

Step1:初始化题目数组QusArray并将数组下标QusIndex设为0,将问卷中所有必做题按题号顺序装入至QusArray中。

Step2:若QusIndex=length(QusArray),则结束此次问卷;否则生成QusArray[QusIndex]题号对应的题目。

Step3:校验用户输入。若校验失败,提示用户校验信息;否则,保存当前答案并且进行INC(QusIndex),同时根据答案和题目的跳转逻辑判断是否有附加题,若有附加题且题号不存在于QusArray中,则将附加题依次插入到QusArray中,插入的起始位置为QusIndex+1,转Step2。

3 结语

本文提出了一种支持逻辑跳转及填答约束的网络调查问卷系统技术实现方法,通过对题目设置输入约束规则实现了用户填答结果的规范性、保证了数据的准确性,从而大大减轻了后期数据清理工作量;另一方面,通过对相应题目设置跳转逻辑增强了问卷的灵活性和适应性。本方法已成功应用于2013年重庆市基础教育质量监测教师问卷调查系统中,结果表明,该系统在问卷灵活性、结果准确性以及系统并发性上都能很好地满足网上问卷调查需要。