1.3.4 软件工程知识体系及知识域

更新于 2026年10月10日 版权声明
1.3.4 软件工程知识体系及知识域

软件工程作为一门学科,在取得对其核心的知识体系的共识方面已经达到了一个重要的里程碑。2005年9月,ISO/EC JTCI/SC7正式发布为国际标准,即ISO/IEC 19759—2005《软件工程知识体系指南》(Software Engineering Body of Knowledge,SWEBOK)。SWEBOK将软件工程知识体系划分为10个知识域,包含在两类过程中:一类过程是开发与维护过程,包括软件需求、软件设计、软件构造、软件测试和软件维护;另一类过程是支持过程,包括软件配置管理、软件工程管理、软件工程过程、软件工程工具与方法、软件质量。每个知识域还可进一步分解为若干个论题,在论题描述中引用有关知识的参考文献,形成一个多级层次结构,以此确定软件工程知识体系的内容和边界。每个知识域的具体内容如表1.1所示。有关知识的参考文献涉及相关学科,包括计算机工程、计算机科学、管理学、数学、项目管理、质量管理、软件工程学、系统工程等。

表1.1 《软件工程知识体系指南》的内容

图示

软件工程学的主要内容是软件开发技术和软件工程管理。其中,软件开发技术包括软件工程方法学、软件工具和软件开发环境;软件工程管理包括软件工程经济学和软件管理学。

(1)软件工程方法学。最初,程序设计是个人进行的,只注意如何节省存储单元和提高运算速度。以后,兴起了结构化程序设计,人们采用结构化的方法来编写程序。结构化程序设计只有顺序结构、选择结构和循环结构这三种基本结构。这样不仅改善了程序的清晰度,而且能提高软件的可靠性和软件生产率。

后来,人们逐步认识到编写程序仅是软件开发过程中的一个环节。在典型的软件开发工作中,编写程序所需的工作量只占软件开发全部工作量的10%~20%。软件开发工作应包括需求分析、软件设计、编写程序等阶段,于是形成了结构化分析、结构化设计、面向数据结构的Jackson方法等传统软件开发方法,20世纪80年代广泛应用了面向对象设计方法。

软件工程方法学是编制软件的系统方法,它确定软件开发的各个阶段,规定每阶段的活动、产品、验收的步骤三个要素,分别为方法、工具和过程。其中,方法是完成软件开发任务的技术方法;工具是为方法的运用提供自动或半自动的软件支撑环境;过程规定了完成任务的工作阶段、工作内容、产品、验收的步骤和完成准则。

各种软件工程方法的适用范围不尽相同。目前,使用得最广泛的软件工程方法学可以分为传统方法学和面向对象方法学两类。

①传统方法学。传统方法学采用结构化技术,包括结构化分析、结构化设计和结构化实现来完成软件开发任务。传统方法学把软件开发工作划分成若干阶段,每个阶段相对独立,也比较简单,顺序完成各阶段的任;每个阶段的开始和结束都有严格的标准;每个阶段结束时要进行严格的技术审查和管理复审。

用传统方法学开发软件,首先确定软件功能,再对功能进行分解,确定怎样开发软件,然后再实现软件功能。传统方法学提高了软件的可维护性和软件开发的成功率,软件生产率也明显提高。

传统方法学历史悠久,是广大软件开发人员所熟悉的,在开发某些软件时十分有效。传统软件工程方法可以分为面向数据流设计方法和面向数据结构设计方法。

②面向对象方法学。面向对象方法学是在传统方法学的基础上发展起来的,它把对象作为数据和对数据的操作相结合的软件构件,用对象分解取代了传统方法的功能分解。该方法把所有对象都划分为类,把若干相关的类组织成具有层次结构的系统,下层的子类继承上层的父类所具有的数据和操作,而对象之间通过发送消息相互联系。

面向对象方法学的要素是对象、类、继承以及消息通信,可以用下列方程描述。

图示

面向对象方法学是多次反复、迭代开发的过程。面向对象方法在分析和设计时使用相同的概念和表示方法,两者之间没有明显的界线。最终产品是由许多基本独立的对象组成的,这些对象具有简单、易于理解、易于开发、易于维护的特点,并且具有可重用性。

本书既介绍传统软件工程方法,使读者掌握软件开发的基本步骤、方法和文档书写规范,也介绍面向对象软件工程方法。在实际工作中,软件开发人员可以根据具体情况选择不同的软件开发方法,也可以将不同方法结合起来,扬长避短,在提高软件开发效率的同时,提高软件的质量。

