1. 引言
软件产业是极为重要的战略性产业,是信息产业的核心和灵魂,所以大力培养软件人才,培养具有创新创业素质的软件人才,成为了计算机专业教学中的焦点。纵观我校计算机专业的课程安排,笔者发现存在下述问题。
软件产业经历了从软件作坊生产向大规模工业生产的转变。早期的软件项目规模不大,通常单人就可以完成,不考虑团队合作。随着软件规模与复杂性的不断增加,目前软件开发多以团队方式开展,这就要求软件从业人员除了具备专业知识与技术以外,还要求具有团队协作能力、交流沟通能力、文档写作表达能力、项目组织与管理能力、应用软件过程改进的能力等 [1],而目前计算机专业开设的课程主要有:C语言程序设计,JAVA程序设计,WEB应用开发,数据结构,软件工程,数据库原理,算法分析与设计,分布式计算等。这些课程多数侧重于学生编程能力的培养,对软件开发需要的团队协作及文档撰写等能力的培养都存在明显不足。
基于学生创业技能的需要,我们于2004年首次为软件专业学生开设了软件协同设计课程,该课程经过十几年的建设并推广到计算机专业。
2. 软件协同设计课程的设计
软件协同设计课程以培养学生协作开发能力为目标,根据软件协同开发的特点,课程做了如下设置:
2.1. 课程引入团队建设
当前软件产品的规模与复杂性不断增加、软件涉足的领域也越来越多、软件的实现技术也日益复杂,为此在软件开发过程中就形成了许多开发组织,如需求分析、系统设计、系统测试、过程与质量管理等团队。如何高效地组织安排这些团队工作、度量其工作与产品质量,如何使团队的过程活动能力不断提高,从而使团队在预计的时间与费用内开发出符合质量要求的产品,是当前软件组织追求的重要目标 [1],为此本课程增设了团队建设教学内容。
团队建设的教学目的就是构造一个高效的团队。一个高效团队必须具备如下特点:1) 团队成员之间的紧密联系,互相尊重、互相支持;2) 每个团队必须有明确和可量度的目标;3) 每个团队必须制定项目计划以及对计划的跟踪与反馈。
为此,我们采取了如下步骤:
1) 组建团队
首先由教师向学生展示一个实际项目案例,教师借助实际的案例给学生介绍软件项目开发中的团队、团队中人员的职责以及团队成员如何协作完成任务;其次教师要求学生提交个人信息表(信息表由学生个人学习经历、参与的实践项目以及个人特长等方面的信息组成),教师根据信息表筛选出小组组长备选人,并通过面试确定小组长;小组长和教师一起根据学生信息表、学生彼此之间的熟识度、学生成绩以及学生个人意愿等方面的信息确定小组成员及其角色。
2) 建设团队
一个高效的团队是项目成功的保障,但是一个高效团队中的队员,除了具备一定个人能力与技巧外,更为重要的是团队的协作力和凝聚力,而团队的协作和凝聚力必须通过实践才能得以锻炼,为此,本课程组要求每个团队实际开发一个项目,规定每个项目组:a) 在老师的协助下定义团队和个人的目标,按照明确的目标,进行分工协作。通过实际运作,让成员学习协作。b) 在老师的协助下制定项目组定期交流的主题、交流方式、交流次数以及对待分歧的处理方式。在实际项目运行时,老师参与到项目组定期讨论会中,在倾听的基础上进行辅导,协助项目组成员进行主题讨论。通过交流充分调动了项目团队成员的积极性,大家集思广益,群策群力;通过交流,大家的联系更加紧密,增进了友谊,提升了团队的凝聚力。
2.2. 以创业能力为导向的教学内容的设定
课程组按照软件协同开发的过程将课程的教学设定为5个过程,它们分别是启动过程、计划过程、执行过程、监控过程以及收尾过程 [1]。
1) 启动过程
启动过程是一个项目的开始,其教学的主要内容有:a) 组建高效团队。确定项目经理、关键团队成员以保证项目团队完成所有的工作;b) 项目经理与团队成员共同完成产品范围及项目章程制定。c) 团队成员的分工以及合作形式。
2) 计划过程
计划是对一个项目的护航,其教学的主要内容有:a) 项目计划的种类以及制定流程和方法;b) 项目计划说明书的攥写;c) 项目计划的执行以及跟踪;d) 团队成员在此阶段的分工以及合作方式。
3) 执行过程
执行过程主要是协调人力和其他资源来执行项目的计划,以产生项目或项目阶段的产品、服务或结果。具体教学内容由系统的需求、系统的设计、系统的实施和测试组成,每个教学内容又包含:a) 需求/设计/实施/测试的内容以及方法;b) 需求/设计/测试说明书的攥写;c) 团队成员的分工以及协作。
4) 监控过程
监控过程就是项目经理和项目成员通过对项目相关指标的测量(如质量指标、进度指标、成本指标等)来监控项目进程,分析造成问题的原因,在需要的时候采取正确的行动以保证项目团队能够满足项目目标。
5) 收尾
收尾就是对项目或项目阶段的正式验收和结束文档的撰写,并有效地终止。
上述教学内容的实施不仅给学生一个完整的项目概念和体验,还将本科期间所学的诸多课程知识点串接起来,例如软件工程、数据结构、操作系统、数据库原理及应用、程序设计语言等课程,同时又增加了软件开发中必要的团队协作、交流及文档撰写等内容,力争实现通过该课程的学习将学生的课程知识转换为专业能力。
2.3. 设定与软件协同开发相吻合的教学方法
根据课程内容,我们将课程的教学环节设为理论教学和实践教学。
1) 项目导向式的授课模式
项目导向式的授课模式是一种以实际项目为基础、以问题为核心、教师在此模式中兼顾教学内容的设定、组织、讲解、引导、评价等诸多任务的教学模式 [2]。在实际教学时,教师选择了图书管理信息系统作为教学项目,教师围绕着图书管理系统,进行了进度计划、系统分析、系统设计和系统测试等知识点的讲授,通过对实际项目的讲解,将抽象的知识具体化,更有利于学生对课程内容的理解以及掌握。
2) 项目式实践教学模式
项目式实践教学模式倡导学生为主体,教师起引导和指导作用。在实际应用中:a) 学生以团队形式自主完成指定项目的开发:b) 要定期召开团队会议,在会议上每位学生学会表述自己的观点,通过讨论取得团队对项目的统一认识,通过会议纪要记载团队的决定;c) 团队成员分工协作完成项目开发和文档的撰写任务;d) 对团队每一阶段的工作,教师要进行跟踪,对于正确的部分,教师一定要及时肯定,对有问题的地方也要认真提出并给予指导。e) 以团队为单位进行项目的交流和相互学习。每个团队定期向全班演示团队工作成果,其他团队进行补充或表述不同观点,最后由教师对各团队工作进行总结性点评,包括存在的问题、下一步的工作方向等。
项目式实践教学模式的实施,一方面形成以学生为主体的学习局面;另一方面也在实践教学中培养学生的团队协作精神。
2.4. 设定与教学模式相适应的考核方式
采用以项目式实践教学的根本目标是训练学生知识迁移的能力、学生交流协作能力、学生文档的撰写能力。根据教学模式的特点,该课程的考核点主要有:协作能力、交流能力、文档的撰写能力、语言表达能力和项目的开发能力等,考核方式有:项目答辩、项目汇报、项目报告、系统运行和期末笔试等,课程的最终成绩构成为课堂汇报(15%) + 课后讨论(15%) + 报告(20%) + 系统运行(10%) + 期末笔试成绩(40%)。
课程以全面的考核评价方式激励学生钻研学习内容,提高专业综合能力。
3. 小结
软件协同设计课程强调学生“知识、能力”的协调发展,该课程的开设给学生一个完整的项目概念和体验,将学生诸多专业课程串联起来,将课程能力转化为专业能力;培养了学生的创新意识和团队协作精神,提高了学生的动手实践能力。近3年来,计算机专业学生积极申请各级大学生创新训练计划项目的人数逐年增多,3年共获批国家级大创项目15项、校级大创项目20项,毕业生的就业竞争力增强,3年就业率保持在95%以上,毕业生也普遍受到用人单位的好评。
基金项目
上海理工大学教师教学发展研究项目资助。