孙 可, 张晓芬, 李 晋
(沈阳师范大学 软件学院, 沈阳 110034)
毕业论文是高校人才培养计划的重要组成部分,是实现人才培养目标、培养本科学生科研能力与创新思维、检验学生理论应用到实践的能力的重要手段[1-2]。工科本科生的毕业论文是基于学生的毕业设计而创作的,完成毕业论文的前提是做好毕业设计[3-5]。毕业设计是对工科专业本科毕业生综合实践能力进行考察的重要环节,通过毕业设计能够考查学生对大学所学知识、技能和素养的综合应用能力。毕业论文是学生对毕业设计的方法、过程、结果的总结,通过毕业设计论文可以对学生的专业知识、计算机等现代工具及实验设备的使用、文献资料的查阅与总结、问题的分析与研究、研究结果的分析与总结、论文撰写等多方面综合能力进行检验[6-8]。
调查发现,很多学生在毕业设计过程中没有领会软件需求的重要作用[9-10],学生普遍认为在毕业设计中最重要的是编码,而忽视了需求获取、需求分析、系统设计等过程。大部分学生在完成选题后,不会按照软件工程相关理论和方法展开毕业设计工作,导致学生毕业设计做出的项目质量不高,撰写的毕业论文逻辑混乱、核心问题阐述不清。究其原因,是因为学生没有深刻领会到软件需求作为软件工程的起始阶段,可以为软件系统开发的后续阶段提供工作基础,需求获取、而需求分析等步骤工作的结果对软件项目的成败至关重要。因此。如何指导学生做好毕业设计,提高学生毕业设计水平和质量进而提高毕业论文的质量,是一个重要的课题。作为软件工程专业主干课的“软件需求过程”是与毕业设计联系较紧密的课程,其目标是培养学生建立工程化的意识,让学生学会使用工程化的思想去开发软件项目,强调了需求工程的重要作用,即一个项目的成败关键在于需求工作做得好不好。所以笔者尝试通过对“软件需求过程”的教学工作进行改革,使学生能够通过本课程的学习加强对整个软件开发流程的理解,培养学生的工程应用能力,为能够做好毕业设计乃至写出优秀的毕业论文提供帮助。
“软件需求过程”课程中有很多抽象的工程理论。对于没有实际项目开发经验的学生来说,学习这门课程时,首先面对的问题就是理解不了课程中的项目的前景与范围、需求规格说明等概念,问题分析、目标分析、业务过程分析的理论基础和方法,E-R图、用例图、时序图、流程图的使用场景及绘制方法等。这些内容对于没有实际项目开发经验的学生来说,学习起来还是很困难的,造成这个问题的原因是理论与实际的脱节。
另外,本课程与其他实践性较强的编程课相比,学生需要理解、记忆很多的模型和概念,不像诸如“C语言程序设计”“Java程序设计”这样的编程课在学习一段时间后,学生可以独立编写代码解决一些小问题,通过程序运行结果获得一种成就感。因此,一直以来“软件需求过程”课程很难让学生在学习过程中得到取得成果的愉悦感,这种情况往往造成学生的学习动力不足。
学生普遍认为毕业设计就是编写代码,因此,学生在完成毕业设计选题后,往往都会急于进入编码阶段,而没有针对所做选题遵循需求开发的方法进行需求获取、需求分析、需求规格说明及需求管理等步骤的工作[11-12]。在编码过程中做到某一具体功能时再回头进行需求分析,就不会考虑各功能间的关联,从而造成编码混乱、功能不完善等问题,最终使得整个系统无法继续开发下去[13]。
由于前期对系统的需求没有明确,在进行系统设计时,学生先随意修改功能模块。因此,整个系统的功能模块划分凌乱、各功能模块的层次结构不清晰,违反软件设计中“高内聚,低耦合”的原则[14]。
为了解决上述毕业设计中存在的问题,笔者在讲授“软件需求过程”这个与毕业设计流程关联密切的课程时,围绕需求工程的基本环节展开,将设计开发某信息管理系统的基本环节与教学内容各章节内容相结合,用项目来驱动教学过程[15]。具体来说,在授课初始阶段,任课教师给学生发布课题,由学生从给定的课题中选题,学生选定课题后,按照软件工程开发流程进行需求获取、需求分析、系统设计等工作。课程教学内容与软件开发流程紧密贴合,学期末课程讲授到系统测试内容时,学生的课题也处于系统测试阶段。最终学生会开发出一个实际的信息管理系统,此时再让学生根据自己开发的系统撰写一个程序设计报告。这个过程能够让学生充分地理解软件开发各环节之间的关系,达到培养学生完成高质量的毕业设计及毕业论文的目的。
教学改革的目标是从软件工程的角度出发用项目来驱动教学,将软件项目开发的过程分为需求分析、系统分析、系统设计、编码和测试阶段。在各个阶段中都有不同阶段的产出:需求分析阶段产出需求文档,系统分析阶段产出对象模型及业务流程处理模型,系统设计阶段产出E-R图、系统架构,编码阶段产出系统代码,测试阶段产出测试文档。通过课程的学习使学生理解软件工程各个阶段之间的衔接关系,能够根据选定的课题使用工程的方法逐步实现项目,在加深对知识的理解的同时能够熟悉毕业设计的流程及要求。
在教学过程中,让学生结合自己的选题利用需求工程方法实施需求获取、需求分析、需求规格说明等环节,通过实践来学习课程的理论知识,能够加深对概念、方法的理解。教学过程中,教师引导学生利用课程中讲授的需求获取方法实施需求获取:首先,根据课题情况使用“问题分析”“目标分析”“业务过程分析”等方法确定项目的前景与范围;其次,根据项目的前景和范围进行涉众分析,发现所有的关键涉众类别,使用“先膨胀后收缩”“涉众网络”等方法识别涉众,对识别的涉众进行描述、优先级评估、风险评估后选出涉众代表;最后,使用“用例/场景模型”展开用户需求获取,具体的需求获取方法可以使用面谈法、原型法、文档审查法等。软件需求获取的步骤如图1所示。
图1 需求获取的步骤Fig.1 Steps of requirements elicitation
对需求获取的结果进行分析即为需求分析过程,教学方式与前文所述需求获取类似。经过需求获取活动和需求分析活动交织处理后,软件系统的涉众与需求工程师对软件的需求和方案达成了共识,将这些共识形成需求规格说明文档,用于指导后续的软件开发工作。
在教学过程中,授课教师选择一个实际项目作为案例,带领学生按照需求获取、需求分析、需求规格说明等步骤写出该项目的需求规格说明文档。在执行各步骤的工作后,让学生将各步骤中涉及的不理解的概念、方法、模型等反馈给授课教师,授课教师根据学生的反馈能够判断出学生对知识点的掌握情况,然后指导下一步的教学工作,同时针对学生不理解的概念、模型或方法返回项目中去寻找答案。如此反复执行,直到学生没有问题为止。具体实施流程如图2所示。
图2 反馈式教学Fig.2 Feedback based teaching
在教学过程中,授课教师首先按照选题的相关性对学生进行分组,每组5名学生,让他们从学期初到学期末都针对选定的项目进行操作。考核方式分阶段考核,同一组同学的考核成绩相同,这样做能够激发学生的学习积极性,大家能共同努力完成项目,因为每个人都是团队的一员,团队的成绩与每一名同学都相关,同时也培养了学生的团队协作能力。
教师要指导学生遵循软件项目开发的基本流程,将需求获取、需求分析、需求验证等各阶段的产出成果形成文档,在各步骤的收尾阶段组织学生进行答辩,由被考核的小组进行系统演示、讲解,授课教师和其他组的同学作为评委,对该组实施效果及问题进行提问,根据项目完成情况和答辩表现进行评分。学期末将各阶段得分根据权值进行加权平均得出最终成绩。各阶段成果及权值设置见表1。
表1 各阶段成果及权值Table 1 Achievements and weights of each stage
对软件工程专业来说,毕业设计要以软件项目的设计与开发为主线,培养学生具备对复杂工程技术问题进行预测与模拟的能力。通过毕业设计过程的训练,能有效提升学生的工程应用能力,培养学生的实践能力,有利于学生从学校向工作岗位的平稳过渡。
致谢感谢沈阳师范大学第九批教学改革项目(JG2021-YB032)的支持。