购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.4 软件工程学科范畴及知识体系

1.4.1 软件工程学科

软件工程包含软件工程领域的基础理论、工程方法与技术体系,为软件产业的发展提供了理论、技术与人才支撑。

软件工程学科具有完善的教育体系。2010年软件工程专业教学指导分委员会编制了《高等学校软件工程本科专业规范》,此规范明确提出了我国软件工程专业本科教育的人才培养目标:软件工程的本科教育重点培养软件工程学科的基础知识和基本实践能力,培养德、智、体、美全面发展,掌握自然科学和人文社科基础知识、计算机科学基础理论、软件工程专业及应用知识,具有软件开发能力,具有软件开发实践的初步经验和项目组织的基本能力,具有初步的创新、创业意识,具有竞争和团队精神,具有良好的外语运用能力,能适应技术进步和社会需求变化的高素质软件工程专门人才。

《高等学校软件工程本科专业规范》还对软件工程学科的知识体系、课程体系、实践能力培养体系、创新训练体系、软件工程应用、办学条件及主要参考指标等内容进行了概要性阐述,该规范对软件工程专业的建设具有很好的指导作用。

1.4.2 软件工程知识体系

软件工程学科具有系统的知识体系。教育部高等学校软件工程专业教学指导委员会在《软件工程知识体系》(SWEBOK 3.0)和《软件工程教育知识体系》(SEEK)的基础上,总结我国软件工程学科与软件工程教育发展的经验,提出具有中国特色的中国版软件工程知识体系(C-SWEBOK)。

C-SWEBOK共包含软件需求、软件设计、软件构造、软件测试、软件维护、软件配置管理、软件工程管理、软件工程模型与方法、软件工程过程、软件质量、软件工程经济学、软件服务工程、软件工程典型应用、软件工程职业实践、计算基础、工程基础、数学基础等17个知识领域。

C-SWEBOK对国内高校软件工程专业的本科教学和人才培养具有指导意义。不同类型高校一般在制定专业人才培养方案、课程体系、教学大纲和教学内容时,一般都以此为重要参考资料。

1.软件需求知识领域

软件需求知识领域涉及软件需求的获取、分析、规约和确认,以及整个软件产品生命周期过程中的需求管理,描述了对于软件产品的要求和约束。软件需求如果做得不好,则软件工程项目很容易失败。软件需求知识领域包括软件需求基础、需求过程、需求获取、需求分析、需求规约、需求验证、需求相关的实际考虑以及软件需求工具等知识单元。

软件需求知识领域与软件设计、软件测试、软件维护、软件配置管理、软件工程管理、软件工程过程、软件工程模型和方法、软件质量等知识领域紧密相关。

2.软件设计知识领域

软件设计是软件工程生命周期中的一个活动,它分析软件需求,产生软件内部结构的描述,作为软件构造的基础。更精确地说,软件设计的结果应描述软件体系结构(即软件如何分解为一系列组件,以及这些组件之间的接口)和各组件(以便后续指导这些组件的构造)。软件设计由处于软件需求和软件构造之间的两个活动组成:软件体系结构设计(又称为高层设计),用来设计和描述软件的高层体系结构,识别出各种组件;软件详细设计,用于详细设计和描述各个组件。软件设计在软件开发中起着重要作用。在设计阶段,软件工程师构建各种模型,完成方案的蓝图。通过分析和评价这些模型以确定它们是否能够充分支持各种需求的实现。通过检查和评价各种不同的候选设计方案,进行权衡以选择最合适的设计方案。除了作为构造和测试的输入和起始点之外,还可以使用这些模型来规划后续的其他开发活动(如验证与确认等)。

软件设计知识领域与软件需求、软件构造、软件工程管理、软件工程模型与方法、软件质量与计算基础等知识领域密切相关。

3.软件构造知识领域

软件构造是指通过程序编写、验证、单元测试、集成测试和调试纠错等一系列活动,以创建可工作的、有意义的软件的过程。软件构造知识领域与所有知识领域都有关系,但与软件设计和软件测试知识领域关系最为紧密:软件构造的输入是设计的输出,而构造的输出又是测试的输入,设计、构造和测试这三者之间的边界并不十分清晰,取决于不同软件生命周期模型的不同定义。例如,详细设计可能先于软件构造,但也有很多设计工作是在构造活动中完成的;类似的,无论是单元测试还是集成测试,都可能伴随着构造过程来进行。软件构造还与软件配置管理知识领域有关系,构造过程中产生很多配置项,而这些配置项都需进行良好的管理。软件构造还与软件质量知识领域有关系,这是因为代码是最终的交付产品,而代码的质量直接影响着软件的质量。软件构造与计算基础知识领域也有关系,是因为软件构造需要算法和编程实践方面的知识。

