姜 瑛,钟桢琼,丁家满
(1.昆明理工大学信息工程与自动化学院,云南昆明650500;2.云南省昭通高速公路路政管理大队,云南昭通657000)
在计算机类专业教学的目标中,除了使学生能够掌握相关的专业基础知识外,还要着重培养学生的工程应用能力。作为计算机类专业实践教学环节的重要组成部分,毕业设计是以学生为主体,在校内教师或校外工程技术人员的指导下,围绕特定选题进行的有计划、有步骤的学习和开发过程,是提高学生工程应用能力的重要途径。
学生通过前期的综合课程设计巩固已修专业核心课程的知识,并提高其综合应用能力、动手实践能力、自主创新能力及协作能力。与课程设计不同,毕业设计更强调系统性和综合性,使学生在以下方面得到锻炼和提高:①综合运用所学知识,分析、解决实际问题的能力;②自主获取新知识、独立发现问题的能力;③计算机系统设计和开发的能力;④创新精神和团队协作能力;⑤文献检索、资料查询以及论文写作能力[1]。
毕业设计是培养学生综合运用所学知识和技能,进行工程技术和科学研究基本训练的主要教学环节,也是对大学生所学课程质量的综合检验,是学生从学校走向工作岗位的重要过渡阶段。作为本科生毕业前的关键实践环节,毕业设计周期长、任务重,如果不采用有效的开发方法和管理措施,极易出现未能达到预期目标、毕业设计质量低下等问题,影响学生的毕业。实际上,计算机类专业的本科毕业设计可以视为一个小型软件系统的开发过程。目前,在毕业设计实践中也出现了应用软件工程思想的相关探索,包括分析毕业设计和软件生命周期各阶段的映射关系[2]、用软件工程思想指导毕业设计[3-5]等。
昆明理工大学信息工程与自动化学院计算机系1985年开始招收四年制本科生,目前共有计算机科学与技术、物联网工程、软件工程等3个计算机类专业。这3个专业均在大四上学期第10周为学生分配指导教师,开始毕业设计工作,大四下学期第16周进行毕业设计答辩,要求每位学生综合运用所学知识与技能,独立分析、处理和解决实际问题,培养学生理论联系实际、实事求是、严谨求实的科学态度和工作作风。
近年来,在计算机类专业的毕业设计过程中发现,大部分学生未能较好地完成毕业设计的预定目标,部分学生的毕业设计质量较低,体现出来的问题主要包括:
在毕业设计选题时,由于大多数学生没有参加过实际的软件项目,一般会选择学生信息管理系统、图书信息管理系统等常见题目,或者自己设想一些题目,并出现多个学生选择同一题目、内容雷同、缺乏创新的现象。也有部分选题脱离实际,学生对要完成的系统内容不清楚,影响了软件开发及毕业论文撰写。此外,有部分学生对自己的能力认识不足,导致选题过大或过小,有些内容实现有困难或者来不及实现,在毕业设计过程中不得不多次换题。
《软件工程》是计算类专业本科生工程基础类课程,但部分学生未能将软件工程思想应用到毕业设计中,没有采用有效的开发方法。通常出现的问题包括:需求分析不充分,忽视了软件需求的不稳定性,甚至有学生忽略需求分析直接进入软件设计,导致后期反复对修改系统;没有对软件进行总体设计,在目标不明确的情况下随意进行软件开发,整个开发过程随意无序,导致软件结构混乱、代码质量低下、可用性差,发现问题通常为时已晚,稍作改动系统就不能运行;未进行软件测试,只使用少量数据检查了系统的运行情况,没有发现系统存在的其他问题或错误;开发中未编写软件文档,部分学生到毕业设计的最后阶段才撰写毕业论文,出现论文内容与系统不一致、论文质量低下等情况。
在毕业设计的过程中,学生要准备研究生入学考试,或参加就业考试,或到某单位实习3-5个月,无法每周接受教师的指导或检查,部分学生有问题也不和教师交流,过程参与不足导致后期手忙脚乱,影响毕业设计的质量。
为了达到计算机类专业毕业设计的预期目标,自2015年起,学院通过强调软件工程思想、应用增量开发模型、加强过程管理等措施,有针对性地控制毕业设计的过程和进度,进一步改进毕业设计的质量。
1968年的NATO会议上提出了“软件工程”的概念,使软件开发开始了从“艺术”、“技巧”和“个体行为”向“工程”和“群体协同工作”转化的历程[6]。为了提高软件开发效率和软件产品质量,必须改变手工作坊式的开发方法,采取工程化的开发方法和工业化的生产技术[7]。
为了让学生能顺利、有序地开展毕业设计,在与学生见面的第一次毕业设计指导例会上,向学生再次系统地介绍了软件工程思想,着重从软件系统的需求分析、设计、编码及测试等各阶段如何开展,各阶段要完成的任务及提交的文档等方面进行了讲解。
增量模型也称为渐增模型,由Mills等人于1980年提出,使用增量模型开发软件时,将软件产品作为一系列的增量构件来设计、编码、集成和测试[8],如图1所示:
图1 增量开发模型[8]
采用增量开发模型,可以将毕业设计要完成的软件系统分解为一系列的增量构件,通过迭代开发逐步实现系统目标。在计算机类专业毕业设计中应用了增量开发模型,相关步骤如图2所示:
图2 增量开发模型在毕业设计中的应用
3.2.1 选题
为了有助于学生综合运用多学科的知识与技能,学院要求学生毕业设计的选题有一定的理论和现实意义,不要选虚拟题目。对于学生不了解但又想做的题目,指导教师给学生讲解,指导学生查询相关文献资料。通过多次交互,让每个学生的选题都符合其实际能力,难易适度、大小适中。
3.2.2 系统分解
确定选题后,首先要让学生理解软件需求的演化性,学会区分需求的优先级。通过认真分析软件系统的需求,指导学生将系统划分为若干个子系统,定义每个子系统中的功能模块,并给出各子系统的接口定义。
分解时可依据学生的开发能力将子系统定义为不同的增量构件。通常建议动手能力弱的学生可将第一个增量构件定义得简单一些,这样学生可以在较短时间内看到一个可运行的软件子系统,增强其完成软件系统的信心。后期在逐步增加软件功能的同时,学生也有时间学习和适应下一个增量构件的开发,从而降低毕业设计失败的风险。
3.2.3 增量构件开发
基于系统分解方案,根据图1的增量开发模型进行各增量构件的开发,并在开发过程中完成所需的软件文档。由于各增量构件交付前都需经过测试,最终完成的系统质量是能够得到保证的。
3.2.4 撰写毕业论文
软件文档是软件开发规范的体现和指南,按照开发规范完成软件开发的过程中将产生一系列的软件文档。毕业论文是毕业设计工作的总结和提高,开发过程中完成的相关软件文档是毕业论文的主要素材。
为了确保毕业设计顺利进行,除每周定时的指导例会外,还在各增量构件的分析、设计、编码、测试等阶段结束时进行软件系统开发的检查和汇报。此外,针对阶段检查中发现的问题,增加了开发过程中的问题跟踪及解决环节,以此训练学生解决问题及协作交流的实践能力。通过学生汇报和教师讲解,总结、交流开发中存在的问题及相关收获,加强学生的团队精神和协作能力。
对于长期在外实习的学生,要求其每周提交工作进展报告和阶段文档,并与该生实习单位主管进行定期交互,或委托实习单位进行阶段检查后将结果反馈给指导教师,以便掌握学生毕业设计的进度,及时解决存在的问题。
2015年11月-2016年5月,学院在5名2012级计算机科学与技术、物联网工程专业本科生的毕业设计中实践了增量开发模型。5名学生编程能力各有不同,其中有2人于2016年2-4月外出实习,其余学生在毕业设计过程中均有请假参加招聘考试等现象。通过应用增量开发模型,所有学生均顺利完成毕业设计,1人被评为学校优秀毕业设计,3人成绩为良,1人成绩为及格。经过分析后发现,学生可以应用已学的相关理论和知识开展毕业设计工作,部分学生在知识的应用和实际动手方面表现出色。
实践表明,增量开发模型可以保障毕业设计的质量,提高了学生解决问题的能力、口头和书面的表达能力、沟通和协作能力。此外,增量开发使学生更多地去思考系统的分析和设计问题,而不是仅关注代码编写,为毕业后的工作实践奠定了基础。学院将鼓励更多的学生尽早参与到实际的软件项目中,进一步提升其实践能力和创新精神。