孙小兵,李 斌,李 云,朱俊武
(扬州大学 信息工程学院,江苏 扬州 225127)
《软件工程》是软件工程专业重要的基础课之一,这是由软件工程在软件产业中的重要地位决定的。针对60年代“软件危机”爆发,1968年在NATO (北大西洋公约组织)召开的学术会议上,Feitz Bauer首次提出了“软件工程”概念,后来,软件工程作为一门学科迅速发展起来[1-2]。它以提高质量、降低成本为目的,将系统化、规范化、可度量的工程化方法应用于软件开发、运行和维护过程,从而使正确的管理方法和当前最好的开发技术结合起来[1-2]。但是软件产业发展日新月异,已经从传统的单机软件开发,到后来的面向互联网的软件开发,到现在的面向物联网的软件开发等[3-5],软件开发环境和应用环境也不断变化,例如面向移动互联的软件开发、云环境下的软件开发、众包环境下的软件开发、面向大数据处理的软件开发、基于DevOps的软件开发、智能化软件开发等等,这些变化都要求软件工程专业学生具有扎实的基础和学习实践能力[6-8]。
我国2011年将软件工程设为一级学科,教育部专门成立了软件工程教学指导委员会,相关大学都将《软件工程》课程作为重点课程进行建设[9-10]。而在课程建设过程中,各高校都花费了大量的精力建设一系列案例资源库,针对软件工程特点设计了一系列案例结合教学,着力提高学生的软件工程实践能力[11-12]。通过这些案例的教学和实践,使学生具备软件工程开发的基本素质[13-14]。
基于软件工程环境和技术的发展,《软件工程》课程教学很难满足专业能力需求,出现了一些案例或项目驱动教学改革方案:孙明等[15]提出设计型项目驱动的软件工程实践教学改革模式,该模式以学生为主体,构造实用的软件项目案例簇进行分阶段教学设计,实现软件人才的动态培养。张佩云等[16]提出项目驱动的软件工程课程案例式分段情景教学法,该方法实现了分段式情景教学过程管理的系统框架。孙小兵等[17]提出面向实践的软件项目管理课程建设,重在建设一批适用于软件项目管理课程的案例库。吴志辉等[18]提出进行项目驱动的软件工程课程教学模式改革,将小型软件项目用于课堂教学和学生上机作业,提高教学效果和质量。王静[19]探索了以案例库为导向的“现代软件工程”教学模式,要求在完善教学内容的同时,使课程内容更接近企业和社会需求。彭焕峰等[20]探讨了如何面向卓越工程师培养进行软件工程案例库建设,主要从能力知识点矩阵、案例-能力知识点矩阵、案例收集与更新、案例库平台构建等方面讨论案例库建设。陈鄞等[21]提出基于校企合作进行软件工程专业系列的案例教材建设,将企业实际项目按照知识点体系引入到软件工程案例教学中。
随着软件工程的快速发展,已有案例显得有些过时,不能适应新的社会应用和软件工程本身发展需求。为突出软件工程能力培养,强化软件工程实践教育[22-23],本文提出针对软件工程课程构建实践驱动的软件工程课程案例库设想。该案例库基于成熟的在线资源平台[24],方便教师和学生管理与使用,实现案例库的动态更新。这些案例来源多样,满足软件工程环境和技术发展的多样化要求。
《软件工程》课程主要围绕软件生存周期介绍软件开发、维护、管理等方面的基本概念、标准、规范、方法、技术、过程、工具和环境。学生要重点掌握如何从工程的实践角度高质量、高效率地开发、跟踪和维护软件项目。因此,本课程教学内容将以软件生存周期知识体系为线索,讲解如何进行需求分析、软件设计、软件实施、软件测试、软件维护等内容,并介绍相关的规范、方法和技术。要求学生掌握核心知识,熟悉相关应用领域,在某个知识域上追求深度,理解职业道德,明白系统工程和软件工程的区别,能够利用系统工程原则指导软件工程,具有团队合作精神,具有交流表达能力,具有协调、折衷能力,具有综合能力,具有终身学习能力,具有对新技术的分析和应用能力。因此,课程案例建设应当体现社会需求、软件开发环境的变化需求、软件不断演化和升级的需求。
《软件工程》课程主要特点如下:
(1)知识碎片化。《软件工程》课程内容既包括软件工程开发,如需求分析、软件设计、软件测试等内容,还有软件工程管理,如成本管理、质量管理等内容。各部分内容之间既具有独立性,又有一定的关联性,例如软件测试和质量管理是相关的。
(2)标准、规范、方法、技术多。如在软件开发方法中,有结构化的开发方法、面向对象的开发方法、基于组件的开发方法等。
(3)知识更新快。软件工程的一个显著特点就是工程性,而工程性就是要不断适应社会需求、适应环境变化。例如软件开发环境不断发生变化,从传统的单机软件开发,到后来的面向互联网的软件开发,到现在的面向物联网的软件开发等。
(4)实践性强。软件工程除了关注软件项目的开发和实施外,还包括软件项目的管理,软件项目的维护与演化。软件的工程性要求高效开发高质量的软件,以及不断满足用户需求的软件。
(5)团队的突出性。软件工程不仅在于开发软件项目,还重在团队的组织和管理。开发一个工程项目不是单兵作战,而是由不同角色人员组成的团队合作。
根据《软件工程》课程的教学内容及特点,简单的课程讲解和实验实践并不能让学生真正了解和掌握该课程要求的知识。因此,需要建立一套适合软件工程的案例库,帮助学生更好地锻炼软件工程能力。根据教学经验得到软件工程需(并不限于)建立如下案例库:
(1)失败软件产品开发案例库:收集各种失败的软件产品案例,如vista系统、ARIANE火箭、美国停电事件、临床医疗系统事故等等,通过失败软件产品案例,让学生认识软件失败的因素和可能带来的损失,从事故中汲取教训,认识软件工程的重要性,了解软件产品质量的重要性。
(2)软件工程标准与规范库:实时收集当前软件工程相关的国内外标准与规范,让学生了解并学习这些规范,结合相应的实际应用标准,开发符合规范的软件产品。
(3)软件工程新技术发展库:实时收集当前软件工程发展最新技术,让学生及时了解并学习这些新技术,充分运用新技术进行软件开发和软件环境搭建,让学生认识软件新技术发展的快速性,锻炼学生学习新技术的能力。
(4)软件开发模型库:提供常用的软件开发过程模型,让学生理解这些开发模型并尝试遵循这些模型进行软件开发,实践中理解不同模型的适用性和不同点。
(5)在线互动平台和资源库:构建针对课程的各种在线资源、最新技术进展等,增加课程互动,锻炼沟通能力。
(6)课程内容建设库:建设相应的《软件工程》课程内容,让学生自主学习并提供可能的延伸内容,更深层次理解课程。
(7)面向移动应用开发的项目案例库:不断更新现有的移动项目案例库,让学生选择不同的平台,如Andriod和iOS,将相应项目开发出来并打包发布,发布后由用户评论。由学生不断维护和更新,锻炼其软件开发能力、发布能力、软件维护能力。
(8)云环境下的软件项目开发库:针对当前云环境下的软件开发,建立一些案例,让学生参与云环境下的项目开发,充分利用云资源,开发云环境下运行的软件。
(9)面向特定领域的大数据处理软件开发:利用学校高性能计算环境,开发一系列面向特定领域的大数据处理软件,如农业数据处理、生物信息数据处理、水资源信息数据处理等。
(10)更新已有开源代码环境下的软件测试和bug修正跟踪案例库:针对不断更新的开源软件,让学生参与测试,发现其中的bug,然后尝试去改进这些bug,锻炼学生的阅读软件能力、软件测试能力、软件演化能力、领域学习能力。
(11)众包环境下的软件开发:让学生参与在线众包环境下(如Topcoder)的软件开发,参与国际项目的软件开发竞赛,锻炼团队合作能力和英文沟通能力。
(12)合作企业问题库:不断收集与学院有合作的一些软件企业设计开发中的一些问题,发布一系列软件开发项目,让学生参与实践,锻炼分析问题和解决问题的能力。
(13)企业项目经理库:建立有关企业的项目经理库,邀请这些经理参与学生实际项目的指导和开发,提出新的维护需求,传授职业道德,分享软件项目开发的经验。
(14)软件职业道德案例库:收集关于软件开发的法律或道德问题,培养学生良好的职业道德、素养和习惯。
扬州大学《软件工程》课程分配48课时,由32课时的课堂教学和16课时的实验组成,还有32学时的课程实践。16学时的实验可有效帮助学生进行软件工程基本知识点实践, 32学时的课程实践可结合软件工程项目开发进行工程项目锻炼。
对上述14个案例库的实施和使用主要采用课后自主学习、课程讨论以及项目实践的方式。学校建立了课程教学综合平台THEOL (http://eol.yzu.edu.cn),该平台用于支持专业精品课程建设、研究性教学建设以及资源共享等,支持软件工程课程的知识体系和经验库建立。该平台不仅用于教师发布案例库,还可用于学生讨论和项目提交。目前,基于扬州大学在线教育综合平台开发设计了10个案例库,设计思路如图1所示。
案例库收集来源于4个方面:①校内教师项目案例收集,即面向学校教师收集最新的项目进行实战,吸引学生参与并持续跟踪;②面向行业案例收集,即收集与学校合作的企业案例进行案例建设;③软件工程会议文献收集和获取,即收集近年来在软件工程知名国际会议(如国际软件工程大会ICSE、国际基础软件工程会议FSE、自动化软件工程国际会议ASE)上关于软件工程技术和管理的最新技术进展;④在线资源收集和获取,即从公网收集相关案例资料以更新案例库。教师和学生都可使用该平台进行案例的导入、更新和获取,该平台还能针对学生的学习情况和学习结果进行监控、跟踪和量化统计。
图1 案例库设计
通过使用这些案例库,学生认识到软件工程不是空洞的课程,而是实践性课程,甚至比以往学习编程语言课程更强调实践的重要性、有效性,由此更深地了解软件工程相关知识和方法。
《软件工程》课程是计算机和软件工程专业的重要专业必修课,传统的教学方式仅仅简单地将课程教学和项目实践结合,教学效果不是很理想。有些案例教学方法侧重项目开发,不能满足软件工程各个知识点的实际需求。根据《软件工程》课程特点,本文探讨了实践驱动的案例库建设经验,介绍了14种面向实践的《软件工程》课程案例库建设方法。基于这些案例库,学生能更深地了解软件工程的知识和方法,并运用这些知识开展软件工程实践。