一、软件行业人才需求现状
1. 企业用人学历要求走高
据中国软件行业协会《2013年中国软件与信息服务业人才发展报告》(以下简称《报告》)调查统计,从全国软件企业对软件人才的需求来看,本科学历需求量最高,占51.6%,其次是大专学历,为36.2%。《报告》显示,2013年,软件企业对应届专科毕业生的不满意反馈比例最高,占到17.3%,表示比较满意的企业仅占35.2%。而对应届本科生毕业生的不满意率有所下降,为13.3%,但比较满意的评价也有所减少,仅为27.8%。相对而言,应届研究生更能得到软件企业的认同。
以上各项数据表明,企业对软件人才学历的要求已经呈现逐年走高的趋势。特别是90后进入职场以后,这一趋势更加明显。不难理解,自2011年开始,人口出生数量低谷导致生源数量急速下降,使得部分高校面临严峻的生存危机。为了完成招生指标,高校不得不降低门槛,伴随而来的就是生源质量的下降。随着90后进入高校,这种现象愈发显著。这也就迫使企业提高员工的学历要求,本科越来越成为最低入职门槛。
2. 软件行业技术的要求
伴随着移动互联、云计算、物联网、大数据等新技术新应用的飞速发展,软件技术呈现出两种走向。一种是面向移动互联等技术,以短平快的轻量级产品开发为主,要求开发人员不仅掌握开发技术,还要有比较开阔的视野,要对美工、产品设计、用户体验等多个领域有所领悟。另一种趋势是面向框架技术、云计算、物联网、大数据等背景,软件产品趋向于航母级规模,要求在某一领域技术非常精专的同时,要对软件有较高层次的视角和更全面的认识。无论是面向哪一种走向,对从业人员的要求都是越来越高,越来越全面。这也是对从业人员学历要求日趋走高的重要原因之一。
二、软件工程专业内涵
我国软件工程教育经过多年发展开始逐步走向成熟。2005年教育部组织编写了软件工程专业规范,2006年成立了软件工程专业教学指导分委员会,其重要任务就是要根据现代软件工程人才的培养要求,不断发展和改革软件工程专业教育,而改革的目标和重点在于培养高质量的、适应社会经济发展需要的软件人才。
软件工程专业是一门关于如何构建有效、实用、高质量软件的技术性学科。它涉及到计算机应用技术、程序设计语言、数据库、软件开发工具、系统平台、行业相关标准、设计模式、软件开发方法、软件开发过程、软件开发环境、软件测试技术、数字化技术、计算机辅助软件工程(CASE)、软件质量管理及软件经济学等方方面面的内容。由于软件工程要求应用计算机科学和数学用于构造模型与算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理科学用于计划、资源、质量和成本的管理,因此,软件工程也是一门实践性非常强的学科,融合了计算机科学、数学和管理科学等现代科学。综上所述,软件工程专业的学生必须学会将理论原理和实践相结合,不仅要具备良好的软件设计能力,还要能够超越计算机学科获得其他应用领域的专业知识,从而支持其他应用领域软件系统的开发。
三、探索应用型本科的职业教育特色
目前,开办应用型本科专业的院校有两大来源,一是普通高等教育转型而来,二是原有高职院校升格而成。在开办应用型本科软件工程专业的过程中,既不能照搬原有高职专业课程体系,也不能一味模仿本科院校教学计划,而背离本科教育的优势和职业教育的特色。比较合理的思路是在尽可能保留现有专业优势的同时,将本科层次的优势和职业教育的特色有机结合。
1. 专业课程设置
无论是哪类院校开办应用型本科软件工程专业,都会在原有课程基础上设置部分新课程,还有部分课程虽然与原有课程名称相同或相近,但内涵和定位会有所区别,需要重新建設。因此,一项重要工作是研究课程关系,探索建立科学合理的课程体系,并在此基础上,确定各门课程的内涵。
为了顺应软件行业发展的趋势,应用型本科设置的专业课程,应突出深和新两个特点。一类课程在理论上有一定难度、深度,在某一领域引领学生深入开发或研究,并培养学生的专业理念,如操作系统、数据结构、软件工程以及一些框架级开发技术等类型的课程。另一类是新技术方面的课程,体现行业前沿技术和发展趋势,用以拓展专业视野,如移动互联应用开发、虚拟化技术与云计算、大数据处理技术等类型的课程。
高职、研究型本科和应用型本科的人才培养定位各有不同。高职层次的目标定位是培养技术技能型人才,普高研究型本科的人才培养目标是高素质研究型人才,而应用型本科的专业培养目标是高新技术应用型人才。因此,两种来源的院校在设置专业课程时,切忌简单照搬原有课程内涵,即使课程名称相同,教学内容也应有所区别。理论为主的课程,如上述操作系统、数据结构、软件工程及框架技术等类型的课程,在满足理论深度要求的同时,一定要保证理论与实践相结合,使理论能落地,避免空洞理论的堆砌,避免口说无凭。而在实践性较强的课程中,如软件开发、实操类课程中,要注重渗透理论性、理念性的内涵,强调精、专,内容上有一定的深度和广度,避免泛泛而谈,避免知其然不知其所以然。
因此,应用型本科的课程设置要注重理论深度和广度与坚持课程体系和课程内容的实用性和应用性相结合,才能较好地在满足本科层次要求的同时突出职业教育特色。
2. 校企合作共建软件工程专业
在建设职业教育特色的软件工程专业过程中,发挥行业企业的作用,可以有效地为校企合作搭建平台,开展企业参与办学、指导学生就业、资源共享、战略合作等一系列工作。
企业参与制定专业发展规划,可以对学校的办学定位、专业发展方向提出可行性建议。通过企业调研访谈,可以了解行业最新技术动态和用人需求,修正课程体系和课程内容设置的偏差,及时更新教学内容,共享先进技术,利于专业发展与行业需求无缝对接。
以专职或是兼职教师的方式引入企业人才,可以有效解决因新技术发展过快等因素而导致的师资力量不足和师资队伍培训的问题。组织学生到企业参观和实践,使学生了解企业工作模式和工作流程,感受企业文化,可以为今后就业作好准备。企业与学校共建实训基地,提供校外实习场所,选聘技术专家指导实习,协助落实学生就业,利于学生快速适应社会需求,实现就业的平稳过渡。
企业可以共享学校的场地、设备、人力等资源,学院可以共享企业的管理经验、企业信息、用人需求信息、软件项目和研发技术等资源。企业和学校合作完成科研项目,积极推进先进技术和科研成果转化,可以实现校企双方互利互赢。
总之,校企合作共建专业是达成为企业输送合格人才的办学目标,突出职业教育特色的便捷途径。
在软件工程工程硕士培养的诸多问题上,做了一些有益探索与研究,针对性地提出了一套适合于省属高校软件工程全日制工程硕士培养的解决方案,希望能为同类型高校提供人才培养的借鉴。研究生培养方案的制定,重点需要解决课程体系设置、培养流程规划与控制。对专业学位研究生而言,还需要解决专业实践能力的培养与训练这一关键问题。
1.课程体系设置软件工程学科正式确立的两个标志性文件是2004年IEEE推出的软件工程知识体(SWEBOK)和软件工程教育知识体(SEEK)。两个文件内容相近,都包含了软件工程核心类的知识领域、基础类或前导类的知识领域,以及其他相关领域的知识[4]。软件工程研究生的培养从原则上说应遵循上述两个文件,围绕上述知识领域进行教学。但由于这两个文件将软件工程的知识体系划分为知识点,各领域之间必然存在重复和交叠。在课程设置上无法照搬上述两个文件。以SEEK为基础,我们对软件工程的课程设置进行规划。整个课程设置被分为五个层次,分别为工程基础课程、计算机基础课程、软件工程核心课程、扩展课程和实践课程,如图1所示。课程开设顺序大体按照五个层次由低到高依次开展。其中,工程基础课程提供软件工程所需数学理论基础、外语能力培养、软件工程文档写作、论文写作基本功训练。计算机基础课程提供软件开发必须的计算机基础知识,如网络、算法和数据库知识。相对于本科课程而言,此类课程讲授内容更深入全面。软件工程核心课程设置了高级软件工程、软件体系结构和软件测试与质量保证三门课程。高级软件工程侧重于软件分析与设计、软件工程过程、软件开发案例分析。软件体系结构侧重于结构风格、案例研究、共享信息系统、结构描述、结构的分析与评估、特定领域的软件体系结构和流行的软件体系结构等。软件测试与质量保证着重于软件质量的改进,讨论如何提高软件质量的方法。扩展课程包含系列领域知识课程,研究生可根据研究方向选择两门;软件开发工具讲授最新流行的软件开发、过程管理所需要的软件工具的使用,以实践教学为主。软件开发新技术研讨课程以讲座形式开展,教师和学生均可作为一个专题的主讲。实践课程包含校内实践、校外实践和毕业设计三个环节。
2.培养流程与实施教育部明文规定,专业学位研究生学制原则上为两年,同时要求应届本科生进行专业实践不少于一年。一般来说,研究生在校课程学习时间应有一年左右,加上专业实践的一年,如何合理安排学习计划,在两年内完成培养环节成了一个现实的重要问题。我校以周为单位制定了四川师范大学软件工程专业学位研究生培养流程,如表1所示:上表规划了研究生培养中的几个关键环节,依次为报到入学、课程学习、校内实践、校外实践、开题、毕业设计、论文写作和送审答辩。第一学期研究生主要是课程学习,同时在校内导师指导下开展文献阅读和编程能力锻炼。第二学期前半学期结束理论课程的学习。后半学期和暑期开展校内实践和毕业设计开题工作。第三学期研究生到实习基地进行校外实践。从第二学期后半段和整个第三学期,学生在专业实践的同时,需完成毕业设计。从第二个寒假开始直到第四学期前六周,研究生完成毕业论文的初稿。从第七周开始,进行论文修改、、盲评和答辩工作。从培养流程表可以看出,这种安排具有两个显著特点。一是理论课程学习安排在一个半学期完成,二是实践课程分为校内实践和校外实践。研究生理论课程学习任务并不重,完全可压缩到一学期半,同时可为实践提供更多时间。校内实践非常有必要。由于是省属高校学生大多能力一般,为保障学生进入企业能融入研发团队从事技术工作,必须先期培训其实践能力。这种安排时间较为紧凑,也比较合理,符合专业学位研究生侧重于实践能力培养的要求,也在两年的学制内确保了研究生的实践时间不少于36周。
二、专业实践能力的培养与训练
软件开发能力是软件工程专业硕士必备的核心能力,其能力培养既是对前端课程学习效果的检验,也是后端毕业设计和就业的必然需要。我校将软件工程专业硕士实践能力培养融入了众多环节。从前期的实验型课程教学,到中期的校内实践、再到后期的校外实践和毕业设计。实验型课程教学解决软件设计开发的基础技能,校内实践解决中小规模软件设计开发能力,校外实践和毕业设计解决中大规模软件设计能力。
1.实验型课程教学包含软件工具的使用训练、软件开发环境的搭建、软件开发案例分析和新技术研讨。软件工具的使用训练学生单个软件开发工具的使用,如项目管理软件Project、开发文档化软件Rational、软件测试工具LOADRUNNER、QTP、TD等。由于这些工具结构分散,还需进行开发环境的搭建训练。开发环境搭建训练内容一为搭建基于微软的VSTS和VisualStudio的开发平台,适合.net方向;内容二位、为搭建基于IBMRSA和Eclipse的开发平台,适合J2EE方向。软件开发案例分析中研究生将自己放在决策者的角度来思考项目所涉及到的具体问题,增强了学生的实际应对能力。新技术研讨促进学生或主动或被动地掌握了一些新兴技术,拓宽了技术领域。
2.校内软件开发实践采用项目驱动形式开展。要求研究生必须申报各类实际的软件开发项目,如四川省苗子工程、学校研究生科研创新项目、学院研究生科研创先项目。研究生可组织本科生参与项目实施,但必须任项目组长,在项目中担任核心角色,完成软件需求文档审定、软件架构设计、软件详细设计、大部分编码工作、测试方案制定等重要工作。
3.校外软件开发实践在上述环节经历后,研究生已经掌握中小规模软件开发的基本技能,此时将研究生派到实习基地,实战参与企业软件开发项目。其实践由校内导师和企业导师共同负责。前期技能的培养已保证研究生胜任企业中一般性的软件开发角色。
4.毕业设计研究生在校内和校外实践的36周中,还需要同时进行毕业设计的开题、实施。研究生可结合企业实习工作完成毕业设计。专业实践的考核分为定期汇报和实践环节结束汇报两种形式。研究生应每隔两个月集中汇报一次实习期工作心得,取得的成绩等。实践结束时在全院公开汇报,其成绩作为实践课程成绩。
三、结论
【关键词】软件测试 教学改革 软件测试工程师
【基金项目】2015年中央高校基本科研业务费专项资金项目“C程序代码级内存缺陷的充分性检测技术研究”(15CX02050A)。
【中图分类号】G64 【文献标识码】A 【文章编号】2095-3089(2015)09-0229-01
一、引言
随着软件产业的迅猛发展,软件的复杂性也日益增加,导致对软件的质量提出了更高的要求,这也使得软件测试工程师成为每个软件企业都不可或缺的技术人才。“软件测试”就是一门培养软件测试工程师的专业课[1],本课程较为系统的介绍了软件测试的基本理论、测试方法、测试过程以及常用测试工具等内容。本课程知识的掌握将为学生系统的掌握软件工程知识体系以及毕业后从事软件测试、软件开发等职位打下良好的基础。
如何扎实有效的培养软件工程学生在软件测试领域既具有理论基础、又具有工程实战能力,目前许多软件工程专业教育者进行了积极的探索 [2-4]。我校软件工程专业已入选山东省卓越工程师培养计划[5],为了执行国家对软件工程专业卓越工程师培养的精神,融合学校的“三三三”培养体系[6]的顶层设计,以贯彻培养理论扎实、具备工程实践能力、创新能力强、适应经济社会发展需要的高质量软件工程师为目标,我们也在软件测试课程的培养方案、课程结构、教学方法和考评体系等方面进行了一系列的改革和探索[7,8]。其中最为重要的改革是借鉴CDIO(Conceive-Design-Implement-Operate)工程教育理念,落实了“基于项目的教学”方法,增开了大量的课程设计和综合实践环节,在理论教学的同时注重了工程实践能力得培养。
二、“软件测试”教学面临的问题
“软件测试”课程的已有的教学改革改善了教学效果,但是由于传统的教学方法依然影响着教学,所以目前的软件测试课程教学过程中依然面临一系列问题。
(一)教学内容抽象,学生学习兴趣不高
软件测试是软件工程知识体系的九个知识域中理论性最强的一个知识域,必然造成软件测试教材与教学内容较抽象。目前,软件测试课程教学中普遍存在着理论教学偏重的特点,扎实的理论素养是卓越工程师的必备基础,但是即便对于软件工程专业的本科学生,也欠缺软件项目的实际开发经验,所以课程内容的抽象性增加了学生对课程内容的理解难度。为促进学生对理论知识的理解与应用,必须结合软件测试的课程特点,将抽象的内容分化到软件测试过程的不同阶段中,并采用相应的测试工具体现测试的方法,再应用于教学案例,才能促进学生对抽象的测试理论知识的理解与应用。
(二)教学内容碎片化,学生没有完善的测试知识体系
按照软件开发过程的要求,软件测试是贯穿于整个开发过程的一项活动。而在教学中,软件测试的理论出现了割裂,各知识点呈现碎片化,理论内容与实际的软件测试流程不同步。将不同的测试理论与方法进行了分割,这样利于教材内容的安排以及教学内容的组织,但这也必然造成教学内容碎片化,学生形成不了一个统一的测试理论框架,难以把握所学的理论与方法在软件开发与测试的过程中如何应用。为促进教学效果,有必要基于软件测试过程,定位软件测试的介入点,在不同的介入点进行理论知识的分配,形成一个以软件测试过程为主线、各理论知识在介入点进行分配的鱼骨图式的软件测试理论知识体系。
(三)轻视测试工具应用,培养的学生与企业需求难以衔接
因为软件测试方法众多,这也造成有大量可选的软件测试工具。虽然工具的培训是培养卓越工程师的一个必备环节,然而卓越工程师的培养毕竟不等同于职业教育,不能只是简单的掌握一个测试工具,而应该了解测试工具所体现的测试理论、所适用的测试阶段以及所应用的场景。在进行测试工具培训锻炼的同时,必须结合所讲授的测试理论,以及该工具适用的测试过程与测试场景。为了全面的掌握各种具有代表性的测试工具,需要搭建一个测试工具箱。
(四)教学案例简单,学生没有完整的测试思路
因为理论知识碎片化的讲授,也造成目前教学中只能采用简单的案例,简单的案例虽然有助于学生对具体测试方法的理解,但是难以融会贯通的掌握对一个完整项目的测试。为此,需要基于鱼骨图的软件测试理论知识体系,精心设计能够贯穿整个测试流程的案例,并有必要设计不同类型的案例,形成一个分层次、分类别的测试案例库,以保证对各种测试方法的掌握。
(五)学生对软件测试存在认识偏差,缺乏从事软件测试职业的意愿
目前国内软件行业依然蔓延着“重开发、轻测试”的观点,这种观点也延伸到软件工程专业的教学中,导致部分学生对软件测试这个职业存在认识偏差。这就要求软件测试课程需要从原来偏重理论讲解、学生欠缺软件测试训练的教学中摆脱出来,应该与软件测试工程师要求的能力培养集合起来,注重理论培养的同时,加强与软件测试职业的衔接,增设对软件测试工具的训练,加大基于案例与项目的实战训练,通过工程能力的培养以加深学生对软件测试的正确认识。
三、总结
为了执行我校软件工程专业的卓越工程师培养计划,解决“软件测试”教学中存在的上述问题,我们计划在已有的教学改革基础上,提出“方法为基、过程引导、工具跟进、案例贯穿”的“方法-过程-工具-案例”四位一体的教学方法,以解决目前“软件测试”课程中存在的诸多问题。
本文分析了“软件测试”这门课程随着卓越工程师培养、研究型教学的要求下在理论培养与工程能力训练等方面逐渐显露出的各种亟待解决问题,只有充分认识到这些问题,才有可能针对问题进行教学改革,进而培养理论与功能能力具备的软件测试人才。
参考文献:
[1]吴春雷, 刚旭, 张俊三. 基于“卓越计划”的软件测试类课程改革[J]. 计算机教育, 2014,11:88-91.
[2]李月龙. 高校软件测试课程教学改革研究[J]. 计算机教育, 2014,7:16-18.
[3]邓松. 递进式软件测试创新人才培养模式研究[J]. 计算机教育, 2014,7:5-7.
[4]周雪妍, 林泽鸿, 罗秋滨, 路雯靖, 刘玉利. 软件测试技术四面体培养模式的探索与研究[J]. 教学研究, 2013,5:56-58.
[5]张国平等. 软件工程卓越培养计划的研究与设计[C].软件工程2011年会,2011,10.
[6]刘华东. 构建“三三三”培养体系 推进本科教育迈向更高目标[J]. 中国高等教育, 2012,18:34-36.
[7]吴春雷. 面向应用型软件人才教学模式的探索与实践[J].中国成人教育, 2014.04:124-126.
[8]张国平,吴春雷. 软件工程专业核心课程案例化教材的规划与设计[J].高等理科教育,2013.10:85-87.
关键词:整体项目模式;项目Bus;软件工程;教学
0 引言
文献1论述什么是整体项目模式以及整体项目模式的优缺点,文献2论述整体项目模式下软件工程专业的教学体系结构,同时也提到软件工程专业教学方面的要求,主要是针对教师的要求。在实际过程中,整体项目模式下软件工程专业的课程教学较为复杂。首先,需要理清专业课程之间的相互关系;其次,需要明确专业课程和项目过程之间的关系;第三,需要掌握专业课程教学和实际项目之间的切入点、重点和难点;最后,学生要能切实根据自己所做的项目,从不同的侧面或教学内容方面书写项目文档,并认识到同一项目可以从不同的角度进行分析、设计和编程。
传统的专业课程项目教学和整体项目模式下的专业课程教学存在很大区别。传统的专业课程项目教学主要是没有从整体项目模式考虑教学问题,割裂了专业课程之间的相互联系,只从该课程的教学内容方面列举案例,学生对教学内容的认识具有片面性和局限性,不能建立起对知识体系的整体观念。在实践教学过程中,学生曾经提出过很多问题:软件工程和结构化设计、面向对象设计有什么不同?它们之间有什么联系?为什么要学习面向对象?不学习可以吗?作为一个专业课任教师,如何进行解释?如果学生有足够的项目经验,前期是否一定要有详细的分析和设计文档?针对最后一个问题,若是不具备丰富项目经验的教师回答,那答案是一定要有详细的分析和设计文档;但是实践经验丰富的教师则认为这个问题的答案是不一定的。小型或者微型项目的前期不一定要有详细的分析和设计文档,可以直接在编程过程中进行分析和设计,那么这是否违反了软件工程呢?当然,答案也是否定的。如教师在讲授面向对象的软件开发方法课程时,必须强调某一开发方法的优缺点,可以综合运用其他开发方法如结构化分析方法、形式化编程,甚至弱化分析过程,强化设计和编码过程,主要目的是明确整体项目开发过程。
1 软件开发流程和系列课程之间的关系
1.1整体项目模式下软件工程专业教学体系结构
任何课程的设置不能脱离教学体系结构。一个好的教学体系结构能够帮助学生在头脑中树立完整的知识结构,让学生主动获取相关知识。在教学过程中,教师首先要明确该课程在整个教学体系结构中的位置,建立项目开发过程的全局观。文献2中建立的整体项目驱动模式下软件工程专业教学体系结构如图1所示。
从图1中可以看出,项目Bus横贯整个专业课程,教师和学生各自只使用同一个项目案例贯穿于系列课程中,从而从不同的角度让教师讲授、学生学习同一个项目的相关内容。
1.2软件开发过程流程
图2所示是笔者在软件开发过程中总结出来的一套软件工程专业软件开发过程流程,包括软件开发过程、软件工程文档、软件标准规范、实际软件开发规程等方面的内容。在每一门课程的开始和结束阶段,笔者都要将该图展示出来,让学生明确自己已经学到了哪些内容,还存在哪些欠缺。
1.3软件开发过程对应的专业课程设置
笔者有幸为中南民族大学软件工程专业以及本校与美国威斯康星大学合办的3+2软件工程国际合作试点班的学生讲授部分专业课程,包括软件工程、软件测试、用户界面设计、软件项目管理、面向对象的软件开发方法5门课程。对于相关的其他专业课程,我们将不做说明,如CMMI、软件过程、软件质量保证等。
这些课程与软件开发过程流程是一一对应的关系。软件工程课程是专业核心课程,涉及内容广泛,是其他专业课程的基础,也是整个软件开发过程流程的基础,主要内容包括软件需求提取、分析、设计、测试、维护变更管理以及软件质量控制、软件项目管理、软件开发配置变更管理、软件开发标准以及软件开发方法。软件测试贯穿软件开发过程的始终,包括用户需求的确认、用户界面的确认以及单元测试、集成测试、系统测试、Alpha/Bete诅测试、评审、验收等内容。用户界面设计主要包括软件界面设计理论、原则和规范,在实际软件开发过程中,是图2中的系统概要设计/用户界面驱动分析部分,通过与用户反复沟通确认需求,是测试的基础,同时也是软件编码阶段、评审、验收阶段的依据。软件项目管理主要对软件的质量、成本和进度进行管理和控制,同时考虑如何在软件开发过程中避免不必要的风险或者降低风险的影响。面向对象的软件开发方法着重于软件开发过程中面向对象的需求分析和设计,包括用户分析、界面设计、类模型、动态模型、状态模型等一系列的分析和设计。
这5门专业课程从不同的侧面讲解软件项目的开发过程和方法,各有特点。但是对于为什么要学习这几门课程,以及它们在软件开发过程中处于什么样的位置,起到什么样的作用,是教师在教学之初就应该明确的。
2 整体项目模式下系列课程的教学
根据整体项目模式原理,实践项目应贯穿到各专业课程之中,系列课程最好使用同一项目,这样更能加强学生理解软件开发过程的不同方面。该项目在专业课程开始之前就必须存在,即已经完成或正在进行中的实践项目,因此,系列课程必须是相互联系并且能基于同一项目案例,这和传统的项目教学方式虽然模式一致,但是效果却有本质的不同。图3为系列专业课程的项目案例、课程和学生实践案例示意图,5门课程都基于同一实际项目案例,学生根据自己所做的项目,按照不同专业课程要求的格式和内容书写相关文档。
2.1先案例后理论的案例驱动教学模式
软件工程专业的特点是实践性非常强,软件工程的很多理论都来源于对实践的总结和归纳。因此,教师在教学过程中采用先案例后理论的案例驱动教学模式,符合软件工程专业的授课特点。
首先,教师要讲解实际项目案例的文档,该文档是一套完整的、从不同侧面反映软件开发过程的实际文档。对于每一门专业课,教师首先讲解需求提取、需求分析过程、功能提取、系统功能结构框图等,让学生明确该系统的背景和要解决的问题,以及需要具备什么样的功能以实现目标。
其次,教师要联系实际项目案例,讲解课本上的理论,将每个理论知识点与实际的项目案例相结合,让学生充分理解理论。在实际讲解过程中,对于新开课,新教师若碰到教学学时偏少的状况,可以言简意赅地讲解重点知识;实践经验丰富的教师,碰到学时偏少的情况可以精简案例功能,讲解1~2个功能即可。
最后,教师必须强调实践的重要性并给出标准的文档规范,要求学生按照自己的实际项目书写标准的文档。在每一门课程讲解完毕后,教师再一次帮助学生回顾该课程在软件开发过程中的位置。
以软件项目管理为例,在正式进入课程教学之前,教师需要做大量的工作,首先需要准备的文档有项目需求、项目需求分析报告、可行性分析报告、项目开发计划书、项目Demo程序演示、软件项目投标书、软件项目开发合同。然后,开始进人软件开发项目管理过程教学,软件项目主要内容有成本管理、进度管理、人员管理、风险控制等理论内容。实际的软件项目管理主要分为4个阶段:IT项目的启动阶段、IT项目的计划阶段、IT项目的执行控制阶段、IT项目的收尾阶段,这在一般的教材中很少提及,但是教师在内容讲解中要明确阶段任务。IT项目的计划阶段涉及48个文档;IT项目的执行控制阶段涉及45个文档;IT项目的收尾阶段涉及14个文档。
教师在讲解合同的内容时,可以直接参照“软件项目开发合同”进行讲解。对于必不可少的合同内容,教师就必须跟学生讲清为什么必须要包含这些内容;讲解成本计算的时候,根据文档“工作包、进度和预算”进行项目的WBS分解以及基本的估算方法。
总之,由于教材先理论后案例的局限性,在听课之初,学生觉得枯燥乏味。而教师通过先案例的方式能有效调动学生在课堂上的学习积极性,为后面的项目实践奠定基础。
2.2学生项目实践环节
每一门专业课都有上机实践部分,学生在实践课上主要是书写文档。每门专业课都有各自不同的文档,软件工程课程要求学生必须完成标准的13个文档;软件测试课程需要软件测试报告文档;软件项目管理课程有127个文档;面向对象的软件分析方法课程有包含9大部分内容的软件项目分析与设计文档。每一门课程的文档内容非常多,要求每个学生最好独立完成,主要训练每一个学生的文档书写和理解能力。
需要强调的是,学生书写的项目文档一定要给出标准的、规范的文档格式,包括目录、段落、标题、字体等排版之类的要求。项目模板可以采用软件工程国标文档或者相关的其他标准文档,最好和某一软件公司的案例文档格式相一致。笔者在软件公司任职过程中,很多刚参加工作的大学生书写文档的水平非常差,主要是文档格式、结构和内容混乱,往往给人留下非常不好的印象。整体项目驱动模式下的课程教学,首先强调的就是文档格式和正确的文档排版,其次才是内容的正确性与完整性。
在学生项目实践中,任课教师最好跟踪指导。学生每次在实验课上必须完成相应的实验,并把实验的电子文档通过教学资源管理系统或以电子邮件的方式提交给教师。电子文档的批改能快速纠正学生文档格式不规范以及内容方面的错误,但这个工作量往往很大,每一次电子作业批改的工作量往往是学生数量的3~4倍。这是因为学生按照批改意见进行修改后又会返回给教师,最终达到合格标准的电子文档往往会被修改2~4次。
2.3考核方式
完成每门课程的项目文档是学生对文档书写熟练程度以及课程内容理解的直接反映,也是培养软件开发过程中需要具备的素养和习惯的有效途径,克服学生疏于或懒于书写文档的缺陷。因此,教师需要对学生书写的项目文档进行考核并将其反映在学生成绩上。项目文档的成绩占学生总成绩比例的30%~50%较为合理。
2.4教学效果
笔者经过近2年的教学实践,取得了良好教学效果。以中南民族大学软件工程专业2008级学生为例,首先,学生很顺利地完成了各自的软件项目,包括中南民族大学学生基金项目;其次,学生能很好地书写申请软件项目著作权系列文档以及毕业论文,书写的文档格式规范,只需稍加修改就能将文档立即转化成学术论文并发表。这表明学生无论是在文档格式还是在内容编排上都取得了进步,进一步提高了在软件开发过程中应有的素质。这也是软件工程专业学生和计算机其他专业学生之间非常明显的差别。
就前2届学生的就业情况,笔者回访了2家用人单位,他们对中南民族大学软件工程专业毕业的学生刮目相看,称赞学生书写的项目文档很规范。
关键词:软件工程;专业评估;人才培养
为实现高等教育内涵式发展,2017年,教育部了《普通高等学校本科专业类教学质量国家标准》(高教司〔2017〕62号)。随后,安徽省教育厅《关于成立安徽省普通本科高校专业合作委员会的通知》(皖教高〔2017〕62号),由各专业合作委员会拟定专业评估办法。在此背景下,独立学院如何改革所设的软件工程专业人才培养模式,使其符合安徽省普通本科高校计算机类专业评估标准,成为独立学院软件工程专业人才培养中亟待解决的问题。谢承旺[1]等人在工程教育认证背景下,提出并实践了从专业课程体系、学生考核评价机制、校企合作以及开放式实验室运行管理等方面进行的软件工程专业人才培养模式改革。该模式围绕学生,以提升学生工程实践能力为目标,达到了提升教学质量和学科建设水平的目的。张锦[2]等人提出了整体上遵循工程教育认证核心理念,从数据信息化管理、教学时间设计等方面分别进行三阶段划分的迭代式软件工程专业人才培养模式,并在湖南师范大学软件工程专业进行了实施,取得了一定的初步成效。沈海波[3]等人在改变教育观念、创新培养方式等方面对软件工程专业人才培养进行实践,突出特色课程建设对培养综合素质高的软件工程人才的重要性。在软件工程专业评估背景下,以上创新模式对独立学院进行软件工程人才培养模式改革均具有一定的借鉴意义。
一、独立学院软件工程专业人才培养现状分析
软件工程专业评估针对软件工程专业人才培养的评估标准,体现了社会对软件人才的可度量评价,主要从人才动手实践能力、创新能力以及社会评价等方面评估。现今,多数独立学院的软件工程专业人才培养方案虽然在上述各方面取得了一定的培养效果,但或多或少都存在一些问题。经分析整理,现将这些问题归纳为以下几个主要方面:
(一)专业课程体系的更新滞后于社会需求独立学院制定软件工程人才培养方案时一般以3到4年为一个周期,在此影响下,培养方案中的课程体系(特别是提升学生实践能力的拓展课程)的更新速度,往往滞后于社会需求变化,导致了培养的软件人才毕业质量提高慢,社会认可度下降。如何制定一套受人才培养方案更新周期影响小、高效灵活的课程体系,以保障高质量软件人才的培养,这一问题亟待解决。
(二)师资队伍的工程项目实践能力亟待强化独立学院软件工程专业课教师往往把大量精力投入到科学研究和教学研究上,其工程项目实践能力有待加强。只有参与实际软件工程项目的技术培训及开发后,专业课程老师才能具备丰富的工程项目经验,更好地开展专业教学。
(三)实践教学环境需进一步完善独立学院在进行软件工程专业实践教学环境建设时,重心多放在基础核心实践课程的需求上,而对于一些如大数据、机器人、智能车等综合应用型实践教学环境往往投入不足,严重影响了学生创新实践能力的提升。
(四)教学质量评价机制存在局限性独立学院进行教学评价时,一般从理论教学和实践教学两个方面进行。理论教学质量一般用理论课考试成绩来评价;实践教学质量通常从实验、实习和毕业设计三个方面综合进行评价。这种质量评价机制仅体现了独立学院内部的教学质量评价标准,并未客观反映学生整体的专业素质,具有一定的局限性。
二、专业评估背景下的独立学院软件工程专业人才培养改革与实践
安徽省依据《普通高等学校本科专业类教学质量国家标准》,参考工程教育认证相关标准,制定和实施了《安徽省普通高校本科类专业综合评价指标体系》。其中,在计算机类专业综合评价指标体系中,针对软件工程专业人才培养模式的主要涉及专业课程体系、专业师资队伍、教学条件、实践教学环境、教学质量评估机制等方面。在此背景下,提出从优化软件工程专业课程体系、提升师资队伍工程实践能力、加强实践教学环境建设以及健全教学质量评价机制等方面进行的独立学院软件工程人才培养模式的改革,并在阜阳师范大学信息工程学院软件工程专业进行了相关的实践。
(一)优化软件工程专业课程体系独立学院软件工程专业人才培养方案中课程体系的更新速度,往往滞后于社会需求变化,若能缓解这一矛盾,可以提高毕业生的就业率和社会声誉。阜阳师范大学信息工程学院将软件工程专业课程体系分为通识教育课程群、专业基础课程群、专业核心课程群、专业拓展课程群以及实践教育五个课程群,共169.5个学分。其中教育课程群、专业基础课程群、专业核心课程群、实践教育是根据教学质量国家标准和工程教育认证相关标准制定的,共145学分,保障了该课程体系符合安徽省软件工程专业评估对课程体系的要求。优化的重点在专业拓展课程群中,该课程群共24.5个学分,其中保留8个学分的专业实践拓展课作为机动课程,用以开设社会需求高的实践课程,这些课程一般会发生一定的变动,具体的课程由独立学院和合作的校企合作单位讨论共同决定。这将很好地缓解课程体系更新速度滞后于社会需求的矛盾,有效提高毕业生的就业率和社会声誉。阜阳师范大学信息工程学院已与蓝桥软件学院进行校企合作实施其在专业拓展课程群的改革,专业学生就业率提升至96.08%,较往年有较大提高。
(二)提升师资队伍工程实践能力独立学院软件工程专业课教师多数从研究型高校引入,在教学中往往侧重理论教学,其工程实践能力偏弱,影响和阻碍了学生实践能力的提升。独立学院应积极提供让教师从高校走出去的机会,参与实际软件工程项目开发的培训和实践,提升其工程实践能力,更好地服务于实践教学。为提升软件工程专业课教师工程实践能力,阜阳师范大学信息工程学院一方面加强软件工程专业教师产学研项目的开展,另一方面与达内科技有限公司、无锡软通“急客营”科技公司等企业开展教师委培合作。在每个暑假的教师委培合作中,独立学院分派1到3名软件工程专业课教师到上述单位进行实际软件开发项目的培训或实际开发。这种改革,普遍受到软件工程专业课教师的欢迎,其实践能力能够得到持续性提升和发展,从而更好地满足了软件工程专业实践教学的需要。
(三)加强实践教学环境建设软件工程专业是实践能力要求较高的专业,完善的实践教学环境是培养具有较高实践能力软件工程人才的保障。首先,将多元化教学模式[4]植入到理论教学的各个实践环节,分阶段实施以项目案例驱动的实践课程的教学和考核;其次,强化学科竞赛,以赛促学,以赛促教,完善相关专业实验室建设,提升学生实践创新能力。在此方面,阜阳师范大学信息工程学院组织学生积极参与全国大学生软件设计大赛、智能车竞赛、机器人大赛及单片机竞赛等多项学科竞赛,并设置了嵌入式实验室、智能车实验室、机器人实验室等相关专业实验室各1个。通过学科竞赛的锻炼,学生的专业实践能力得到普遍提高;最后,加强校企合作和协同育人,让更了解社会行业需求的企业积极参与到软件工程人才培养中来,学校由于财力或师资不足无法单方面建设健全的实践教学条件,可与合作企业合作建设,实现双赢。阜阳师范大学信息工程学院已与达内科技有限公司和北大青鸟教育集团合作,共建大数据实验室和云计算实验室。由合作企业提供实践教学实验室和实践教学老师,每学期输送50名左右的软件工程专业的学生到这些企业中去进行大数据、云计算等相关的实践学习。
(四)健全教学质量评价机制软件工程专业人才要有较高的工程实践能力[5],根据安徽省计算机类专业综合评价指标体系,有关软件工程专业人才培养模式中教学质量评价标准主要包括人才培养质量和学生创新能力两方面。人才培养质量的评价指标包括思想道德、基本理论课程成绩、英语四级通过率、毕业论文(设计)及升硕率等五个方面。学生创新能力的评价指标包括学生公开发表文章(论文或作品)、学生创新活动和实践能力以及学生技能和科技竞赛活动奖励情况等三个方面。根据上述指标,为健全独立学院教学质量评价机制[6],除保障学生进行思想道德和基础理论课程教学质量评价外,阜阳师范大学信息工程学院还从以下几个方面实施改革措施:首先,加大学科竞赛奖励力度,鼓励实践能力强的专业教师把更多精力投入到指导学生学科竞赛中去,帮助学生提升技能和科技竞赛的档次和质量;其次,开展第二课堂教学,即鼓励科研能力强的教师利用业余时间开展义务科普讲座,丰富学生科普知识,提升学生进行创新活动的兴趣和动力;最后,加强辅导员宣传工作,鼓励和引导学生考研,对升硕的学生及其辅导员予以一定的奖励。自2017年9月以来,阜阳师范大学信息工程学院共培养104名软件工程专业毕业生,针对这些学生开展的第二课程达13次(除寒暑假,平均约每月一次),涉及10名专业课教师和4个学科领域。在表1中,实际数据项累计统计了从2017年9月至2019年5月,对这104名软件工程专业毕业生的各项评估数据。从表1可以看出,在对教学质量评价机制改革后,阜阳师范大学信息工程学院软件工程专业的各项教学质量评估均达标,取得了较好的评估成绩。其中,公开发表文章、学生技能和科技竞赛活动指标达到优秀,升硕率低的主要原因是大多数软件工程专业的毕业生毕业时选择了高薪就业。
摘 要:文章以如何培养满足企业要求的软件技术人才为出发点,详细论述广州大学华软软件学院培养软件技术人才的实践教学体系及实践教师队伍建设和实践教学质量评价。
关键词:独立学院;软件技术人才;实践教学体系
软件产业正成为信息产业和国民经济发展新的增长点,然而国内的软件企业一再强调软件人才的不足,原因何在呢?软件人才教育的相对落后是影响人才短缺的一个重要因素,学生在学校学到的知识不能直接应用到企业的软件开发或测试上[1]。软件企业要加大与高校及培训机构的合作,开展“订单式”人才培养,学校在教学过程中,更加注重实践教学。广州大学华软软件学院成立于2002年,是全国300多家独立学院中唯一的一所软件学院,学院在软件技术人才培养方面的探索和实践已取得一定的成效,其中实践教学发挥了重要的作用。本文着重介绍学院软件技术人才实践教学体系的相关内容。
1 软件工程专业简介
软件技术人才的培养主要立足于软件工程专业(专业方向包括软件开发、移动互联网络应用及软件测试技术)和计算机科学与技术专业(笔者所在系的专业方向为企业级数据库应用与开发)。软件工程专业重视基础理论、工程训练、职业发展及外语能力的培养,实践课程注重软件系统分析与设计、软件开发与测试、软件质量控制与项目管理等方面能力的培养,要求本专业学生在掌握计算机软件领域基本理论知识的前提下,通过与IBM、Microsoft、SUN等业内大型企业合作,及时了解业界最新的软件开发与设计和软件项目管理技术,并能熟练使用软件工业界主
作者简介:吴爱华,男,讲师,研究方向为数据库技术、软件开发方法及软件测试技术等。
流的开发工具以及开源软件技术开发有一定质量的软件系统[2]。
1.1 专业方向
软件工程专业包括三个专业方向:软件开发、软件测试及移动互联网软件应用与开发。软件开发方向侧重邮件交换技术、短信平台应用及网络应用编程,要求学生能搭建B/S动态交互网站,熟悉软件开发方法,对软件工程有一定的了解,能胜任应用软件系统的设计、开发、测试、维护等工作。软件测试方向要求学生具备一定的软件开发能力,掌握软件测试理论与技术,侧重于单元测试用例编写,熟练应用软件自动化测试工具,搭建不同的测试环境并在不同环境下进行软件测试,了解测试管理的内容并能编写规范的测试报告。移动互联网应用与软件开发方向侧重移动通信及移动互联网基本理论知识,移动终端系统应用开发、维护及单元测试,移动互联网通信开发技术及移动互联网WAP平台搭建和移动搜索引擎开发[2]。
1.2 软件工程专业课程体系
软件工程专业三个方向的课程包括共同的专业必修课和各自的必修课。共同的必修课主要有计算机科学导论、离散数学、C++程序设计、SQL Server数据库、软件工程概论、数据结构与算法、操作系统、编译原理、Web编程。表1列举出三个专业方向相关的必修课程。
表1 各专业方向专业必修课程一览
2 实践教学体系
软件工程专业的专业课均是理论与实践并重的课程,理论课和实践课各占一半学时,通过实践教学巩固所学理论知识,培养学生解决实际问题的能力。在实践教学过程中,启发学生积极思维,利用所学理论确定实验课题的解决方案,掌握解决实际问题的方法和思路,同时也是培养创新型应用人才的有效手段。
2.1 实验课
软件工程专业的实验课分为基础性实验、综合性实验、设计性实验三种形式。基础性实验是指围绕课程某一章节的教学内容所开展的实验,是一种演示性或验证性实验。综合性实验是指实验内容涉及本课程的综合知识或与本课程相关课程知识的实验,一般以课程设计的形式进行。设计性实验是指给定实验目的、要求和实验条件,学生自己设计实验方案,并加以实现的实验,一般以项目实训(包括毕业设计)的方式进行[3]。专业基础课程以基础性实验为主,各专业方向的专业必修课涵盖基础性实验和综合性实验,毕业项目实训和毕业实习为设计性实验项目。
课程采用大小课相结合的方式,实行课程负责人负责制,课程负责人和课程组其他教师共同承担该课程大小课的教学任务,大课即理论课,小课即实验课,根据修读的学生人数分配大小课的班级,大课教室一般是容纳90至300人不等的多媒体教室,小课教室一般都是配备64台电脑的机房。
2.2 项目实训
项目实训在软件工程专业教学中占有重要的地位,主要包括两种形式:三年级学生暑期的集中式项目实训和大四第一学期的项目实训课程。
项目实训模拟软件生产流程,结合一个模拟的软件项目,让学生体验项目启动、需求获取、架构设计、详细设计与实现、测试、质量管理等完整过程,是对专业学习的一次集中总结和实践,教师通过实训项目管理平台对集中式的项目实训进行有效的管理。集中式项目实训邀请IBM、Microsoft、Parasoft等国际知名软件企业的专家指导,在实训项目中整合三个专业方向,软件开发与软件测试方向组队,移动互联网应用与软件开发与软件测试组队,目的是模拟软件企业的生产模式,使学生在未进入企业之前就对企业的生产方式有所了解,旨在培养学生软件设计、开发及测试的能力以及沟通能力和团队合作精神。
2.3 毕业设计
毕业设计是在专业课程的教学完成之后进行的一个重要环节,着重培养学生综合分析和解决问题的能力,通过综合训练深化、拓宽、运用所学知识,是学生从学校学习到岗位工作的过渡环节,同时也是衡量高等教育质量和办学效益的重要评价内容。教师结合业界新技术、新业务拟题,提供具有创新性的毕业设计课题以提高学生的创新能力,指导过程中启发学生逐步解决问题的能力。
2.4 精英班
学院设有Java精英班和.NET精英班,由软件研究所与软件工程系共同承担,成立专门的教研室负责日常管理和教学工作,通过有效的方式甄选出一批有志于从事软件开发、学习能力较强的学生,精英班加大实践教学力度,重点是项目实训,并与企业有对接项目,学历教育以外还增加了一系列专业课程,使优秀的学生接触到更多的专业知识,获得更多的实践机会,表2列举的是Java精英班的主要专业课程,表3列举的是.NET精英班的相关课程。
表2 Java精英班主要课程
(The Main Courses of Java Elite Class)
表3 .NET精英班主要课程
(The Main Courses of .NET Elite Class)
2.5 软件设计竞赛
我们组织学生参加各级专业竞赛以促进实践教学,扩大学生自主学习的时间和空间,调动学生学习的主观能动性,培养学习兴趣和创造性思维能力。学院提供开放式实验室供参与竞赛的学生使用,吸引学生在此进行实验、实训、技能训练,历年来我校学生在各级竞赛中获得较好的成绩。
1)“高校杯”软件设计大赛由广东省计算机学会主办,是省内在校大学生软件设计专项比赛的最高赛事,比赛每年举办一次,目前已成功举办20届。2006年我校成功承办第16届“高校杯”软件设计大赛,该项赛事首次由独立学院承办。本届大赛全省19所高校的25件作品进入决赛,本院学生开发的“无线远程终端”夺得大赛第一名和“创新奖”双料大奖,另一个参赛作品“Soker搜索引擎”则获得二等奖。
2)“国信蓝点杯”全国软件专业人才设计与开发大赛由教育部、工业和信息化部主办。首届比赛我校获得Java组2个一等奖,5个二等奖,4个三等奖,C语言组获得2个二等奖,4个三等奖,7个优秀奖;2011年第二届我院共有53名选手参赛,其中获得一等奖6名,二等奖10名,三等奖21名,优秀奖8名,同时我院还获得优胜学校奖和优秀组织奖。
3)“微软校园之星大赛”由微软教育培训合作伙伴ATA公司举办,旨在提高学生软件开发的创新能力,选拔优秀人才,是“微软实习生计划”的一部分。2009年软件工程系第一次组织2006级学生参加了第三届“微软之星大赛”,两个学生组队入围决赛,最终获得全国三等奖,2010年组织2007级学生参赛,三个学生组队闯入决赛,最终获得全国一等奖。
4) 广东大学生科技学术节由共青团广东省委员会、广东省教育厅、广东省科技厅、广东省学生联合会联合举办,以“营造学术氛围、提升科技素质、培养创新人才”为主题。我院软件工程系4支代表队分别闯入2011年第五届广东大学生科技学术节之首届“创新杯”粤港澳大学生计算机软件应用大赛总决赛,并最终获得两个二等奖和两个三等奖。
2.6 实训基地建设
学院的软件研究所主要负责学校信息系统的开发和维护,同时也是学生的校内实训基地,每年都会选派大三学生到研究所实习,表现优秀的留校或者推荐就业。学院自成立之初就着手与企业合作建立校外实训基地,目前为止实训基地数目达到30家,其中包括IBM、南天电脑系统有限公司、神州数码、电讯盈科、华南资讯等。
3 实践教师队伍建设
作为教学活动的直接承担及实施者,教师自身的科研实践能力直接影响实践教学的质量,现阶段独立学院教师的科研实践正是其薄弱环节,究其原因有以下几点:1)独立学院乃民办学校,缺乏吸引高端人才之优势;2)教师的来源一是退休的公办学校的教师(教授或副教授),未必有足够的精力再投入科研实践,二是刚刚毕业的大学生(本科生和硕士生),三是来自企
业,有一定的业务和工程经验,但缺乏科研能力。
加强实践课程教师队伍建设,提高教师的科研实践能力,首先要合理使用资深教师的科研资源,指导青年教师积极开展科研实践,申报各级课题;其次青年教师要紧跟理论和应用领域前沿,结合自己的专业方向努力钻研,再则学校为教师提供宽松的科研环境,并予以积极支持,可考虑与科研院所建立合作关系,选拔青年教师去培训或进修。教师在进行科研实践时,选拔学有余力的学生参与,对学生的实践和创新能力的培养是大有裨益的。
4 实践教学质量评价
为提高实践课程的教学质量,应该制定合理的质量评价指标。结合教育部的评估要求与独立学院的具体情况,主要从以下几个方面进行评价:1)实践课程的内容是否符合专业特色;2)实践课题能否培养学生的动手及创新能力;3)实践课程的考核方式是否合理有效;4)教学督导的评价及学生的反馈意见。
5 结语
以上从6个方面介绍了我院软件技术人才的实践教学体系,实践教师队伍建设。实践证明,遵循此教学体系培养出来的学生越来越多地受到企业的青睐。
参考文献:
[1] 高素梅.当前我国软件产业发展状况及趋势[N].中国电子报,2008-6-2(10).
[2] 广州大学华软软件学院软件工程专业介绍[EB/OL]. [2011-05-01]. /major01.aspx
[3] 广州大学华软软件学院. 广州大学华软软件学院实践性课程建设实施办法[S]. 广大华软[2011]10号文.
Practical Teaching System for Independent Colleges’ Talent of Software Technology
WU Aihua
(Department of Software Engineering, South China Institute, Software Engineering Guangzhou University,Guangzhou 510990, China)
关键词 软件工程教育 角色体验 软件工程知识体系 工程文档
1 引言
软件产业是互联网和新一代信息技术发展的重要基础,软件工程作为一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科,始终是软件产业发展的根基。对于计算机专业人才的培养,软件工程在计算机高等教学中占有重要地位。但是无论从学生、教师还是业界的反馈都可以看出,软件工程教学的实际效果远未达到我们的期望。系统完整的软件工程知识体系建立仍然面临众多挑战,理论与实践结合的创新人才依然难寻,完整严谨和有效的软件工程架构风格依然遥远。作为高校教师,我们必须从软件工程的教、学、研进行深入的研究,探索一条行之有效的教学培养方法。
软件工程是“将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,其重点在于软件的分析与评价、规格说明、设计和演化,同时还涉及管理、质量、创新、标准、个人技能、团队协作和专业实践等”。①相比于其他的计算机专业课程,软件工程的教学有很大的不同。软件工程中重要的技术和开发原理来源于应用和实际商业软件开发,之后这些核心技术被提炼和整合形成原则和理论基础而引入课堂,教授给学生。通过软件工程课程的学习,学生需要了解和掌握软件工程的理论、技术和方法,具备作为软件工程师所需的专业能力。优秀的软件工程研究者David Parnas将软件工程计划分成三个阶段执行:(1)首先,详细说明软件工程师可能要执行的一些任务;(2)定义软件工程师需要的知识体;(3)将其实施作为一个培训计划。②③由此可见,软件工程是一门综合性和实践性很强的学科,传统的教学模式和教学方法在软件工程教学中存在很大不足,人为地强调实践或者理论基础无法有效地培养学生的综合技能和水平,从而直接影响了课程的教育质量和教学效果。
软件工程课程必须面向解决实际问题,即如何成功地开发可靠的、可用的、可维护的软件系统,满足用户的要求。这包含了需求分析、规划说明、设计、构建、测试、操作和维护等软件生命周期的各个阶段。目前,软件工程教学主要包含两部分:课堂教学和实践教学。以传统的教师为导向的教学方式为主,实践教学为辅。教师在课堂上讲授软件工程方法、原则、技术等知识;实践教学主要是采用实验课的方式,由学生设计完成一个项目。根据多年教学的经验和我们调查反馈的结果,很多学生在本课程学习时感到茫然和无所适从,理论的东西感觉抽象难以理解,缺乏学习热情和兴趣。针对软件工程课程的特点,我们认真分析调研了课程教学存在的问题,总结分析导致课程教学效果不理想的主要原因如下:
1.1 课程设置安排不尽合理
软件工程是一门涉及内容较多的综合性学科,所教授的原理、方法较为抽象。软件工程中核心的技术和开发原理均来源于实际商业软件开发,经提炼形成原理和方法而引人课堂。目前,大部分高校将软件工程课程设置在大三,对于刚刚完成两年大学公共基础课和专业基础课教育的学生来讲,软件开发的基础理论和概念仍然匮乏,与软件工程相关的前期课程前后脱节。尤其在计算机科学专业课程设置中,只有一学期的必修的软件工程课,在这么有限的时间内学生很难掌握软件工程的理论与实践的精髓,从而造成大多数学生认为是在学习枯燥无用的理论。
1.2 理论和实践的脱节
软件工程是一门实践性很强的课程。相比于其他的计算机学科的课程,软件工程课程核心和精髓不可能从教师的授课和课本的理论学习而获得,靠“死读书,读死书”是无法完成本课程的学习的,实践和理解相结合的融会贯通非常重要。在实际软件开发中真刀真枪的实现,在练习中理解基本原理,在真正练的过程中提升理论的水平是软件工程课程教学和实践的有效方法。
1.3 重代码,轻文档
在软件工程课程的教学中,大部分的学生甚至部分教师都会自然地认为实现高效整齐的代码是课程学习中最重要的工作,对于文档工作未有足够的重视。在实际软件开发的工程实践中,一般认为代码的工作量只占到整个工程工作量的30%左右,完整、有效的各种文档,包括设计文档、算法文档、说明文档、维护文档等是整个软件工程核心。因而在软件工程的教学中,我们必须转变观念,突出工程文档的重要性,将各种统一、标准、高效和实用的文档设计和撰写方案融汇到课程的教学中,并且与软件工程理论和代码编写结合,形成完整的的理论、算法、代码和文档并重的教学新方法。
1.4 缺乏软件工程知识体系的系统概念
商用和实际应用软件开发的工作是系统的团队工作模式,单打独斗无法完成商业和实用软件开发。然而,现在软件工程的教学中,教师和学生注重的是单个原理和系统的学习,从而造成了学生软件编程风格五花八门,程序可读性差,软件工程的完整知识体系混乱。团队工作的模式要求程序员在整个工程中需要承担不同的角色,不同的角色承担的任务不同,又同时需要与其他的角色互相配合沟通,从而完成整个工程的开发。这一点,在目前软件工程的教学中非常缺乏,为此我们需要建立系统的概念,将角色体验的模式引入软件工程课程教学中。
在参考文献④中,Nurkkala和Brandle对软件工程教学进行了分析,并对现行软件工程教学方法中存在的问题进行了总结:(1)没有产品——学生在学习中仅仅是创建项目,而并非真正地开发商业级别的产品;(2)持续时间短——通常软件工程课程只安排一或两个学期,课程受限于时间过短很难真正理解软件工程的方法、原理等在实际软件工程项目中如何应用,并完成开发真正的产品;(3)高流动性——对于一个项目来讲,每个学期都有新学生加入意味着人才库始终只有很少的人,新加入的学生很难基于之前的经验开发其自身的技能;(4)低复杂性——由于学习必需时间以及学生本身技能的限制,只能开发简单的应用;(5)无法维护——作为持续时间过短结果,学生没法经历软件开发非常重要的一个方面,即系统维护阶段;(6)没有客户——学习过程中,大多数软件工程项目都没有真正的与客户进行接触,而实际的开发中必须要了解客户的需求,根据客户的需求进行软件开发。
综合上述分析,我们深入调研了现行软件工程课程教学的困难和挑战,分析了国内外报道的先进的软件工程课程教学的新方法,结合我们几年来课堂教学的经验大胆改革课程体系框架和教学内容,积极探索案例教学和实践教学模式,提出了角色体验和工程文档应用于软件工程教学的新方法和新思路。我们强调建立理论与实践相结合的软件工程知识体系,采用任务驱动的角色体验方法,加强学生协同分工和集成创新能力;突出强调工程文档在软件工程应用开发生命周期的重要作用,建立软件工程中规范化的任务、知识体系和实施培训的流程。
本文第二部分将介绍目前报道的国内外软件工程教学的有效方法,第三部分介绍我们探索的引入角色体验和工程文档的软件工程教学新思路,第四部分进行总结。
2 国内外现行有效软件工程教学方法
为了解决以上提到的软件工程教学中存在的不足,目前,国内外已经提出了多种教学方法来改进软件工程课程教学。范锐⑤等人提出了基于“做中学”的教学理念的“项目驱动、案例教学”的软件工程教学模式,其教学理念认为软件工程教学不能单纯依靠理论讲解,强调实践对于软件工程教学的重要性,在学生的实践过程中,采用项目团队方式进行项目开发,学生分组分工,明确每个人所承担的职责,以此培养团队意识。“项目驱动”的教学方式,将整个软件工程教学过程包含于一个完整的项目之中,学生通过完成项目学习和掌握软件工程的包含的知识,实现对知识的掌握和应用。
陈建国⑥等人针对传统以教师为主的软件工程教学方法提出了改进,在传统的软件工程教学中引入了集体工作、实验、案例学习、合作教育相结合的软件工程教学方法,详细地论述了这四部分对软件工程教学作用以及对学生掌握软件工程方法的帮助。采用了合作教育的方式,学校和企业合作为学生提供真正的商业软件开发的机会,增强学生理论与实际的联系,使得软件工程教学中的项目管理、软件过程、质量保证等不再那么抽象难于理解。
近年,国外对于软件工程教学方法中存在的不足提出了不少有效学习方法,其中相当一部分方法着重强调了协同工作⑦⑧⑨在软件工程教学中的重要作用,在教学中分成多个小组,使学生加入其中,这些小组的组织结构与组内分工与实际的项目开发小组完全相同,这样学生在学习的过程中完全按照实际的工程开发的需要进行学习,使得学生学习中能充分掌握软件工程的方法、原则等的实际应用。此外,还提出了一些其他软件工程教学的有效教学方法,如使用Liu⑩形式化方法教学;Deveaux豘等提出专注于软件开发过程中的文档,Deveaux认为在教学中很难获得实际的足够大具有开发意义的项目,而文档的学习却可以使学生充分了解软件工程项目的基本原则,方法等内容;Li豙则成功地将统一过程方法应用于实际的教学当中;Pandey豛在教学中使用竞争的方法教授学生开发原则;更有一些在软件工程的教学中采用游戏的方法,豜使学生充当游戏中项目小组的项目经理的角色来学习软件工程。Scott豝等人在本科生的软件工程教育中采用了开源工具,并将之整合到软件工程课程中,通过学生的反馈对比,表明此种方法获得了很好的效果。
3 角色体验与工程文档结合的软件工程教学方法
3.1 国内软件工程教学现状
在实际的课程教学中,运用了案例开发,与企业合作等方法,并结合国内外其他一些有效的软件工程教学法后,我们发现学生在有限的时间内所能理解的软件工程知识相当有限。在对计算机科学专业的学生进行调查时,我们发现大约80%学生对大三进行的软件工程课程没什么兴趣。他们认为那只是枯燥的理论课学习和繁琐的文档编写。在前两年专业基础课学习中,他们几乎没有接触到文档编写,大部分项目的完成都是在草稿纸上设计然后直接进入程序编写阶段。他们认为这样可以一步到位,省去很多繁琐的细节。当然,正如我们前面提到,在本科教学中,学生在课堂上能实现的项目只能是中小型项目,复杂性低。学生无法感受到缺乏软件工程流程中首要的基础工作而可能造成的困难和严重的后果,所以学生们大多认为写各种各样的文档是在浪费时间。而对于教师来说,到大三软件工程课时,在没有大型项目做支持的情况下,再教导学生编写文档的重要性,似乎没有说服力,也很难扭转学生已经形成的直接编程的习惯。所以在计算机学科的学习中,我们大胆改革教育的方式并修订了阶段性的培养目标,形成一种潜移默化提升学生综合能力和水平的模式。在本科生进入大专院校就读后,计算机专业课程,尤其是编程课程的项目设计上需尽早地让学生接触到软件工程知识的基本概念和方法。从大一专业课开始,学生们就需要开始完成简单的项目。如果教师们可以从一开始就让他们了解到软件工程的生命周期,接触到软件工程流程中的各个步骤,从简单到复杂地进行实践,到大三的软件工程课时他们就会对这些知识已经有所了解,并不会感觉到枯燥,因为在前两年的学习中他们一直都使用这些方法,已经养成了良好的软件工程的习惯。
3.2 基于文档撰写的潜移默化式教学法
我们经常只会在软件开发或维护过程出现问题时才意识到那些被忽略的文档的重要性。在我们的调查中,软件工程师们大约有60%以上都认为自己的文档的编写能力只是一般,有些甚至不会撰写文档(见表1)。很多工程师在学校并没有受到专业的训练,只有到工作中才开始慢慢学习与实践,但是经常由于时间有限,项目截止日期逼近而只好疏于对文档的编写或是只能牺牲其质量。如果我们在本科教学中尽早地让学生接触到各类文档,在撰写项目文档的过程中,学生不但能学习到软件工程的流程,也能把撰写文档的技能锻炼熟练,更重要的是他们会渐渐地把文档的撰写与管理当成一种习惯,当成一种必须。这样,无论是大型项目还是小规模项目,他们都会用一定的软件工程流程来完成。一开始的小项目中,也许他们并不能理解为什么要撰写那么多文档,但当他们到高年级创建相对复杂的项目时就能体会到文档的好处。他们就能领会,计算机软件并不只是程序,还应该有一整套文档资料。这些资料都是在开发过程中产生出来的,对软件管理人员,开发人员,维护人员,测试人员,客户,包括程序员自己都是必不可少的。那么如何开始这种潜移默化式教学法呢?教师们要对所有四年的专业课程进行分析,总结出需要参加这个软件工程教学计划课程和项目。加入到这个计划里的课程教师要设计符合这个计划的项目,并将文档撰写作为对学生必须的要求。在整个计划中,建议提供一套完整统一的各类文档的模板以供学生们使用,包括软件需求说明书,软件设计说明书,软件测试说明书,项目开发计划书等。这些模板要一致,学生在所有课程中要使用一致的模板,由简化版到完整版,低年级的学生先使用简化版的模板,让他们渐渐地学习撰写文档。比如一年级的项目可以只要求写软件需求说明书。在模板的设计中,最好是和企业界运用的文档保持一致,然后进行简化,给学生提供一种他们可以胜任的文档模板,然后逐年增加内容,最终可以与业界使用的文档保持一致。这个计划的实施需要得到计划内课程教师们的认同,通力合作,把学生四年的学习列入计划,并随时进行监督。经过四年的训练,学生的写作能力一定能得到大幅度提高,对软件工程的认识也会非常深入,毕业后能够胜任商业软件和应用软件的开发要求。
3.3 基于角色体验的软件工程课程教学法
上面提到的文档式教学法是为了训练学生创建各类软件工程文档的能力。在课堂项目中,由于时间有限,一个学生往往不可能完成整套文档的撰写。在低年级阶段,在小型或中型项目中,学生学习了软件需求和软件设计文档,学生应该可以单独完成。但当项目变得相对复杂,大多课程项目都是以团队合作的形式来完成。教师通常知道哪些同学组成一个团队,但并不清楚或关心这些同学在项目组里担任的角色。这样,在四年的学习中,有些同学在项目组里只保持着一种角色,如只担任了程序员或测试员,并没有机会对各个相应的角色进行体验,导致他们知识的不全面。与文档教学法相结合,我们提出一种叫做角色体验的教学法,和文档式教学法同步进行,一同潜移默化地将软件工程知识注入学生脑海。所有加入计划的课程要统一安排项目组成员,目的是让每个学生在这些课程项目完成的过程中能体验所有的软件工程角色,并完成这一角色相对应的文档。这样不但训练了每个学生各种文档的写法,让学生了解了软件工程生命周期整个团队要进行的工作,而且锻炼了学生互相合作的团队精神,避免学生在团队中只依赖于几个学习相对比较优秀的学生来完成项目。假设我们要训练学生四个角色:项目经理,系统分析设计师,程序工程师,和测试工程师,我们需要至少四门课程加入此计划。如图-1所示,四个学生分为一个项目组,经过这四门课程项目的训练,他们可以完成这四个角色的训练,学会四种文档的撰写,体验各个角色在软件工程流程中的职责。如果要增加角色和文档种类的话,可以适当调整学生团队组员数目与职责。经过这样的训练,学生对团队合作一定会有更加深入的认识,也能提高队员的沟通能力,以改善毕业生在企业界缺乏沟通能力的现状。
经过四年的文档与角色的潜移默化式训练,一定能大幅提高学生的软件工程能力。相比单纯的一到两门软件工程课程,学生对软件工程的理解要深入得多,实践能力也会大幅度提高。由于计算机科学专业课程设置并不像软件工程专业对软件工程的教学那么有针对性而且课时较少,所以这种方法尤其适合计算机专业的教学。
关键词:软件工程;概率论与数理统计;项目驱动
作者简介:康国栋(1983-),男,土家族,湖南张家界人,吉首大学软件服务外包学院,讲师;周清平(1965-),男,土家族,湖南省张家界人,吉首大学软件服务外包学院,教授。(湖南?张家界?427000)
基金项目:本文系吉首大学教学改革项目(项目编号:2011JSUJGB25)的研究成果。
中图分类号:G642.0?????文献标识码:A?????文章编号:1007-0079(2012)22-0083-02
“概率论与数理统计”课程涉及的范围相当广泛,凡是涉及数据的收集、整理、分析、可视化和解释方面的问题,都是概率论与数理统计学大显身手的舞台,[1]由此可见此学科在计算机科学中的重要地位。随着软件技术的发展,概率论与数理统计价值也越来越得到凸显,软件系统的开发与设计实践能把“纸上谈兵”的数学模型变成可行的算法并加以实现,理论在显示强大力量的同时也露出了有趣的一面。如果不注重概率论与数理统计学的应用和直观性,将导致数学的孤立与衰退。尤其是在软件飞速发展的今天,概率论与数理统计科学与软件实践难舍难分。因而软件工程专业概率论与数理统计的教学改革必须围绕软件工程专业的人才培养目标,必须以软件行业的人才需求为核心。我国对软件工程专业的要求是培养“实用性、复合型及国际化”的软件工程人才,在人才培养过程中强调自主思维能力与工程实践能力培养并重的理念。其课程体系与传统的计算机专业相比,理论课时偏少,使“概率论与数理统计”课程在实际教学中出现了教学内容多与课时少的矛盾。因此,如何充分发挥教师的教学能力和调动学生学习的主观能动性,如何做好软件工程专业“概率论与数理统计”的教学,是当前亟需解决的问题。在近来的教学实践中,努力尝试了一些教学改革举措,得到了一些成功的经验。本文拟从教学内容、教学方法、考核方式等几方面分别进行探讨。
一、“概率论与数理统计”教学改革的基础
1.软件工程专业“概率论与数理统计”课程的定位
要做到真正意义上的“概率论与数理统计”教学改革,首先必须做好该学科的定位,提高学生、老师对其认识水平。当前,社会各行业对软件人才的需求日益增长,其需求常常是一般性软件、应用软件开发人员。这就给学生一个误导:应用强于理论(甚至只关注简单的应用),进而使学生忽视基础理论课程学习这种纯实用思维。这种纯实用思维取向将影响学生自主学习能力与逻辑思维能力的培养,降低学生学习其他专业课程的分析能力,进而降低其在工作中的拓展能力及竞争力。虽然我国高校软件专业毕业生逐年曾多,但是许多软件企业却反映招聘不到合适的人才。实际上,企业缺少的是有拓展能力、快速学习能力的高层次专业人员,这类专业人才必然要具有良好的数学素养。另外,软件工程专业学生本科毕业后,有相当比例的学生考虑继续深造,要用到“概率论与数理统计”学科的一些基本理论和方法去研究、解决相关科学问题。根据以上的分析,结合吉首大学(以下简称“我校”)提出的人才培养目标,“概率论与数理统计”课程应定位为数学思维+软件实现工具:既要求学生掌握“概率论与数理统计”的基本概念、思维模式、计算方法,培养学生的数学素养,又要求学生学以致用,培养学生对其在软件行业里的实际作用的认知和兴趣。
2.教学资源的优化整合
如果没有教学资源将会使教学改革成为无本之木,无水之源。因而,优化整合教学资源是实施教学改革的又一项重要的基础工作。目前,国内教学资源主要关注该学科体系的完整性与论证的严密性,[2]这对软件专业的学生而言,在学习时往往看不到该学科在软件工程中的应用,既不能与学科很好地结合起来加深理解,也不能调动学生的学习积极性。[3]而国外教材的特点是与计算机专业的联系更加紧密、例子更加丰富。[1,4]因此,需首先成立教学研究小组,将“概率论与数理统计”教学内容分为几个部分,每部分由一个小组成员负责教学建设及深入研究,整合国内外优秀教材,提炼教学内容:在选用国内经典教材的基础上,指定国外优秀教材作为参考书。[5]在整体分析后,适当增加概率论与数理统计在计算机科学中的应用内容,将之与理论知识结合介绍给学生,既有助于学生理解,又为后续的专业课程的学习奠定基础。[6]而对部分理论知识,或删节或安排学生自学。例如,集合论基础部分、古典概率算法等章节应当删除,随机变量复杂函数概率分布的理论推证适合学生自学;其次,建设网络课程,充分利用现代网络技术,为学生提供丰富多彩的网上教学资源,方便学生自主学习和师生间的交互,有利于指导学生进行个性化学习和协同学习,为实现精讲多练的教学目标奠定资源基础。
二、“概率论与数理统计”课程教学方式的改革
如何在压缩课时的同时实现既定的人才培养目标,是软件工程专业“概率论与数理统计”课程教学改革的关键。针对这些问题,必须提出新的教学改革模式,大力改变传统的教学方式。