现代软件工程教学初探

  • 格式:docx
  • 大小:35.50 KB
  • 文档页数:5

现代软件工程教学初探
1软件工程教育的几点对策
1.1建立良好的师生关系
良好的师生关系是构建和谐教学环境的必要条件。教师在这方面应起
主导作用。现阶段,高校的学生已经普遍是90后,他们朝气蓬勃、个
性鲜明、思维独立,做事目的性非常强,有时学习显得功利。教师应
该把握学生的特点,循循善诱、启发引导,注重构建教师与学生之间
的桥梁。现阶段通讯发达,网络媒介异常发达,沟通渠道相当丰富,
如Email、电话、短信、QQ、博客、微博等,多数学校还建设了网络课
程。每个教师应该抓住主动性,主导师生之间交流沟通的渠道,适时
抛出讨论话题,对学生的信息即时反馈,构建平等的师生关系,通过
沟通拉近师生之间的距离。

1.2基于“爬山模型”的学习模式
“瀑布模型”阶段驱动教学法存有着明显的缺陷。建议按照软件工程
师从学校走向软件企业所经历的过程来改革软件工程课程的理论教学
与实践教学的培养流程。不妨按如下流程展开课程教学:

(1)首先维护一些已有的软件。这些软件能够从上一届软件工程课
程学生开发的软件中选择一些有代表性的软件。通过这个过程,学习
软件维护的一些知识与方法。此外,学生们更能切身体会软件文档的
重要性。

(2)学习测试软件,并尝试调试修复软件Bug。通过这个过程学习软
件测试的一些方法与技术,如黑盒测试、白盒测试。同时,学生们能
够学习软件错误定位、Bug的修复方法。

(3)负责重写其中的一个小的软件模块。理解软件工程逆向工程,
理解软件实现时需要遵循的原则。
(4)设计一个较大的模块。尝试编写设计文档,能够采用UML建模,
理解设计原则,并在实践中应用这些原则。

(5)展开需求分析。这时教师能够扮演用户的角色,与学生一道模
拟需求分析过程。通过上述改进流程,将理论教学融合到真实的项目
开发的与维护的过程当中,并且整个流程与软件工程师的成长过程一
致,与瀑布模型的一泻千里相反,我们不妨称该模型为“爬山模型”。
从山底(具体软件)开始,一级级登上山顶(用户需求),通过整个
过程的训练学习,领会软件工程之本质,达到一览众山小之目的。

1.3鼓励自主学习
在学习的过程中,以学生为主体,教师加以引导,鼓励学生自我学习、
自我管理。具体做法如下:

(1)学生能够自由选择团队成员,内部民主评价团队成员的贡献。
(2)项目开发的编程语言、采用算法、软件界面等由团队确定,指
导教师能够指导,但不干涉。

(3)学生能够自由选择感兴趣的项目。
(4)允许项目开发失败,学生能够通过其他途径,如辅助其他小组
测试、编写文档等获取相对应的学分。

1.4构建科学的学习评价体系
课程学习评价是对学生学习成果的肯定,科学的评价体系有助提升和
保持学生学习的热情。在教学过程中,注意做到如下几点:

(1)即时反馈作业情况。批阅每次作业,并公布学生的得分情况以
及学生下一步需要做的工作。实现末位淘汰制,每次将得分排名末位
10%的学生划分到不及格档,迟交作业或不交作业扣分。

(2)客观评价学习成果。充分借助计算机网络的优势,将竞技比赛
引入学习,鼓励学生之间展开学习竞赛,比赛程序速度、算法效率、
测试用例数量、查找Bug速度与数量等。有条件展开网络课程的院校,
能够将课程上传到网络,开设讨论版,每个学生都能够分享自己的心
得、观点,让其他学生评价打分。这个系列措施避免了由教师打分造
成的主观偏差,能够对每个学生的学习给出相对客观、公正的评价得
分。

