软件工程课程的实践性很强,因此一般都会安排配套的课程实践项目。最早我在上《软件实践》课的时候,课程实践项目配合教学进度,都是先做需求分析然后做设计。这样大半个学期过去了,文档写了好多页,UML图画了好多幅,但代码一共没写几行,学生也不知道这些文档和UML图除了应付检查之外还有什么用。这样一来,学生对于软件工程的理解就是写文档,甚至感觉文档写的越长分数可能越高,由此在眼疼胳膊酸之余对于软件工程就留下了难以改变的负面印象。
后来在上《软件工程》课的时候尝试过多种课程实践模式,主要包括课程大项目和系列课程实验两种。其中,课程项目完整体验软件开发生命周期,需求、设计、实现、测试各环节之间的延续性好,团队协作体验更充分,但是中间过程可见性差,难以激发学生的兴趣和热情。为此也尝试过通过迭代式的过程让学生体验需求变更和增量式开发。而课程实验则结合每个部分的知识点和技能要求精确设计对应的实验内容和要求,包括需求建模、软件设计、编码任务等。这种课程实验受控性好,可以充分体现教学要求,但缺少完整、深入的软件项目开发体验。
以上的教学模式探索过程虽然也在不断改进但总还是不那么顺。后来感觉主要问题出在我们是从“教”而不是“学”的角度考虑问题。因为我们使用的教材是按照软件过程、需求理解与分析、体系结构设计、组件级详细设计、用户界面设计、软件质量、软件测试这样的顺序编排的,所以我们的课堂教学也是按照同样的顺序进行的,内容也是围绕教材上的知识点进行。相应的课程实践项目也是先做需求分析、然后做设计,接下来留给编码和测试的时间就不多了。
事实上软件工程的很多概念、思想、方法和技术都来自于软件开发实践中遇到的各种问题以及相应的实践探索。例如,下图这些让开发人员饱受折磨的问题催生了敏捷开发、持续集成、测试驱动的开发、版本与分支管理、松耦合设计、代码评审、质量门禁等软件开发方法、技术和实践,并驱动了相关软件工程工具和平台的发展。由此可见,软件工程知识和技术内容具有很强的实践性以及问题驱动的特性。
如果我们从“学”的角度思考问题,那么我们就要考虑如何根据学生的基础为他们提供一份“入门指南”,而首要问题就是为他们创造理解软件工程问题所需要的上下文环境,而这个只能通过课程实践项目来实现。通过课程项目模拟企业软件开发实践,创造问题上下文,让学生对软件工程问题有体验有共鸣。例如:
1)因为有多人合作并行开发,因此会发生代码版本混乱甚至相互覆盖的情况,从而理解版本管理和分支管理的必要性;
3)因为迭代化开发过程中需求是以增量化的方式不断提出的同时还伴随需求变更,因此会体会到糟糕的设计以及各种代码坏味道对需求增加和调整带来的巨大影响,从而体验到软件设计思想以及面向对象设计原则和设计模式的意义;
4)因为课程项目涉及前后端并且希望多人协作并行开发,因此很自然会按照前后端进行分工并体会到了接口不明确对于前后端集成带来的重要影响,由此理解前后端分离和接口设计的重要性。
通过这种方式,学生可以对相关软件工程问题有一定的理解和思考,在此基础上再学习一些具体的方法和工具并在课程实践项目中加以运用就能更加深刻地掌握相关思想、方法和技术了。
此外,我们还可以借助于各种软件开发平台和工具对学生每次迭代所交付的软件以及中间开发过程(如代码提交和分支管理记录、缺陷管理过程记录、软件构建与测试过程记录等)进行分析和测试,从而对效果进行检验并提供针对性的反馈。此外,由于要使用主流的开发框架,例如后端的SpringBoot以及前端的Vue,因此会对框架中所蕴含的各种软件思想有所体验,例如MVC模式、AOP、依赖转置、依赖注入以及各种设计模式等。
按照这一思想,我们重新设计了整个课程实践。首先,课程实践按照4人一组进行分组,以小组为单位完成整个学期的课程项目。其次,整个学期的课程实践由一个项目贯穿始终并分五次迭代,每次迭代都会加入新的需求并伴随需求变更。再次,随着迭代过程逐步增加新的实践能力及工具使用的考查点,侧重点从编码能力、设计能力到分析能力逐步进阶。最后,整个课程实践项目全程依托华为软件开发云DevCloud进行,整个开发和协作过程全程留痕。
今后,我们还将继续以实践为中心的软件工程教学方面的探索。一方面,我们将陆续完善教学视频、自测题等线上教学资源,逐步开展线上线下混合教学和翻转课堂,从而将课堂时间更多用于代码评审、设计研讨等实践化交流讨论。另一方面,我们将继续加强校企合作,与企业合作开展能力认证示范,通过认证结果形成实践化教学反馈。

Codewisdom平台由复旦大学软件工程实验室运营,提供智能化软件开发平台及线上沙龙相关资讯,关注可了解更多智能化软件开发的最新消息~
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览93762 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!