唐东明
(西南民族大学 计算机科学与技术学院,四川 成都 610041)
随着手机的普及,智能手机已经是大部分用户首选的完成计算任务的平台[1]。在国家提出“互联网+”战略后,移动应用开发的需求非常大。目前各大高校和培训机构已经开设安卓移动应用开发相关的课程[2]。实验教学是这类应用性强的课程的重要环节,实验教学可以引导学生将课堂上学到的理论知识跟实际结合起来,提高学生的动手能力,增强学生的直观感受,服务于往后的就业。笔者针对在安卓开发课程实验教学过程中遇到的一些问题,提出采用多种技术手段来结合移动智能手机平台,辅助完成实验教学过程,让老师有效的利用自己的时间覆盖更多的学生,提高教学效率与质量。
传统的实验教学方式是老师先演示,学生照着老师的讲解和课本进行实践操作[3],但是这种模式在安卓的应用开发过程中遇到了一些难题。
(1)安卓开发环境采用的工具是一个综合的、复杂的集成开发工具,这个工具界面为全英文界面,功能非常多且模块复杂,学生熟练掌握这个工具并不容易。
(2)安卓应用开发需要先安装集成开发环境Android Studio(简称AS,下同),然后配置相应的Android SDK(开发包),但由于安卓SDK的版本非常多,因此安装的时候只能选择性地安装几个相对重要版本的SDK,这就可能造成实验室安装的版本和学生自己电脑安装的版本不一致的情况,经常出现学生自己来回在自己的电脑和实验室的电脑之间复制源程序但是不能编译的情况。
(3)一个完整的安卓应用程序开发不仅涉及Java程序的编写,还涉及应用程序界面的组织与编写、资源文件的准备与编写、程序描述文件的创建与修改、编译脚本的编写与组织等,因此一个安卓应用程序工程结构复杂且文件多,导致拷贝一个完整的安卓APP的工程都需要同时拷贝非常多的相关文件。
(4)教师为了评判学生开发的APP,传统的方式是学生将自己开发的完整AS工程上传到实验室的FTP服务器上,教师下载并在自己的电脑上导入工程,查看学生的代码并编译,导入到自己的手机上运行,整个过程非常耗时耗力,并且整个过程中经常遇到很多问题:学生经常漏传文件导致编译不能通过;学生将build目录下编译过程中产生的大量中间目录和文件也上传到服务器,造成上传的工程非常大,教师下载需较长的时间;学生自己电脑上的SDK版本和编译器的版本可能和教师使用的版本有差异,教师还需要人工修改工程的相关配置才能正常编译打包运行APP。
上述问题的存在导致教师难以快速有效地验证学生提交的实验结果,也不能客观甄别学生彼此之间的抄袭。如何利用移动互联网的优势来将学生实验和老师更好地结合起来,让学生在任何地方都能提交自己的实验,让老师直接在自己的安卓手机上直接安装运行学生开发的APP,批阅学生提交的作业,顺应移动学习的大潮,让安卓开发实验教学环节不受具体固定时间和地点的限制就成为了一个需要解决的问题[4-5]。
为解决上面面临的难题,有些学校和老师开发了自己的实验测评系统,例如针对VB编程语言实验过程的评测系统[3];文献[6]采用微信公众号的方式和学生互动,实验教师可以发布实验内容,并针对实验过程和学生在微信上进行良性的互动;文献[4]结合计算机公共基础课面临的问题阐述了如何借助移动学习来增强学生学习的积极性;传统的物理和化学实验的教学也结合移动智能手机来开展教学手段的改革,利用手机录制发布实验过程并进行讲解[7];生物分析实验的教学过程利用移动终端让学生在课上利用手机直观地观看老师的实验演示,提高学生实验的成功率[8-9]。
系统的运行流程总体分为以下几个部分:①学生在AS中完成APP的开发,在这个阶段,学生在集成开发环境中完成程序的设计实现、资源的组织和调试修改,最终完成开发阶段的工作;②完成开发后学生调用提供的插件,输入学生个人的一些基本信息,如学号、作业APP的名称等信息,接下来调用我们提供的插件对整个APP工程进行编译、签名打包成一个发布版的APK,同时自动提交工程的核心代码和生成的APK到云端;③云端收到学生提交的作业后自动将收到的内容进行归类整理,并对代码进行比对查重,生成报告,随后云端程序发送相应作业批改请求通知到教师手机端;④教师手机端接收到通知后,教师可以利用自己的碎片时间随时审阅学生提交的软件和相应的代码,批阅完成后在手机端完成作业成绩评定。
AS是一个综合的开发工具,功能强大并且工具组件非常多,对初学者来说要完成编写、编译、打包、发布一个APP非常不容易。在以前的教学过程中笔者发现很多同学卡在了参数配置、编译脚本配置、工具使用上,不能在规定的时间完成并演示自己的成果。由于在实验室进行的实验课时并不多,当教师要检查学生的成果时,学生出现各种配置问题,不能打包部署到手机真机上进行演示,浪费了老师和同学大量的时间。上交作业的时候很多同学不加选择地将整个工程目录下的所有文件都提交到实验室的FTP上,而AS的工程目录下包含各种编译时产生的中间文件,教师下载要很长的时间。
研究AS的体系结构后发现AS可以采用插件式体系结构来扩展自己的功能,并且插件运行过程中可以利用AS原有的众多功能模块,是一种非常灵活的组件式结构。学生在AS中完成App的设计、编码并调试运行成功后,需要提交成果物到云端。为了简化提交过程,系统采用插件技术编写了一个运行于AS中的插件。在AS中安装开发的插件后,可以在AS软件运行界面的build菜单项中找到一个名为“提交作业”的菜单项,点击菜单项后弹出对话框,见图1,在对话框中输入提交作业的一些基本信息后即可正式提交作业到云端。在提交过程中插件将会自动扫描需要上传的文件并进行上传。
图1 学生实验综合开发环境插件之作业提交界面
考虑到本系统的应用场景我们将服务端部署在阿里云上,学生上传作业时系统会同时上传本次作业相关的源代码。一个完整的安卓工程包含很多的文件,因此在上传的时候系统只上传工程中的主要文件:Java源代码目录下的所有文件、Layout目录下的文件。工程文件上传后,服务端后台即开始进行查重检测,查重过程按照以下原则进行:①同类型文件比对,即Java文件和Java文件进行比较;②被比对的文件范围限定为同实验号的其他同学上传的同类型的文件,这样可以减少比对工作量。代码查重的目的就是检测是否抄袭,实质上是对代码文件的相似度进行度量,给出一个相似度的数值表示[10]。查重比对的结果记录在数据库表中,假设学生A已经上传了实验2的工程代码文件ex2_A1.java文件,现在学生B上传了文件ex2_B1.java,那么比对系统将把ex2_B1.java和ex2_A1.java文件进行比较,如计算结果显示这两个文件相似度高于某个设定的阈值δ,那么将会在数据库表中增加一条记录。
常见的文本比对算法主要采用分词技术并结合词频统计来计算文本之间的相似度,例如经典的TF-IDF算法,TF(Term Frequency)指一篇文档中单词出现的频率,IDF(Inverse Document Frequency)表示语料库中出现某个词的文档数,TF=词在文档中出现的次数/文档中所有词的个数,IDF=log(语料库的文档总数/语料库中出现某单词的不同文档个数),最终计算每个文本tfidf 向量,文件之间的相似度通过计算两个向量的欧式距离、Jaccard系数等来度量。但是,程序代码文件较为特殊,首先代码文件有一定的结构性,其次代码没有普通文本文件那样规范[11]。目前主流的代码剽窃检测算法主要基于字符串比对的方式,如Plague、JPlag、SIM、MOSS等[10]。目前也有学者研究基于指纹技术检测代码相似度[12]。本系统采用文献[13]提出的检测独立于语言的相似代码块的方式来评价两份文件的相似度,相似代码块越多说明代码的相似度越高。找出可能有抄袭嫌疑的代码文件后需要评阅老师最终审阅才能确定,为了审阅两份文件的异同点,本系统结合开源的CodeMergely(http://www.mergely.com/)系统利用APP中嵌入网页的方式提供直观的源代码比较工具,图2的界面中对比了两个相似的代码文件,从图中可以看出两份文件的差异点用不同的标记标示,教师可以清晰地阅读。
以前实验教学时教师通常现场检查核对学生实验结果,如果只是简单地编写几个函数,教师可以很容易就评判出实验完成的好坏,评判完后直接将成绩记录在纸上。安卓实验课上老师检查很难一目即知结果,因为安卓工程组织复杂、代码文件多、资源文件多、配置多。在有限的实验教学学时里老师很难完整地检查这么多的学生成果物。由于本身这门课程就是教授安卓手机应用开发,并且实验的成果必须在真实的安卓手机上运行通过,基于此笔者设计了一个供教师使用的安卓手机APP软件。
图2 代码比对
教师用手机APP最主要的功能就是提供一个教师可以移动批改作业的办公平台,教师可以方便地下载安装运行学生完成的实验,查看学生实验编写的代码和相应的资源文件等,还可以辅助判断学生相互抄袭的问题。本系统采用混合模式来开发,主要功能模块包括:登录模块、用户基本信息模块、作业批改模块、代码查重结果展示模块。登录模块主要实现教师用户的认证;用户基本信息模块用于教师设定一些自己的基本信息;作业批改模块是教师主要工作的界面,在此模块中教师可以预览哪些同学已经提交了作业并选择运行同学提交的APP,最后给出相应的评价;代码查重结果展示模块负责展示某个学生提交的代码查重结果,教师可以有针对性地选择查看。
安卓课程的实验课具有时间长、完整性强、工程代码资源文件多而复杂等特性,这样就造成教师在实验课上很难有充足的时间去检查学生实验成果物APP的正确性、完整性、非抄袭性等。通过改造安卓综合开发平台并开发教师移动使用的APP,让学生能方便地提交实验成果,让教师能够在真机上方便地运行评阅学生实验成果,并能够查看学生程序的源代码,发现程序代码雷同之处。系统有效解决了安卓实验教学中的一些问题,从而让教师可以在有限的时间内覆盖更多的学生。未来将持续改进、增加更多的教师和学生互动模块,方便师生,提高教学质量。
[1]刘欢, 卢蓓蓉, 马晨辉.浅析高校校园移动应用开发[J]. 武汉大学学报(理学版), 2012(增刊1): 171-174.
[2]廖龙龙, 路红.《移动应用开发》课程建设研究[J]. 现代教育技术, 2011(12): 58-61.
[3]刘必雄. 基于“Visual Basic程序设计实验测评系统”的教学改革与实践[J]. 河北农业大学学报(农林教育版), 2015(5): 68-71.
[4]纪良浩, 李琳皓, 段小林. 移动学习与开放自主相结合的个性化实验教学模式的改革与实践[J]. 教育教学论坛, 2016(31): 79-80.
[5]张楠. 移动学习环境下高校实验教学模式的创新和实践[J]. 实验室研究与探索, 2014(10): 225-228.
[6]沈瑶, 应柏青, 贺富堂. 微信公众平台在电路实验教学改革中的应用[J]. 实验科学与技术, 2015(4): 1-5.
[7]张玲. 智能手机辅助物理化学实验教学改革的研究与实践[J]. 高教学刊, 2015(18): 234-235.
[8]王欣之, 文红梅. 智能移动终端在仪器分析实验教学中的应用[J]. 药学教育, 2017(1): 54-56.
[9]胡慧, 郑立华, 高万林.基于 MOOC 的编程语言自动评测[J]. 现代教育技术, 2016, 26(9): 80-85.
[10]邓爱萍. 程序代码相似度度量算法研究[J]. 计算机工程与设计, 2008(17): 4636-4639.
[11]全上克, 杨新锋. 程序代码相似度检测方法的设计与实现[J]. 微型电脑应用, 2013(10): 38-41.
[12]黄柳柳, 黄河燕, 史树敏.面向代码相似度检测的指纹选取方法[J]. 计算机工程与应用, 2010(27): 169-171.
[13]Ducasse S, Rieger M,Demeyer S.A language independent approach for detecting duplicated code[EB/OL]. [2017-08-01]. http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=792593.