1.5开发工具作桥梁,跨越理论和实践鸿沟
现有的软件工程教材侧重于总结理论,将软件开发理论抽象为一些大
而空的原则、名词定义、知识点、关键步骤(KPA)等。教师希望学生
记住这些知识,往往通过闭卷考试的方式检查学生。以考查记忆力方
式代替理解掌握知识点并不科学。计算机科学的发展过程中产生了大
量的辅助软件工程工具。这些工具本身就是软件产品,体现了软件工
程的思想,实践着软件工程的理论。以这些工具软件作为桥梁,能够
让学生切身体会到教材中的软件开发思想在实践中的应用,使抽象的
理论在实践中得到应用,而学生也能从中体会到理论的精髓、实践的
要义。例如,在学习单元测试时,能够利用Junit、gcov、
CodeCoverage等工具理解单元测试中的分支覆盖、程序断言等概念和
方法。在学习软件设计时,能够利用Rose、UMLModeler等工具理解软
件设计中的模块化、信息隐蔽、封转、耦合与内聚等概念。此外,教
师能够指定必读的经典参考书目,如《浪潮之巅》《数字化生存》
《人月神话》《人件》《软件工程—实践者指南》等优秀图书。通过
广泛地阅读,深入讨论IT界发生的重大事件,学习IT界的经验与教
训,探讨工程教育中的“学与习”等挑战性的问题。

2软件工程课程实践环节组织
软件工程课程实践性很强,学习过程中需要安排大量的实践环节任务。
没有实践,再完备的概念定义,都是一句空话,学生难以真正理解掌
握。带课教师在安排和指导学生项目实践时要注意以下3点。

2.1贴近实战
学生都想做些有意义而非凭空臆想出来的项目。教师在安排实践项目
时,要尽可能来源于现实生活,贴近学生的生活背景,最好是能满足
学生的某些需求。例如,南京大学软件学院学生开发了能用于学生选
课的“超级课程表”。充分利用历史软件(LegacySoftware),一般
软件工程实践项目都是学生从零开始编写软件的1.0版本,但是,IT
行业能绝大多数软件都是历史软件发展而来的。不接触这些历史软件,
如何学习软件工程的各项原理和实践呢?获取这些历史软件,有以下
途径:

(1)各大开源网站下载开源软件。当前,软件开源势头发展强劲,
出现了很多开源网站,如SIR、SourceForge、GoogleCode等,这些网
站多数能提供各类软件的历史版本,能够鼓励学生以这些开源软件作
为研究对象,在其上实行二次开发。

(2)把历届学生完成的项目用版本控制软件管理起来,这样下一届
学生能够在以前版本的基础上继续开发。在项目的Alpha和Beta开发
阶段,能够让小组的学生轮换到另一组。这样,学生们更能深刻体会
沟通的意义、文档的重要性,掌握如何理解他人程序、如何做回归测
试、如何调试程序等软件工程任务。

2.2项目进度管控
学生的学习过程用什么驱动呢?大致能够分为以下几类:①对教师的
无条件服从;②对软件技术的狂热;③交作业的期限。我们调研发现,
绝绝大多数学生的学习动因是出于第③条原因,少部分学生是出于第
②条动机。而且,我们发现,很多学生都是在交作业最后期限的前一
晚通宵赶出来的,其作业的质量和学习效果可想而知。所以,我们建
议在课程中设置若干检查点(CheckPoint),具体做法如下:

(1)每个团队项目Alpha/Beta阶段结束时要求公开项目成果,放在
软件工程网络课程的博客,接受其他团队和带课教师的监督。这样有
另外一个好处是,促动了其他团队的学习,有助于竞争学习氛围的营
造。
(2)每个阶段的软件也要发布,提供下载,方便其他团队找出其中
的不足之处,指导教师鼓励这种“挑刺”行为,并对成功的“挑刺”
给予奖励。

(3)每个阶段要开SCRUM会议,把每次的会议结果(每个程序昨天
做了什么,今天打算做什么,存有的困难等)一一列举,并用软件工
程的项目管理工具自动生成进度表。通过这些检查点的设置,避免了
学生工作的拖延,也间接保证项目完成的质量。

2.3团队精神与个人特长发挥
软件开发过程充满了智力活动,开发团队中水平强的学生往往挑大梁,
做了相当多的工作。但是,带课教师很难客观区分团队内部成员所作
的贡献大小,如何做到一方面鼓励团队合作,另一方面也要避免部分
学生在团队内部混学分的现象,达到既发挥能干学生的领头雁作用,
又让团队中的“南郭先生”无法混迹呢?也能够尝试奖惩并举的措施,
具体方法如下:根据团队完成项目情况,给予一定的奖励分,团队成
员通过民主讨论,按照每个成员的贡献大小分配这些奖励分,多劳多
得,不劳不得。通过这种方式,能够让学生学习和体会到IT企业的绩
效评估和团队管理方法,以及如何努力实现自己在团队中的价值。

3结语
软件工程课程教学不需要特别的渠道,需要的是因地制宜的教学方法,
“做中学”或“习与学”是辩证统一的整体,带课教师与学生双方的
共同努力,是能够提升现阶段的软件工程教学效果的。

现代软件工程教学初探