2010年10月29-31日教育部全国高校教师网络培训中心组织了“软件工程”精品课程培训,此次培训由清华大学刘强副教授,南京大学骆斌教授、丁二玉教授,国防科技大学董威副教授、文艳军副教授主讲。根据主讲教师提供的论题,各地学员对“本科是否有必要开设'软件需求工程'课程”进行了热烈的讨论。学员们根据本校的实际,提出了各自的意见和看法,颇具代表性。这里将学员们的讨论意见整理归纳成“支持”和“反对或部分反对”两大类,供读者了解和参考。
一、支持开设“软件需求工程”课程的理由
Standish集团公司的研究报告称:在美国,每年用于软件开发的费用在1000多亿美元以上,其中,大型公司开发一个软件项目的平均成本为232.2万美元,中等大小的公司为133.1万美元,小型公司则为43.4万美元。调查显示,31%的项目在完成之前被取消,进一步研究的结果还表明:52.7 %的项目实际所花费的成本为预算成本的189%。根据该公司的另一项分析,项目失败或严重超支的8个最重要原因中有5个都与需求相关:即需求不完整、缺乏用户的参与、客户期望不实际、需求和需求规格说明的变更以及提供了许多不必要的功能。另外,缺乏健壮的需求规格说明导致无法继续进行系统实现。虽然项目失败涉及的原因多种多样,但正如R.Glass所说,“项目需求无疑是在软件项目前期造成麻烦的一个最大原因。一个又一个的研究已经发现,当项目失败时,需求问题通常正是核心问题”。因此,在软件开发过程中,必须极早、有效地发现和解决与需求相关的问题。“软件需求工程”是当前软件工程中的关键问题,它涉及需求的获取、表示、验证与管理,是软件工程专业的本科生必须开设的一门课程,且可作为软件工程的专业核心课。
主张在高校本科开设“软件需求工程”课程的教师认为,随着社会信息化进程的不断深入,计算机软件的需求越来越复杂,规模也越来越大,而且随着企业的发展,工作流程重组,需求变更已越来越频繁。“软件需求工程”的基本理论和实际应用技术,涵盖了需求开发的各个步骤。其中,包括业务建模、需求获取、需求定义、需求分析、规格说明、需求验证和需求管理等方面的主要内容和方法。软件工程中的关键性节点的陈述和具体实施要点,应避免过多地和“软件工程”课程中有关需求分析的内容重复。同时,建议在学习过程中针对每一个章节的内容除教师必要的讲解外还应该组织学生针对某个案例进行一些必要的讨论以强化学生在学习过程中对概念的掌握和对具体实施的理解,尤其是具有很强专业背景的院校,会取得更好的效果。
还有的教师认为,在时机适宜和条件许可的情况下,对本科生全面开设“软件需求工程”课程应该是一种明智的选择,更是一种对学生负责的的做法。尤其是软件工程专业,对于其他计算机或信息技术相关作业,开设“软件需求工程”课程也是必要的。可以根据所在院校的师资与所设置专业的具体情况进行适当的调整,比如对学时、内容、难度等进行必要的删改取舍。
需求分析是一切软件开发的基础,它可以被理解成是一条河流的源头,如果源头被污染了,那么后续过程即使再正确,也不可能满足用户的需求。通过需求工程内容的讲授,可以让学生深入了解需求的重要性和方法,即使学生在当时还没有开发经验,不能独立地进行完备的需求描述,也有必要让学生有这个认识,毕业后在工作中也能遵循这种原则,在软件开发中少走弯路。
另外,我们不能狭隘地理解需求分析,不仅软件开发领域需要需求分析。在其他工程领域也需要需求分析。比如,盖一栋楼房,在施工之前,一定要充分了解开发商的要求,从而得到设计蓝图,这也是一个需求分析的过程。
“软件需求工程”理论同后续的一些计算机专业课如“软件质量管理”、“软件项目管理”等有着千丝万缕的联系。只有把“软件需求工程”学好了,才能更深刻地理解质量管理、配置管理等这些重要理论。所以,“软件需求工程”在本科软件工程教育中可以起承上启下的桥梁作用。
二、反对或不赞成全面开设“软件需求工程”课程的几种的意见
1.目前,本科生能接触到的软件项目以小、中型为主,可以作为教学用的完整案例少之又少,“软件需求工程”课程如果没有配套的实践案例让学生获得一定的感性认识,对于没有软件开发实践经验的大多数学生来说不会有太深的感受,教学效果也会流于形式。因此,尽管从重视需求分析的角度来看,开设“软件需求工程”课程有一定的必要性,但是如果没有一个贯穿全部内容的完整的教学案例作为支撑,教学效果很难达到预期的要求。因此,在目前情况下应该更多地积累可用于教学的实践案例,供学生模仿和体会,使学生逐步建立起工程化的软件开发思想和习惯,对提高教学效果会更有实际益处,逐步打破软件工程“纸上谈兵”的教学现状。
2.有的教师认为,对于软件工程专业方向的本科生虽然有必要开设这门课程,但存在的问题也很突出,在业界普遍采用的技术和方法,大多数普通高校的教师不一定有具体深刻的工程体验和经验,如何组织好这门课程的教学对相当多的教师来说是很困难的事情,因此在课程讲授中很容易陷入空洞的说教,如何培养能讲授该课程的师资力量是问题的关键。而对于与计算机相关或边缘的学科和专业则不推荐开这门课,因为时间不够,教学效果也不好。
3.有人认为需求工程是软件工程中最复杂的过程之一,对于计算机科学技术、网络工程等专业的学生,由于所学的侧重点不同,则应主要让学生理解软件需求的重要性,掌握软件需求获取和表示的基本方法和技术,在这些专业中只需开设涵盖软件需求的“软件工程”课程即可。
还有人认为需要根据所教授学生的层次和院校来定,对于应用型本科而言,开设“软件工程”这门课程就够了,因为学生毕业后的去向多为公司的程序员,而“软件需求工程”这门课程相对来说有一定难度,不太适合该类型院校的学生。如果是培养工程技术型的学生,开设这门课程还是很有必要的。
4.也有的教师认为,研究型本科学校计算机学院的学生,培养目标是科学性人才,大多数学生毕业后会考研究生或去研究性机构工作,主要从事计算机相关领域的研究,做项目开发工作的较少。因此,在本科阶段没有必要开设“软件需求工程”课程,软件需求部分的内容在研究生阶段会继续学习。
5.研究型本科院校是否有必要开设这门课程,要根据培养目标和方向来决定。如果要培养系统分析人员、系统构架师等相关人才,这门课程是非常必要开设的;应用型本科院校可以在“软件工程”课程中简单介绍软件需求分析的过程,没有必要单独作为一门课程来学习。
6.是否需要开设“软件需求工程”课程要根据专业而定。对于非软件工程专业的学生不必开此门课,学生只需掌握“软件工程”课程里关于需求的相关知识就可以了;而对于软件工程专业的学生,可以考虑开设此课程,但要注意课时和课程内容的设置。因为,这门课的课时如果过大,其内容就容易与“软件工程”、“系统分析与设计”等课程有较多的重复部分。所以,该课程可以以选修课的形式,在综合衡量与其他课程内容衔接关系后确定。
7.“985工程”和“211工程”学校可以尝试开设“软件需求工程”课程,但对于一般普通院校来说,目前还为时过早。
(根据教育部全国高校教师网络培训中心网站“软件工程”精品课程培训班学员讨论总结整理)