角色体验和工程文档在软件工程教学中的应用

2012-04-29 13:52季春艳冯昕何靖
科教导刊 2012年33期
关键词:文档方法课程

季春艳 冯昕 何靖

摘要软件工程是大学计算机专业必修之课。软件工程教学对于学生建立系统化、规范化和综合化计算机理论和应用开发能力培养具有深远影响。本文对国内外软件工程课程的教学进行了系统的研究,深入地分析了目前软件工程教学存在的问题和挑战,提出了角色体验和工程文档应用于软件工程教学的新方法和新思路。我们强调建立理论与实践相结合的软件工程知识体系,采用任务驱动的角色体验方法,加强学生协同分工和集成创新能力;突出强调工程文档在软件工程应用开发生命周期的重要作用,建立软件工程中规范化的任务、知识体和实施培训的流程。本校已经尝试实施了这种教学模式,各界反馈良好。

关键词软件工程教育角色体验软件工程知识体系工程文档

1引言

软件产业是互联网和新一代信息技术发展的重要基础,软件工程作为一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科,始终是软件产业发展的根基。对于计算机专业人才的培养,软件工程在计算机高等教学中占有重要地位。但是无论从学生、教师还是业界的反馈都可以看出,软件工程教学的实际效果远未达到我们的期望。系统完整的软件工程知识体系建立仍然面临众多挑战,理论与实践结合的创新人才依然难寻,完整严谨和有效的软件工程架构风格依然遥远。作为高校教师,我们必须从软件工程的教、学、研进行深入的研究,探索一条行之有效的教学培养方法。

软件工程是“将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,其重点在于软件的分析与评价、规格说明、设计和演化,同时还涉及管理、质量、创新、标准、个人技能、团队协作和专业实践等”。①相比于其他的计算机专业课程,软件工程的教学有很大的不同。软件工程中重要的技术和开发原理来源于应用和实际商业软件开发,之后这些核心技术被提炼和整合形成原则和理论基础而引入课堂,教授给学生。通过软件工程课程的学习,学生需要了解和掌握软件工程的理论、技术和方法,具备作为软件工程师所需的专业能力。优秀的软件工程研究者DavidParnas将软件工程计划分成三个阶段执行:(1)首先,详细说明软件工程师可能要执行的一些任务;(2)定义软件工程师需要的知识体;(3)将其实施作为一个培训计划。②③由此可见,软件工程是一门综合性和实践性很强的学科,传统的教学模式和教学方法在软件工程教学中存在很大不足,人为地强调实践或者理论基础无法有效地培养学生的综合技能和水平,从而直接影响了课程的教育质量和教学效果。

软件工程课程必须面向解决实际问题,即如何成功地开发可靠的、可用的、可维护的软件系统,满足用户的要求。这包含了需求分析、规划说明、设计、构建、测试、操作和维护等软件生命周期的各个阶段。目前,软件工程教学主要包含两部分:课堂教学和实践教学。以传统的教师为导向的教学方式为主,实践教学为辅。教师在课堂上讲授软件工程方法、原则、技术等知识;实践教学主要是采用实验课的方式,由学生设计完成一个项目。根据多年教学的经验和我们调查反馈的结果,很多学生在本课程学习时感到茫然和无所适从,理论的东西感觉抽象难以理解,缺乏学习热情和兴趣。针对软件工程课程的特点,我们认真分析调研了课程教学存在的问题,总结分析导致课程教学效果不理想的主要原因如下:

1.1课程设置安排不尽合理

软件工程是一门涉及内容较多的综合性学科,所教授的原理、方法较为抽象。软件工程中核心的技术和开发原理均来源于实际商业软件开发,经提炼形成原理和方法而引人课堂。目前,大部分高校将软件工程课程设置在大三,对于刚刚完成两年大学公共基础课和专业基础课教育的学生来讲,软件开发的基础理论和概念仍然匮乏,与软件工程相关的前期课程前后脱节。尤其在计算机科学专业课程设置中,只有一学期的必修的软件工程课,在这么有限的时间内学生很难掌握软件工程的理论与实践的精髓,从而造成大多数学生认为是在学习枯燥无用的理论。

1.2理论和实践的脱节

软件工程是一门实践性很强的课程。相比于其他的计算机学科的课程,软件工程课程核心和精髓不可能从教师的授课和课本的理论学习而获得,靠“死读书,读死书”是无法完成本课程的学习的,实践和理解相结合的融会贯通非常重要。在实际软件开发中真刀真枪的实现,在练习中理解基本原理,在真正练的过程中提升理论的水平是软件工程课程教学和实践的有效方法。

