本站小编为你精心准备了现代软件工程教学初探参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
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结语
软件工程课程教学不需要特别的渠道,需要的是因地制宜的教学方法,“做中学”或“习与学”是辩证统一的整体,带课教师与学生双方的共同努力,是可以提升现阶段的软件工程教学效果的。
作者:鞠小林陈翔邵浩然单位:南通大学计算机科学与技术学院中国矿业大学计算机科学与技术学院