(2)软件工具。软件工具(Software Tools,ST)是指为了支持计算机软件的开发和维护而研制的程序系统。使用软件工具的目的是提高软件设计的质量和生产效率,降低软件开发和维护的成本。(https://www.daowen.com)

国家标准GBT 11457—2006《信息技术软件工程术语》将软件工具定义为:“一种计算机程序,用来帮助开发、测试、分析或维护一计算机程序或它的文件。”例如,比较器、交叉引用生成器、反编译程序、驱动程序、编辑程序、流程图器、监控程序、测试用例生成器、定时分析器。

软件工具可用于软件开发的整个过程。软件开发人员在软件生产的各个阶段可根据不同的需要选用合适的工具。例如,需求分析工具用类生成需求说明;设计阶段需要使用编辑程序、编译程序、连接程序,有的软件能自动生成程序等;在测试阶段可使用排错程序、跟踪程序、静态分析工具和监视工具等;软件维护阶段有版本管理、文档分析工具等;软件管理方面也有许多软件工具。

目前,软件工具发展迅速,许多用于软件分析和设计的工具正在建立,其目标是实现软件生产各阶段的自动化。

(3)软件开发环境。软件开发方法和软件工具是软件开发的两大支柱,它们之间密切相关。软件开发方法提出了明确的工作步骤和标准的文档格式,这是设计软件工具的基础,而软件工具的实现又将促进软件开发方法的推广和发展。

软件开发环境(Software Development Environment,SDE)是方法和工具的结合。1985年,在第八届国际软件工程会议上,国际工作小组提出的关于“软件开发环境”的定义为:“软件开发环境是相关的一组软件工具集合,它支持一定的软件开发方法或按照一定的软件开发模型组织而成。”

国家标准GB/T 1457—2006《信息技术软件工程术语》将软件开发环境定义为:“软件开发环境是支持软件产品开发的软件系统,它由软件工具和环境集成机制构成。”前者用以支持软件开发的相关过程、活动和任务,后者为工具集成和软件的开发、维护及管理提供统一的支持。

软件开发环境的设计目标是提高软件生产本和改善软件质量。

计算机辅助软件工程(Computer Aided Software Engineering,CASE)是一组工具和方法的集合,可以辅助软件生存周期各阶段进行的软件开发活动。它是多年来在软件工程管理、软件开发方法、软件开发环境和软件工具等方面研究和发展的产物。

计算机辅助软件工程吸收了计算机辅助设计(CAD)、软件工程、操作系统、数据库、网络和许多其他计算机领域的原理和技术。因此,它是一个应用、集成和综合的领域。其中,软件工具不是对任何软件开发方法的取代,而是对方法的辅助,它旨在提高软件开发的效率和软件产品的质量。

(4)软件工程管理。软件工程管理就是对软件开发各阶段的活动进行管理,其目的是确保按预定的时间和费用,成功地生产出软件产品。软件工程管理的任务是有效地组织人员,按照适当的技术、方法,利用好的工具来完成预定的软件项目。

软件工程管理的内容包括费用管理、人员组织、工程计划管理、软件配置管理等。

(1)费用管理。一般来讲,开发一款软件是一种投资,人们总是期望将来获得较大的经济效益。从经济角度分析,开发一款软件系统是否划算,是软件使用单位负责人决定是否开发这个项目的主要依据。需要从软件开发成本、运行费用、经济效益等方面来估算整个系统的投资和回报情况。

软件开发成本主要包括开发人员的工资报酬以及开发阶段的各项支出。软件运行费用取决于系统的操作费用和维护费用,其中操作费用包括操作人员的人数、工作时间、消耗的各类物资等开支。系统的经济效益是指因使用新系统而节省的费用和增加的收入。

由于运行费用和经济效益两者在软件的整个使用期内都存在,总的效益与软件使用时间的长短有关,所以,应合理地估算软件的寿命。一般在进行成本/效益分析时,一律假设软件使用期为5年。

(2)人员组织。软件开发不是个体劳动,需要各类人员协同配合,共同完成工程任务,因而应该有良好的组织和周密的管理。

(3)工程计划管理。软件工程计划是在软件开发的早期确定的。在计划实施过程中,如果需要,应对工程进度做适当的调整。在软件开发结束后应写出软件开发总结,以便今后能制订出更切实际的软件开发计划。

(4)软件配置管理。软件工程各阶段所产生的全部文档和软件本身构成软件配置。每当完成一个软件工程步骤,就涉及软件工程配置,必须使软件配置始终保持其精确性。软件配置管理就是在系统的整个开发、运行和维护阶段控制配置的状态和变动,验证配置项的完整性和正确性。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)