基于miniProject的软件工程教学研究
2012-09-15罗晓清张战成
罗晓清, 张战成
(1.江南大学物联网工程学院,江苏 无锡 214122;2.中国科学院苏州纳米所,江苏 苏州 215123)
基于miniProject的软件工程教学研究
罗晓清1, 张战成2
(1.江南大学物联网工程学院,江苏 无锡 214122;2.中国科学院苏州纳米所,江苏 苏州 215123)
针对软件工程课程教学实践性强的性质,提出一套基于miniProject的实践教学方法,将软件工程中的软件生命周期管理、关键软件过程融入项目的实践中,用一套虚拟团队的组织规范引导学生开发项目,使得学生在实践中掌握和理解软件工程的相关概念,并自觉执行一套标准的软件过程。
软件工程;软件过程;教学研究
软件工程是一门实践性很强的课程,在计算机本科专业规划中,一般在大学三年级第二学期开设,此前学生一般已经学习过C程序设计、数据结构、数据库原理、编译原理和操作系统等软件类专业基础课程。掌握软件工程原理和方法对学生将来从事软件开发有着重要的指导作用。
1 软件工程教学现状
在教学实践中,我们感觉很多学生错误地认为软件就是程序,将自己定位为一名程序开发高手。这种认识和定位与现代软件开发过程以及公司的招聘需求之间还有很大的差距。IT企业对刚毕业进入工作岗位的学生常常不满意,觉得学生缺少系统地把握问题的能力、缺少团队合作精神。学生也认为软件工程的理论太空洞,不像程序设计等课程具体,所以传统的教学方法很难激发学生的学习兴趣,难以达到预期的教学效果。
虽然部分院校也意识到软件工程教学中存在的问题,从加强实践环节入手,增加实验课时,安排大量的上机实验时间,也鼓励学生利用课余时间自己开发一些小项目,但是整个授课的过程中,依然是老师布置项目题目,学生完成作业的教学模式,远远没有达到现代软件工程课程教学的要求,学生无法从中理解软件工程的思想精髓,其思维方式还停留在实现某个功能的程序的阶段,没有从软件生命周期和项目管理的角度学习软件工程[1]。
2 课程改革思路
高校作为培养人才的主要场所,承担着向社会输送合格的高素质人才的责任。软件业的快速发展要求我们的人才培养模式也要与时俱进。基于现代软件企业越来越重视软件质量,而高质量的软件需要有成熟的过程管理,根据CMM的建议[2],企业也成为相应的软件质量保证角色,将软件项目的相关指标量化管理。为使我们的课堂教学实践与企业的实际软件开发过程更相符,我们提出在软件工程这门课程的教学实践环节,以一个小的实际项目(miniProject)的业务需求为背景,指导学生组成团队,并建立相应的虚拟的质量保证团队和过程规范,实践软件生命周期中的各个阶段的工作,整个过程不是单纯地追求程序开发的速度,而是更注重流程的符合规范的程度和编写文档的质量,让学生在实践中理解和掌握软件工程的相关概念并自觉实践其中一些关键软件过程。
3 课程改革实践
一个班的学生分成若干虚拟的产品团队,每个产品团队按照图1的组织架构搭建。其中开发代表1人,对这个产品团队负责,代表用户的利益;质量设计员1人,负责指导各个小组遵守公司的流程规范;开发小组A和B工作完成某个项目,每个小组人数5~7人,设项目经理、配置管理员、度量协调员各1人,程序员若干;测试小组由1名项目经理和3~5位测试员组成。在此基础上设置变更控制委员会,由指导老师、质量审计员和开发代表组成,负责对软件开发过程中的变更进行审核和授权。通过这种架构基本虚拟了一个比较完整的项目团队。
图1 虚拟产品团队组织结构Fig.1 Virtual product team structure
以一个简单的图书馆图书管理系统为例,开发小组A完成书刊的借阅归还管理,开发小组B完成书刊采购入库管理,两个小组协同完成一个项目,这样的项目并没有标准答案,需要学生积极主动地和开发代表交流完成需求分析,两个小组之间要协调好接口,同时要和测试团队配合修改软件测试发现的缺陷。具体团队的人选由学生自己讨论决定,当然我们在理论教学阶段已经把各个角色的职责定义明确,学生可以根据自己的兴趣选择适合自己的角色。为了调动学生的积极性,我们对项目中的关键角色:开发代表、质量审计员、项目经理、测试经理、配置管理员、度量协调员采取额外的奖惩措施,即:小组成绩在优秀以上的关键角色可以获得加分,否则扣分。在角色选择时,无法避免地会产生冲突,例如:两名同学都要争着当项目经理,这个时候指导老师一般不干预,仅仅规定最后的期限,要求学生在1个小时内组织起团队,这样锻炼学生团队合作的精神。
3.1 软件生命周期管理教学
在教学过程中我们需要培养学生软件生命周期的意识,即让学生认识到一套软件不是听到需求后直接上手写代码,代码写完就意味着项目结束,而是有一套标准的规范和流程来指导整个软件的开发过程。总体来看,软件生命周期由软件定义、软件开发和运行维护三个阶段组成[3]。
软件定义阶段详细来说有问题定义、可行性分析和需求分析三个阶段,在教学中我们要求开发代表下发“工作任务书”完成问题的定义,因为项目相对比较明确和简单,我们忽略可行性分析阶段,在需求分析阶段我们要求小组输出最终的经过评审通过的需求规格说明书。这个阶段主要培养学生将问题和需求文档化的能力,这个阶段学生往往“蠢蠢欲动”,急于编写代码,指导老师要参与每个小组需求评审的过程,指出需求中模糊的不够明确的地方,引导学生输出规范的文档。这个阶段同时要输出系统测试用例,系统测试用例要经过测试小组评审和认可。
开发阶段由总体设计、详细设计、编码和单元测试、集成测试和系统测试以及验收测试组成。考虑到项目的规模,我们把总体设计和详细设计合并为一个阶段,只要求学生输出一份设计文档,这个阶段指导老师要关注学生的设计方案是否全面覆盖需求点,一般通过需求跟踪矩阵可以看出。编码和单元测试阶段除了要求学生的代码符合约定的编码规范外,重点是关注单元测试的覆盖率是否满足要求,这个阶段锻炼学生设计和执行白盒测试的能力。集成测试和系统测试因项目规模较小,一般综合为系统测试,由各自的开发小组完成,验收测试由测试小组完成。系统测试一般进行三轮,测试过程中的每个问题要都要由测试人员填写缺陷报告并提交项目经理审核,修改后的验收测试结果也需要提交项目经理审核。质量审计员需要关注每轮测试的缺陷率是否是收敛的趋势,并和项目经理一起给出测试分析报告。验收小组按照项目系统测试用例进行验收,同时进行发散测试,这个阶段锻炼学生黑盒测试的能力。验收测试的每个问题也要由测试人员提缺陷报告,测试经理审核后转开发经理确认是否是问题,由开发经理转相关开发人员修改,修改后开发经理确认,测试人员回归测试,这样保证每个问题都是闭环。
项目的维护阶段是一个比较长的阶段,在真实项目中,一般占整个软件生命周期的80%,在miniProject项目中,我们通过软件的适应性修改来让学生学习软件维护阶段的相关概念和应该遵守的流程,并强调如何保障软件维护的质量。
3.2 关键软件过程教学
软件的质量需要通过一套完整的流程和过程来保障。在教学实践中,我们把一些软件中的重要流程固定化,使学生体验到高质量的软件项目所必须经历的过程。
评审在软件工程贯穿项目的需求、设计、编码的每个阶段,评审组织者一般先进行评审讲解,使各位评审者对需要评审的工作有一个明确的认识,各个评审人单独进行评审后,评审组织者需要对评审意见逐一确认。评审组织者一般为项目经理,需求文档的评审人一般为开发代表、配合小组和测试团队,设计文档的评审人一般为小组内部和需要软件接口配合的小组。通过评审阶段的活动使得学生认识到软件开发不仅是个体行为,而是这个组织的一套有序行为,个人需要在组织规范内行动,通过严格执行组织的流程规范保证软件的质量。
配置管理是软件项目管理中一项基本内容,是软件质量保证的重要一环,这一工作主要由配置管理员执行,其主要职责是控制变更、版本标志、配置审计和配置状态发布。通过引入配置管理使学生认识到软件版本变化的可回溯性,可跟踪性。软件项目并不仅仅是交付一个产品,其中间的每个阶段的历史、基线和分支对回溯软件的质量,保证软件修改的有序进行有重要的作用。试验中,学生也学会基本软件版本管理工具(如:SourceSafe、SVN)的使用,掌握Check in、Check out、update等基本操作,了解基本的团队协作开发的环境。
软件度量是CMM4级的一个关键过程域,为了配合本次课程改革,我们设计了软件度量表,其中包含:需求点的个数、测试例个数、投入人力、测试发现的缺陷等信息,由度量协调员负责这些数据的收集,质量审计员和项目经理在每个阶段需要对收集的这些量化数据分析,分析项目进行过程中存在的问题。通过引入软件度量,我们使学生理解到软件开发过程是可控的,通过一些量化的指标可以了解软件项目的运行状态,为软件项目的管理提供决策依据。
变更控制是减少软件开发的随意性,保障软件质量的一项关键措施。变更控制是指对每个阶段文档基线化后,因为需求的变化、重大缺陷或相互配合导致的软件变更作评审、授权的管理活动。为模拟现实中的变更控制,在软件编码阶段我们假设用户要求追加一个新的小需求。为满足用户的这种变化,开发小组需要评审新增需求对现有软件项目进度的影响、对设计方案的影响,并向变更控制委员会(由指导老师、开发代表、质量审计员组成)提交变更申请,经评审后修改需求文档和设计文档并重新基线化然后配置状态发布。通过这样一次变更使得学生认识到软件项目中的变更是经常存在的,为了使得变更有序和可控,需要一套流程和规范来管理软件的变更。
4 教学体会
通过两个班级一个学期的教学实践,学生普遍觉得原来枯燥的软件工程原理在实践中学来的和由老师灌输的有很大区别。所谓“纸上得来终觉浅,绝知此事要躬行”,通过一个miniProject可以将软件工程课程中的很多内容融入到实训中,让学生通过项目实践理解和体会“工程”的思想,并主动规范地执行一些关键的软件过程,一些同学甚至提出了一些对流程优化的小点子,这实际上已经是CMM5级的持续软件过程改进的一些苗头,这说明通过这种方式,学生更愿意积极主动地学习。
在教学中,我们参考了软件CMM模型、软件工程实践方面的很多教材。我们也和国内知名IT公司的一些项目经理深入交流,学习IT公司实际的软件过程是如何进行的,将这些实践的经验融入到教学过程中,丰富了课堂教学的内容。软件工程是一门不断与时俱进发展的学科,现有的教材内容总是滞后于软件工程的实际需求,这就要求我们教师在教学观念上不断接受新思想,不断补充新知识,充实我们的课堂教学内容。
[1] 李广源,马楠.国外软件工程教学法初探[J].计算机教育,2011,133(1):86-90.
[2] Mark C.Paulk.The Capability Maturity Model:Guidelines for Improving the software Process[M].Addison-Wesley Pub.Co.,2001.
[3] Roger S.Pressman.Software Engineering:A practitioner’s Approach[M].McGraw-Hill,2002.
The Teaching Research of Software Engineering Based on MiniProject
LUO Xiaoqing1, ZHANG Zhancheng2
(1.School of IoT Engineering,Jiangnan University,Wuxi 214122,China;2.Suzhou Institute of Nano-tech and Nano-bionics,Chinese Academy of Sciences,Suzhou 215123,China)
For the practice of software engineering curriculum,a new teaching method based on miniProject is introduced,in which software lifecycle quality management and key software process are applied,also a virtual development group and regulations are built to guide the students to follow the software specification.As a result,the students can quickly learn the concepts of advanced software engineering and actively develop the software based on a standard software process.
software engineering;software process;teaching study
G 712
A
1671-7880(2012)04-0070-03
2010-04-06
罗晓清(1980— ),女,江西南昌人,博士,研究方向:模式识别与图像处理。