张希谊,桑 军
(重庆大学软件学院,重庆 400044)
“软件项目实践”系列课程建设
张希谊,桑 军
(重庆大学软件学院,重庆 400044)
在参考国外同类高校实践经验的基础上,讨论在软件工程专业开展系列项目实践课程建设的必要性。结合教学实践探讨了不同教学内容的选取、教学形式、存在问题及改进措施等。
软件工程;课程;实践
对于软件工程专业而言,实际的编程能力、应用软件工程方法分析问题和解决问题的能力是极其重要的。这也是软件工程专业区别于计算机科学专业的一个重要方面。
为了在教学活动中引导学生在学习软件工程领域前沿知识的同时,更加注重对实际应用能力的培养,提高学生的学习兴趣和学习热情,培养创新精神,使学生积极主动参与其中,而不是被动地接受课堂教学,有必要开设并加强“软件项目实践”系列课程建设。软件项目实践,以其注重实用性不同于与计算机专业,但也不单纯地类似于职业培训课,它要求的是学习知识的系统性、结构化,以及与其他专业知识的有机结合。实践性教学对于计算机和软件类专业具有重要意义,甚至可以说超过理论性教学。国内外各高校基于各自特色,以不同形式开展了实践性教学。虽然名称不尽相同,但其目的和意义具有相似之处[1]。
我们设想以系列课程形式开设“软件项目实践”,从三年级上学期至四年级上学期共3个学期。为了充分利用本系列课程,达到较好的教学效果,课程内容设置上必须加以综合考虑。曾经考虑过几种教学内容设置方案,各有利弊[2]。
其优点是学生可获取不同领域软件开发的经验,并且在形成制度后,有利于今后每个年级相同课程的开展。对于教师而言,如果在某个或某些领域有较强的软件开发经验,也更能有针对性地指导学生,并通过指导学生,提高自己的业务能力。例如University of Washington的Capstone Software即采用此模式。
此方案的缺陷在于指定了软件项目实践的选题方向,有可能限制学生的爱好和特长。作为软件学院的培养目标,不是按照培训班的形式,让学生掌握几门计算机程序设计语言,然后进行一些初步实践,就投入实际软件开发。软件学院培养的学生,应该是在掌握软件工程知识的基础上,自觉地应用软件工程原理进行软件开发,因此应着重让学生了解、掌握、应用软件工程所要求的软件开发模式。而这种能力的培养,并不一定需要多个领域软件专题的开发,而主要是通过项目实践,培养良好的软件开发风格,其基本要求是用于实践的项目能满足此目标。
这里所说的每学期1个题目与每学期1个专题的不同之处在于:这里的每学期题目不一定是同一个专题,可针对不同领域进行。学生可根据其爱好及其对于将来发展的期望,选择不同领域的项目进行实践,以适应将来的工作。采用此模式的有 University of Nottingham的 Software Engineering Group Project。
此方式的主要不足或困难在于:由于需要每学期确定1个题目,共3学期,就存在选题的阶段性问题,必须保证逐步提高要求,逐步提高题目的难度,而这是不容易做到的。而且为了满足众多学生(一般1个年级有100或更多学生)的需求,需要准备多套题目。把握不好,则有可能形成后期的题目反而比前期简单的情况,不利于达到教学要求。况且还需考虑到与毕业设计的衔接问题(至少规模上不能超过毕业设计)。
第1学期完成1个小项目,由每位学生独立完成,锻炼学生的编程能力。第1学期和第3学期为1个较大的题目,由一组学生共同完成。其中,第1学期作需求分析和设计,第3学期编码和测试,完成后与初始设想比较,有哪些改进,有哪些目标未达到。这样,有望达到培养学生自觉应用软件工程方法的目的。此模式主要参考了Milwaukee School of Engineering的Computer Engineering/Software Engineering Senior Design Project和 Rochester Institute of Technology的Senior Project。
目前软件项目实践系列课程所采用的形式为方案2,主要是基于对该系列课程所应达到目标的考虑,即设想共分3学期进行,加上毕业设计,构成4个阶段目标。即项目实践1,要求学生熟练掌握程序设计语言和软件开发平台,学习好的编程风格,成为一个好的程序员;项目实践2,要求学生按照软件工程的规范过程完成实践项目,掌握并根据软件开发过程实施软件设计;项目实践3,在项目实践1和2的基础上,增加培养锻炼学生掌握软件测试技能和方法的内容。强调的是让学生掌握软件工程方法和技术,而非所有应用领域软件开发技巧。对于每一个不同阶段,有不同的具体要求,由浅入深,由低到高。目前考虑:第1学期由每一位学生独立完成设计;而第2学期,则以小组形式共同完成;第3学期,还是以小组形式进行,但强调两个小组之间的互相检查和测评。最后,以毕业设计作为综合练习,全面应用所学知识。这样,就做到了注重课程体系结构的连续性。
“软件项目实践”系列课程在时间安排上是在一学期的开学初,即进行布置(甚至可以提前到前一学期末即进行布置),让学生尽早开始考虑,并贯穿于整个学期,从而更好地保证其质量。在没有3学期制的情况下,还可考虑跨学期进行,充分利用假期。
每一个项目实践小组配备1名具有相关领域知识或编程实践经验的项目指导,以保证项目实践的顺利实施。帮助其开展讨论,指导其编写报告和演示等。项目指导不具体参与软件的分析、设计和实现。而是以用户的角色进入项目,提出项目需求。
项目实践小组应每周进行1次讨论例会,内容包括项目中的技术问题、项目成员之间的沟通与交流、与客户(项目指导)的交流,以及项目进展情况等。每次讨论会一定要有会议记录,记录讨论会的时间、地点、参加人员、讨论的内容等,这将作为最终报告的一部分。会议记录要作为评定项目成员成绩和项目指导工作的重要依据之一。
项目完成后,每一组/名学生均应提交其解决方案及最终报告,并作演示。解决方案要求能正确地编译、连接、运行,并能满足该解决项目的最低要求。鼓励用英文撰写项目文档。学生需上交项目报告的电子版和打印版。项目报告要统一文档封面,统一文档格式。
最终考核方式采用综合考察学生讨论例会的参与情况,每一次讨论的记录、最终的项目报告、项目演示情况及(同组)学生间相互评价等确定。
经过实际训练,学生们将能够主持并记录讨论会,有效地参与到软件工程团队中,作简短的技术报告和演示,并合作编写技术报告。在此课程中培养的团队精神、管理能力和演示技巧将会有益于将来成为一名专业软件工程师。
首先,调动了学生积极性。由于以学生为主体开展软件项目实践,并鼓励学生积极提出自己的建议,一起来搞好本课程建设,使学生从被动学习自觉转变进入主动学习状态。许多学生在参与过程中,不断提出自己的想法和体会,都希望能从本课程中学到更多更实用的知识和技能。
其次,培养了学生自我学习的能力,增强了学生自信心。由于软件开发用于实际应用领域,所做项目必然涉及某些领域知识,学生们通过查阅资料进行学习,并应用到项目设计中,使每一位学生都看到了自己在参与实际软件项目中的不足,也相信只要勤奋,努力,一定能克服困难。
再次,学生的程序设计水平有显著提高,特别是一些跨专业学生,通过实践已基本上能跟上教学进度,为进一步的学习打下了坚实的基础。
在教学实践过程中发现存在的主要问题:
1)教学大纲及教学形式均无先例可循,需要在教学实践中不断改进。特别是如何进行本课程的讲授需要探讨。
2)无相关教材,甚至难以找到可供参考的资料,在项目设计中必然产生这样那样的问题,例如不同项目之间存在难易程度不同的问题。
3)对指导教师的指导工作的要求需要从内容到形式上加以完善。
4)需要探索如何对学生完成项目实践的情况给予客观公正的评价。
5)需要加强项目完成后的总结工作,帮助学生深入地发现自身存在的问题和不足。
6)需要合理安排本系列课程与其他课程及课外活动之间的关系,使得学生不至于因为其他课程负担太重或考研、找工作等,对于本系列课程采取应付的态度。
改进措施:
1)组成课程教学小组,其任务是制定课程规划、目标要求,设计备选题目,制定评价标准,评审学生完成情况等。
2)关于项目选取问题,现阶段可在实践中逐步积累,逐步完善。从国外高校的实际情况看,在多年积累的基础上可以产生大量优秀的、满足培养目标的软件项目实践选题。
3)大力开展并加强与外单位协作。最终目标是提供实际软件项目,让学生参与其中。在此方面,有国外高校的成功经验可以借鉴。
从长远来看,希望本系列课程能以集中教学周的方式进行(每次约4~8周),共进行3学期。第1学期编写一个较小的程序,可由学生自己选题,教师综合之后确定。要求是每一位学生独立完成。第2学期主要从软件工程过程的培养出发,学生分组后,每一组按照软件工程原理的要求,完成一个项目的设计、编码和测试。第3学期可考虑根据学生的兴趣爱好,按专题来分组,完成一个专门领域的项目实践。
总之,通过3个学期的软件项目实践系列课程,加上毕业设计环节,可有效地弥补大学生在校学习期间实践环节相对不足的缺陷,提高学生的适应能力和竞争能力,从而在毕业后能更快地适应工作的要求。
[1] 李建东,王新海,宋艳芳.关于软件工程专业工程化培养模式的可行性探索[J].制造业自动化,2011 (2):219.
[2] 巩建闽,萧蓓蕾.基于能力培养的课程体系设计框架案例分析[J].高等工程教育研究,2011(1):132.
2011-07-15
张希谊,女,研究方向:教学管理。
G642
A
1007-7111(2011)08-0073-02
(责任编辑 魏艳君)