应用型高校学生程序设计能力培养研究

2017-07-01 20:28肖卓宇叶嘉笑李港杨道武中南林业科技大学涉外学院湖南长沙4000湖南邮电职业技术学院湖南长沙4005
湖南邮电职业技术学院学报 2017年2期
关键词:设计模式程序设计检测

肖卓宇,叶嘉笑,李港,杨道武(.中南林业科技大学涉外学院,湖南长沙4000;.湖南邮电职业技术学院,湖南长沙4005)

应用型高校学生程序设计能力培养研究

肖卓宇1,叶嘉笑2,李港1,杨道武1
(1.中南林业科技大学涉外学院,湖南长沙410200;2.湖南邮电职业技术学院,湖南长沙410015)

文章以应用型本科院校计算机专业设计模式课程为例,首先介绍学习设计模式课程的前驱知识;接着依据GOF分类编程实现设计模式,并通过具体项目进行综合实训;最后引导学生将设计模式课程与逆向工程、数据挖掘、机器学习等领域结合,解决涉及交叉学科的复杂问题,并取得较好的效果。事实证明,系统性与渐进性融合的启发式学习方法有助于激发学生学习设计模式课程的积极性。

设计模式;启发式;逆向工程;数据挖掘;机器学习

应用型本科院校侧重学生实践动手能力的培养,并密切关注市场对人才的需求,计算机相关专业对实践应用的要求显得尤为重要。结合先前计算机专业大学生程序设计实践能力培养改革[1-3],通过各级程序设计大赛经验的积累[4],并以大学生研究性学习与创新性实践项目“基于设计模式角色的附加关系检测研究”为契机,本研究以设计模式为例,着重探讨应用型本科院校程序设计的启发式学习方法。

Erich Gamma等人提出设计模式是一套被反复使用、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性[5]。为此,众多软件企业为节约成本,减少研发周期,使设计模式得以广泛应用于项目研发中。

1 设计模式前置知识点学习

设计模式课程学习具有一定的抽象性,故对学生掌握相关知识的能力提出了一定的要求。

图1 设计模式前驱知识图

如图1所示,第一阶段学生首先应该具备结构化程序设计知识,为此学院在大一阶段开设了C语言程序设计课程,并制定了符合学院特点的C语言程序设计实训书;第二阶段需在第一阶段的基础上侧重面向对象的程序设计知识学习,主要涉及类、实例、封装、继承、多态等知识点的学习,该阶段学院通过多年来对多届学生教学方式的改革,制订了具有学院特色的Java程序设计课程及实训,侧重案例式教学,并将多种面向对象的知识融入到实训中来,取得了较好的效果;第三阶段通过软件工程这门课程将UML程序设计引入到项目设计中,该阶段尤其侧重学生对类图、用例图、时序图的掌握能力,并通过积累的经典案例引导学生分小组进行实训;在第三步之后逐步介入到设计模式领域。

2 设计模式分类学习

Erich Gamma将23种设计模式分为结构型、行为型、创建型三类,每一类设计模式侧重点各不相同,见表1,如若要较好地掌握23种设计模式,将其分类进行实践学习显得尤为重要。

表1 设计模式功能分类表

在表1分类基础上,引导学生依次通过编程实现结构型模式、行为型模式、创建型模式的应用,在此基础上启发学生侧重分析3类设计模式中不同模式的设计意图,尤其注重研究其区别。如:Composite模式与Decorator模式同属于结构型模式,但前者侧重解决“部分与整体”的层次结构问题,后者侧重动态增加新的职责问题。通过比较分析法,让23种看似枯燥的设计模式学习变得生动有趣,并辅以多年来积累的经典用例实现,让学生对设计模式学习的积极性得到了极大的提高。在此基础上,再将多个设计模式融入先前指导学生实现的网上商城购物系统,从而实现对设计模式的融会贯通,进一步让学生认识到设计模式的重要性与趣味性。

3 设计模式的演化学习

在学生较好地掌握了23种经典设计模式用例后,尝试将学生的程序设计思维进一步引入到更为开阔的逆向工程、数据挖掘、机器学习等领域。

3.1 设计模式与逆向工程、数据挖掘关联

设计模式广泛应用于软件系统开发中,但从软件工程的角度可知,再优秀的软件也存在软件生命周期,故存在设计模式的遗产系统如能进行有效识别,必能大大节约人力成本及时间成本。以此为契机,进一步引导学生对遗产系统中的设计模式实例检测进行深入研究。

