软件工程思想在VB课程教学中应用
2015-10-14覃能杰
覃能杰
中图分类号:G642.41 文献标识码:A 文章编号:1002-7661(2015)10-0008-03
一、引言
计算机软件复合人才的缺乏依然是我国计算机软件产业可持续发展的瓶颈,经过十几年的发展,传统的程序设计教学逐渐暴露出一个尖锐的问题:学生工作后,与软件企业的实际人才需求存在较大偏差。通常毕业生都要在软件企业里要经过半年以上的磨练才能达到编写实用代码的水平。而刚从学校毕业的学生基本无法直接参与编程工作,必须经一个月以上的培训才能在有经验的“师傅”的带领下进行基本的编码,半年以后才能开始独立编码。学生无法满足企业用人需求的地方往往是两个环节:软件工程素养和实践创新能力。项目开发与沟通技巧,项目的规划、进度控制、设计与测试等流程都需要良好的素质,因此软件工程理论教学与实践的脱节是其中的重要原因之一。另外,实践创新能力的缺乏表现为学生难以用创造性思维解决问题,难以突破传统的思维模式寻求创新思路。
VisualBasic(下面简称VB)作为一门面向对象的程序设计语言,具有简单易学、功能强大、应用广泛的特点,被公认为是编程效率最高的一种编程工具。VB程序设计是一门实践性很强的课程,要求学生既要学好理论知识,又要掌握实际操作技能,其目的是培养学生程序设计和简单的系统开发及应用能力。基于目前的现状,VB语言枯燥难懂,学生缺乏相应的背景知识。教师在教学过程中也缺乏一套良好的教学方法,使得这门课既难教又难学。软件过程模型、软件工程方法和软件工具已在广阔的行业应用领域得到成功的采用。在此,试图将软件工程理论与VB教学相结合,探讨如何引导学生从工程的角度解决程序设计问题,提高学生的综合素养。
二、软件工程基本理论
(一)软件工程定义
B.w.Boehm认为软件工程就是运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必须的相关文件资料。这里对“设计”一词应有广义的理解,它包括软件的需求分析和对软件进行修改时所进行的再设计活动。
IEEE说:“软件工程是开发、运行、维护和修复软件的系统方法”,其中,“软件”是计算机程序、方法、规则、相关的文档资料以及在计算机上运行时所必需的数据。
Faidey给出的软件工程的定义为:软件工程学为在成本限额以内按时完成开发和修改软件产品所需的系统生产和维护的技术与管理的科学。
《计算机科学技术百科全书》中的定义:软件工程是应用计算机科学、数学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本。其中,计算机科学、数学用于构建模型与算法,工程科学用于制定规范、设计范型(paradigm)、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。
上面是软件的几个定义,其实概括起来就是软件+工程。就是把工程学的思想应用于软件,但是软件工程又不同于其他的工程,它有它特别的地方。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。随着信息化的不断扩大,软件的范围已经越来越广了,越来越大了。所以有一个良好的软件开发方法,能有效的提高软件的开发效率。软件工程就是研究这一方面的。如同土木工程,建筑工程一样,软件也需要系统化,规范化,可量化的进行开发。
(二)软件工程基本要素
软件工程包括了三个基本要素:方法、工具和过程。
软件工程方法为软件开发提供了“如何做”的技术。它包括了多方面的任务,如项目计划与估算、软件系统需求分析、数据结构、系统总体结构的设计、算法过程的设计、编码、测试以及维护等。
软件工具为软件工程方法提供了自动的或半自动的软件支撑环境。目前,已经推出了许多软件工具,已经能够支持上述的软件工程方法。已经有人把诸多的软件工具集成起来,使得一种工具生产的信息可以为其它的工具所使用,这样建立起一种被称之为计算机辅助软件工程(CASE)的软件开发支撑系统。
软件工程的过程则是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。软件工程的过程定义了方法使用的顺序、要求交付的文档资料、为保证质量和协调变化所需的管理及软件开发各个阶段完成的里程碑。
(三)软件开发模型
软件生命周期是软件工程的基础,它由软件功能的大小决定的。要开发一个高质量的软件产品,首先要根据软件生存周期为各项开发的流程确定一个合理的框架,称为软件生存期模型或软件开发模型。
瀑布模型(Waterfall Model)也称线性顺序模型。瀑布模型把开发过程分成固定的、相对独立的各个阶段,每个阶段都有确定的、有限的任务,而且在各个阶段采用一些规范的开发方法和管理手段,力求保证软件质量和提高软件生产率。瀑布模型各个阶段的工作顺序展开,恰如“奔流不息、拾级而下”的瀑布,故而得名。软件开发的瀑布模型实际是对软件生命周期的模拟。
软件生命周期的阶段划分有多种方法。典型的阶段划分为问题定义、可行性研究、需求分析、概要设计(总体设计)、详细设计、编码与单元测试、综合测试、维护等八个阶段,总体由计划、开发和运行三个时期组成。
1.问题定义。问题定义阶段必须回答的关键问题是“要解决的问题是什么?”,通过系统分析员与客户的沟通交流,使双方对问题理解明晰化,得到双方都认可和接受的文档。
2.可行性研究。可行性研究阶段所回答的关键问题是“有可行的解吗?”。可行性研究比较简短,主要研究问题的范围,探索问题是否值得去解,是否有可行的解决办法,并对建议的系统做出成本效益分析。
3.需求分析。需求分析阶段必须回答的关键问题是“系统必须做什么?”,主要是确定目标系统必须具备哪些功能。系统分析员必须和客户进行充分的交流,诱导出客户对系统的需求,并且予以确认。需求分析阶段是重要而且是必不可少的阶段,否则到了开发后期将付出高昂的修改成本。
4.总体设计。总体设计阶段必须回答的关键问题是“概括地说,应该如解决这个问题?”,这个阶段也被称为概要设计。系统分析员使用系统流程图描述多种可能的系统,并从成本效益角度选择最佳方案,设计软件的结构。
5.详细设计。详细设计阶段回答的关键问题是“应该怎样具体地实现这样系统?”,其任务就是解法的具体化,即设计出程序的详细规格说明。
6.编码和单元测试。关键任务是写出正确的程序模块,程序员根据目标系统的性质和实际环境,选取适当的高级程序设计语言,把详细设计的结果翻译成用选定的语言书写的程序,并测试每个具体的模块。
7.综合测试。关键任务是通过测试使软件达到预定的要求。测试是为了发现程序中的错误而执行程序的过程,最基本的测试是集成测试和验收测试,具体方法有黑盒测试、白盒测试等。
8.软件维护。关键任务是使软件持久的满足客户需要。按照维护的性质不同,软件维护分为改正性维护、适应性维护、完善性维护和预防性维护。软件的可维护性是维护人员理解、改正和改进软件的难易程度,主要由可理解性、可测试性和可修改性决定。决定软件可维护性和可修改性的最终因素是软件设计阶段采用的方法和软件文档资料。
三、用“瀑布模型”理论指导VB教学
VisualBasic是一种可视化的编程语言,用于开发Win-dows环境下应用程序的工具,采用面向对象的程序设计方法和事件驱动方式的程序设计原理。VB是可以快速掌握的一种编程语言,相对VC等简单易学,开发环境友好便利,是初学者的首选入门语言,软件工程理论提供的软件系统开发的方法学,是指导软件系统开发的理论工具。而VB是面向对象的程序设计语言,是作为软件开发重要基础之一的计算机程序设计语言,它也遵循软件开发的一般规律。因而,将面向对象的软件工程的理论运用于VB程序设计是较为自然合理的事情,让程序设计同样遵循软件开发、运行和维护的一般规律。因此,在VB教学中融入软件工程的思想。不仅能巩固原木的概念、方法,还能让学生熟悉项目开发的流程。用工程的思想解决实际问题,对后续的其他计算机类课程也会产生积极的影响。
1.让学生意识到软件工程思想的重要性
软件工程是一门研究用工程化方法构建和维护高质量软件的学科,是软件行业在过去几十年的发展过程中总结出的经验和理论,具有较强的理论性和抽象性。而VB程序设计属于软件行业中的实践环节,从辩证唯物主义哲学的角度来讲,理论源于实践,而又反过来指导实践。
很多学生在接受软件工程思想时,往往有一种误解,认为只有编写大型软件时才需要用到软件工程中的理论,对于平时课堂上所学的小例子,则不需要高深的理论指导。甚至有人认为VB程序设计与软件工程是完全没有关系的两门课。这种认识是因对编程理论和实践之间的互补关系缺乏了解而造成的。其实软件工程中的思想,在编程过程中随处可见,尤其对于VB这样一门面向对象的高级编程语言。教师在进行教学时应注意培养学生的软件工程意识,让学生认识到软件工程思想的重要性和普适性。比如,在讲解变量时,可对软件工程中变量的命名规则加以介绍;学习函数时,在介绍函数的语法的同时,也应强调一下函数的设计原则,例如在一行内只写一条语句,并采取适当的缩进格式,使程序的逻辑和功能变得更加明确,否则会降低代码的可读性和可测试性;讲解类中成员的访问权限时,可以引申出软件工程中“代码隔离”原则。通过在讲解语法的同时,深入浅出地引入软件工程中的理论思想,使学生认识到软件工程思想的重要性,进而从一个较高的角度去认识程序设计。
2.了解软件是有生命周期的
VB作为一门实用的编程语言,是后续计算机类课程的基础。因此,教师在初步介绍VB的产生、发展和特点后,就应该引入软件工程的基本理论。首先让学生了解,软件是有生命周期的,一个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的时期,即软件除了编码之外,还有许多更重要的阶段。根据传统的软件生命周期方法,我们知道编码只是软件开发的一个很小的阶段,而且是处于实现阶段。
对于VB初学者来说,由于没有正式接受系统化开发方法的指导,往往会形成一个错误的认识,认为软件开发就是编码,即拿到问题后就着手编写程序。这种做法的不良后果初学者无法体会到,因为他们所面临的需要解决的问题,无论从规模,还是从难易程度而言,实在是太小了。所以在直接编写程序的过程中,大脑已经让初学者无意识地完成了问题的定义和设计过程。但是,这种侥幸的“个体化”做法对于复杂的现实问题的解决,即软件项目的开发是绝对行不通的。因此,必须从接触软件概念开始,就树立正确的开发观,为今后专业化开发打好基础。
3.强调软件需求分析和设计
在以往的VB教学中,教师常常先讲解程序设计的基本语句与结构以及一些常用控件。再举几个例子说明其使用办法,由于讲解的程序通常都是简单短小的,所以不会强调应该进行需求分析和设计。其实即使很小的程序也需要进行简单的分析和设计。在教师给出学生题目后,应提醒学生编程前先分析、设计。比如很简单的例子,设计计算长方形面积的程序,那么首先我们先明确需求:根据用户输入的长方形的长和宽,计算输出长方形的面积;那么接下来应该怎么实现呢,算法可以确定求出长方形面积-长×宽,再思考窗体、控件作为对象需要哪些事件、方法。所以不论程序的规模大小,最好能让学生学会用流程图来描述其步骤。
4.引导学生用软件工程中的思想解决实际问题
让学生认识到软件工程的重要性,最行之有效的办法就是用软件工程中的思想解决程序设计中的实际问题。再好的理论如不能应用于实践,也只能被束之高阁。相比起抽象的理论,学生往往更容易接受像VB这样具有强烈实践性质的课程。因此,教师在课堂上可通过难度适当的案例引导学生积极地用软件工程中的思想解决VB程序设计中的实际问题,这对于学生编程能力的提高具有很大的促进作用,同时也让学生更深刻的体会了软件工程思想的重要性和实用性。
VB程序设计中的很多问题都可以在软件工程理论中找到答案,下面以教学过程中典型的两个案例进行说明。
案例一:学生甲在用VB编写一个图书馆管理系统时遇到一个问题,系统在窗体A中以列表的形式显示了一个班级中全体学生的基本信息,当双击某一学生记录时,弹出窗体B,在窗体B中对该生的基本信息进行编辑,当关闭窗体B时,应同步更新窗体A中该生的基本信息。问题是,更新窗体A的代码应该在窗体A中调用还是在窗体B中调用?
显然,如放在窗体B中调用,在关闭窗体B的同时调用更新窗体A的代码,这种代码结构实现起来比较简单,因而是很多初学者的选择。但如果从软件工程中“低耦合,高内聚”的思想来看,在A中弹出B,在B中更新A,会导致两个窗体交叉引用(A引用了B,B也引用了A),属于较高级别的耦合;而如果在A中弹出B,然后在A中更新A,则两个窗体之间仅是单向引用(A引用了B,B没有引用A),因此可以得出结论,在窗体A中执行更新代码是较优选择。
案例二:学生乙想用VB编写一款能够在线对弈的象棋程序。该生平时动手能力较强,考试成绩也非常优秀,但在处理这个实际问题时却感到无从下手,不知道第一步该做什么。通过对软件工程理论的学习,该生逐步了解了软件开发的正常过程,从需求分析开始入手,到类图的设计,再到代码实现、测试,最终成功地完成了该程序。
通过软件工程中的思想理论解决VB程序设计中的具体问题,使学生感觉到,软件工程不再是一种“看不见、摸不着”的空中楼阁,而是一种行之有效的解决实际问题的手段,从而可达到“学以致用”的教学目的。
四、结论
总体而言,程序设计是一个完整的过程,而不是我们通常认为的程序设计就是“编写程序”,它只是整个程序设计过程中的一个环节而已。从实践来看,“编写程序”这个任务在整个程序设计当中占有的比例,往往不到三分之一。在一个项目中,我们往往是将更多的时间用在前面的“问题分析”与“设计算法”以及后期的编写文档等等。
将软件工程理论思想与方法前移应用与V B课程设计的项目教学方法,改变了过去课程设计与实际应用系统开发脱节的教学模式,尽早培养了学生系统设计的思想,对后续课程的教学与将来的社会工作实践实际都起到了比较好的教学效果。特别表现在工程应用设计、系统测试与技术文档的书写等方面,全面提高了学生综合应用能力与创新思维的培养,在实践的教学效果上,取得了比较满意的效果。
责任编辑 李翔