软件构造知识领域包括的知识单元有软件构造基础、管理软件构造、实际考虑构造技术和软件构造工具。

4.软件测试知识领域

软件测试是动态验证程序针对有限的测试用例集是否可以产生期望的结果。这些测试用例集是从程序执行域的无限种可能中以某种适当的方式精心选择出来的:任何程序的完全测试集都可能是无穷的,软件测试只能根据特定的优先级评判准则选择一个有限的子集并在其上进行测试。现有的各种软件测试技术之间的主要差别就在于如何选择这个有限测试集。“动态”意味着软件测试总是在选定的输入上执行程序,且需通过特定方法来确认被测程序的输出是否可接受,即是否与“期望”相符。许多软件开发组织进行软件质量保障的方法以预防为主,目的是尽可能避免在程序中引入错误,而不是发现错误之后再加以纠正。因此,软件测试既可看作是检验软件功能和质量的一种手段,也可看作是在未能有效预防错误时从软件中发现故障的手段。需要澄清的是,即使在经过大量的测试之后,软件中仍然可能会存在故障。软件提交之后发现的故障一般由纠错性维护来处理。

软件测试知识领域包括的知识单元有软件测试基础、软件测试级别、软件测试技术、软件测试度量、软件测试过程、软件测试工具等。

5.软件维护知识领域

软件开发工作的结果是交付满足用户需求的软件产品。软件一旦投入运行,随着运行环境的变化以及用户新需求的出现,软件产品也需要随之变更或演化。在软件生命周期中,维护阶段从保修期或软件交付开始,但维护活动则会出现得更早。软件维护是以成本有效的方式为软件提供的全部支持性活动,这些活动在软件交付之前或交付之后进行。交付之前的活动包括为交付软件之后的运行和维护所做的计划,以及为各类变化所做的后勤支持方案。交付后的活动包括软件修改、用户培训、给用户提供技术支持等。

软件维护知识领域包括软件维护基础、软件维护关键问题、软件维护过程、软件维护技术和软件维护工具等,它与软件工程的方方面面都密切相关。

6.软件配置管理知识领域

软件配置管理标识软件的各组成部分,对各部分的变更进行管控(版本管理与控制),维护各组成部分之间的联系,使得软件在开发过程中任一时刻的状态都可被追溯。软件配置管理包括软件配置管理过程的管理、软件配置标识、软件配置控制、软件配置状态核定、软件配置审计、软件发布管理与交付、软件配置管理工具等。

7.软件工程管理知识领域

软件工程管理是通过规划、协调、测量、监督、控制和报告等管理活动,保证有效提交软件产品和软件工程服务,使干系人得益。从某种意义上来说,可以像管理其他复杂事情一样来管理软件工程项目。但是软件工程产品和软件生命周期过程有其独特的方面,这使得管理变得复杂。软件工程管理包含三个层次的活动:组织和基础设施管理、项目管理和度量。

项目管理知识领域包括的相关知识:项目整合管理、项目范围管理、项目时间管理、项目成本管理、项目质量管理、项目人力资源管理、项目沟通管理、项目风险管理、项目采购管理和项目干系人管理。

8.软件工程模型与方法知识领域

软件工程模型与方法为软件工程建立了重要基础,使得软件工程的活动系统化、可重用并最终更加成功,也使得软件产品具有可移植性和可复用性等关键特征。软件工程模型与方法所讨论的内容广泛,既关注软件生命周期的特定阶段,也涵盖整个软件生命周期。本知识领域贯穿软件生命周期多个阶段的模型与方法。软件工程模型与方法知识领域主要包括建模方法、模型类型、模型分析和软件工程方法。

9.软件工程过程知识领域

软件工程过程是软件工程师设计出的一系列工作活动,其目的是为了开发、维护和操作软件,涉及需求、设计、构建、测试、配置管理和其他过程。软件工程过程也可简称为软件过程,包含软件过程定义、软件生命周期、软件过程的评估和改进、软件度量、软件工程过程工具等。

10.软件质量知识领域

软件质量指软件满足用户指定需求或期望的程度。软件质量知识领域在软件工程知识领域中占有重要地位,因为软件工程实践中所包含的过程、方法和工具,最终都可以聚焦在软件质量上。软件质量管理是一系列过程的集合,这些过程确保软件产品、服务和生命周期过程既能满足软件质量目标,又能实现利益相关者的满意度。