1.3重代码,轻文档

在软件工程课程的教学中,大部分的学生甚至部分教师都会自然地认为实现高效整齐的代码是课程学习中最重要的工作,对于文档工作未有足够的重视。在实际软件开发的工程实践中,一般认为代码的工作量只占到整个工程工作量的30%左右,完整、有效的各种文档,包括设计文档、算法文档、说明文档、维护文档等是整个软件工程核心。因而在软件工程的教学中,我们必须转变观念,突出工程文档的重要性,将各种统一、标准、高效和实用的文档设计和撰写方案融汇到课程的教学中,并且与软件工程理论和代码编写结合,形成完整的的理论、算法、代码和文档并重的教学新方法。

1.4缺乏软件工程知识体系的系统概念

商用和实际应用软件开发的工作是系统的团队工作模式,单打独斗无法完成商业和实用软件开发。然而,现在软件工程的教学中,教师和学生注重的是单个原理和系统的学习,从而造成了学生软件编程风格五花八门,程序可读性差,软件工程的完整知识体系混乱。团队工作的模式要求程序员在整个工程中需要承担不同的角色,不同的角色承担的任务不同,又同时需要与其他的角色互相配合沟通,从而完成整个工程的开发。这一点,在目前软件工程的教学中非常缺乏,为此我们需要建立系统的概念,将角色体验的模式引入软件工程课程教学中。

在参考文献④中,Nurkkala和Brandle对软件工程教学进行了分析,并对现行软件工程教学方法中存在的问题进行了总结:(1)没有产品——学生在学习中仅仅是创建项目,而并非真正地开发商业级别的产品;(2)持续时间短——通常软件工程课程只安排一或两个学期,课程受限于时间过短很难真正理解软件工程的方法、原理等在实际软件工程项目中如何应用,并完成开发真正的产品;(3)高流动性——对于一个项目来讲,每个学期都有新学生加入意味着人才库始终只有很少的人,新加入的学生很难基于之前的经验开发其自身的技能;(4)低复杂性——由于学习必需时间以及学生本身技能的限制,只能开发简单的应用;(5)无法维护——作为持续时间过短结果,学生没法经历软件开发非常重要的一个方面,即系统维护阶段;(6)没有客户——学习过程中,大多数软件工程项目都没有真正的与客户进行接触,而实际的开发中必须要了解客户的需求,根据客户的需求进行软件开发。

综合上述分析,我们深入调研了现行软件工程课程教学的困难和挑战,分析了国内外报道的先进的软件工程课程教学的新方法,结合我们几年来课堂教学的经验大胆改革课程体系框架和教学内容,积极探索案例教学和实践教学模式,提出了角色体验和工程文档应用于软件工程教学的新方法和新思路。我们强调建立理论与实践相结合的软件工程知识体系,采用任务驱动的角色体验方法,加强学生协同分工和集成创新能力;突出强调工程文档在软件工程应用开发生命周期的重要作用,建立软件工程中规范化的任务、知识体系和实施培训的流程。

本文第二部分将介绍目前报道的国内外软件工程教学的有效方法,第三部分介绍我们探索的引入角色体验和工程文档的软件工程教学新思路,第四部分进行总结。

2国内外现行有效软件工程教学方法

为了解决以上提到的软件工程教学中存在的不足,目前,国内外已经提出了多种教学方法来改进软件工程课程教学。范锐⑤等人提出了基于“做中学”的教学理念的“项目驱动、案例教学”的软件工程教学模式,其教学理念认为软件工程教学不能单纯依靠理论讲解,强调实践对于软件工程教学的重要性,在学生的实践过程中,采用项目团队方式进行项目开发,学生分组分工,明确每个人所承担的职责,以此培养团队意识。“项目驱动”的教学方式,将整个软件工程教学过程包含于一个完整的项目之中,学生通过完成项目学习和掌握软件工程的包含的知识,实现对知识的掌握和应用。

陈建国⑥等人针对传统以教师为主的软件工程教学方法提出了改进,在传统的软件工程教学中引入了集体工作、实验、案例学习、合作教育相结合的软件工程教学方法,详细地论述了这四部分对软件工程教学作用以及对学生掌握软件工程方法的帮助。采用了合作教育的方式,学校和企业合作为学生提供真正的商业软件开发的机会,增强学生理论与实际的联系,使得软件工程教学中的项目管理、软件过程、质量保证等不再那么抽象难于理解。

