推荐阅读:软件工程在软件开发设计实训课程中的应用 笔者所在学院的软件工程系是成立于2005年的新专业,为校级特色专业。近年来,随着对软件工程特色专业建设进程的推进,课程体系日趋完善。针对软件工程学科具有理论多且实践性极强的特点,本系较大幅度地加大了实践类
软件工程在“软件开发设计实训”课程中的应用
笔者所在学院的软件工程系是成立于2005年的新专业,为校级特色专业。近年来,随着对软件工程特色专业建设进程的推进,课程体系日趋完善。针对软件工程学科具有理论多且实践性极强的特点,本系较大幅度地加大了实践类课程和环节所占的比例,“软件开发设计实训”便是其中很重要的一门实践课程。由于软件工程学科发展速度很快,在软件产业不断发展,全国对高素质的软件人才的需求量激增的形式下,迫切需要研究和探索实践类课程的教学模式,激发学生学习兴趣,以更有效的手段和方式提高教学和指导质量,为培养更加符合社会实际需要的软件开发人才打下坚实基础。在我校教改基金的资助下,依托软件工程教学团队,本文对将软件工程应用于“软件开发设计实训”课程的教学模式及主要措施进行探讨。
1 选择适当的软件工程过程
“软件开发设计实训”课程的主要目的是使学生学会用面向对象的设计方法设计实际系统。结合软件工程学科的发展和应用现状,软件开发过程主要采用RUP(Rational Unified Process,统一软件开发过程)的方式组织软件开发。RUP是风险驱动的、基于Use Case(用例)技术的、以架构为中心的、迭代的、可配置的软件开发流程。
RUP分为初始、精化、 构造和交付四个阶段,各阶段涉及多种工作流【1】。RUP的核心工作流主要包括:
需求捕获工作流:需求捕获通过对问题的理解和分析,确立问题涉及的信息、功能和系统行为,将用户需求精确化、完全化。需求的焦点主要在初始和精化阶段,在精化阶段后期,需求捕获的工作量大幅下降。
分析工作流:分析的主要工作开始于初始阶段的结尾,和需求一样是精化阶段的主要焦点。精化阶段的大部分活动是捕获需求,分析工作与需求捕获在很大程度上重叠。
设计工作流:设计的主要工作是位于精化阶段的最后部分和构造阶段的开始部分的主要建模活动。系统建模最初的焦点是需求和分析,在分析活动逐步完善后,建模的焦点开始转向设计。
实现工作流:实现(实施)是关于把设计模型转换成可执行代码的过程。从系统分析师或系统设计师的角度看,实现工作流的重点就是完成软件系统的可执行代码。实现工作流是构建阶段的焦点。
测试工作流:测试是一项相当主要的工作。测试工作流贯穿于软件开发的整个过程。它开始于软件开发的初始阶段,而细化阶段和构造阶段是测试的焦点。测试是为了找出程序中的错误与缺限,而不能证明程序无错。
RUP就像一个元过程,通过对RUP进行裁剪可以得到很多不同的开发过程,非常灵活,所以可以将其按本课程需要进行精简,从而把深奥的理论指导融入具体软件项目的开发设计中,让学生更加深切地体会到什么叫学以致用,消除畏难情绪,培养和增强在软件开发设计中自觉遵从软件工程思想的习惯。本课程使用的CASE(Computer Aided Softdash;—《软件需求分析规格说明书》作为本课程的起点来进行,需求捕获工作流便只需粗略进行。由于本课程侧重于软件开发过程的分析工作流和设计工作流,对实现工作流和测试工作流也只作粗略涉及。
每个项目小组通常为3到5人,分组时采用了优势互补的方式,注意合理搭配,尽量让每组各个成员具有不同的优势能力,并让其民主推选一名组长负责组内的组织和协调【3】。
教师的项目贯通案例教学分阶段间插在学生实践过程中,每介绍一个阶段的RUP理论,就紧跟几次课的学生实践环节,如此交替进行,当教师的教学案例施教完毕,学生的项目也同步进行到最后阶段。
项目进行中模仿软件公司的例会形式,定期由项目小组长召开小组讨论会(如每周一次),对最近这段时间的项目进展情况和技术问题进行讨论。每个开发设计阶段结束时教师均要求各小组给出相应的文档,且每个阶段完毕要进行一个模拟的里程碑式的评审(教师参与作为评审团的一员)【4】。
教师还应在课程即将结束的最后课时中对各小组的项目完成情况及普遍存在的共性问题作一个分析总结,并让各小组组长总结本组项目完成的经验教训,以利于同学之间取长补短,活跃思维,提高分析总结问题的能力。
4 依托教学团队,理论及案例部分采用轮流授课法
笔者所在的软件工程系于2009年底成立了软件工程教学团队。团队兼顾了职称、学历、教学、科研的合理搭配,由有大型项目开发和管理经验的老教师提供指导来提升年轻教师的教学能力,并让其参与到科研项目中积累项目经验。本课程的任课教师均由该团队中选出。本课程所用的《软件开发设计实训指导书》的编写由各任课教师分工完成,每人负责完成一章内容。本课程每个教学班安排30人左右,各教学班的教师全程负责该班整个课程的实践指导环节。而理论及案例讲授部分的教学则采用轮流授课法,实施方案是每个阶段的课堂讲授由编写实训指导书的相应章节的教师对全体教学班集体授课,其他教师同时到场辅导。具体各阶段的课堂讲授内容安排如下:
1)RUP总论以及课程概述
2)设计模式
3)常用的软件架构风格及适用情况分析
4)对象持久化与数据库设计
5)面向对象实现及文档编写与整理
对应进行的学生的各阶段实践任务如下:
1)按既定方式确定各小组成员和组长,并且重新审核各组在先导课程“软件需求分析实践”中的最终成果《软件需求分析规格说明书》,进一步完成分析模型,得出用例图,分析类图,序列图及协作图。这一阶段学生需提交分析模型文档。
2)按照设计模式重新设计类。这一阶段学生需完成两个任务:一是实现设计模型中的具体设计类,具体要求学生:使用设计模式和机制;创建初始设计类;确定持久类;定义类可视性;定义操作;定义方法;定义状态;定义属性;定义依赖关系;定义关联;定义内部结构;定义泛化关系;解决用例冲突。二是完成用例实现的设计,主要设计模型内的协作关系,以设计类及其对象为基础,描述各个特定用例的实现和协作。这一阶段学生需提交设计模型、类图和用例实现。
3)完成架构设计。这一阶段学生需要设计包结构,完成系统设计模型图的实现子系统、接口设计类及架构模型(组件图),重新审查用例模型,得出用例模型的架构视图。这一阶段学生需提交子系统设计文档、接口设计文档及架构模型文档。
4)根据持久类以及数据库知识对数据库进行设计(包括字段编码设计)。这一阶段学生需提交数据库设计文档。
5)本课程的最后阶段。完成实施模型(部署图);完成界面以及输入输出(报表等)设计;完成具体子系统的编程工作,并进行二次迭代重新审核前面的设计部分;整理测试报告;整理文档并编写软件使用说明书。这一阶段学生需提交组件图、部署图、输入输出设计说明及具体子系统代码执行程序。
5 考核方式强调过程考核,开发设计能力与书写文档能力并重
本课程的实训目标是使学生能综合运用所学的知识进行中小型应用项目的软件开发设计。为此,我们提出了本课程考核的指导思想:重视实训过程,看重软件开发设计能力的提高,采用复合考核的方式,课程成绩由平时考核、过程考核和项目验收答辩成绩组成。重点突出“会不会做”,强调对学生的实际开发设计能力考核,同时注意防止轻视书写文档的观念。这种考核方式不但能更客观地反映学生的学习情况,还能引导学生有意识地加强软件开发设计技能的培养,开发设计能力与书写文档能力并重,更利于达到预期的教学效果。本课程具体的课程考核成绩组成如下:
1)平时成绩*10%(考勤成绩*50%+小组开发设计工作中的合作精神表现*50%);
2)阶段考核成绩*60%(五个阶段,各阶段的能力表现及提交的文档各占20 %);
3)项目验收成绩*30%(项目文档汇总整理占50%,项目答辩50%)。
6 结束语
“软件开发设计实训”课程是软件工程专业实践类课程中非常核心的一门,其实践性和综合性都很强,能集中训练和提高学生进行软件项目开发和设计的实际技能。其教学实施过程不应被视为只要学生针对项目要求能编写出相应的软件即可,而更应注重软件开发设计过程的方法和技能的培养,以培养具有软件工程思想的真正符合社会需求的软件人才。本课程应紧随软件工程学科的发展而不断更新。在今后的课程开展过程中,其教学模式和措施还需要不断创新、总结和改进,需要持续不断地研究和探索。