软件工程专业学生的文档能力培养

2014-10-27 22:14杨珂雷开彬杨玉涵
计算机教育 2014年10期
关键词:项目驱动软件工程课程设计

杨珂 雷开彬 杨玉涵

摘要:文档是软件产品的重要组成部分,但在目前的软件工程教学中,对学生文档能力的培养仍然欠缺有效的方法。文章首先分析学生文档能力不足的原因,在此基础上提出对学生文档能力培养的基本要求,探索在项目教学法中着重培养学生文档能力的教学新方法和新思路,总结能够提高学生文档能力的有效方法和技巧。

关键词:文档能力;软件工程;课程设计;软件创新;项目驱动

0、引言

目前,软件工程课程教学中普遍存在着重代码、轻文档的现象,而在实际的软件工程开发实践中,一般认为代码的工作量只占整个工程工作量的30%左右,而相关的完整、有效的各种文档,包括设计文档、算法文档、说明文档、维护文档等才是整个软件工程的核心所在。为了加深学生对软件文档的正确认识,培养学生软件文档的编写和审核能力,增强学生的软件工程能力,我们必须转变教学观念,在教学过程的各个环节中突出文档的重要地位,强调设计对于软件的正面作用,将各种统一、标准、高效和实用的文档设计和撰写方案融入课程教学中,并且与软件工程理论和代码编写结合,形成完整的理论、算法、代码和文档并重的教学新方法。

1、文档能力的重要性及现状

软件产品被定义为包括程序、数据及其相关文档的完整集合。由此可见,文档是软件产品中不可或缺的重要组成部分。作为软件工程过程中的重要里程碑和有效的交流工具,文档不仅能够帮助开发人员掌握自己的工作进度,方便团队中的所有成员理解和改进代码,还能帮助项目管理人员对软件开发进程进行有效控制和管理,进而提高软件开发的效率和质量,改进软件开发过程。

在目前实际的课程教学中,虽然引入了案例教学、校企合作等方法,也结合了国内外一些有效的软件工程教学方法,但实际教学效果却远远跟不上现实中软件行业的实际需要。通过调查发现,大部分学生并不能理解文档在软件工程中的重要地位,不知如何编制规范有效的文档,如何使用和管理文档。经过了解、调查和分析,造成这种现状的原因主要有3个方面。

(1)在前两年的专业基础课学习中,所有程序都是经过简单设计后直接映射为程序,学生没有接触过软件文档,缺乏对思维逻辑的条理性强化。

(2)高年级课程中的项目复杂性不高,学生无法意识到缺乏有效的文档给项目带来的深远影响。教师虽然反复强调文档的重要性,但由于学生的经历和经验有限,很难引起共鸣。

(3)软件文档本身的多样性、复杂性和高质量要求,使文档编写成为一项艰苦和枯燥的劳动过程,进一步加重了学生对软件文档无从下手和望而却步的感受。

2、文档能力培养的内容和要求

我国于2006年发布了国家标准《计算机软件文档编制规范(GB/T 8567-2006)》(以下简称《规范》),作为软件开发人员工作的准则和规程。鉴于计算机系统的多样性,该标准一般不涉及整个系统开发中的文档编制问题,而仅仅是软件开发过程中的文档编制指南。因此,考虑到教学适用的软件项目复杂度以及学生的技术能力等限制因素,文中涉及的文档能力仅以《规范》作为指导。软件工程专业学生文档能力包括文档编写能力、文档审查和评审能力。

2.1 文档编写能力

软件文档的编写是保证软件质量的重要措施,也是软件维护的主要依据。因此,一定要注重培养学生的文档编写能力,使学生能够严格按照软件工程规范的要求,遵循常见软件文档的规范,充分利用常用的CASE工具,准确地描述用户需求、设计思路与算法,结合文字、图形等多种展现形式,形成规范性的文档记录。为了保证软件文档的质量,根据《规范》,在培养学生文档编写能力的过程中,应注意坚持以下几点要求。

(1)针对性:在文档编写前应注意区分不同文档针对的读者对象群体,根据不同类型、不同层次的读者,编写更适应他们需要的文档。