近年,国外对于软件工程教学方法中存在的不足提出了不少有效学习方法,其中相当一部分方法着重强调了协同工作⑦⑧⑨在软件工程教学中的重要作用,在教学中分成多个小组,使学生加入其中,这些小组的组织结构与组内分工与实际的项目开发小组完全相同,这样学生在学习的过程中完全按照实际的工程开发的需要进行学习,使得学生学习中能充分掌握软件工程的方法、原则等的实际应用。此外,还提出了一些其他软件工程教学的有效教学方法,如使用Liu⑩形式化方法教学;Deveaux豘等提出专注于软件开发过程中的文档,Deveaux认为在教学中很难获得实际的足够大具有开发意义的项目,而文档的学习却可以使学生充分了解软件工程项目的基本原则,方法等内容;Li豙则成功地将统一过程方法应用于实际的教学当中;Pandey豛在教学中使用竞争的方法教授学生开发原则;更有一些在软件工程的教学中采用游戏的方法,豜使学生充当游戏中项目小组的项目经理的角色来学习软件工程。Scott豝等人在本科生的软件工程教育中采用了开源工具,并将之整合到软件工程课程中,通过学生的反馈对比,表明此种方法获得了很好的效果。

3角色体验与工程文档结合的软件工程教学方法

3.1国内软件工程教学现状

在实际的课程教学中,运用了案例开发,与企业合作等方法,并结合国内外其他一些有效的软件工程教学法后,我们发现学生在有限的时间内所能理解的软件工程知识相当有限。在对计算机科学专业的学生进行调查时,我们发现大约80%学生对大三进行的软件工程课程没什么兴趣。他们认为那只是枯燥的理论课学习和繁琐的文档编写。在前两年专业基础课学习中,他们几乎没有接触到文档编写,大部分项目的完成都是在草稿纸上设计然后直接进入程序编写阶段。他们认为这样可以一步到位,省去很多繁琐的细节。当然,正如我们前面提到,在本科教学中,学生在课堂上能实现的项目只能是中小型项目,复杂性低。学生无法感受到缺乏软件工程流程中首要的基础工作而可能造成的困难和严重的后果,所以学生们大多认为写各种各样的文档是在浪费时间。而对于教师来说,到大三软件工程课时,在没有大型项目做支持的情况下,再教导学生编写文档的重要性,似乎没有说服力,也很难扭转学生已经形成的直接编程的习惯。所以在计算机学科的学习中,我们大胆改革教育的方式并修订了阶段性的培养目标,形成一种潜移默化提升学生综合能力和水平的模式。在本科生进入大专院校就读后,计算机专业课程,尤其是编程课程的项目设计上需尽早地让学生接触到软件工程知识的基本概念和方法。从大一专业课开始,学生们就需要开始完成简单的项目。如果教师们可以从一开始就让他们了解到软件工程的生命周期,接触到软件工程流程中的各个步骤,从简单到复杂地进行实践,到大三的软件工程课时他们就会对这些知识已经有所了解,并不会感觉到枯燥,因为在前两年的学习中他们一直都使用这些方法,已经养成了良好的软件工程的习惯。

3.2基于文档撰写的潜移默化式教学法

