软件工程知识体系指南(2004版) GuidetotheSoftwareEngineeringBodyofKnowledge2004 ersion 软件工程知识体系指南是IEEE计算机学会(IEEE Computer Society)职业实践委员会(ProfessionalPracticesCommittee)主持的一个项目。?SWEBOK是IEEE的官方服务标记。 指南简介一个职业在核心知识体系上达成一致,是所有学科的关键里程碑,IEEE计算机学会认为这是软件工程向职业状态演化的关键。 1.什么是“软件工程”? IEEE计算机学会将“软件工程”定义为:“(1)应用系统化的、学科化的、定量的方法,来开发、运行和维护软件,即,将工程应用到软件。(2)对(1)中各种方法的研究”。 2.什么是被认可的职业? 软件工程要成为合理的工程学科和一个被认可的职业,在一个核心知识体系上达成一致就非常重要。Starr在定义什么将被认为是一个合理的学科和一个被认可的职业时,清楚地展示了这点。他在获得普利策奖的关于美国医学职业历史的书中,写道: “专业人员威信的合法化涉及3个不同的需要:首先,专业人员的知识和能力能被其同行所确认;第二,这些被一致确认的知识依靠理性的、科学的基础,第三,专业人员的判断和建议要面向真实的价值,例如健康。这些合法性的各个方面对应于体现在术语“职业”上的各类属性:学院的、认知的和道德的。 3.什么是一个职业的特征? Gary Ford和Norman Gibbs研究了几个被认可的职业,包括医学、法律、工程和会计等。他们的结论是,一个工程职业由下列几个特征刻画:(1)由团体通过认证而确认的课程表的初始职业教育;(2)通过自愿认证或强制许可的适应实践的注册;(3)专门的技术培养和继续职业教育;(4)有职业团体的公共支持;(5)承诺遵从以伦理准则形式形成的规范。 本指南包括了这些成分的前面3个。清晰地指出知识体系是发展一个职业关键的一步,因为它代表了对于软件工程专业人员应该知道什么的一个广泛的一致意见。没有这样的一致,就不能确认任何职业许可的考试,就不能为专业人员参与考试准备课程表,也就不能形成一个认证一个课程表的准则。达成一致也是一个组织中采纳发展连贯技能和继续职业教育程序的前提。 4.什么是SWEBOK项目的目标? 不应当将指南与知识体系本身混淆,知识体系已经存在与发表的文献中,指南的目的是描述知识体系的哪些部分已经被普遍接受,将这些部分组织起来,提供一个使用它们的主题。 建立软件工程知识体系(SWEBOK)指南有下面5个目的:(1)促进世界范围内对软件工程的一致观点;(2)阐明软件工程相对其它学科(如计算机科学、项目管理、计算机工程和数学等)的位置,并确立它们的分界;(3)刻画软件工程学科的内容;(4)提供使用知识体系的主题;(5)为开发课程表和个人认证与许可材料,提供一个基础。 第一个目标,促进世界范围内对软件工程的一致观点,由指南的开发过程支持,来自42个国家的大约500名评审人员参与了石人阶段(1998年—2001年),产生了试用版本,来自21个国家的120多位评审人员参与了铁人阶段(2003年),产生了2004年版本。我们与涉及软件工程的职业和学术团体、公共机构等进行了接触,向它们告知了本项目,邀请它们参与评审过程。我们从北美、太平洋周边地区和欧洲,招募了指南的副编辑,在多个国际会议场合,做了本项目的演示报告,在以后,我们还安排了一些关于本项目的报告。 第二个目标,为软件工程确立边界,激发了本指南的基本组织。被认为是本学科的材料按照表1,组织为10个知识域(KnowledgeAreas,KA)。 表1:SWEBOK知识域
在建立边界时,识别哪些学科与软件工程共享边界并有公共的交集,非常重要。最后,本指南识别出8个相关的学科,如表2所示。当然,软件工程具有来自这些学科的知识材料(知识域将参考它们),但是,SWEBOK指南的目标不是刻画相关学科的知识,而是刻画什么知识被认为对软件工程特别有用。 表2 相关学科
5.层次结构组织 知识域描述或章节的组织支持项目的第3个目标----刻画软件工程的内容。项目编辑组给各个副编辑提供的关于知识域描述的内容的详细规格说明,可以在附录A中找到。 本指南采用层次组织,将每个知识域分解为具有可识别标签的主题的集合。两级或三级的结构分解,为找到感兴趣的主题提供了合理的方法。指南处理主题的方式与主流的思想学派的结构分解兼容,也与工业界和软件工程文献和标准的结构分解兼容。没有为主题的结构分解假设特定的应用领域、商业使用、管理哲学、开发方法等。每个主题的描述程度仅仅为主题的普遍接受特性需要的,并能让读者容易找到参考文献。总之,知识体系可以在参考材料中,而不是在指南中找到。 6.参考材料和矩阵 项目的第4个目标是提供按主题使用知识,本指南为每个知识域标明了参考材料,包括书记章节、论文和其它被认可的权威信息来源。每个知识域的描述也包括一个矩阵,将参考材料与主题联系起来。引用的文献的总量适合于大学本科毕业、具有4年工作经验的人员掌握。 在本版指南中,为所有知识域都分配了约500页的参考文献,这是对副编辑的规格说明。有人指出,一些知识域(如软件设计)需要更多的参考文献。本指南的以后版本将考虑这一点。 应该指出,指南并不打算在引用时包罗万象,没有包括很多适当的优秀材料,选择材料部分或主要是由于它覆盖了需要的主题。 7.处理的深度 从一开始,指南的深度问题就有了。项目组采纳了一个方法,以支持项目的第5个目标:为开发课程表、认证和许可提供一个基础。编辑组使用“普遍接受”的知识的准则,与高级研究知识(根据成熟性)和专门知识(基于应用的普遍性)进行区分,如图1所示。这个定义来自项目管理协会:“普遍接受的知识在大多数时间应用于大多数项目,广泛的一致意见确认其价值和效力”。但是,术语“普遍接受”并不意味着,指定的知识应该一律地应用于所有软件工程任务(每个项目需要确定需要的知识),但它意味着,有能力的软件工程师,为了胜任潜在的应用,应该具有这些知识。更确切地说,普遍接受的知识应该包括在软件工程师的许可考试的学习材料中,本这是本科毕业并工作4年后应该参加的考试。尽管这个准则是针对美国风格的教育的,并不适合于其它国家,但我们认为它很有用。但是,普遍接受的知识的两个定义应该被视为互补的。
图1 知识的分类 8.知识域 按传统的瀑布生命周期顺序描述知识域,但是,这并不表示指南采纳或鼓励瀑布方法,或任何其它模型。
9.知识域描述结构 知识域描述的结构如下所述:在简介中,给出知识域的简要定义、其范围的总体视图、与其它知识域的关系。主题的结构分解组成每个知识域描述的核心,它描述了将知识域分解为子域、主题和子主题。对于每个主题或子主题,给出简要描述。 (1)软件需求知识域 需求定义为解决真实世界问题而必须展示的特性。 第一个知识子域是软件需求基础,它包括软件需求本身的定义、主要的需求类型的定义,如产品与过程、功能与非功能、突发性(emergent)特性等。子域也描述了可量化需求的重要性,并区分了系统的和软件的需求。 第二个子域是需求过程,它介绍过程本身,面向余下的5个子域,说明需求工程如何与其它软件工程过程吻合。它描述了过程模型、过程参与者、过程支持与管理、过程质量与改进。 第三个子域是需求获取,它涉及软件需求来自何方?软件工程师如何收集这些需求,它包括需求来源和收集技术。 第四个子域是需求分析,涉及分析需求的过程:(1)检测和解决需求之间的冲突;(2)发现软件的边界,以及软件如何与外界交互;(3)详细描述系统需求和软件需求。需求分析包括需求分类、概念建模、体系结构设计与需求分配、需求协商。 第五个子域是需求规格说明,一般是指产生一份(电子)文档,这样可以系统地评审、评价和批准需求。对于复杂系统,特别是涉及大量非软件组件的系统,至少需要产生3类不同的文档:系统定义、系统需求规格说明、软件需求规格说明。子域描述了这3类文档,以及产生它们的活动。 第六个子域是需求确认,目标是在分配资源给需求之前,发现任何潜在的问题。需求确认涉及检查需求文档,以保证它们定义了正确的系统(即,这是用户期望的系统)。这个子域进一步划分为需求评审的引导、快速原型、模型确认和接收测试的描述。 第七个和最后一个子域是实际考虑,它描述在实践中需要理解的主题。第一个主题是需求过程的迭代本质,后面3个主题是关于处于实际反映了要建造或已经建造的软件的状态的需求的变更管理和维护。它包括变更管理、需求属性、需求追踪。最后一个的主题是需求度量。 (2)软件设计知识域 根据IEEE的定义,设计既是“定义一个系统或组件的体系结构、组件、接口和其它特征的过程”,又是“这个过程的结果”。软件设计的知识域分为6个子域。 第一个子域是软件设计基础,它是理解软件设计作用和范围的基础,这些是:一般的软件概念、软件设计上下文和软件设计的使能(enabling)技术。 第二个子域将软件设计的关键问题聚集在一起,它们包括:并发性、事件的控制和处理、组件的分布、错误和异常处理、容错、交互与表现、数据持久性。 第三个子域是软件结构与体系结构,它的主题是体系结构与视点、体系结构风格、设计模式、程序与构架族。 第四个子域描述软件设计质量的分析与评价。虽然有一个完整的软件质量知识域,这个子域描述与软件设计质量特别有关的主题。这些方面包括:质量属性、质量分析和评价技术与度量。 第五个子域是软件设计符号,它分为结构与行为描述两部分。最后一个子域是软件设计策略与方法。首先描述一般策略,然后是面向功能的设计方法、向对象的设计方法、以数据结构为中心的设计、基于组件的设计和其它方法。 (3)软件构造 软件构造指通过编码、验证、单元测试、集成测试和排错的组合,详细创建一个可以工作的、有意义的软件,其知识域分为3个子域。 第一个子域是软件构造的基础,前3个主题是:复杂性最小化、变更预见和为验证进行构造。最后一个主题讨论软件构造的标准。 第二个子域描述构造的管理,主题包括:构造的模型、构造的计划、构造的度量。 第三个子域覆盖实践考虑,主题包括:构造的设计、构造的语言、编码、构造的测试、复用、构造的质量和集成。 (4)软件测试 软件测试由在有限测试用例集合上,根据期望的行为,对程序的行为进行的动态验证组成,测试用例是从实际上是无限的执行域中适当的选择出来的。软件测试包括5个子域。 第一个子域是软件测试基础,首先介绍与测试有关的术语,然后描述测试的关键问题,最后是测试与其它活动的联系。 第二个子域是测试级别,这些是根据测试对象(target)和测试目标来划分的。 第三个子域是测试技术。第一个范畴包括基于测试人员直觉和经验的测试,第二组是基于规格说明的技术组成,然后是基于代码的技术、基于错误(fault)的技术、基于使用的技术和与应用本质有关的技术。最后讨论如何选择和组合适当的技术。 第四个子域是测试相关的度量,度量划分为:与被测试的程序的评价有关的度量、与测试本身的评价有关的度量。 最后一个子域是测试过程,包括了测试时的实际考虑和测试活动。 (5)软件维护 软件一旦投入运行,就可能出现异常,运行环境可能发生改变,用户回提出新的需求。生命周期的维护阶段从软件交付时开始,但维护活动出现得还要早。软件维护知识域划分为4个子域。 第一个子域是软件维护基础:定义和术语、维护的本质特征、维护的必要性、维护成本的大份额性、软件的进化、维护的分类。 第二个子域将软件维护中的关键问题聚集在一起,这些是:技术问题、管理问题、维护成本估算和软件维护度量。 第三个子域是维护过程,其中的主题包括各种维护过程和维护活动。 第四个子域是维护技术,包括程序的理解、再工程和逆向工程。 (6)软件配置管理 软件配置管理(Software ConfigurationManagement,SCM)是为了系统地控制配置的变更和维护配置在整个系统的生命周期中的完整性和可追踪性,而标识软件在时间上不同点的配置的学科。这个知识域包括6个子域。 第一个子域是SCM过程管理,包括的主题有:SCM的组织结构上下文、SCM的约束和指导、SCM计划、SCM计划本身和SCM的监管。 第二个子域是软件配置标识,它识别要控制的项目,为各个项目及其版本建立标识方案,确定在获取和管理被控制项目中要使用的工具和技术。子域中第一个主题是识别要控制的项目和软件库。 第三个子域是软件配置控制,它管理软件生命周期中的变更。其中的主题包括:(1)软件变更的请求、评价和批准;(2)实现软件变更;(3)偏离和放弃(deviation and waiver)。 第四个子域是软件配置状态簿记,其主题有软件配置状态信息和软件配置状态报告生成。 第五个子域是软件配置审计,包括:软件功能配置审计、软件物理配置审计、软件基线的过程内部(in-process)审计。最后一个子域是软件发布管理和交付,覆盖软件建造和软件发布管理。 (7)软件工程管理 软件工程管理知识域处理软件工程的管理与度量,虽然度量是所有知识域的一个重要方面,但在这里涉及的是度量程序的主题。软件工程管理6个子域,前5个覆盖软件工程管理,第六个描述软件度量的程序。 第一个子域是启动和范围定义,它由需求的确定与协商、可行性分析、需求的评审和修订过程组成。 第二个子域是软件工程计划,包括过程计划、确定可交付成果、工作量、进度与成本估算、资源分配、风险管理、质量管理、计划本身的管理。 第三个子域是软件项目实施,它的主题是:计划的实现、供应商合同管理、度量过程的实现、过程的监理、过程的控制、报告生成。 第四个主题是评审与评价,主题有:确定需求的满足程度、评审和评价项目性能。 第五个主题描述项目的关闭:确定关闭项目、关闭涉及的活动。 第六个子域描述软件工程度量,特别是度量本身的程序。产品和过程的度量在软件工程过程知识域中描述,许多其它知识域也描述其特定的度量。这个子域的主题包括:建立和维持度量工作、度量过程的计划、进行度量过程和评估度量。 (8)软件工程过程 软件工程过程的知识域涉及软件工程过程本身的定义、实现、评定、度量、管理、变更和改进。它分为4个子域。 第一个子域是过程实现与变更,其主题有:构成基础结构、软件过程管理周期、过程实现与变更的模型、实际考虑。 第二个子域处理多成定义,主题有:软件生命周期模型、软件生命周期过程、过程定义符号、过程适配(adaptation)和自动化。 第三个子域是过程评定,主题有:过程评定模型和过程评定方法。 第四个子域描述过程与产品度量。软件工程过程覆盖一般的产品度量,以及过程度量。特定于各知识域的度量在相关的知识域描述。子域的主题有:过程度量、软件产品度量、度量结果的质量、软件信息模型和过程度量技术。 (9)软件工程工具和方法 软件工程工具和方法知识域包括软件工程工具、软件工程方法。软件工程工具子域使用了与指南相同的结构,为其它9个软件工程知识域各分配一个主题,附加一个主题是其它工具问题,例如工具集成技术,这些问题可能应用于所有类型的工具。 软件工程方法子域分为3个小节:处理形式化途径的启发式方法、处理基于数学的途径的形式化方法、处理基于各种原型的软件开发途径的原型方法。 (10)软件质量 软件质量知识域处理跨越软件生命周期过程的软件质量的考虑,由于软件质量在软件工程中无处不在,其它知识域也涉及质量问题,读者可以注意到本知识域到其它知识域的指示器。本知识域覆盖3个子域。 第一个子域描述软件质量基础,例如软件工程文化和伦理学、质量的价值与成本、模型和质量特征和质量改进。 第二个子域覆盖软件质量管理过程,主题有:软件质量保证、验证和确认、评审和审计。 第三个即最后一个子域描述与软件质量有关的实际考虑,主题包括:软件质量需求、缺陷特征、软件质量管理技术、软件质量度量。 (11)软件工程相关学科 最后一章是软件工程相关学科。为确定软件工程的范围,有必要鉴别与软件工程有公共边界的学科,这一章按字母顺序,鉴别这些相关学科。对每个相关学科,使用我们找到的基于一致认可的来源,进行以下内容的鉴别:(1)资料性定义(可行时);(2)知识域列表。相关学科包括:计算机工程、计算机科学、管理、数学、项目管理、质量管理、软件人类工程学、系统工程。 |
|