(2)文档种类间内容的重复性:不同种类的文档内容相互之间允许存在一定的重复,为了方便读者,每种文档应该自成体系,尽量避免在读一种文档时必须参阅另一种文档的现象。

(3)规范性:所有的文档必须按照《规范》规定的内容格式编写,一般不得变动章节的标题和顺序,各层次的条目可以根据实际需要细分、缩并或省略,新增加的条目应加在原章节条目内容的后面。

(4)精确性:文档的描述应该尽量准确,不能出现多义性的描述。另外,同一项目中几种文档需要重复的内容应该协调一致、没有矛盾。

(5)完整性:任何一篇文档都应该是完整和独立的,可以自成体系。

2.2 文档审查和评审能力

阶段评审是软件工程过程中的重要组成部分。软件生命周期中的各个阶段,都应该坚持严格的阶段评审。由软件文档的重要性可知,文档评审也是阶段评审的重要工作内容。因此,对学生文档能力的培养,也体现在对学生文档审查和评审能力的锻炼和培养上,这可以加强学生对规范性文档标准的认识和理解,进一步提升学生的文档编写能力。文档审查和评审能力的培养主要要求学生能对自己或者他人撰写的软件文档,从文档结构的规范性和合理性、文档内容的完整性和一致性、语言表述的准确性等角度进行分析和判断,并作出合理化的建议性描述。

3、文档能力培养实践

软件文档是软件产品的重要组成部分,也紧密依托于软件产品,要培养学生的文档能力,必须在项目任务中加以锻炼。为此,我们把对学生文档能力的培养融入项目开发与管理的整个过程中,以项目为导向,以实践为驱动,强调文档在软件整个生命周期中的地位和作用,坚持文档的规范性、全面性和准确性要求,坚持严格的阶段性评审和复审,培养学生重视文档、编写文档和审查文档的综合能力,主要从几方面对软件工程教学作出改革和创新的尝试。

3.1 搭建开放的工程实践环境

实践环境是保证实验教学和质量的基本条件,对于软件工程课程显得尤为重要。项目开发不是简单的程序设计,而是软件工程全过程的综合性实践,应该建立和配置相应的软件工程实验环境或实验中心。同时,就软件工程而言,它关注的是大型程序的构造,强调团队合作。就学生的认识而言,纠正软件开发的个人英雄主义和单兵作战的错误思想极其重要,因此这就要求必须有一个支持团队协作、数据共享的信息平台。endprint

西南民族大学计算机科学与技术学院于2011年8月创建了学生软件创新基地。基地实验中心配置有专门的文档服务器,搭建了软件协作开发与管理平台,学生在这里拥有良好的软件开发和团队合作环境。基地提供了一个开放式的工程实践平台,希望得到进一步学习和实践锻炼的学生可以自愿加入这个团队,由专门的指导教师根据学生的特点和技术特长进行分组,组织和指导学生进行软件项目的开发实践。

3.2 教学环节的改革与实践

在教学环节上,我们也必须对软件工程课程的教学体系进行工程化改造,以便逐步建立工程化实践教学体系,着力培养学生的工程化开发能力和职业素质,进而形成一个将理论基础、实验教学、工程实践融为一体的整体化培养机制。同时,必须把文档的重要性及早在学生的意识观念中建立起来,避免“重代码、轻文档”的错误观念先入为主,并在随后的教学中继续逐步提升学生的文档能力。

3.2.1 C语言课程设计

c语言课程设计是计算机科学与技术学院从2008年上学期开始新开设的一门专业选修课,目的是进一步增强学生的实际动手编程能力,逐步培养并提升学生的逻辑思维能力。

作为大一上学期程序设计课程的延续,该课程不仅强调学生对C语言中基本语法的掌握程度和动手编写代码的能力,同时更加注重学生逻辑思维能力的提高以及对解决问题思路和方案的清晰描述。在讲解疑难题目时,通过绘制流程图或者列出辅助表格帮助学生把握规律和理清思路;在纠正学生程序中的错误时,不直接给出正确答案或告诉学生应如何修改,而是先请学生讲出自己的思路,再按照该思路梳理每个步骤间的逻辑关系和内在联系,引导学生重新审视自己的设计,找出其中的错误根源。

