新工科背景下的软件工程课程实践教学建设:思考与探索
1 背 景
软件工程是软件工程人才培养的一门核心专业课,其目标是培养学生借助于工程化的手段,并综合运用多方面的知识来解决复杂问题和开展创新实践的能力。实践教学无疑是达成这一建设要求的重要环节,只有通过针对软件系统的工程化开发实践,才能让学生深入理解和掌握抽象的软件工程知识,运用所学到方法和技术来开发软件系统,并在克服困难、解决问题的过程中获得感悟,积累经验,提升能力。
新工科建设[1-2]给软件工程课程实践教学提出了明确和清晰的要求,即从新工科人才培养的角度出发,为提升学生的工程实践和创新能力、提高工程素养做出贡献。
首先,课程实践的内容要充分体现“工程”特点,为工程实践和创新能力培养奠定基础。例如,课程实践中待开发的软件系统要有一定规模、需求,问题要有创意,涉及的知识和技能要有多样性、综合性、交叉性、集成性等特点。
其次,课程实践的实施要充分体现“工程”特点,通过实训来培养工程实践和创新能力。例如,课程实践要充分借助工具和平台,尽可能采用与业界主流相一致的方法和技术手段。
最后,课程实践的考评要充分体现“工程”特点,为工程实践和创新能力培养提供准绳。例如,要关注和重视工程实施及其产品的质量,要通过考评来推动工程实践,加强能力培养。
因此,必须在新工程建设的背景下重新审视软件工程课程实践教学的建设,分析新工科建设对其提出的要求,审视当前实践教学在达成这一要求方面存在的问题和不足,并思考和寻求解决问题的有效方法。
自2012年以来,国防科技大学计算机学院针对新工科建设中对软件工程课程实践教学的要求,对其课程建设开展了系统性、深层次的教学改革,试图解决我们在落实人才培养方案、加强能力培养、适应专业和产业发展、满足岗位需求等方面存在的问题和面临的挑战。这次教学改革涉及面广、幅度大、要求高,包括知识结构的重组和优化、课程群的建设、教学方法的改进、教学平台的开发和应用、考核方法的调整等。
2 软件工程课程实践教学的现行方法及其局限性
当前软件工程实践教学通常采用团队方式组织学生参与实践,以项目形式开展实践,以老师或者TA作为指导学生完成课程实践的主要帮助对象,以老师给定的任务和要求(如时间、进度、评标和考核标准等)驱动学生开展实践。在课程实践过程中,学生主要借助于物理空间(如教室或校园),或者局域网络空间(如某些教学平台),通过与教师和TA的交互,获得所需的资源,解决存在的问题。
概括起来,这种实践教学方法存在以下不足:①参与对象的封闭性,课程实践的参与对象仅仅局限于参加实践教学的学生、老师和TA,其他对象难以加入到实践教学中并做出贡献,因此老师的作用很关键;②资源渠道的有限性,学生大多情况下只能从老师或者TA那里获得支撑课程实践所需的资源,难以从其他的渠道来获得帮助,因此老师的辅导很关键;③实施空间的局部性,课程实践通常受限于局部的物理空间和信息空间,学生难以与实施空间之外的个体或者群体进行交互和协作,因此与老师的交互很关键。
现行的实践教学方法的本质是以教师、教室和教材为中心开展课程实践,成效高度依赖于任课教师的专业水平、工程经验和教学投入,今年的成功并不意味着明年的成功。这种实践教学方法极大限制了学生开展实践的视野,限制了实践教学的实施空间,制约了获取指导和帮助的范围,影响了对学生工程实践能力和素养等方面的训练和培养。
从教师的角度看,软件工程课程实践教学面临的最大挑战在于老师缺乏足够的知识、经验、资源、时间和精力来指导学生完成课程实践。基于传统教学方法,单纯靠教师和TA来辅导学生开展软件工程的课程实践,高标准地完成各项实践任务将会非常困难,即使老师有美好的意愿,也会遇到心有余而力不足的尴尬局面,从而导致课程实践虎头蛇尾,草草收场。
从学生的角度看,软件工程课程实践教学面临的最大挑战在于在课程实践过程中会遇到种种的问题,迫切地需要寻求解答、给出建议、提供指导。基于传统教学方法,学生只能从教师和TA处寻求有限的帮助,难以超越老师和TA获得其他的帮助渠道,一些问题难以做到及时解决,从而极大影响了学生开展课程实践的积极性和热情,以及课程实践的效果和质量。
3 软件工程课程实践教学改革的建设思想
3.1 互联网和群体化方法带来的启发和思考
当前的教育改革深受互联网和信息技术的影响,一个典型的例子就是MOOC。互联网不仅是一个技术平台,更是一种理念和思想,借助连接的手段,采用开放的思维,实现信息、资源、服务、知识等的充分共享,从而为诸多问题的求解提供了基于互联网的新模式。在此背景下,群体化实践和应用不断产生,从大众点评到软件开发等诸多领域。
在软件工程领域,以开源软件、开源社区为代表的一类群体化方法取得了成功。它们为软件工程课程实践教学的开展以及克服其局限提供了新的思路和理念。开源软件不仅改变了传统意义上的软件开发模式,允许人们自由地获取、使用、修改和分发由互联网群体开发的程序代码,而且极大激发了互联网群体的创新意识,代表了软件工程领域一种先进的开发技术。以SourceForge、GitHub等为代表的开源社区不仅汇聚了大量不同水平和层次、不同专业和领域知识背景的软件开发人员,而且提供了来自互联网大众的各种智慧,如互联网的连接、开放和共享思想以及以开源软件和开源社区为代表的群体化方法的成功实践给了我们诸多的启发,充分发挥互联网的优势和群体智慧的力量,加强软件工程课程实践建设、改革实践教学方法、提升课程实践效果,达成人才培养目标。
(1)互联网汇聚了海量、多样、高质量的资源(如开源软件),我们可以将这些资源引入到实践教学环节,让它们成为指导课程实践的学习资源,从而来解决软件工程实践教学中普遍存在的资源数量不足、质量不高、难以获取等方面的突出问题。
(2)互联网聚集了大量、经验丰富、高水平的开发人员,我们可以将这些群体引入到课程实践教学环节,让他们成为课程实践的指导者和贡献者,从而来解决实践教学中普遍存在的有问题找不到帮助、难以获得高水平指点等方面的突出问题。
3.2 软件工程课程实践教学的改革思路
互联网上汇聚了大量值得我们学习的“老师”,也不乏“高手”,他们提供的资源和作品值得我们学习和利用,他们的智慧、经验、心得等值得我们借鉴和参考。软件工程课程实践教学应充分借助互联网群体的力量,利用互联网群体提供的资源、智慧和作品来开展学习、指导实践。
近年来无论是教育界还是工业界都充分认识到群体化学习方法的重要性,并在高等教育中开展了积极的探索和实践[3-5]。基于群体化思想的课程实践教学不仅可以利用互联网群体所提供的资源(如开源软件)来支持实践,让高质量资源及其蕴含的丰富经验和成功经验来提升学习者的实践水平和工程素养;而且它还超越传统意义上的物理空间(如教室和课堂),让学习者基于互联网与互联网上的“高手”进行交流,及时获得帮助和指导,从而来解决实践过程中遇到的各类问题(见图1)。
群体化方法使得实践教学的理念发生了根本性的变化(见表1),它基于群智、开放、海量、高质量等新颖的理念,可以有效克服以教师、教室和教材为核心的实践教学模式存在的诸多不足,是对传统实践教学方法的有效补充。
与传统的实践教学方法相比较,基于群体化方法的实践教学具有以下特点:①实施空间,基于互联网空间而非物理或者局域信息空间;②协同对象,基于开放的互联网群体,而非任课教师或TA;③实践资源,来自于互联网群体的作品、问题解答、经验分享等,而非来自老师和TA的有限资源;④实践协同,基于互联网平台(如社区)、采用分布式协同(Issue、Pull/Request)机制,而非面对面交流和指导。
4 软件工程课程实践教学改革的整体框架及实施方法
为了加强软件工程课程实践教学的建设,强化工程实践和创新能力的培养,践行基于群体化的实践教学方法,在过去3年我们围绕软件工程课程实践教学的实践内容、实施方法、考评方式、支撑平台等方面开展了积极的探索,整个实践教学改革的框架如图2所示,主要包括两个相互关联的实践。
(1)阅读和维护高质量的开源软件。该实践要求学生阅读高质量、具有一定规模的开源软件,根据对开源软件的理解来对代码进行标注,对代码的质量进行分析,在此基础上对开源软件进行维护,完善其功能,纠正其缺陷。该实践的目的旨在让学生掌握高质量程序代码的基本风格和要求,学习如何编写高质量的程序代码,感受程序代码质量的重要性,领会软件需求变化和规模增长对代码质量产生的影响。实践的结果包括开源代码标注和注释、开源代码质量分析报告、经过维护后的开源代码、可运行和可演示的软件系统、软件系统的产品介绍、演示和报告材料。
(2)开发有创意、上规模和高质量的软件系统。要求学生构想和创意软件需求,对待开发软件系统的规模性、集成性、综合性、质量等提出明确要求,采用迭代的方法进行需求分析、软件设计、编写代码、测试验证等,鼓励学生重用开源代码和互联网服务,通过基于互联网的分布式协同、持续集成和检查、基于开源社区的交流和讨论等手段来开发软件,解决开发中遇到的问题。实践的结果包括软件需求创意文档、软件设计模型、程序代码、测试报告、可运行和可演示的软件系统、软件系统的产品介绍、演示视频和报告材料。
为了实施实践教学,我们采取了以下的方法和手段。①采用群体化的方法来解决传统实践教学面临的问题,包括学习互联网群体所开发的开源代码,通过加入开源社区并进行交互和协同来获得互联网群体帮助,分享他们的经验和智慧;②借助于基于互联网工具和平台来开展实践,如分布式系统开发平台Trustie-Forge、开源软件连接与检索平台Trustie-OSSEAN、开源代码学习标注工具Trustie-Codepedia;③迭代开发和持续讲评,两个实践均采用迭代的方式来完成,在此过程中老师须对学生的实践过程和提交的实践成果持续进行讲评,发现问题、给出建议、提供思路、纠正方法、总结经验等。
经过3年的建设以及2届学生的实践探索,基于群体化的软件工程课程实践教学在加强工程实践和创新能力方面取得了积极的成效:学生所开发的软件系统的规模平均达到10 000行以上代码,软件系统集成了多个系统和设备(如机器人、无人飞机、智能终端、开源软件和互联网服务)、交叉了多样化的知识和技术(如模式识别技术、机器人软件技术、移动APP软件技术等等),软件产品的质量(包括代码、模型和文档)得到了显著提升,基本掌握了基于互联网来进行群体化协同开发的技术和技能,所构想和实现的软件系统有新意,在多个比赛和竞赛中获奖。
5 结 语
技术发展、产业进步和国家经济结构战略调整对高等院校的人才培养质量,尤其是工程实践和创新能力、工程素养等提出了更高的要求。如何针对这一要求改进教育理念和教学方法是当前高等教育面临的一项重要挑战。实践教学无疑是达成这一目标的关键,但是当前基于教师、教材和教室的实践教学方法在支撑人才培养方面存在诸多的局限性。互联网理念和群体化方法可以为达成新工科人才培养要求、克服现有实践教学方法不足等提供有效的解决途径,从而实现实践教学理念和思想上的转变,充分借助群体的智慧来促进人才培养将是高等教育的一个重要趋势。基于这一思想,我们探索了基于群体化的软件工程实践教学,设计了读开源代码、改开源软件、利用开源软件和互联网群体来开发有创意、上规模和高质量的软件系统等一系列的课程实践,训练和培养了学生的工程意识、质量意识、创新意识,实践结果表明了我们的教学实践改革思路和方法的有效性。
参考文献:
[1] 胡波, 冯辉, 韩伟力, 等.加快新工科建设,推进工程教育改革创新——“综合性高校工程教育发展战略研讨会”综述[J]. 复旦教育论坛, 2017(2): 20-27.
[2] 吴爱华, 侯永峰, 杨秋波, 等. 加快发展和建设新工科 主动适应和引领新经济[J]. 高等工程教育研究, 2017(1): 1-9.
[3] Foulger T S. The 21st-Century teacher educator and crowdsourcing[J]. Journal of Digital Learning in Teacher Education, 2014, 30(3): 110.
[4] Prasad M R, Reddy D K. Computer based teaching methodology for outcome-based engineering education[C]// IEEE. International Conference on Advanced Computing. IEEE, 2016: 809-814.
[5] Bandyopadhyay S, Thakur S S. ICT in education: Open source software and its impact on teachers and students[J]. International Journal of Computer Applications, 2016, 151(6): 19-24.
基金项目:国家自然科学基金项目“大规模在线协同学习的机理与方法研究”(61532004)。
第一作者简介:毛新军,男,教授,研究方向为群体软件开发、多智能体系统、智能软件技术,xjmao@nudt.edu.cn。
更多精彩:
2017年创新人才推进计划拟入选对象公示,有你的学校和老师吗?
北京航空航天大学王田苗教授:当前智能机器人发展若干挑战性问题
喜讯:《计算机教育》跃居《中国学术期刊影响因子年报(人文社会科学)2017版》Q1区!