软件质量知识领域包括软件质量基础、软件质量管理过程、实际情况(软件质量需求等)、软件质量工具等。

11.软件工程经济学知识领域

软件工程经济学主要研究软件和软件工程经济效果。它以软件或软件载体作为研究对象,以追求投入产出效益为目标,通过测算项目全生命周期的投入与产出,衡量实现软件产品、信息服务及作业预定需求之各类资源的使用效率,以提高软件工程经济效益。

软件工程经济学知识领域包括软件工程经济学基础,软件生命周期的投入与产出,评估模型、方法与参数,风险与不确定性和实践考量等。

12.软件服务工程知识领域

软件服务工程研究软件服务工程原理、方法和技术,构建支持软件服务系统的基础设施和平台,主要包括软件服务系统体系结构、软件服务业务过程、软件服务工程方法、软件服务运行支撑等内容。

13.软件工程典型应用知识领域

软件工程典型应用有网络软件与应用、企业信息系统与数据分析、电子商务与互联网金融、信息安全与安全软件、嵌入式软件与应用、多媒体与游戏软件、中文信息处理系统、典型行业应用软件。

14.软件工程职业实践知识领域

软件工程职业实践包括软件职业技能、企业中软件开发与管理实践、沟通技巧、团队动力和心理学。软件工程职业技能是指在软件相关环境中合理、有效地运用专业知识、职业价值观、道德与态度等各种能力,包括智力技能、技术和功能技能、个人技能、人际和沟通技能、组织和企业管理技能等。

软件工程专业教育通常需要让学生或受教育者到软件企业进行实际体验和实践训练(如实习、实训等),以熟悉和学习企业的理念、生产、经营、管理、环境、文化等,涉及企业特定软件开发实践、开源软件开发实践、软件企业开发过程管理实践、软件企业项目管理实践、软件企业经营管理实践、企业实习与实训、企业文化体验、企业团队合作实践等,提高受教育者的软件工程职业素养。企业实践活动可以使学生根据所学课程的理论知识,结合企业的运营实际,掌握软件开发的一般过程、软件的生命周期和作为一个开发人员应该具备的基本能力,使学生进一步巩固所学理论知识,同时提高观察问题、分析问题、解决问题的能力。

15.计算基础知识领域

计算基础知识领域涵盖软件运行所涉及的开发与操作环境。计算机及其软硬件的基本原理是软件工程专业的基础知识,软件工程专业需要对计算机科学知识有很好的理解。

计算基础知识领域的大部分内容也是计算机科学专业的本科生基础课程中的内容。这些课程包括编程、数据机构、算法、计算机组成、操作系统、编译器、数据库、网络、分布式系统等。因此,相关的课程中都会涉及本知识领域所列的知识点。

16.工程基础知识领域

随着软件工程理论与实践的日益成熟,软件工程逐渐成为基于知识和技能的工程学科的重要成员。软件工程基础知识领域包括实证方法与实验技术、统计分析、测量、工程设计、建模、原型与仿真、标准、根本原因分析等。正确应用上述知识,将有助于软件工程师更加高效地开发与维护软件。

17.数学基础知识领域

数学基础知识能够帮助软件工程师理解程序中的逻辑流程,并将整个流程转换成能够正确运行的程序代码。本知识领域中数学的重点在于逻辑和推理能力的培养。而对于软件工程师来说,逻辑和推理能力是必不可少的。数学可以理解为形式化系统。软件工程师不仅要熟知数学公式的精确描述,而且要具备对各种应用场景进行精确抽象的能力。

本专业需要的数学基础知识领域涵盖许多基本的数学知识与相关技术,这些知识与技术能够定义与刻画一系列用来进行上下文推理的规则系统,而能够用这些规则进行推断的事务则存在于该系统的上下文中。这些知识将帮助我们为这个问题编写一个正确的程序。

小结

通过本章学习,可以知道什么是软件,了解软件、软件工程的发展历程,知晓软件工程的知识体系和学科范畴。

习题

1. 软件的发展历程是什么?

2. 软件和软件工程的区别是什么?

3. 软件工程的知识体系由哪几部分构成?

【微信扫码】

相关资源 kYVhw+EPlqf7CBZ484ao8wLlD13lZIAgF2SnRGdnY/nrUKF8RhTcHkEftByyk9Gj

点击中间区域
呼出菜单
上一章
目录
下一章
×