先期启发学生以DPS(Design pattern string,DPS)表达式类图形式检测设计模式,该阶段对遗产系统中设计模式恢复的程度进行了初步研究,其检测结果只有完全匹配、部分匹配及完全不匹配三种形式[6]。之后,在此基础上针对发生频率较高的设计模式检测部分匹配进行了深入研究,并提出了基于矩阵积分评估的设计模式检测研究方法[7],该方法基于子图同构的概念,通过矩阵积分理论对候选设计模式参与者进行检测,并通过阈值对检测结果进行约束,从而过滤不精确的结果,并进一步提高了设计模式检测的精确率。此阶段之后,逆向工程与数据挖掘知识渐进式进入学生的思考范畴,而学生对于设计模式检测的认知更加深刻。

此外在对检测结果的研究分析中,部分学生甚至发现了假阳性与假阴性结果,为了发现造成假阳性检测结果的原因,指导老师启发学生对假阳性结果进行了归纳,并发现设计模式参与角色之间的附加关系会改变设计的意图,从而导致假阳性结果。在归纳了典型的附加关系后,学生在指导老师的启发下进一步制定了设计模式角色间附加关系的检测原则[8]。

为了对该附加关系进行检测,学生主动分析了当前设计模式检测工具的优缺点,并对之进行优化,提出了一种形式化上下无关文法关系驱动的设计模式检测方法[9],该方法较好地解决了设计模式角色间的附加关系问题与设计模式参与者共享问题,进一步提高了检测的精确率。另一方面,同时引导学生对设计模式检测结果存在的假阴性问题进行深入研究后发现,现有23种经典设计模式已不能完全满足软件设计师的需求,大多数情况下,软件设计师在不改变设计意图的前提下对Erich Gamma提出的23种设计模式进行了演化,并取得了较好的效果,这类演化后的设计模式可谓之设计模式“变体”,为此在先前工作[9]基础上,项目组学生进一步对这类难以检测的设计模式变体进行了检测研究,这样富有挑战性的课题也渐进式激发了学生的学习热情,并进而提出了基于文法产生式优化的设计模式识别方法,旨在通过特征匹配进行设计模式变体识别[10],过滤假阴性结果,该方法对结构型设计模式变体检测取得了较好的效果。但项目组学生通过手工验证恢复结果发现,该方法对于行为型与创建型模式变体存在改进的空间,但这类复杂的行为型与创建型设计模式变体规律性不太明显,如果以全自动的方式很难发现全部的变体,故项目组学生尝试一种半自动多阶段交互式线索驱动的设计模式检测方法[11],该方法通过调查表获取常见的静态线索、动态线索、专家线索,并将之转为CSP形式的特征形式,并可以自定义,该方法对先前工作[10]进行了优化,并取得了较好的效果。如此对问题进行渐进式累积,并逐个击破,让学生深刻感受到设计模式课程的重要性及乐趣。

3.2 设计模式与机器学习的联系

考虑到现实生活中设计模式专家毕竟是有限的,为了让更多的设计模式初学者能够灵活应用设计模式解决软件设计问题,除开设计模式检测领域,指导老师也引导另一部分同学深入设计模式推荐系统领域。项目组学生在指导老师的启发下结合形式概念分析与实例推理技术,并依据余弦理论对用户提出的问题要求进行了设计模式推荐,这有助于辅助软件设计师进行高效的软件项目设计[12]。对文献[12]优化的后续工作正有条不紊地进行,通过设计模式与机器学习的联系,将大大开拓学生的视野,并更进一步激发学生的学习兴趣。

此外,项目组学生从基准、变体及设计模式实例共享指标出发,对各类设计模式检测工具优缺点进行了评估[13]。从而更进一步加深了对设计模式的了解。等领域有机结合,实现了基于设计模式渐进式学习,并取得了较好的效果。后期工作将设计模式与更多交叉学科进行联系,从而实现应用型本科院校学生程序设计能力的进一步提升。

4 结束语

本研究对应用型本科院校大学生程序能力培养进行了研究,以设计模式为例,介绍了设计模式学习的前驱知识点,并分类引导学生对结构型、行为型及创建型模式进行程序实现,在此基础上以具体项目为依托,融入多种设计模式,进一步将学生对设计模式学习的成果融会贯通。此后,引导学生介入交叉学科学习,并将设计模式与逆向工程、数据挖掘、机器学习