通过此过程,学生逐渐认识到语法和代码只是一个程序中最基础的部分,而算法和思路才是整个程序的灵魂,为今后重视前期设计做好铺垫。同时,学生也开始逐步尝试和学会使用算法流程图等工具描述和记录他们的解题思路,而这些工具也正是后期学生接触到软件工程课程甚至进行软件项目开发实践时用于完成设计和编写文档的利器。

从笔者5年来的教学历史和教学经验看,大部分学生用4-6周时间就能在很大程度上对上学期所学的c语言基本语法加以巩固,完成其中相对比较基础的简单计算题,后期则逐渐把学习重点转移到知识扩展和能力提升上。C语言课程设计巩固了学生的程序编写能力,同时让学生潜移默化地认识到程序设计并不仅仅是编写代码,为其今后正确认识软件工程和培养其文档编写能力打下了良好的基础。

3.2.2 软件工程概论

软件工程概论是一门重要的专业基础课程,具有很强的理论性和实践性,其教学目标是让学生熟练掌握软件开发的原理、技术和方法,具备独立或合作完成软件项目开发所需要的逻辑思维、沟通合作、表达写作以及组织管理能力。然而,由于该课程内容多,涵盖面广,并且包含了大量抽象的概念和原理,容易使学生感觉到枯燥乏味;另一方面,迫于课时压力,教师在授课过程中往往会降低教学难度,将课堂讲授的重点放在基本概念和原理上,没有机会让学生接触到较为真实和复杂的项目。再加上很多学生长久以来持有软件开发就是编写代码的错误观点,轻视分析、设计、测试与管理,导致课程的教学目标很难达到。

从2010年起,计算机科学与技术学院为软件工程概论课程增加22个上机课时,同时引入以项目为导向的软件工程教学模式。一方面,在课堂讲授上,教师结合实际案例和真实的开发经验和教训为学生讲解抽象的概念和原理,便于学生接受。同时,根据学生的自愿选择有指导性地将所有学生划分为若干小组,每个小组独立承担一个项目。另一方面,教师根据教学需要划分软件开发的各个阶段和相应的阶段任务,由各个小组内部协调细分到每位组员。每个小组在协作完成该阶段的任务后向教师提交阶段性成果,由教师进行审查和记录。

在项目驱动的特定教学环境中,学生在实际项目的驱动下,带着问题学习理论和开发技术,在项目实践中锻炼思维能力、问题求解能力和处理复杂任务的能力。由于文档贯穿于软件开发的整个生命周期,学生在进行软件开发的过程中,查阅了大量关于文档编写的资料,掌握了软件文档编写的基本框架结构和一些文档辅助生成工具的使用技巧。教师在收到学生提交的文档后,对文档进行仔细审查并及时提出修改意见和建议,帮助学生提高文档质量。对于其中典型的和有代表f生的设计开发文档,教师还可以组织全体学生在课堂上以讲解——提问—答疑的形式一起进行讨论和评审,既活跃了课堂气氛,拉近了师生之间的距离,又加深了学生对于软件工程过程的认识,提高了学生的文档能力。

3.2.3 学生创新实践

项目教学、案例驱动等新教学模式的引入,使学生通过课堂上的学习和项目上的体验,真实地感受到软件生命周期从需求采集、建模设计到最后软件测试中的各个环节,帮助学生建立起对软件工程过程的感性认识,增强学生的文档能力,但同时我们也必须要认识到,学生通过课程学习和体验到的相关知识,与他们毕业后即将从事实际行业的要求和规范之间,仍然存在着很大的差距。Nurkkala和Brandle对现行的软件工程教育和行业内的现状进行了深入研究和对比分析,指出因为受到实际教学环节中各种因素的制约,适用于教学的虚拟项目和行业中的实际项目相比,差距主要体现在没有真实产品、持续时间短、流动性高、复杂性低、缺乏维护和没有实际客户6个方面,而项目上的差异也最终导致了学生对软件产品、软件工程过程认识不足,并形成了轻视文档,认为开发过程的结束就是整个软件项目的终结等错误观念。

