从知识体系的角度思考软件工程课程及教材建设 发表日期:2004年10月27日出处:《计算机教育》第10期作者:温莉芳经有688位读者读过此文 在工程界,软件工程是一个相对年轻的学科。“软件( Software)”一词直至1958年才由当时供职于贝尔实验室的著名统计学家 John Tukey 提出(他还创造了表示位的“bit”一词)。而“软件工程( Software Engineering)”一词则是在1968年北大西洋公约组织的软件工程会议上才 第一次出现。IEEE计算机协会有关软件工程的标准制定始于1976年 随着信息化的突飞猛进,软件逐渐渗透到人类社会的方方面面,从上世纪60年代开始,软件开发的标准化和工程化就成为计算机界的中心 课题之一。时至今日,软件工程学科虽然在实践指导作用的发挥上还任重道远,但是学科本身已经趋向成熟。其标志包括:ISO、IEEE、SEI相 关系列标准的制定完成,世界众多高校已经开始开设专门的软件工程专业,美国和加拿大都有了权威的软件工程职业鉴定和认证等等。 在这种大背景下,制定软件工程的知识体系,并以此为基础指导软件工程的教学,也就成了大势所趋。历史上第一次全盘地审视软件工程 学科,是20世纪70年代制定IEEE730标准的时候。该标准对配置管理、软件测试、软件需求、软件设计以及软件验证等领域的标准都产生了 影响在20世纪80年代前五年,IEE对软件工程标准的应用组织了一系列研究和探讨,最终制定了IEEE1002标准“软件工程标准的分类学” 1995年,在IEEE和美国国防部标准的基础上,形成了ISO/IEC12207国际标准“软件生命期过程标准”,这是软件工程学科知识体系建设的 个里程碑。 1993年,IEEE计算机协会和ACM共同建立了一个联合委员会,正式开始了软件工程职业实践规范的制定工作。其中,定义必需的知识体系 和推荐实践成为委员会工作的第一要务,另外两个工作目标包括制定道德规范和职业标准,定义本科、研究生和继续教育的课程体系。其中道 德规范和职业标准的制定已经于1998年完成,并通过了两个组织的正式批准,开始得到广泛的应用。而另两个目标也都进入最终草案的阶段 有望在年内完成 软件工程知识体系 图1和图2为2004版 SWEBOK中的软件工程知识体系简图。整个知识体系分为11个知识领域( Knowledge Area,KA),其中前五个知识领域 是按软件开发的生命期诸阶段(即所谓流式活动)排列的,即软件需求(又称软件分析)、软件设计、软件构造(即编码、实现)、软件测试和软件 维护:后六个知识领域则是软件开发中的支撑性或者辅助性的方面(即所谓伞式活动),一般覆盖软件开发的多个阶段甚至所有阶段,包括软件 配置管理(简称SM)、软件工程管理、软件工程过程、软件工程工具与方法、软件质量、相关学科知识领域。每个知识领域之下又分为多个子 领域,子领域又由多个主题构成(图1和图2中没有表示出来),层次清晰,体系完备 其中值得关注的是最后一个知识领域,因为此部分对应了软件工程课程建设中的基础部分和素质教育部分 图1 SWEBOK软件工程知识体系简图之 软件工程相关的知识领域包括计算机工程、计算机科学、通用管理、数学、项目管理、质量管理、软件人因学(与人的因素有关的科学)和 系统工程。需要注意的是,这些知识领域 SWEBOK并没有重新系统规定,而是直接套用己经成型的各领域知识体系,这就不可避免地存在重叠和 不匹配的问题。比如,计算机工程和计算机科学显然有众多的重复点,各管理学科以及系统工程同样也有这种现象。不过总的来看,这部分涉 及到的广度非常值得我们思考。归根结底,软件工程与其他大多工程学科相比,与人类社会有着更多更密切的联系,所以牵涉面以及对从业者 的要求也就更多。比如,在软件开发的各个阶段,如何与客户、同事沟通是非常关键的问题。在用户界面的设计和实现中,人因学的知识,显 然又是必不可少的。对于整个项目而言,管理的水平直接影响成败。而仅仅就软件管理而讲管理,不放在更大的背景中考察,只能让学生成为 井底之蛙。 图2 SWEBOK软件工程知识体系简图之二 、软件工程教育知识 在 SWEBOK的基础上,IEE与ACM又共同拟定了CSE。其中的核心部分是软件工程教育知识(SEEK)。SEEK由十个知识领域组成 1.计算机基础(CMP) 2.数学和工程学基础(FND 3.职业实践(PRF) 4.软件建模与分析(MAA)
从知识体系的角度思考软件工程课程及教材建设 发表日期:2004 年 10 月 27 日 出处:《计算机教育》第 10 期 作者:温莉芳 已经有 688 位读者读过此文 在工程界,软件工程是一个相对年轻的学科。“软件(Software)”一词直至 1958 年才由当时供职于贝尔实验室的著名统计学家 John Tukey 提出(他还创造了表示位的“bit”一词)。而“软件工程(Software Engineering)”一词则是在 1968 年北大西洋公约组织的软件工程会议上才 第一次出现。IEEE 计算机协会有关软件工程的标准制定始于 1976 年。 随着信息化的突飞猛进,软件逐渐渗透到人类社会的方方面面,从上世纪 60 年代开始,软件开发的标准化和工程化就成为计算机界的中心 课题之一。时至今日,软件工程学科虽然在实践指导作用的发挥上还任重道远,但是学科本身已经趋向成熟。其标志包括:ISO、IEEE、SEI 相 关系列标准的制定完成,世界众多高校已经开始开设专门的软件工程专业,美国和加拿大都有了权威的软件工程职业鉴定和认证等等。 在这种大背景下,制定软件工程的知识体系,并以此为基础指导软件工程的教学,也就成了大势所趋。历史上第一次全盘地审视软件工程 学科,是 20 世纪 70 年代制定 IEEE 730 标准的时候。该标准对配置管理、软件测试、软件需求、软件设计以及软件验证等领域的标准都产生了 影响。在 20 世纪 80 年代前五年,IEEE 对软件工程标准的应用组织了一系列研究和探讨,最终制定了 IEEE 1002 标准“软件工程标准的分类学”。 1995 年,在 IEEE 和美国国防部标准的基础上,形成了 ISO/IEC 12207 国际标准“软件生命期过程标准”,这是软件工程学科知识体系建设的 一个里程碑。 1993 年,IEEE 计算机协会和 ACM 共同建立了一个联合委员会,正式开始了软件工程职业实践规范的制定工作。其中,定义必需的知识体系 和推荐实践成为委员会工作的第一要务,另外两个工作目标包括制定道德规范和职业标准,定义本科、研究生和继续教育的课程体系。其中道 德规范和职业标准的制定已经于 1998 年完成,并通过了两个组织的正式批准,开始得到广泛的应用。而另两个目标也都进入最终草案的阶段, 有望在年内完成。 一、 软件工程知识体系 图 1 和图 2 为 2004 版 SWEBOK 中的软件工程知识体系简图。整个知识体系分为 11 个知识领域(Knowledge Area,KA),其中前五个知识领域 是按软件开发的生命期诸阶段(即所谓流式活动)排列的,即软件需求(又称软件分析)、软件设计、软件构造(即编码、实现)、软件测试和软件 维护;后六个知识领域则是软件开发中的支撑性或者辅助性的方面(即所谓伞式活动),一般覆盖软件开发的多个阶段甚至所有阶段,包括软件 配置管理(简称 SCM)、软件工程管理、软件工程过程、软件工程工具与方法、软件质量、相关学科知识领域。每个知识领域之下又分为多个子 领域,子领域又由多个主题构成(图 1 和图 2 中没有表示出来),层次清晰,体系完备。 其中值得关注的是最后一个知识领域,因为此部分对应了软件工程课程建设中的基础部分和素质教育部分。 图 1 SWEBOK 软件工程知识体系简图之一 软件工程相关的知识领域包括计算机工程、计算机科学、通用管理、数学、项目管理、质量管理、软件人因学(与人的因素有关的科学)和 系统工程。需要注意的是,这些知识领域 SWEBOK 并没有重新系统规定,而是直接套用已经成型的各领域知识体系,这就不可避免地存在重叠和 不匹配的问题。比如,计算机工程和计算机科学显然有众多的重复点,各管理学科以及系统工程同样也有这种现象。不过总的来看,这部分涉 及到的广度非常值得我们思考。归根结底,软件工程与其他大多工程学科相比,与人类社会有着更多更密切的联系,所以牵涉面以及对从业者 的要求也就更多。比如,在软件开发的各个阶段,如何与客户、同事沟通是非常关键的问题。在用户界面的设计和实现中,人因学的知识,显 然又是必不可少的。对于整个项目而言,管理的水平直接影响成败。而仅仅就软件管理而讲管理,不放在更大的背景中考察,只能让学生成为 井底之蛙。 图 2 SWEBOK 软件工程知识体系简图之二 二、 软件工程教育知识 在 SWEBOK 的基础上,IEEE 与 ACM 又共同拟定了 CCSE。其中的核心部分是软件工程教育知识(SEEK)。SEEK 由十个知识领域组成: 1.计算机基础(CMP) 2.数学和工程学基础(FND) 3.职业实践(PRF) 4.软件建模与分析(MAA)
5.软件设计ODES) 6.软件验证(VAV) 7.软件演化(EⅥL) 8.软件过程(PRO) 9.软件 10.软件管理(MGT) 可以看出,其中1~3都对应于 SWEBOK中相关学科的部分,当然,1中已经融入了软件构造,即编程的内容,所以后面不再单独为此阶段 设置一个领域。4~10对应于 SWEBOK其他10个知识领域,但并不是一一对应。每个知识领域又分为多个单元,单元又由多个主题组成。整个 体系如图3所示 图3SEE的知识领域与知识单元 由于教育是一种需要因地制宜、因材施教的活动,多元化考虑必不可少,因此SEE将整个体系内容又分为两类:核心和可选。核心部分并 不能构成完整的课程体系,它表示各种课程体系的必备公共集合。 三、软件工程课程建设 以SEEK为基础,就可以对软件工程的课程设置进行规划了。整个课程设置分为三个层次,即导论性课程、软件工程核心课程和其他课程 导论性课程的设置有三种,一种是软件工程为先,即导论课程就采用软件工程与计算这样的课程入门:一种是数学为先,离散结构为先导 然后还有概率论和实验方法的课程:一种是传统的计算机科学为先,从编程基础到面向对象,再到软件工程。 软件工程核心课程有两种设置,但内容均包括软件构造、软件设计与架构、软件测试、软件过程与管理等。其中,对形式化方法和大型项 目开发实践的内容更加强调 其他课程有工程经济学、小组动力学和沟通、职业实践,以及SEEK中没有包含的内容。 这三个层次可以有不同的组合,CCSE中就列举了多种,包括日本、澳大利亚等国的模式。 四、软件工程课程教材建设 根据上述知识体系和课程设置的研究,机械工业出版社针对国内的软件学院教学,推出了一套体系比较完整的“软件工程技术丛书”,丛 书封面统一采用各种建筑图片,体系则基本借鉴了 SWEBOK,只是加入了“前沿论题”的环节,主要考虑到敏捷过程等新方法不宜归入各类中。 丛书总数达到了近百种,基本覆盖了软件工程的各个知识领域、子领域和主题。其中, Pressman的《软件工程:实践者的研究方法》 Sommerville的《软件工程》(这两位作者都是 SWEBOK的顾问), Royce的《软件项目管理:一个统一的框架》, Jacobson的《软件复用》等名 著已经开始被许多学校采用为教材。从书中还包括大多数 SWEBOK和CCSE中引用的参考文献,对于国内软件工程教学和研究起到了极大的推动
5.软件设计(DES) 6.软件验证(VAV) 7.软件演化(EVL) 8.软件过程(PRO) 9.软件质量(QUA) 10.软件管理(MGT) 可以看出,其中 1~3 都对应于 SWEBOK 中相关学科的部分,当然,1 中已经融入了软件构造,即编程的内容,所以后面不再单独为此阶段 设置一个领域。4~10 对应于 SWEBOK 其他 10 个知识领域,但并不是一一对应。每个知识领域又分为多个单元,单元又由多个主题组成。整个 体系如图 3 所示。 图 3 SEEK 的知识领域与知识单元 由于教育是一种需要因地制宜、因材施教的活动,多元化考虑必不可少,因此 SEEK 将整个体系内容又分为两类:核心和可选。核心部分并 不能构成完整的课程体系,它表示各种课程体系的必备公共集合。 三、 软件工程课程建设 以 SEEK 为基础,就可以对软件工程的课程设置进行规划了。整个课程设置分为三个层次,即导论性课程、软件工程核心课程和其他课程。 导论性课程的设置有三种,一种是软件工程为先,即导论课程就采用软件工程与计算这样的课程入门;一种是数学为先,离散结构为先导, 然后还有概率论和实验方法的课程;一种是传统的计算机科学为先,从编程基础到面向对象,再到软件工程。 软件工程核心课程有两种设置,但内容均包括软件构造、软件设计与架构、软件测试、软件过程与管理等。其中,对形式化方法和大型项 目开发实践的内容更加强调。 其他课程有工程经济学、小组动力学和沟通、职业实践,以及 SEEK 中没有包含的内容。 这三个层次可以有不同的组合,CCSE 中就列举了多种,包括日本、澳大利亚等国的模式。 四、 软件工程课程教材建设 根据上述知识体系和课程设置的研究,机械工业出版社针对国内的软件学院教学,推出了一套体系比较完整的“软件工程技术丛书”,丛 书封面统一采用各种建筑图片,体系则基本借鉴了 SWEBOK,只是加入了“前沿论题”的环节,主要考虑到敏捷过程等新方法不宜归入各类中。 丛书总数达到了近百种,基本覆盖了软件工程的各个知识领域、子领域和主题。其中,Pressman 的《软件工程:实践者的研究方法》、 Sommerville 的《软件工程》(这两位作者都是 SWEBOK 的顾问),Royce 的《软件项目管理:一个统一的框架》,Jacobson 的《软件复用》等名 著已经开始被许多学校采用为教材。丛书中还包括大多数 SWEBOK 和 CCSE 中引用的参考文献,对于国内软件工程教学和研究起到了极大的推动 作用