摘要:针对应用型示范高校培养应用型人才的需要,在软件工程的教学中引入了系统设计这一实践方法,加深了学生对软件工程理论的深入理解,同时提高了学生的解决实际问题的能力。
关键词:系统设计;软件工程;软件生存周期
中图分类号:G424 文献标识码:A 文章编号:1009-3044(2011)28-7029-02
《软件工程》是计算机专业的一门核心课,其课程教学对该专业的学生实践能力有重要的意义。但基于软件工程自身理论的抽象性与应用的重要性的特点,在教与学的双向过程中存在不少问题,致使教学效果差强人意。如何提高《软件工程》的教学水平和质量,是广大国内外学者共同探讨的话题。笔者从《软件工程》教学中存在的问题出发,在教学方法中采用系统设计加强实践环节、激发学生的学习兴趣以及改善教学效果等方面进行研究。
1 《软件工程》在教学中遇到的问题
1.1 流行技术与学生知识积累之间存在矛盾
现代软件工程内容丰富,基于UML的面向对象建模技术、以新型技术支持的软件度量方法、测试方法、Rational Rose工具、RSA等开发工具。在软件管理方面,CMM、配件配置以及软件过程管理等。这都是些理论性很强但又很实用的知识,但学生接受起来相对比较困难,并且在实际教学过程当中,没有足够的课时全部讲到。怎样寻求一种行之有效的方法来解决学生的知识积累与目前计算机技术发展之间的矛盾一直困扰教、学双方的难题。
1.2 教学实践环节存在难度
在教学中,如果只是单纯的进行枯燥模糊的教学,而学生没有亲身开发经验,仅凭课堂和书本得来的知识理解软件工程很难,以至于学完之后觉得用处不大。但是在学生走向工作岗位后发现软件工程理论是非常重要的,但是为时已晚。为了既让学生能够亲自受益,又能将软件工程理论切实掌握,并且使学生认识和理解软件工程对软件开发的重要性,需要在学习期间完成一个中型左右的软件开发。但是若指定一些书本上的题目比如图书馆管理系统,这种系统开发枯燥,没有需求在驱动,再者这门课一般在大三下学期以后开设,学生在这段时间有的把精力放在考研上,不重视非考研科目的学习,学习《软件工程》的时间不充分,并不适合初次接触软件工程的学生的教学实践。
2 以系统设计为核心,驱动教学内容的改革
2.1 引入系统设计,改善教学方式
“软件工程”技术在高速发展,讲授的内容同样应该与时俱进,笔者认为在“软件工程”课堂教学内容和实践环节中强调面向对象方法,适当压缩结构化开发方法的教学时间,以此留出时间来介绍包括面向对象方法在内的一些新技术和方法,使学生尽快熟悉和掌握集成化CASE环境、软件重用及java与网络环境下的软件开发技术等。对那些既无实用价值也无发展前景的传统技术尽量少讲。同时要保持教学内容对先进技术的跟进,介绍一些目前已经推出或比较成熟的新方法,如基于组件的方法、面向Agent方法、面向方面的方法、净室软件等方法,以便开拓学生的视野和培养学生的创新意识与软件开发能力。
系统设计对学生的编写程序能力有巨大的提高,学生经过一个系统的设计与开发,能尽可能地体会软件工程的各个环节有更深的体会。因此在课程开始时,让同学们自行分组,选一个贴近现实的题目,去调研,亲自确立需求分析的内容,比如说学生成绩管理系统,学生们可以去教务处和教师那进行调研,结合自身做出一个符合实际情况的系统。
为了让学生进一步体会到公司的管理环境以及流程,将一个小组确定一个小的团队,这个团队由学生自由组合,规模为3-5人。从人员管理来说,4人员适量,少而精,软件开发不是开发人员的叠加,人员越多,开发进度、软件质量越快越高;要有良好的组织结构,合理的人员分工和有效的沟通,所以在这个团队的负责人担任着项目组经理的角色兼职开发人员,测试人员1-2名兼职文档编写人员和维护人员[1]。
2.2 “软件工程”与项目相结合,加强实践环节
对于“软件工程”的教学,实践环节显得尤为重要。在教学中,尽量利用一切可利用的条件来加强实践环节的实施。首先,软件工程教学应加强学生的分析与设计能力。在讲解软件工程理论知识的同时,教师适当地以一个小项目为例,要求每个学生从项目的可行性分析、需求分析、总体设计、详细设计、数据库设计等方面进行分析与设计。学生按照这个流程做项目,加强学生对所学理论的掌握,并初步具有对真实系统的分析与设计能力;其次,将案例教学引用到软件工程的课堂教学中,案例教学让学生置身于模拟的真实环境中,扮演不同的角色,身临其境,从一个真正的“工程师”的角度考虑问题,学习如何应用知识解决问题。从而培养了学生独立思考和解决问题的能力。
我们模拟真正项目的需求说明书的制定流程,让我们的学生根据自己的项目与学校或者其他组织的业务人员进行交流,明确这个项目过程要达到什么样的要求,要达到哪些技术指标,该部门现在运行的软硬件环境,及该部门可能会投入的人力、物力、财力的支持是怎样的情况,交付的时间等,当然我们在这个过程中,学生最应该弄清楚的问题就是系统的业务处理流程和完善的数据关系,而这些问题的解决可以采用软件工程介绍的需求分析的方法如结构化分析法等,根据业务人员的叙述,估计出系统的复杂度,结合自己的情况,确定开发该项目需要多长时间。然后整理成软件需求说明书。这样既学习了课本的内容,又锻炼了学生的能交流的能力,解决问题的能力。而这些能力在软件开发过程中是必不可少的[2]。
需求分析确定下来之后,接下来就要严格按需求分析说明进行系统设计,不能随意改动需求分析的技术指标,一旦出现改动要清楚地记录在系统设计说明书中。在开发过程中发现业务上的问题,要及时跟业务人员进行沟通,确保业务人员对业务流程的解释要保持一致,业务人员有责任了解软件的开发进展情况,保证软件存在的问题及时发现,免得造成NDwaBYyFvLmG/M4jhsktFw==灾难。
接下来按照软件工程的流程进行下一步的研发工作,学生根据已经掌握的开发语言编写代码。系统完成后就可以进行测试。严格意义来讲,测试环节在需求分析阶段就要有,但是我们现在的小组人员数目少,项目规模相对来说较小,在编码完成之后进行测试。测试时应该成立专门的测试小组,采用白盒测试、黑盒测试方法以及自动化测试工具对软件进行全面的测试。在测试过程中,要记录跟踪出错改错情况,做好文档写作工作[3-4]。
测试完成后,按照我们在需求说明书规定的验收准则,就可以交付给用户运行。
2.3 以软件工程的思想指导系统开发,增强学生的团队精神
软件生存周期是指软件从任务书下达后到该软件被淘汰的这段时间。软件工程把一个与软件相关的工作看作是一个工程,并且按照工程的标准管理整个流程。
通过项目实践,不仅强化课程设计,而且为他们做毕业设计奠定了基础。课程设计将学生分成若干个小组,每组一个题目,小组成员按照软件开发项目各阶段进行分工合作,这样锻炼他们的团队协作精神和相互沟通能力[5];毕业设计时应结合教师课题或市场设置实用性的题目,要求一人一题并按照工程化的方法进行实现;利用产学研项目让学生切身感受到软件公司的开发流程,人员组织及分工,这样也可使学生切实感受到该课程的重要性。
实践证明,该方法是有效的,经过一个团队的协作与努力,学生们都可以得到一定的锻炼,已经收到学生的真实反馈。
3 小结
根据文章的分析,我们可以看出,在软件工程教学中采用系统设计可以提高学生在以下几个方面的技能:第一,模拟现实IT公司企业里软件开发的实际的流程,锻炼学生的动手能力、与人交流协调以及实际应用能力,培养学生的科学实验素养与提高学生的创新能力;第二,改革软件工程教学,引进系统性的实验教学问题,打破课程之间的壁垒,形成系统的实验教学体系;第三,解决自主性、综合性、创新性实验的设计;第四,适应应用型人才培养的需要,构建以学生创新能力培养为中心的实验教学体系;第五,学生完成系统设计的同时,吸收了大量先进的技术以及前沿理论。
参考文献:
[1]