学生软件创新基地则部分克服了上述这些因受到教学安排等限制而导致的不足之处,因而也在一定程度上解决了教育现状和行业要求严重脱节的问题。首先,因为学生软件创新基地相对独立于学校规定的教学环节安排,因此具有较长的持续时间,从学生的角度而言,学生可以根据自己的爱好、特长在教师指导下自愿加入或退出创新基地,有比较充分的时间参与项目实践,提高文档能力和项目管理能力;从项目的角度而言,因为不再受到学期、学年的限制,项目开发周期可以更长,甚至可以包含软件的上线测试和运营维护等开发后续阶段。其次,创新基地中的学生是跨年级的,已有实践经验的学生和新加入的学生可以在基地中共存,甚至在同一项目组中一起承担项目子任务。因此,人力资源相对稳定,新旧人员可以平稳过渡,学生通过讨论、交流、文档评审等互动活动,从实践中体会项目开发、文档撰写过程,令经验得到积累、延续和不断扩展。最后,由于人员稳定性较强,技术、经验能够得到积累,因此能够完成项目的复杂度也可以适当地逐渐提升,而开发出来的软件产品也可以进行维护。

学生在创新基地的工作和软件工程概论课程基本类似,由于时间和人力资源更加充分,技术水平也有一定的积累,因此相应的区别主要体现在两个方面:①接触的项目更加复杂和真实,有时甚至是来源于校外企业的真实项目,开发周期也更长;②阶段评审尤其是文档评审也更加严格,有时一篇文档甚至要评审、修改、复审好几次。在这样的锻炼中,学生对自己的要求也更加严格,对文档的撰写方法和技巧更加熟悉,对文档的把握也更加准确。

4、文档能力培养成果

近4年来,通过在教学改革过程中的不断摸索和尝试,结合以项目为导向的“讲授——引导——项目演练——交流总结”教学模式,我们总结出一些培养学生文档能力的教学经验和方法,并初步取得了一些成果。

(1)一部分学生尤其是创新基地学生的文档能力得到显著提高,这些学生对于文档的结构、内容组织和安排、编写技巧等已有较好的基础,并且会使用一些常用的计算机辅助设计工具配合编写文档。

(2)到目前为止,创新基地的学生已完成校外企业级项目2个、自立项目3个,在2个开发项目过程中共产生大小40余篇软件文档,包括需求规格说明书、概要设计文档、数据库设计文档、用户手册、现场安装部署文档等,其中包含10余篇基本符合企业规范的正式软件文档。

(3)创新基地中的部分学生通过近3年的训练,在就业后具有较高的文档编制能力,对软件工程也有较深入的认识,并且具备了分析和设计软件的基本能力,得到了所在单位的肯定。

5、结语

文档对于软件工程的重要作用决定了对学生文档能力的培养是软件工程教学过程中一个非常重要的环节。一方面,教师要通过案例教学的方式让学生意识到文档的重要性,纠正“重代码、轻文档”的错误观念;另一方面,要结合项目驱动的教学模式在项目中加强对学生文档写作能力、审核和评审能力的锻炼和培养,帮助学生逐渐养成编制文档、评审文档、管理文档和使用文档的习惯,加深对软件工程的理解和把握,提高软件开发的综合素质和能力。endprint

猜你喜欢
项目驱动软件工程课程设计
“苏州园林:景致与情思”课程设计
A Study on the Application of Task—based Approach to English Vocabulary Teaching
依托工作室的软件工程实践教学研究
基于物联网项目驱动的嵌入式系统教学改革的研究与实践
基于“红色之旅”项目驱动的《调酒与咖啡》工作室制人才培养机制探讨
基于工程教育认证的《软件工程》课程教学质量建设研究 
关于如何创新和完善计算机软件工程管理的探讨
试论基于项目驱动的机械制图教学改革
关于完善课程设计教学及教学管理工作的思考