佟延秋
摘要:即将推出的软件工程知识体系SWEBOK V3版,对软件开发人员的知识体系提出了更加具体的要求。文章在多年教学实践的基础上,提出一个基于真实项目的软件工程课程实习模式,通过基于真实项目的软件工程实习,极大地提高学生的编码能力、沟通能力以及对项目的宏观认知能力一
关键词:PBL;软件工程;课程实习
0 引言
软件工程课程实习通常是以完成软件项目为考核指标。在项目开发过程中,学生必须组成团队开发出一个完整的软件系统。即将推出的软件工程知识体系SWEBOK V3,在SWEBOK 2004的基础上增加了一个新的部分,即“软件工程专业实践”,主要包括专业性(professionalism)、团体动力学(group dynamics)和交流技巧(communications skills)。从中可以看出,满足SWEBOK 2004的人才是软件行业的合格人才而小是卓越人才,只有满足了SWEBOK V3才可称为卓越人才,这与教育部推行的“卓越工程师教育培养计划”不谋而合。因此,有必要参照SWEBOK V3的要求,对软件工程课程实习指导方案进行调整。
1 模式构建依据
美国著名的比较政治学者比尔和哈德格雷夫对模式的定义是:模式是再现现实的一种理论性的、简化的形式。软件工程课程实习模式就是在现代教育理论的指导下,为实现软件行业人才培养目标而建立的一种合理的结构,它能够对课程实习提供指导并总结经验。
1.1 理论基础
基于项目的学习(Proj ect-based learning,PBL)以建构主义学习理论、实用主义教育理论、探究学习理论为基础,整个学习过程围绕某个具体的项目进行,学习过程中充分选择和利用最优化的学习资源,在探索创新中获得较为完整和具体的知识,形成专门的技能。其中“项目”一词是管理学科中的“项目”在教学领域中的延伸。学习活动围绕某个具体项目进行是PBL的核心,要求学生在规定的时间内,通过完成一系列相互关联的任务,获得专业知识、提高学习能力。随着任务的完成,产生特定的产品和服务。在项目的实施过程中,要求学习者充分发挥个人的主动性,在探索中获得知识、发展能力。PBL的宗旨是把学生融人有意义的任务完成过程中,让学生主动进行知识建构,把基于真实任务生成的知识和培养起来的能力作为最高的学业绩效目标。
1.2 PBL的主要特征
(l)真实的项目情境能够激发学习者的认知内驱力,使其能够主动参与项目活动。
(2)学习者完成项目的过程,就是学习者体验和感悟知识、概念、原理的过程,在此过程中学习者建构学科知识、发展技能、提升高级思维能力。
(3)在项目过程中遇到的实际问题往往是多学科融合的,学习者需要综合运用多种学科知识解决问题,这在无形中促进了学生自学能力的发展。
(4)以“团队”为基本组织形式,强调师生、生生以及该项目的所有人员相互合作,形成“学习共同体”。
(5)完成的项目可以是产品或服务,除了具有一定的社会效益,还能有经济效益。
(6)在完成项目的过程中,学习者要用到多种信息资源和认知工具。
1.3 PBL在软件工程课程实习中应用的可行性
高等院校本科软件工程课程实习是一种从教授简单编程到高级项目开发的多层次教育。软件工程课程实习必须要与实践紧密结合,完成从理论到实践的跨越,这需要学生在课程结束后,以团队为单位提交一个完整的软件产品或服务,只要满足以下目标,就可作为课程实习项目。
1)项目具体而真实。
本科阶段的程序设计课程主要将程序设计语言的概念灌输给学生。然而,单纯的编程技术有时并不能解决开发大规模软件系统中遇到的问题。这是因为学生在学习编程语言的过程中,接触到的往往是与语言有关的逻辑场景,而缺乏具体真实的业务场景。因此,学生遇到真实的业务场景时往往会无从下手。这也是PBL倡导学习情境一定要真实而具体的原因。
2)项目综合而开放。
基于项目的学习要求涉及的任务都是综合开放的,其综合性体现在BPL融理论知识与实践技能于一个项目。软件工程的纯理论学习不足以解决软件项目开发过程中遇到的问题。而学生更倾向于把注意力集中在技术难题上,并认为沟通冲突不会发生在他们的项目开发过程中。
3)学习结果最终表现为一个产品或服务。
软件工程实习的要求与PBL的观点是一致的。通过软件工程课程实习,要求学生在项目开发的各个环节进行交流,在合作中发现问题、解决问题,最终完成系统的开发。
4)学习过程强调交流合作。
交流,不仅是文字或图片的交换,而是学生借助各种手段有效地表达自己的思路、想法。然而,由于每个学生都有各自的工作习惯,且大部分的交流是不同步的,这就要求学生不仅思路清晰,而且善于表达。
5)学习结果具有一定的社会效益。
基于项目的学习涉及的产品或服务都是真实的,而且在其开发过程中涉及与其他营利性组织或者非营利性机构的沟通交流。因此,这些产品或服务具有一定的社会效益,甚至经济效益。
6)学习过程运用多种认知工具和资源。
在完成项目的过程中,教师或第三方公司要为学生提供认知工具和资源,以便支持学习者。
2 基于项目的软件工程课程实习模式构建
众所周知,PBL中的L被称为“学习”,但其中的P(项目),不是一般的项目,而是真实的项目。既然项目是真实的,那么就要考虑时间、成本和质量的问题。因此,基于项目的软件工程课程实习模式的构建就必须要以软件过程管理为依据。
2.1 模式构建依据
基于项目的软件工程课程实习需要严格的软件项目管理。实践表明,使用专门的项目管理软件作为项目管理的团队比盲目进行项目管理的团队效果更好。然而,与专门的项目管理工具相比,那些大型的商业项目管理软件则显得过于复杂。鉴于这个原因,笔者选择SVN作为项目管理工具。SVN是一个开放源代码的版本控制系统,相对于RCS、CVS,它采用了分支管理系统。目前互联网上很多版本控制服务已从CVS转移到SVN版本控制器,与此同时考虑到商业版权问题,其他开发工具也以开源软件为主。
2.2 模式构建说明
基于PBL的软件工程课程实习模式分为3个层次,如图l所示:第一层为项目进度层,主要对项目的进度进行跟踪;第二层为教师层,主要对教师在实习过程中对学生的指导、沟通以及对项目的贡献进行展示;第三层为学生层,表明了学生在软件工程课程实习过程中的工作流程。
2.2.1 项目选择
项目的选择将直接影响软件工程课程实习效果。项目规模太小可能达不到课程实习的要求,规模太大不但会增加学生和教师的压力,而且项目失败的风险也会增大。因此,基于PBL的项目要由具有实际开发经验的指导老师与校外公司项目经理共同讨论、确定。
在项目选择的同时,实习指导教师便可以组织学生分组。由于本研究所选择的项目以MS系统(管理信息系统)为主,因此学生团队的组成主要由前端开发和后台编码两部分组成,而数据库设计则由教师完成。
2.2.2 需求分析
在确定了实习的项目之后,为了避免后期阶段可能存在的风险,还需要进行需求分析。需求的采集主要由教师和负责前端开发的学生共同完成。
在需求分析过程中,学生开始接受更贴近项日歼发的技术培训,如需求文档的撰写、用例图/流程图等绘图软件的使用、熟悉开发技术平台、编写测试用例等。由于不同公司的项目管理平台和开发技术以及软件过程定义都有所差异,对学生来讲是个巨大的挑战。
2.2.3 项目确认
该阶段,软件工程课程实习的项目才算正式确定下来,这是衡量了项目规模、技术准备、风险评估等因素的结果,算是一个可完成的、对学生能力提高有帮助的项目。
建立项目时,教师必须建立项目描述并标明项目里程碑。项目描述会放在SVN的一个专门目录中,项目组成员能够访问。
在需求分析过程中,学生实际上还未真正了解项目需求,他们需要深入讨论、理解需求文档。为支持团队成员的讨论,需要同步与异步通讯。当学生小组完成需求分析后,便可提交给教师。其实,项目的需求在此之前已由教师完成,这里主要比较学生的需求分析与教师的分析,以便从教师那里得到反馈。当然,也有可能发现教师所做的需求分析报告中的缺陷和不足。
2.2.4概要设计与详细设计
这个过程虽然主要由教师完成,但学生也必须参与进来,这是学生开始使用软件工程相关知识的最佳实践场地。为了更好地交流,笔者使用StarUML作为建模工具,这是一款开源且非常小巧的UML图绘制工具,可以快速生成UML图。借助内部通信工具与SVN版本管理工具,结合小组成员间的协作,我们能够实现不同个体共享彼此的知识,并最终形成一致性的结果‘9]。
这个阶段学生接受的技术培训会更加具体和有针对性,由于学生对将要使用的技术平台有所了解,一些在开发中常用的技术及设计模式可以通过第三方公司提供的DEMO学习。
2.2.5 接口设计与编码
当详细设计和概要设计完成之后,项目便进入到编码阶段,此时留给学生的时间已不多,而且还有可能面临的需求变更以及原型修改。学生可根据教师设计的接口以及业务逻辑的要求进行编码。这里需要说明的是,学生是不能够随意设计接口的,接口必须由教师设计,即便学生提出新的接口,也必须由教师确认后方可实现。
2.2.6 第三方测试
无论是单元测试还是集成测试均由第三方公司完成。这样做的原因有三:①学生学到的软件测试课程课时较短;②第三方公司提供测试可以保证产品质量;③第三方公司提供软件测试可以减少工作最。
2.2.7 项目实施完毕
当学生团队将软件和所需文档提交后,教师便可对学生进行评价和打分。评价的参考标准如下:①合作技巧;②编码规范和质量;③按照需求分析文件要求设计;④完成时间。
3 基于项目的软件工程课程实习模式应用原则
基于项目的软件工程课程实习模式是在多年软件工程课程实习的基础上,整合基于项目学习思想的一次大胆的尝试,需要遵循以下原则。
1)以过程管理为中心。
虽然基于项目的软件工程课程实习最终以交付产品或服务为目标,但教师在具体的指导过程中必须严格按照软件项目管理以及CMM 3级的要求进行,而不是仅仅停留在软件的编码上。这样学生会对软件开发产生一个全新的认识,会将他的编码技术与实际的业务问题联系起来,反过来会提高学生的编码能力。同时,学生在经历一个完整而真实的软件开发流程后,既能够有微观的开发经验,还能够加强学生的管理能力和沟通能力。
2)指导教师就是“防火墙”。
基于项目的软件工程课程实习指导教师一定要具有实际的项目经验,包括开发经验、管理经验、甚至还包括与客户沟通的经验。开发经验会在开发过程中给学生提供帮助。指导教师即项目经理,他的管理经验直接影响项目的进度。当学生进入开发团队后,除了技术上的问题,可能还会遇到心理上的压力,这时指导教师还要担负起辅导员的角色。
3)与第三方公司保持良好的沟通。
软件开发是一个与时间赛跑的工作。同时,由于开发工程中的不确定因素较多,因此,指导教师需要及时与第三方公司保持良好的沟通,以便及时获得所需资源和技术支持。
4 结语
如今在项目日趋紧张的交付时间的逼迫下,以往的学徒制培养简直就是一种奢望。在面向“卓越工程师教育培养计划”的软件工程专业本科培养方案中的软件工程实训课程具体实践过程中,笔者采用基于真实项目的课程实习方式,通过师生、生生间的协作,最终交付了一个真实的软件产品。虽然SWEBOK V3对卓越软件人才的定位更加具体,但仅仅依靠课程实习提高人才培养质量显然是不够的,还需要考虑软件工程人才培养方案的整体。通过课程实习不一定会显著提高学生的开发方法和实践,但可以让学生知道如何成为一名合格的软件工程师。