[1]肖卓宇,叶嘉笑,黎妍.计算机专业大学生程序设计实践能力培养改革[J].软件导刊,2017(2):197-199.

[2]肖卓宇,黎妍,叶嘉笑.以计算思维为导向的大学生程序设计能力培养研究[J].计算机时代,2017(1):79-81.

[3]肖卓宇,陈俊旭,杨鑫维,杨邦平,胡振涛.独立学院计算机专业大学生程序设计能力培养的研究与实践[J].湖南邮电职业技术学院学报,2016(2):88-90.

[4]肖卓宇,余波,黎妍.以竞赛为驱动的计算机专业创新人才培养模式的研究[J].湖南邮电职业技术学院学报,2015(3):89-92.

[5]ZHANG C,BUDGEN D.What do we know about the effectiveness of software design patterns?[J].IEEE Transactions on Software Engineering,2012(5):1213-1231.

[6]肖卓宇,何锫,黎妍.基于DPS表达式类图的设计模式检测[J].计算机工程与设计,2015(10):2743-2748.

[7]肖卓宇,黎妍,何锫,陈俊旭.基于矩阵积分评估的设计模式检测研究[J].小型微型计算机系统,2016(7):1428-1433.

[8]肖卓宇,何锫,黎妍.基于设计模式角色的附加关系检测研究[J].计算机应用研究,2015(7):2042-2045.

[9]肖卓宇,何锫,余波,黎妍,杨鑫维.一种形式化文法关系驱动的设计模式检测方法[J].工程科学学报,2016(10):1499 -1508.

[10]肖卓宇,何锫,杨鑫维,杨邦平,陈俊旭,胡振涛.基于文法产生式优化的设计模式识别方法[J].电子科技大学学报,2017(3).

[11]肖卓宇,何锫,余波.一种多阶段交互式线索驱动的设计模式识别方法[J/OL].北京航空航天大学学报,http://kns.cnki. net/kcms/detail/11.2625.V.20161226.1707.002.htm l.

[12]肖卓宇,何锫,余波,黎妍,胡振涛.基于FCA与CBR的设计模式检测[J].山东大学学报(工学版),2016(2):22-28.

[13]肖卓宇,黄海,何锫,李港,杨道武,彭逸凡,董泽民.设计模式检测工具有效性评估策略[J/OL].计算机科学与探索,http: //kns.cnki.net/kcms/detail/11.5602.TP.20170504.1312.006.htm l.

Training research of students' programm ing ability in app lied undergraduate colleges

XIAOZhuo-yu1,YE Jia-xiao2,LIGang1,YANGDao-wu1
(1.Swan CollegeofCentralSouth University of Forestry and Technology,Changsha,Hunan,China 410200;2.Hunan Postand Telecommunication College,Changsha,Hunan,China410015)

The design pattern course of computer specialty in applied undergraduate college was taken as an example.Firstly pre-knowledge of design pattern coursewas introduced.Then,design patternswere performed based on classification of Gang of Four (GOF),and detail projects were performed.Finally,the students were guided to combine the design pattern course with reverse engineering,datamining,machine learning and other fields,solving the complex problems related to cross subjects,and achieving better results.The experimental results showed that the presented method based on systematic,progressive and heuristic learning can encourage theenthusiasm ofstudents.

design pattern;heuristic;reverseengineering;datamining;machine learning

10.3969/j.issn.2095-7661.2017.02.008】

TP311;G642

A

2095-7661(2017)02-0027-03

2017-03-27

肖卓宇(1979-),男,湖南长沙人,副教授,高级工程师,研究方向:程序理解、逆向工程、软件演化等。

湖南省教学改革研究项目“独立学院IT类相关专业学生程序设计能力的研究与实践”(课题编号:湘教通[2016]400号1068);湖南省大学生研究性学习和创新性实验计划项目“基于设计模式角色的附加关系检测研究”(课题编号:湘教通[2015]84号197)。

猜你喜欢
设计模式程序设计检测
“1+1”作业设计模式的实践探索
“不等式”检测题
“一元一次不等式”检测题
“一元一次不等式组”检测题
三维协同设计模式下的航天项目管理实践与展望
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
交通机电工程设计模式创新探讨
高职高专院校C语言程序设计教学改革探索
小波变换在PCB缺陷检测中的应用