林丕源, 王 强, 肖 磊, 惠兴海, 刘财兴
(1.华南农业大学 软件学院,广东 广州 510642; 2.四川华迪信息技术有限公司,四川 成都 611731)
作为高等学校和专业教育机构,服务于国家经济、社会发展,为国家产业化链条、地方经济和产业布局谋发展,培养高素质的专业人才是其重要职责与义务。随着国家软件及IT产业的快速和深入发展,国家亟需大量高素质的软件人才。但是,当前我国软件人才的培养并没有很好地满足软件及IT产业对人才的需求。每年计算机及软件类专业毕业学生的就业情况,显示出我国软件人才培养的质量与定位存在一些问题,主要表现有毕业生项目工程实践能力弱、对行业应用背景不了解、不懂现代IT企业的规范标准, 不知道信息技术服务标准[1-2]、所学知识与实际应用脱节、无法达到企业的用人要求等。这些问题折射出我国高等教育在软件人才培养中所存在的不足,特别是在对学生的工程实践能力培养模式上,没有下足功夫,效果不佳,不能满足软件企业对人才的能力需求。我们认为,要培养出软件企业所需人才,在培养中应该遵循大型软件企业的规范标准,从行业规范要求入手,重新思考人才培养目标及内涵、培养方案与模式、管理体制与运行机制,进行系统化的改革与创新。
借鉴西方发达国家走过的教育路线经验,为贯彻落实《国家中长期教育改革和发展规划纲要(2010—2020年)》[3],为培养合格的软件工程人才,建立深入的高校和企业合作培养人才的新机制,实现社会和产业的实际需求与高校人才培养的无缝衔接,是软件工程教育改革大势所趋,这也符合国家卓越工程师教育培养计划的精神。为此,学校和企业应更好地扮演好各自角色,发挥好各自优势,形成优势互补;合作的校企双方需要构建一套完善的长效运行保障机制,建立一支符合人才岗位培养所需的双师型队伍,并采用业界普遍认可的工程规范来培养学生的工程实践能力。这不仅是一种教育体制的改革创新,也是加速经济发展的催化剂,更是学校、企业和学生的多赢互利模式,具有较大的现实意义。
华南农业大学为培养满足软件及IT产业需求的人才,进行多年有效的探索和实践[4-7],“本科软件工程人才培养探索与实践”于2010年获广东省教学成果二等奖,“贴近产业的工程化本科软件人才培养探索与实践”于2014年获广东省教学成果一等奖。
本文以校企合作培养现代软件企业所需的软件工程人才为例,论述我们所探索和实践的一种强调工程规范的分阶段成果交付和交叉的软件工程实训模式,它能更好地培养学生具备软件企业所要求的工程实践能力。
2010年6月,教育部为贯彻落实《国家中长期教育改革和发展规划纲要》精神,启动了卓越工程师教育培养计划[8]。卓越计划的主要目标是面向工业界、面向世界、面向未来,培养造就一大批创新能力强、适应经济社会发展需要的高质量各类型工程技术人才。卓越人才教育培养计划强调行业企业深度参与培养过程,按通用标准和行业标准培养工程人才,强化培养学生的工程能力和创新能力。
在教育部和各级教育管理机构的政策倡导下,各高校根据自身专业的办学特点开展校企合作,提升学生的综合技能培养。其中,国家级和省级示范性软件学院在软件工程人才培养中表现突出,走在了校企合作培养工程人才的前列。然而,总的来说,目前的校企合作还是较为粗放的,在对软件工程人才的能力培养上也存在着有待进一步探索和解决的问题,可能涉及到深化校企合作和能力培养等方面。
企业作为市场经济的经营主体,盈利是其主要经营目标,企业参与合作培养人才的源动力绕不开盈利这一目标。目前已主动或被动地参与软件工程人才培养的软件企业,不可避免地会担心合作对企业业务经营的影响;在没有相应激励政策和法规约束的机制下,合作企业确实并没有把人才培养纳入自己的价值链中。于是,深入的校企合作人才培养是很难实现的。
目前软件企业不愿意把过多的精力投入到软件工程人才的工程实践能力培养中,尤其不愿意花太多精力通过实训来培养学生,可能存在下列因素:
(1) 软件企业接待实训学生的数量有限。由于没有形成规模效应,企业难以从通过实训培养学生中获得经济利益。然而,承接实训的软件企业的管理成本却要增加,它们要安排专人管理学生,解决学生吃住等重要问题。
(2) 软件企业开展实训业务可能增加巨大风险。例如,学生在企业实训期间一旦发生安全事故,企业可能要承担相关费用,更可能影响企业声誉。
(3) 大多数软件企业并没有专门开发实训所需的教学资源。由于没有专业化的企业工程师开发案例和课程,因此学生参加实训很难到达好理想效果。目前的主要做法是把学生放到项目中,让学生自己跟踪项目走,缺乏实质性指导、考核、监督和效果评价机制。
(4) 软件企业在人才培养中不愿付出过高人力成本。处于自身考虑,企业未必愿意把最有经验的优秀工程师安排到人才培养岗位,并且即使培养出优秀学生,也可能留不下来。
要使得上述因素不再制约校企合作,让企业能主动深入参与通过实训培养软件工程人才,只有校企双方互利共赢,尤其是企业能从中获得应有的利益,才能实现校企合作的可持续发展。
对于软件工程学生而言,培养其工程实践能力是非常重要的[9]。但是,目前在对软件工程人才的实践技能培养中,参与校企合作的有不少是软件技能培训公司或培训机构,而非真正具有实力的规范的软件研发企业。这些培训公司或机构专业技术能力较弱,普遍缺乏规范意识和实施能力,自身没有足够的不断获得的中大型软件项目支撑和专业化实施工作师;它们主要以培养学生的具体开发能力为主,忽略了对学生进行工程规范训练。
在软件培训公司对学生进行软件开发实践训练中,几乎是按照中小型公司的粗放式开发方式展开,每个学生被分到一个项目组,从头到尾参与一个项目的需求→设计→实现→测试→部署的全过程,并伴随成果交付。其结果,学生不能理解每个阶段的交付标准,不知道每个阶段到底要交什么成果,也不知道自己每个阶段完成的工件到底符不符合要求。
在这样的模式中,由于需求、设计和编码都是学生项目组自己完成,在整个项目开发过程中随意性大,项目经理对项目的管理控制弱,每个成员根据自己的理解会随时变更需求和设计,影响了项目组成员之间的合作。
同时,由于软件本身的特点,本应在需求、设计阶段发现的问题没有发现和及时解决,很多学生都觉得反正都是自己完成,错了可以改、漏了可以补,因此造成大量问题集中到实现、测试阶段才发现。这造成了软件质量严重下降,工作量和成本急剧增加,交付工期延后,最终影响项目的收益,也不符合国家软件工程规范中的软件开发与维护标准[10]。
上述目前普遍采用的实践技能培养模式,从工程角度讲,是不够理想的。这种模式没有强调规范的软件开发过程,学生没有得到起码的工程规范训练,也无法对学生的工作进行度量[11]。
软件开发是一个工程化过程。软件工程的目标是找到指导软件开发过程进而生产出高效的、可靠的软件产品的原则[12]。因此,要培养合格的软件工程人才,就应该指导学生懂得并实践软件开发的工程化过程。当开展以实训方式培养软件工程人才的教学时,就应该尽量按照工程方法管理好项目过程,即软件开发的工程化过程。项目过程中,每个阶段工作任务明确,成果按时交付,每项工作都按规范做好。
由于现代商业软件工程项目的大规模和复杂性,所组建的项目团队成员之间必须分工明确,才能实现软件开发满足用户需求、分阶段及时交付成果、按期提交无故障软件系统,并且不超过预算获得最大经济效率。为此,商业软件项目开发是以质量保证为基础,以项目过程、方法和工具为基本要素的系统工程。为了保证顺利地完成软件工程项目,必须分阶段对项目阶段成果进行及时评审和交付,以满足下一个阶段的工作要求。大型的软件企业,一个商业软件项目的不同阶段的工作,通常会由不同的团队或成员来完成,并非一个团队从头到尾完成一个软件项目所有阶段的工作。
为了使培养出的软件工程人才能适应现代软件企业的业务需求,经过长期思考,我们提出强调工程规范的分阶段成果交付和交叉的软件工程实训模式。该模式以真实商业软件项目为纽带,按项目组建学生项目团队并分阶段开展工作,每个团队在每个阶段结束时交付工作成果给另一个团队,项目不同阶段的工作在团队间进行交叉。在开展该模式的实训时,必须有优秀的规范的软件企业的深度参与,企业发挥其技术和管理优势,强化学生工程规范意识,让学生获得软件企业所要求的工程实践能力。
依据软件能力成熟度模型集成(Capability Maturity Model Integration,CMMI)[13],大型软件企业在从事商业软件项目开发活动时遵循的规范,借鉴欧盟认可的信息时代的技能框架(Skills Framework for the Information Age,SFIA)[14]IT人才标准,根据软件从业人员的岗位技能组成软件项目开发团队。通常团队配置有项目经理、需求分析师、系统构架师,系统设计员、编码人员、测试人员、界面设计员、配置管理员、质量保证员等角色。不同角色承担不同的工作职责,需求分析师策划和完成项目需求开发工作,系统构架师根据项目需求搭建符合要求的系统构架工作,系统设计员按照提交的需求工件完成系统设计工作、项目开发人员根据系统设计完成编码工作。项目团队角色之间主要通过工作成果完成项目阶段交付工作,相关工作成果必须符合交付标准,以确保每个阶段的工作成果都符合要求。
强调工程规范的分阶段成果交付交叉实训模式,就是学习软件企业按照CMMI来组织软件工程项目开发的方法进行实训,依托软件企业的真实项目将学生组织成软件项目开发团队,每个学生在团队中担任不同角色,实现“做中学”[15]。每个团队在每个阶段结束时交付工作成果,通过抽签将工作成果移交给其他团队,并开展下一个阶段工作。整个工作过程见图1。
假设参加实训的学生按照不同的商业软件项目组建了三个软件项目开发团队A、B和C;
按照统一软件过程(Rational Unified Process,RUP)[16]开发项目,在先启阶段每个团队承担不同的商业项目的需求分析;
在先启阶段工作结束进入精化阶段时,团队A的项目工作阶段成果移交给团队B,团队B组的项目工作阶段成果移交给团队C,团队C组的项目工作阶段成果移交给团队A;
在精化阶段工作结束进入构建阶段时,团队A的项目工作阶段成果移交给团队C,团队B组的项目工作阶段成果移交给团队A,团队C组的项目工作阶段成果移交给团队B;
图1 分阶段成果交付交叉实训模式工作过程
当构建阶段结束进入最后产品化阶段时,团队A、团队B和团队C组再回到各团队,各团队承担项目的需要验证、测试和部署。
以上流程从制度上保证了每个项目阶段结束后的工作成果必须符合交付标准,下一个阶段的团队才能正常开展工作,团队之间对项目的正确理解和信息的准确传递完全依赖阶段的工件(包括文档、原型、模型和程序等),从而避免了每个阶段工作成果随意更改和变更,客观上使下一个阶段的团队对前一个阶段团队的工作成果进行了监督和检查,符合软件开发的管理流程。
现今的软件工程和计算机类专业的大多数学生,比较注重程序编码,觉得只要编好程序,项目能运行就可以部署交付了。但是,在实际的商业软件项目开发中,程序编码一般只占整个项目工作量的30%左右。大型的软件企业更加强调工程规范,强调团队合作和项目成果规范。从软件工程看,“项目”较之于“程序”有重要的本质的区别。“项目”强调团队工作成果的规范,其所包含的内容远远超越“程序”层面,“程序”只是“项目”的一小部分。软件项目开发团队在项目过程中所积累的所有文档、模式、原型和设计图表等更能体现“项目”的核心,因此理应是软件工程专业毕业生应该学习和掌握的核心技能。
软件工程专业毕业生将就职于软件企业作为软件项目开发团队成员,如何能更快更好地融入软件项目团队至关重要。正确理解项目每个阶段的工作任务和项目分工的角色职责是关键,强调工程规范的分阶段成果交付交叉实训模式可以很好地帮助学生实现这一目标。
该模式以CMMI-3/ISO9001:2008[17]工作规范作为指南,如图2所示,重点强化了对学生的工程规范意识的培养。其中,每个阶段的角色分工和工作成果交付规范要求十分重要,它们为软件项目开发提供过程管理基础,为后续人员开展工作提供必须支持。后续人员只需熟悉标准工件成果,就能开展项目的二次开发、系统维护和系统支持等工作,从而避免了项目依赖于个人能力,避免了项目团队成员因为跳槽和企业内部人事变动所带来的项目风险。
图2 CMMI-3/ISO9001:2008工作规范
强调工程规范的分阶段成果交付交叉软件工程实训模式,对参加实训的学生是更具工程价值的软件工程项目训练,学生完成的是真实商业项目,体验的是真实项目过程,扮演的是真实角色,需要按时交付负责任的工作成果。通过这样的训练,学生对体现“项目”核心的文档、模式、原型和设计图表等有更真切的体会,对工程规范有深刻的认识,学生会因此而初步具备软件企业所要求的工程实践能力。
华南农业大学软件学院是广东省示范性软件学院,招生一本学生;四川华迪信息技术有限公司是教育部授权的软件工程专业大学生实习实训基地。从2007年开始,双方开展实质性合作,共同培养软件工程专业学生。目前,经过双方合作,华南农业大学软件学院软件工程专业是广东省特色专业、广东省专业综合改革试点专业、广东省人才培养模式创新实验区专业,双方合作建设的工程教育中心成为国家级大学生校外实践教育基地和广东省大学生实践教学基地。
华南农业大学软件学院和四川华迪信息技术有限公司在多年密切合作的基础,经过深入交流、探讨和精心准备,于2013年开展了强调工程规范的分阶段成果交付交叉实训模式的实践。
应用该模式,2013年华南农业大学软件学院软件工程专业的116名学生,按不同商业软件项目组建成18个软件项目开发团队,在四川华迪信息技术有限公司参加为期3个月的实训。在实训中,公司使用企业真实项目,让学生经历真实工程过程,学生在团队中担任真实角色,每个阶段实现工作成果交付和交叉,对项目过程和工作成果进行评估、考核和验收,整个实训过程遵循CMMI-3/ISO9001:2008规范。
在实训过程中,我们保持对学生跟踪调查,收集学生的心得体会、意见反馈和总结材料。学生对强调工程规范的分阶段成果交付交叉实训模式高度认可。实践表明,实训取得了令人满意的效果。总结该实训模式所获得的成功,主要体现在以下几个方面:
(1) 强化了学生对软件开发标准化以及规范性、软件工程的工程化过程及过程完整性应用的理解。
(2) 学生懂得了项目团队成员之间的沟通和协调工作机制,学习和实现了项目团队成员之间和项目团队之间的有效沟通。
(3) 流程上对项目团队之间的规范约束,确保了软件质量。项目团队在完成每个阶段成果后,相互之间对移交的成果开展同行评审并相互考核,迫使每个项目团队自觉按照规范要求工作。
(4) 通过阶段交叉直观暴露了每个项目团队在各阶段的学习“盲区”,学生更深刻地体会到文档和工件在软件工程中的重要性,培养了学生项目管理经验。
(5) 所有学生一致认为做好需求开发和需求管理是项目成功最重要要素之一。因为项目需求贯穿整个项目开发周期,整个项目要做什么,不做什么,做到什么程度,在需求阶段必须进行范围界定,同时在后期的项目开发过程中对变化的需求应进行严格管理,做到项目需求在需求→设计→实现→测试→部署各阶段之间正反追溯。
当然,强调工程规范的分阶段成果交付交叉实训模式无论对学生还是软件企业也带来了新的挑战。
(1) 参加实训的学生几乎都是没有任何软件工程项目经验的,加上对于软件开发过程的理解不足,工作交叉在各个项目团队中第一个阶段推动较为困难,需要企业工程师不断进行跟踪管理和强化指导,必要时进行干预来推动项目。
(2) 在商业软件企业中这种模式是基于项目团队组成员之间和项目团队之间技能水平符合岗位要求的情况下开展的工作模式;但参加实训的学生并不具备这样的条件,如何让学生尽快理解和融入这种实训模式,对企业组织管理者提出了更高的要求。
(3) 为保证该模式的实训工作有效实施,实训前校企双方必须根据学生的知识结构详细订制切实可行的实训目标、实训内容、实施方案、保障措施、工程师配备等。
(4) 企业工程师在整个项目推动过程中,要严格按照工程规范进行,并引导学生尽快进入角色,让学生进入自主的、积极主动的工作方式,在整个实践过程中真切体会到以后正式岗位的职责,从而在心理上建立一种自信而努力的态度。即在“授人以鱼”的同时,实现“授人以渔”。
强调工程规范的分阶段成果交付交叉软件工程实训模式,以真实商业软件项目组建软件项目开发团队,整个实训工作过程符合大型软件企业项目开发的CMMI规范,实现分阶段成果交付和工作交叉,对项目过程进行有效管理。该模式必须有优秀的规范的软件企业的深度参与,软件企业发挥其技术和管理优势,实现对学生进行工程规范训练,让学生初步具备现代软件企业所要求的工程实践能力。
利用该模式进行软件工程项目实训,参加实训的学生能清楚地理解软件项目开发每个阶段的工作成果、交付标准,工作任务的分工、职责和团队合作关系,清楚理解每个阶段训练目标和具体内容,真实感受到商业软件项目的开发要求和工作规范。
华南农业大学软件学院在四川华迪信息技术有限公司的实践证明,该软件工程实训模式是成功的。
[1] 国家信息技术服务标准工作组. 中国信息技术服务标准(ITSS)白皮书第二版[EB/OL]. 工业和信息化部软件服务公司, 2014. http://www.itss.cn/
[2] 国家信息技术服务标准工作组. 中国信息技术服务标准(ITSS)白皮书第一版[EB/OL]. 工业和信息化部软件服务公司, 2010. http://www.itss.cn/
[3] 新华社授权发布. 国家中长期教育改革和发展规划纲要(2010-2020年)[EB/OL].新华社北京7月29日电. http://news.xinhuanet.com /edu/2010-07/29/c_12389320.htm
[4] 林丕源, 刘才兴,张明武,徐建民. 软件工程专业的实践教学改革初探[J]. 实验室研究与探索, 2007, 26(12): 238-240, 247.
LIN Pi-yuan, LIU Cai-xing, ZHANG Ming-wu, XU Jian-min. Employment obtaining oriented reform of software engineering major practice teaching[J]. Research and Exploration in Laboratory, 2007, 26(12): 238-240, 247.
[5] 林惠强,刘才兴,林丕源. 软件工程课程启发式教学的研究与实践[J]. 实验室研究与探索, 2008, 27(5): 112-114, 133.
LIN Hui-qiang, LIU Cai-xing, LIN Pi-yuan. Research and practice of the elicitation teaching method of software engineering course[J]. Research and Exploration in Laboratory, 2008, 27(5): 112-114, 133.
[6] 林丕源, 刘才兴.本科软件人才培养探索与实践[J].计算机教育, 2009(16): 77-79.
LIN Pi-yuan, LIU Cai-xing. Exploration and practice of software talent cultivation for bachelor students[J]. Computer Education, 2009(16): 77-79.
[7] 林丕源,刘财兴,黄大乾.以问题求解能力为核心的IT人才培养途径探析[J]. 黑龙江高教研究, 2012, 30(8): 126-129.
LIN Pi-yuan, LIU Cai-xing. Exploration and analysis of IT talent cultivation approaches centered on problem-solving ability[J]. Heilongjiang Researches on Higher Education, 2012, 30(8): 126-129.
[8] 教育部网站. 教育部23日启动实施“卓越工程师教育培养计划”[EB/OL]. 中央政府门户网站,2010年06月23日. http://www.gov.cn/gzdt/2010-06/23/content_1635114.htm
[9] (美)Roger S Pressman. 软件工程:实践者的研究方法[M]. 郑人杰、马素霞等译. 7版. 北京:机械工业出版社,2011.
[10] 中国质检出版社第四编辑室. 计算机软件工程国家标准汇编-软件开发与维护卷[M]. 2版. 北京:中国标准出版社,2011.
[11] Capers Jones. Applied Software Measurement: Global Analysis of Productivity and Quality[M]. 3rd Edition. McGraw-Hill Osborne Media, 2008.
[12] J. Glenn Brookshear. Computer Science An Overview [M]. 11th Edition. Addison-Wesley 2012, Massachusetts, p299.
[13] CMMI Product Team. CMMI for Development [EB/OL]. Software Engineering Institute, Carnegie Mellon University, 2010. http://cmmiinstitute.com/cmmi-solutions/cmmi-for-development/
[14] The SFIA Foundation. The Skills Framework for Information Age [EB/OL]. http://www.sfia-online.org/
[15] 卢 苇, 邢薇薇. 产学研结合做中学育人[J]. 高等工程教育研究, 2011(5): 32-39, 71.
Lu Wei, Xing weiwei. Cooperation among Industries-Universities -Research institutes and education through practices[J]. Research in Higher Education of Engineering, 2011(5): 32-39, 71.
[16] IBM Rational Team. RUP: Best practices for design, implementation and effective project management [EB/OL]. http://www-01.ibm.com /software/rational/rup/
[17] ISO 9000-Quality management [EB/OL]. http://www.iso.org/iso/home/standards/management-standards/iso_9000.htm
加快解决经济社会发展对高质量多样化人才需要与教育培养能力不足的矛盾、人民群众期盼良好教育与资源相对短缺的矛盾、增强教育活力与体制机制约束的矛盾,为教育事业持续健康发展提供强大动力。
——摘自《国家中长期教育改革和发展规划纲要》