中国系统分析员 www.csai.cn 软件工程知识体系指南(2004版) 蒋遂平翻译 蒋遂平,计算机应用专业博士,国家系统分析员,CSAI专业顾问。曾从事过数据库、 虚拟现实和人脸识别等方面的研究工作,先后参与和主持了多个系统的软件开发,主要感兴 趣的领域包括软件工程,图象处理和数据库。 Guide to the Software Engineering Body of Knowledge 2004 Version 软件工程知识体系指南是IEEE计算机学会(IEEE Computer Society)职业实践委员会 (Professional Practices Committee)主持的一个项目。SWEBOK是IEEE的官方服务标记。 http://www.swebok.org 目录 第1章引言 第2章软件需求 第3章软件设计 第4章软件构造 第5章软件测试 第6章软件维护 第7章软件配置管理 第8章软件工程管理 第9章软件工程过程 第10章软件工程工具与方法 第11章软件质量 第12章相关学科知识域 附录A2004年版软件工程知识体系指南的知识域描述规范 附录B指南演化过程 附录C IEEE和ISO软件工程标准到SWEBOK知识域的分配 附录D根据B1oom分类学的主题分类 LL711010111711110111711011111111111777117171111111117717710177
软件工程知识体系指南(2004 版) 蒋遂平 翻译 蒋遂平,计算机应用专业博士,国家系统分析员,CSAI 专业顾问。曾从事过数据库、 虚拟现实和人脸识别等方面的研究工作,先后参与和主持了多个系统的软件开发,主要感兴 趣的领域包括软件工程,图象处理和数据库。 Guide to the Software Engineering Body of Knowledge 2004 Version 软件工程知识体系指南是IEEE计算机学会(IEEE Computer Society)职业实践委员会 (Professional Practices Committee)主持的一个项目。®SWEBOK是IEEE的官方服务标记。 http://www.swebok.org 目录 第1章 引言 第2章 软件需求 第3章 软件设计 第4章 软件构造 第5章 软件测试 第6章 软件维护 第7章 软件配置管理 第8章 软件工程管理 第9章 软件工程过程 第10章 软件工程工具与方法 第11章 软件质量 第12章 相关学科知识域 附录A 2004年版软件工程知识体系指南的知识域描述规范 附录B 指南演化过程 附录C IEEE和ISO软件工程标准到SWEBOK知识域的分配 附录D 根据Bloom分类学的主题分类 ///////////////////////////////////////////////////////////////////
第一章指南简介 尽管全世界有数百万软件开发人员,软件在我们的社会中无处不在,软件工程在最近才 达到了合理的工程学科和被认可的职业的状态。 一个职业在核心知识体系上达成一致,是所有学科的关键里程碑,EEE计算机学会认为 这是软件工程向职业状态演化的关键。本指南是在职业实践委员会的主持赞助下编写成的, 它是一个被设计为达到这个一致的跨越数年的项目的一部分。 什么是“软件工程”? IEEE计算机学会将“软件工程”定义为:“(1)应用系统化的、学科化的、定量的方 法,来开发、运行和维护软件,即,将工程应用到软件。(2)对(1)中各种方法的研究”。 (参见:IEEE Standard Glossary of Software Engineering Terminology。IEEE,Piscataway, NJ std610.12-1990,1990) 什么是被认可的职业? 软件工程要成为合理的工程学科和一个被认可的职业,在一个核心知识体系上达成一致 就非常重要。Strr在定义什么将被认为是一个合理的学科和一个被认可的职业时,清楚地 展示了这点。他在获得普利策奖的关于美国医学职业历史的书中,写道: “专业人员威信的合法化涉及3个不同的需要:首先,专业人员的知识和能力能被其同 行所确认:第二,这些被一致确认的知识依靠理性的、科学的基础,第三,专业人员的判断 和建议要面向真实的价值,例如健康。这些合法性的各个方面对应于体现在术语“职业”上 的各类属性:学院的、认知的和道德的。(参见:P.Starr,The Social Transformation of American Medicine:Basic Books,1982.pl5). 什么是一个职业的特征? Gary Ford和Norman Gibbs研究了几个被认可的职业,包括医学、法律、工程和会计等 (参见:G Ford and N E Gibbs,“A Mature Profession of Software Engineering,” Software Engineering Institute,Carnegie Mellon University,Pittsburgh, Pennsylvania,Technical CMU/SEI-96-TR-004,January1996)。他们的结论是,一个工 程职业由下列几个特征刻画:(1)由团体通过认证而确认的课程表的初始职业教育:(2) 通过自愿认证或强制许可的适应实践的注册:(3)专门的技术培养和继续职业教育:(4) 有职业团体的公共支持:(5)承诺遵从以伦理准则形式形成的规范。 本指南包括了这些成分的前面3个。清晰地指出知识体系是发展一个职业关键的一步, 因为它代表了对于软件工程专业人员应该知道什么的一个广泛的一致意见。没有这样的一 致,就不能确认任何职业许可的考试,就不能为专业人员参与考试准备课程表,也就不能形 成一个认证一个课程表的准则。达成一致也是一个组织中采纳发展连贯技能和继续职业教育 程序的前提。 什么是SWEBOK项目的目标? 不应当将指南与知识体系本身混淆,知识体系己经存在与发表的文献中,指南的目的是 描述知识体系的哪些部分己经被普遍接受,将这些部分组织起来,提供一个使用它们的主题。 对于“普遍接受”包含的附加信息可以在下面或附录A中找到。 建立软件工程知识体系(SWEB0K)指南有下面5个目的:(1)促进世界范围内对软件工 程的一致观点:(2)阐明软件工程相对其它学科(如计算机科学、项目管理、计算机工程
第一章 指南简介 尽管全世界有数百万软件开发人员,软件在我们的社会中无处不在,软件工程在最近才 达到了合理的工程学科和被认可的职业的状态。 一个职业在核心知识体系上达成一致,是所有学科的关键里程碑,IEEE计算机学会认为 这是软件工程向职业状态演化的关键。本指南是在职业实践委员会的主持赞助下编写成的, 它是一个被设计为达到这个一致的跨越数年的项目的一部分。 什么是“软件工程”? IEEE计算机学会将“软件工程”定义为:“(1)应用系统化的、学科化的、定量的方 法,来开发、运行和维护软件,即,将工程应用到软件。(2)对(1)中各种方法的研究”。 (参见:IEEE Standard Glossary of Software Engineering Terminology。IEEE, Piscataway, NJ std 610.12-1990, 1990) 什么是被认可的职业? 软件工程要成为合理的工程学科和一个被认可的职业,在一个核心知识体系上达成一致 就非常重要。Starr在定义什么将被认为是一个合理的学科和一个被认可的职业时,清楚地 展示了这点。他在获得普利策奖的关于美国医学职业历史的书中,写道: “专业人员威信的合法化涉及3个不同的需要:首先,专业人员的知识和能力能被其同 行所确认;第二,这些被一致确认的知识依靠理性的、科学的基础,第三,专业人员的判断 和建议要面向真实的价值,例如健康。这些合法性的各个方面对应于体现在术语“职业”上 的各类属性:学院的、认知的和道德的。(参见:P. Starr, The Social Transformation of American Medicine: Basic Books, 1982. p15)。 什么是一个职业的特征? Gary Ford和Norman Gibbs研究了几个被认可的职业,包括医学、法律、工程和会计等 (参见:G Ford and N E Gibbs, “A Mature Profession of Software Engineering,” Software Engineering Institute, Carnegie Mellon University, Pittsburgh, Pennsylvania, Technical CMU/SEI-96-TR-004, January 1996)。他们的结论是,一个工 程职业由下列几个特征刻画:(1)由团体通过认证而确认的课程表的初始职业教育;(2) 通过自愿认证或强制许可的适应实践的注册;(3)专门的技术培养和继续职业教育;(4) 有职业团体的公共支持;(5)承诺遵从以伦理准则形式形成的规范。 本指南包括了这些成分的前面3个。清晰地指出知识体系是发展一个职业关键的一步, 因为它代表了对于软件工程专业人员应该知道什么的一个广泛的一致意见。没有这样的一 致,就不能确认任何职业许可的考试,就不能为专业人员参与考试准备课程表,也就不能形 成一个认证一个课程表的准则。达成一致也是一个组织中采纳发展连贯技能和继续职业教育 程序的前提。 什么是SWEBOK项目的目标? 不应当将指南与知识体系本身混淆,知识体系已经存在与发表的文献中,指南的目的是 描述知识体系的哪些部分已经被普遍接受,将这些部分组织起来,提供一个使用它们的主题。 对于“普遍接受”包含的附加信息可以在下面或附录A中找到。 建立软件工程知识体系(SWEBOK)指南有下面5个目的:(1)促进世界范围内对软件工 程的一致观点;(2)阐明软件工程相对其它学科(如计算机科学、项目管理、计算机工程
和数学等)的位置,并确立它们的分界:(3)刻画软件工程学科的内容:(4)提供使用知 识体系的主题:(5)为开发课程表和个人认证与许可材料,提供一个基础。 第一个目标,促进世界范围内对软件工程的一致观点,由指南的开发过程支持,来自42 个国家的大约500名评审人员参与了石人阶段(1998年一2001年),产生了试用版本,来自 21个国家的120多位评审人员参与了铁人阶段(2003年),产生了2004年版本。关于指南开 发过程的更多信息可以在前言看到,或者在wwW.swebok.org网站上看到。我们与涉及软件 工程的职业和学术团体、公共机构等进行了接触,向它们告知了本项目,邀请它们参与评审 过程。我们从北美、太平洋周边地区和欧洲,招募了指南的副编辑,在多个国际会议场合, 做了本项目的演示报告,在以后,我们还安排了一些关于本项目的报告。 第二个目标,为软件工程确立边界,激发了本指南的基本组织。被认为是本学科的材料 按照表1,组织为l0个知识域(Knowledge Areas,KA),本指南对每个知识域分别用一章的 篇幅来描述。 表1:SWEBOK知识域 软件需求 Software Requirements 软件设计 Software Design 软件构造 Software Construction 软件测试 Software Testing 软件维护 Software Maintenance 软件配置管理 Software Configuration Management 软件工程管理 Software Engineering Management 软件工程过程 Software Engineering Process 软件工程工具和方法 Software Engineering Tools and Methods 软件质量 Software Quality 在建立边界时,识别哪些学科与软件工程共享边界并有公共的交集,非常重要。最后, 本指南识别出8个相关的学科,如表2所示(参见第12章,软件工程相关学科)。当然,软件 工程具有来自这些学科的知识材料(知识域将参考它们),但是,SWEB0K指南的目标不是刻 画相关学科的知识,而是刻画什么知识被认为对软件工程特别有用。 表2相关学科 计算机工程 Computer Engineering 计算机科学 Computer Science 管理 Management 数学 Mathematics 项目管理 Project Management 质量管理 Quality Management 软件人类工程学 Software Ergonomics 系统工程 Systems Engineering 层次结构组织 知识域描述或章节Z的组织支持项目的第3个目标-一一刻画软件工程的内容。项目编辑组 给各个副编辑提供的关于知识域描述的内容的详细规格说明,可以在附录A中找到。 本指南采用层次组织,将每个知识域分解为具有可识别标签的主题的集合。两级或三级
和数学等)的位置,并确立它们的分界;(3)刻画软件工程学科的内容;(4)提供使用知 识体系的主题;(5)为开发课程表和个人认证与许可材料,提供一个基础。 第一个目标,促进世界范围内对软件工程的一致观点,由指南的开发过程支持,来自42 个国家的大约500名评审人员参与了石人阶段(1998年—2001年),产生了试用版本,来自 21个国家的120多位评审人员参与了铁人阶段(2003年),产生了2004年版本。关于指南开 发过程的更多信息可以在前言看到,或者在www.swebok.org 网站上看到。我们与涉及软件 工程的职业和学术团体、公共机构等进行了接触,向它们告知了本项目,邀请它们参与评审 过程。我们从北美、太平洋周边地区和欧洲,招募了指南的副编辑,在多个国际会议场合, 做了本项目的演示报告,在以后,我们还安排了一些关于本项目的报告。 第二个目标,为软件工程确立边界,激发了本指南的基本组织。被认为是本学科的材料 按照表1,组织为10个知识域(Knowledge Areas,KA),本指南对每个知识域分别用一章的 篇幅来描述。 表1:SWEBOK知识域 软件需求 Software Requirements 软件设计 Software Design 软件构造 Software Construction 软件测试 Software Testing 软件维护 Software Maintenance 软件配置管理 Software Configuration Management 软件工程管理 Software Engineering Management 软件工程过程 Software Engineering Process 软件工程工具和方法 Software Engineering Tools and Methods 软件质量 Software Quality 在建立边界时,识别哪些学科与软件工程共享边界并有公共的交集,非常重要。最后, 本指南识别出8个相关的学科,如表2所示(参见第12章,软件工程相关学科)。当然,软件 工程具有来自这些学科的知识材料(知识域将参考它们),但是,SWEBOK指南的目标不是刻 画相关学科的知识,而是刻画什么知识被认为对软件工程特别有用。 表2 相关学科 计算机工程 Computer Engineering 计算机科学 Computer Science 管理 Management 数学 Mathematics 项目管理 Project Management 质量管理 Quality Management 软件人类工程学 Software Ergonomics 系统工程 Systems Engineering 层次结构组织 知识域描述或章节Z的组织支持项目的第3个目标----刻画软件工程的内容。项目编辑组 给各个副编辑提供的关于知识域描述的内容的详细规格说明,可以在附录A中找到。 本指南采用层次组织,将每个知识域分解为具有可识别标签的主题的集合。两级或三级
的结构分解,为找到感兴趣的主题提供了合理的方法。指南处理主题的方式与主流的思想学 派的结构分解兼容,也与工业界和软件工程文献和标准的结构分解兼容。没有为主题的结构 分解假设特定的应用领域、商业使用、管理哲学、开发方法等。每个主题的描述程度仅仅为 主题的普遍接受特性需要的,并能让读者容易找到参考文献。总之,知识体系可以在参考材 料中,而不是在指南中找到。 参考材料和矩阵 项目的第4个目标是提供按主题使用知识,本指南为每个知识域标明了参考材料,包括 书记章节、论文和其它被认可的权威信息来源。每个知识域的描述也包括一个矩阵,将参考 材料与主题联系起来。引用的文献的总量适合于大学本科毕业、具有4年工作经验的人员掌 握。 在本版指南中,为所有知识域都分配了约500页的参考文献,这是对副编辑的规格说明。 有人指出,一些知识域(如软件设计)需要更多的参考文献。本指南的以后版本将考虑这一 点。 应该指出,指南并不打算在引用时包罗万象,没有包括很多适当的优秀材料,选择材料 部分或主要是由于它覆盖了需要的主题。 处理的深度 从一开始,指南的深度问题就有了。项目组采纳了一个方法,以支持项目的第5个目标: 为开发课程表、认证和许可提供一个基础。编辑组使用“普遍接受”的知识的准则,与高级 研究知识(根据成熟性)和专门知识(基于应用的普遍性)进行区分,如图1所示。这个定 义来自项目管理协会:“普遍接受的知识在大多数时间应用于大多数项目,广泛的一致意见 确认其价值和效力”。(参见:A Guide to the Project Management Body of Knowledge, 2000 Edition,Project Management Institute,Newport Square,PA.www.pmi.org. 但是,术语“普遍接受”并不意味着,指定的知识应该一律地应用于所有软件工程任务 (每个项目需要确定需要的知识),但它意味着,有能力的软件工程师,为了胜任潜在的应 用,应该具有这些知识。更确切地说,普遍接受的知识应该包括在软件工程师的许可考试的 学习材料中,本这是本科毕业并工作4年后应该参加的考试。尽管这个准则是针对美国风格 的教育的,并不适合于其它国家,但我们认为它很有用。但是,普遍接受的知识的两个定义 应该被视为互补的。 专门的 普遍接受的 许多组织推荐的己经建立的 仅用于某些 传统实践 特定类型软 高级的研究性的 件的实践 被某些组织测试和使用的新 的实践、研究组织正在发展 和测试的概念 图1知识的分类 与本书格式有关的局限
的结构分解,为找到感兴趣的主题提供了合理的方法。指南处理主题的方式与主流的思想学 派的结构分解兼容,也与工业界和软件工程文献和标准的结构分解兼容。没有为主题的结构 分解假设特定的应用领域、商业使用、管理哲学、开发方法等。每个主题的描述程度仅仅为 主题的普遍接受特性需要的,并能让读者容易找到参考文献。总之,知识体系可以在参考材 料中,而不是在指南中找到。 参考材料和矩阵 项目的第4个目标是提供按主题使用知识,本指南为每个知识域标明了参考材料,包括 书记章节、论文和其它被认可的权威信息来源。每个知识域的描述也包括一个矩阵,将参考 材料与主题联系起来。引用的文献的总量适合于大学本科毕业、具有4年工作经验的人员掌 握。 在本版指南中,为所有知识域都分配了约500页的参考文献,这是对副编辑的规格说明。 有人指出,一些知识域(如软件设计)需要更多的参考文献。本指南的以后版本将考虑这一 点。 应该指出,指南并不打算在引用时包罗万象,没有包括很多适当的优秀材料,选择材料 部分或主要是由于它覆盖了需要的主题。 处理的深度 从一开始,指南的深度问题就有了。项目组采纳了一个方法,以支持项目的第5个目标: 为开发课程表、认证和许可提供一个基础。编辑组使用“普遍接受”的知识的准则,与高级 研究知识(根据成熟性)和专门知识(基于应用的普遍性)进行区分,如图1所示。这个定 义来自项目管理协会:“普遍接受的知识在大多数时间应用于大多数项目,广泛的一致意见 确认其价值和效力”。(参见:A Guide to the Project Management Body of Knowledge, 2000 Edition, Project Management Institute, Newport Square, PA. www.pmi.org.) 但是,术语“普遍接受”并不意味着,指定的知识应该一律地应用于所有软件工程任务 (每个项目需要确定需要的知识),但它意味着,有能力的软件工程师,为了胜任潜在的应 用,应该具有这些知识。更确切地说,普遍接受的知识应该包括在软件工程师的许可考试的 学习材料中,本这是本科毕业并工作4年后应该参加的考试。尽管这个准则是针对美国风格 的教育的,并不适合于其它国家,但我们认为它很有用。但是,普遍接受的知识的两个定义 应该被视为互补的。 专门的 仅用于某些 特定类型软 件的实践 普遍接受的 许多组织推荐的已经建立的 传统实践 高级的研究性的 被某些组织测试和使用的新 的实践、研究组织正在发展 和测试的概念 图 1 知识的分类 与本书格式有关的局限
本版本采用的书记格式有其局限。如果采用超文本结构,内容的本质将会更好,因为主 题可以相互链接,而不是按顺序排列。 有时,知识域之间、子知识域之间等的边界多少有些武断。没有过多强调这些边界的重 要性,我们尽可能地在相关或有用的地方,使用指示器和链接。 知识域之间的链接并不是输入/输出类型,知识域是对一个人应该拥有的与知识域有关 的软件工程知识的观点。知识域内的学科结构分解,以及描述知识域的顺序安排,都没有吸 收任何特定的方法和模型。指南中适当的知识域中描述了一些方法,指南本身并不是任何一 种方法。 知识域 图2和图3从总体上描述了11章,以及各章中包括的主题。首先按传统的瀑布生命周期顺 序描述前5个知识域,但是,这并不表示指南采纳或鼓励瀑布方法,或任何其它模型。随后 按字母顺序描述各个知识域,最后一章描述相关的学科。这相当于它们出现在本指南中的顺 序。 软件工程知识体系(SWEB0K)指南2004年版 软件需求 软件设计 软件构造 软件测试 软件维护 ◆软件需求基础 ◆软件设计基础 ◆软件构造基础 ◆软件测试基础 ◆软件维护基础 ◆需求过程 ◆软件设计 ◆管理构造 测试级别 ◆软件维护的 ◆需求获取 关键问题 ◆实际考虑 ◆测试技术 关键问题 需求分析 ◆软件结构与 需求分析 ◆维护过程 体系结构 ◆需求规格说明 ◆与测试相关 ◆维护技术 软件设计质量 ◆需求确认 的分析与评价 的度量 ◆实际考虑 ◆软件设计符号 测试过程 ◆软件设计的 策略与方法 (a) (b) (c) (d) (e) 图2前5个知识域
本版本采用的书记格式有其局限。如果采用超文本结构,内容的本质将会更好,因为主 题可以相互链接,而不是按顺序排列。 有时,知识域之间、子知识域之间等的边界多少有些武断。没有过多强调这些边界的重 要性,我们尽可能地在相关或有用的地方,使用指示器和链接。 知识域之间的链接并不是输入/输出类型,知识域是对一个人应该拥有的与知识域有关 的软件工程知识的观点。知识域内的学科结构分解,以及描述知识域的顺序安排,都没有吸 收任何特定的方法和模型。指南中适当的知识域中描述了一些方法,指南本身并不是任何一 种方法。 知识域 图2和图3从总体上描述了11章,以及各章中包括的主题。首先按传统的瀑布生命周期顺 序描述前5个知识域,但是,这并不表示指南采纳或鼓励瀑布方法,或任何其它模型。随后 按字母顺序描述各个知识域,最后一章描述相关的学科。这相当于它们出现在本指南中的顺 序。 软件工程知识体系(SWEBOK)指南 2004 年版 软件需求 软件设计 软件构造 软件测试 软件维护 软件需求基础 需求获取 需求分析 需求规格说明 需求确认 实际考虑 需求过程 软件设计基础 软件结构与 体系结构 软件设计质量 的分析与评价 软件设计符号 软件设计 关键问题 软件构造基础 实际考虑 管理构造 软件测试基础 测试技术 需求分析 与测试相关 的度量 测试过程 测试级别 软件维护基础 维护过程 维护技术 软件维护的 关键问题 软件设计的 策略与方法 图 2 前 5 个知识域 (a) (b) (c) (d) (e)