CMM在软件工程实践教学中的应用分析
2015-05-30文勇刘春涨郭瑞
文勇 刘春涨 郭瑞
[摘 要]基于CMM核心理念,设计三个由简单到复杂的软件小项目,在软件工程实践教学中应用,分析应用过程中所收集到的数据。分析表明,逐步引入CMM核心理念的实践教学方法可以协助学生更好的理解和掌握软件工程的基本概念与基本原理,可以提升学生掌握相关的基本技能的效率,可以提升学生的软件组织开发能力。
[关键词]软件工程 课程改革 CMM 案例教学
[中图分类号] G642[文献标识码] A[文章编号] 2095-3437(2015)07-0132-02
在《软件工程课程改革和实践——基于CMM核心理念》[1]一文中,对CMM的核心理念进行了分析,提出了一个将CMM的关键过程域的活动融入软件工程的教学实践的循序渐进的案例教学方法,给三个级别的关键过程域分别设计了一个典型的软件实践项目。本文主要是描述这种教学方法在教学实践中的具体应用,分析学生在理解和掌握一些软件工程基本要点过程中的变化。分析表明,采用逐步引入CMM核心理念的实践教学方法,不但可以协助学生更好的理解和掌握软件工程的基本概念与基本原理,而且可以提升学生掌握相关的基本技能的效率,对提升学生的软件组织开发能力也有帮助,从而能够很好地达到软件工程实践课程所要求的教学目标。
一、循序渐进案例教学法简述
针对初始级过程域[2],安排了学生信息管理系统的设计;针对可重复级过程域[2],安排了学校图书管理系统的设计;针对定义级过程域[2],安排学校教学管理系统的设计。这些系统所需的领域知识对于一般学生来说都能基本满足,系统的实现所需的技能学生基本满足,但系统需求以及系统实现的难度逐步增加。每个阶段安排一个系统设计,每个系统设计由一个小组承担。这次实践参与团队为软件工程专业的一个班级,共52人,分为七个小组,每个小组6-8人,每一组设一个组长。
具体内容描述如下。
二、初始级实施情况
初始级选择的实践项目是“学生信息管理系统”。老师将“学生信息管理系统”的需求陈述发给各小组,要求他们在4个星期内完成该项目,并上交完成此项目的代码和文档,但不对文档做任何要求,完全依靠学生自己在此之前所学知识和实训经验来完成此项目。
在第1周到第4周的开发过程中,大部分小组成员在QQ群中抱怨项目太难,有一些学生问了一些问题,一般都是开发环境方面的,也有一些问题是有关需求的。教师有时候到现场指导,发现各个小组的成员在一起讨论问题的很少。第5周结束时,各个小组都提交了可运行的程序代码。
在对各个小组完成的程序进行评审时,发现以下问题:没有一个小组能够完全正确实现项目的要求,大部分小组只实现了简单的功能,程序运行过程中经常异常退出;在检视项目代码时,发现代码编写得千奇百怪,没有统一的风格,没有任何注释,阅读起来很困难;不少小组的代码只是由个别人完成的,其他成员参与程度低;学生反馈代码经常需要反复修改,总是稳定不下来;而有些小组只有代码,没有任何设计文档。
老师对这些问题进行分析和点评,指出软件开发是一个复杂过程,需要采用科学的工作方法,然后给大家讲解为什么需要软件工程,软件工程的基本概念和CMM的基本概念是什么。然后分析CMM中可重复级别的关键过程域的KPI;分析如何通过需求管理去分析和管理用户需求,如何开发出来满足用户需求的产品;分析如何通过软件项目计划去分配和调度人力资源;分析如何通过项目跟踪去监控整个项目的进度,当进度出现问题时如何跟老师和团队成员沟通调整;如何构建一个统一开发平台对团队成员的开发代码进行管理。最后重点强调项目开发不只是编写代码;重点强调需求分析文档、概要设计文档、项目计划、测试计划的重要性;重点强调团队合作的重要性。
三、可重复级实施情况
可重复级选择的实践项目是“图书管理系统”。老师将“家庭财务管理系统”的需求陈述发给各小组,要求他们在4个星期内完成该项目,并上交完成此项目的代码和文档,对文档的规范性和编程的规范性提出了严格要求。要求每小组配备一个需求管理员,负责管理和跟踪用户的需求;配备一个配置管理员,负责开发环境、代码和文档的管理;配备一个测试人员,负责系统测试。跟学生强调分工和协作的重要性。
在第1周到第4周的开发过程中,最初,大家主要是熟悉文档编写工具的使用,然后主要精力是花费在文档编写方面。在文档编写时,许多学生感觉非常艰难,提出了许多问题。在代码编写阶段,许多小组感觉文档指导作用不大,需求管理员和配置管理员经常搞不清自己要做什么,有部分学生插不上手。第5周结束时,各个小组都提交了可运行的程序代码和开发文档。
在对各个小组完成的程序进行评审时,系统的质量比第一期有所提升,但还存在以下问题:文档的质量较差,没有一个小组能够完整写完开发文档,大部分小组只是简单的书写了需求文档和概要文档,各个阶段的文档之间的关联性较差;软件功能不够完整,测试也不够充分,演示过程中出现了不少故障;代码质量还有较大提升空间,阅读起来还是不够清晰。
在对各个小组完成的程序进行评审时,发现以下问题:虽然都完成了开发任务,但是没有一个小组能够完整写完开发文档,大部分小组只是简单的书写了需求文档和概要文档,软件出故障时候不易维护的情况。开发过程遇到文档描述不清晰时常需要从需求分析做起,增加了开发风险。程序有BUG时候,找到问题所在需要耗费很多时间。
老师对这些问题进行分析和点评,指出选定开发模型之后,下一步工作就是要想办法盘活整个团队,然后按部就班做好开发模型中所规定的各种任务。盘活整个团队,需要对团队成员进行培训。想要完成各种任务,需要对各个环节的产出物进行评审。最后,老师分析CMM中可定义级别的关键过程域的KPI;分析如何根据项目的需要去制订培训大纲,从而用这个培训大纲去指导整个项目组的培训;分析阶段性产出物评审的重要性,提出可以在各个小组中选出那些较为优秀的学生作为一个评审团队;强调编程规范、文档规范、设计模式的重要性。
四、可定义级实施情况
可定义级选择的实践项目是“教学管理系统”。老师将“教学管理系统”的需求陈述发给各小组,要求各个小组按照可定义级的关键过程域的要求开展相应的活动,重点放在培训大纲、培训计划和同级评审方面。完成该项目时间为4个星期,并上交完成此项目的代码和文档。
在4个星期的开发过程中,开始时,许多学生抱怨培训和评审花费时间过多,也抱怨评审专家提的建议过于繁琐、文档规范要求过严。因为需求文档、测试计划和设计文档经过多次评审才过关,也花费比原来预想多的时间进行了培训和讲解,需求分析阶段和设计阶段花费时间是原来计划的三倍,设计完毕之后已经没有时间进行编程了。为了得到最终的系统,老师另外给出4周时间进行代码实现和系统测试。最后的这两个阶段各小组进展得比较顺利,心情也比较愉悦。第8周结束后,各个小组都提交了可运行的程序代码和基本完整的开发文档。
第9周对各个小组完成的系统进行了评审,各个小组实现的系统界面美观,功能完整,运行错误发现较少,有个别项目组做得非常好,只有两个项目组发现的错误较多。在评审后,老师给学生提出这样一个问题:为什么我们完成项目比计划时间要多1倍?大家反馈意见不一,但主要集中在这几个问题上面:经验不够;不知道如何计划各个阶段的时间;没有想到编写需求分析文档和设计文档需要这么多时间;没有想到要讨论清楚一个问题或者培训一个新技术需要这么多时间。
老师针对时间计划问题以及各个开发阶段时间问题进行了分析,指出CMM第4级可管理级所增加的活动就是制订针对项目质量和开发效率的目标,收集、测量相应指标;利用统计工具分析并采取改进措施,从而达到对软件过程和产品质量有定量的理解和控制。老师强调想要达到CMM4级目标,必须收集到足够的开发活动数据并进行合理的分析和利用,才能制订较为准确的开发计划,这个需要学生以后在工作岗位中努力。
五、结束语
本文所描述的循序渐进案例教学法使CMM的核心理念通过三个典型的小项目逐渐展开,有利于学生理解和掌握软件工程课程的基本要点,提升了学生的综合知识运用能力,提高了学生的沟通能力,也促进了学生参与项目开发的积极性,提升了他们从事软件开发职业的信心。下一步我们将考虑为那些优秀的高年级学生设计一个CMM可管理级别的实践项目,在该项目中将对开发效率和软件质量提出更高的要求。
[ 注 释 ]
[1] 文勇,蒋小文,刘春涨.软件工程课程改革和实践——基于CMM核心理念[J].大学教育,2014(11):99-100.
[2] 美国卡内基梅隆大学.能力成熟度模型(CMM):软件过程改进指南(英文版)[M].北京:人民邮电出版社,2002.
[责任编辑:钟 岚]