我们经常只会在软件开发或维护过程出现问题时才意识到那些被忽略的文档的重要性。在我们的调查中,软件工程师们大约有60%以上都认为自己的文档的编写能力只是一般,有些甚至不会撰写文档(见表1)。很多工程师在学校并没有受到专业的训练,只有到工作中才开始慢慢学习与实践,但是经常由于时间有限,项目截止日期逼近而只好疏于对文档的编写或是只能牺牲其质量。如果我们在本科教学中尽早地让学生接触到各类文档,在撰写项目文档的过程中,学生不但能学习到软件工程的流程,也能把撰写文档的技能锻炼熟练,更重要的是他们会渐渐地把文档的撰写与管理当成一种习惯,当成一种必须。这样,无论是大型项目还是小规模项目,他们都会用一定的软件工程流程来完成。一开始的小项目中,也许他们并不能理解为什么要撰写那么多文档,但当他们到高年级创建相对复杂的项目时就能体会到文档的好处。他们就能领会,计算机软件并不只是程序,还应该有一整套文档资料。这些资料都是在开发过程中产生出来的,对软件管理人员,开发人员,维护人员,测试人员,客户,包括程序员自己都是必不可少的。那么如何开始这种潜移默化式教学法呢?教师们要对所有四年的专业课程进行分析,总结出需要参加这个软件工程教学计划课程和项目。加入到这个计划里的课程教师要设计符合这个计划的项目,并将文档撰写作为对学生必须的要求。在整个计划中,建议提供一套完整统一的各类文档的模板以供学生们使用,包括软件需求说明书,软件设计说明书,软件测试说明书,项目开发计划书等。这些模板要一致,学生在所有课程中要使用一致的模板,由简化版到完整版,低年级的学生先使用简化版的模板,让他们渐渐地学习撰写文档。比如一年级的项目可以只要求写软件需求说明书。在模板的设计中,最好是和企业界运用的文档保持一致,然后进行简化,给学生提供一种他们可以胜任的文档模板,然后逐年增加内容,最终可以与业界使用的文档保持一致。这个计划的实施需要得到计划内课程教师们的认同,通力合作,把学生四年的学习列入计划,并随时进行监督。经过四年的训练,学生的写作能力一定能得到大幅度提高,对软件工程的认识也会非常深入,毕业后能够胜任商业软件和应用软件的开发要求。

3.3基于角色体验的软件工程课程教学法

上面提到的文档式教学法是为了训练学生创建各类软件工程文档的能力。在课堂项目中,由于时间有限,一个学生往往不可能完成整套文档的撰写。在低年级阶段,在小型或中型项目中,学生学习了软件需求和软件设计文档,学生应该可以单独完成。但当项目变得相对复杂,大多课程项目都是以团队合作的形式来完成。教师通常知道哪些同学组成一个团队,但并不清楚或关心这些同学在项目组里担任的角色。这样,在四年的学习中,有些同学在项目组里只保持着一种角色,如只担任了程序员或测试员,并没有机会对各个相应的角色进行体验,导致他们知识的不全面。与文档教学法相结合,我们提出一种叫做角色体验的教学法,和文档式教学法同步进行,一同潜移默化地将软件工程知识注入学生脑海。所有加入计划的课程要统一安排项目组成员,目的是让每个学生在这些课程项目完成的过程中能体验所有的软件工程角色,并完成这一角色相对应的文档。这样不但训练了每个学生各种文档的写法,让学生了解了软件工程生命周期整个团队要进行的工作,而且锻炼了学生互相合作的团队精神,避免学生在团队中只依赖于几个学习相对比较优秀的学生来完成项目。假设我们要训练学生四个角色:项目经理,系统分析设计师,程序工程师,和测试工程师,我们需要至少四门课程加入此计划。如图-1所示,四个学生分为一个项目组,经过这四门课程项目的训练,他们可以完成这四个角色的训练,学会四种文档的撰写,体验各个角色在软件工程流程中的职责。如果要增加角色和文档种类的话,可以适当调整学生团队组员数目与职责。经过这样的训练,学生对团队合作一定会有更加深入的认识,也能提高队员的沟通能力,以改善毕业生在企业界缺乏沟通能力的现状。

经过四年的文档与角色的潜移默化式训练,一定能大幅提高学生的软件工程能力。相比单纯的一到两门软件工程课程,学生对软件工程的理解要深入得多,实践能力也会大幅度提高。由于计算机科学专业课程设置并不像软件工程专业对软件工程的教学那么有针对性而且课时较少,所以这种方法尤其适合计算机专业的教学。

4总结

本文对国内外软件工程课程的教学进行了系统的研究,深入地分析了目前软件工程教学存在的问题和挑战,探索了角色体验和工程文档应用于软件工程教学的新方法和新思路。这种教学方法使学生在专业课学习过程中不断积累软件工程知识,更好地理解软件工程开发的理论、方法、过程,具备较好的理论与实践结合的能力,提升学生协同分工和集成创新的能力。本学校计算机科学专业正在进行这种教学方法,意在培养更多适应业界需求的软件开发专业化的人才。

猜你喜欢
文档方法课程
《无机化学》课程教学改革
有人一声不吭向你扔了个文档
数字图像处理课程混合式教学改革与探索
软件设计与开发实践课程探索与实践
为什么要学习HAA课程?
基于RI码计算的Word复制文档鉴别
可能是方法不对
用对方法才能瘦
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
四大方法 教你不再“坐以待病”!