6.5软件工程工具和环境 6.5.1软件工具 软件工具是指为支持计算机软件的开发、维护及相关工作而研制的程序系统。使用软 件工具的目的是降低软件开发和维护的成本,提高软件产品的生产效率和质量。软件工具 主要有以下几类: 1.开发工具 用于软件开发过程的各种开发活动,主要有:需求分析类工具、设计工具、编码工具、 测试工具等。需求分析类工具用来辅助系统分析员生成完整、正确、一致的需求说明,改 善软件开发人员间的通信状况,减少管理和维护费用:设计工具用来进行系统设计,形成 计规格说明,检査并排除规格说明中的错误;编码工具为程序设计人员提供各种方便的 编程环境,如编辑、编译、调试和运行等:测试工具支持整个测试流程,包括选择测试用 例、生成测试软件、执行测试、评价测试结果等。 2.维护工具 用于辅助维护人员对代码及有关文档进行各种维护活动,主要有:版本控制工具、文 档分析工具、逆向工程工具、再工程工具等。版本控制工具用来存储、更新、恢复和管理 个软件的多个版本:文档分析工具用来对软件开发过程中形成的文档资料进行分析,给 出软件维护活动所需的维护信息:逆向工程工具辅助软件人员将某种形式表示的软件转换 成更高抽象形式表示的软件:再工程工具支持软件重构,提高软件功能、性能以及可维护 性。 3.管理和支持工具 用于辅助软件项目管理人员和支持人员的各种管理和支持活动,主要有:项目管理工 具、开发信息库工具、配置管理工具、软件评价工具等。项目管理工具用来辅助管理人员 进行项目的计划、成本估算、资源分配、质量控制等管理活动:开发信息库工具可维护软 件项目的各种开发信息:配置管理工具完成软件配置的标识、版本控制、变化控制等基本 任务;软件评价工具可以辅助管理人员进行质量保证的有关活动 6.5.2CASE集成环境 将软件工具集成在一起,使得一个工具产生的信息能够被其他工具所用,这样的工具 集称为计算机辅助软件工程( Computer Aided Software Engineering,简称为CASE)。CASE 的集成机制主要有 1.数据集成,使得工具间可以交换数据。 2.界面集成,使得工具有相同的界面风格和交互方式。 3.控制集成,在工具激活后能控制其他工具的操作 4.过程集成,在系统中嵌入了有关软件过程的知识,可根据软件过程模型辅助用户启 动各种软件开发活动 5.平台集成,使得工具运行在相同的硬件/操作系统下。 CASE技术始于20世纪80年代,其发展经历了以下四个时期 第一个时期:20世纪80年代初期。在这一时期,各种工具大多是孤立存在的,彼此
11 6.5 软件工程工具和环境 6.5.1 软件工具 软件工具是指为支持计算机软件的开发、维护及相关工作而研制的程序系统。使用软 件工具的目的是降低软件开发和维护的成本,提高软件产品的生产效率和质量。软件工具 主要有以下几类: 1.开发工具 用于软件开发过程的各种开发活动,主要有:需求分析类工具、设计工具、编码工具、 测试工具等。需求分析类工具用来辅助系统分析员生成完整、正确、一致的需求说明,改 善软件开发人员间的通信状况,减少管理和维护费用;设计工具用来进行系统设计,形成 设计规格说明,检查并排除规格说明中的错误;编码工具为程序设计人员提供各种方便的 编程环境,如编辑、编译、调试和运行等;测试工具支持整个测试流程,包括选择测试用 例、生成测试软件、执行测试、评价测试结果等。 2.维护工具 用于辅助维护人员对代码及有关文档进行各种维护活动,主要有:版本控制工具、文 档分析工具、逆向工程工具、再工程工具等。版本控制工具用来存储、更新、恢复和管理 一个软件的多个版本;文档分析工具用来对软件开发过程中形成的文档资料进行分析,给 出软件维护活动所需的维护信息;逆向工程工具辅助软件人员将某种形式表示的软件转换 成更高抽象形式表示的软件;再工程工具支持软件重构,提高软件功能、性能以及可维护 性。 3.管理和支持工具 用于辅助软件项目管理人员和支持人员的各种管理和支持活动,主要有:项目管理工 具、开发信息库工具、配置管理工具、软件评价工具等。项目管理工具用来辅助管理人员 进行项目的计划、成本估算、资源分配、质量控制等管理活动;开发信息库工具可维护软 件项目的各种开发信息;配置管理工具完成软件配置的标识、版本控制、变化控制等基本 任务;软件评价工具可以辅助管理人员进行质量保证的有关活动。 6.5.2 CASE 集成环境 将软件工具集成在一起,使得一个工具产生的信息能够被其他工具所用,这样的工具 集称为计算机辅助软件工程(Computer Aided Software Engineering,简称为 CASE)。CASE 的集成机制主要有: 1.数据集成,使得工具间可以交换数据。 2.界面集成,使得工具有相同的界面风格和交互方式。 3.控制集成,在工具激活后能控制其他工具的操作。 4.过程集成,在系统中嵌入了有关软件过程的知识,可根据软件过程模型辅助用户启 动各种软件开发活动。 5.平台集成,使得工具运行在相同的硬件/操作系统下。 CASE 技术始于 20 世纪 80 年代,其发展经历了以下四个时期: 第一个时期:20 世纪 80 年代初期。在这一时期,各种工具大多是孤立存在的,彼此
间没有信息交换,且以分析、设计阶段的辅助工具为主,例如文档自动生成器、图表自动 生成器等 第二个时期:20世纪80年代中期。这一时期引入了系统信息中心库的概念,使得彼 此孤立的工具开始有了信息交换环境的支持,推动了从分析到设计的软件工程上游阶段开 发工具的一体化,即CASE上游工具集成。 第三个时期:20世纪80年代后期。这一时期把应用程序开发、维护自动化与项目管 理工具结合起来,重视标准化的“接口型”的工具集成环境 第四个时期:20世纪90年代初期至今。这一时期明确了CASE的最终目标是“统一使 用开发支持工具,实现软件开发全过程的自动化”。如,在解决软件工程各阶段间信息交换 和信息一致性问题上引入了“百科全书”( Encyclopedia),在使结构化方法可视化上使用 图形工具,在使软件工程开发方法学与CASE工具统一化上使用了人工智能(AI)技术等等。 CASE技术的发展有待于软件工程方法学的发展,同时CASE技术的发展又促进着软件 工程方法学的进一步发展。随着CASE技术在软件工程中的作用不断扩大和深化,在今后的 软件工程领域,CASE技术将很有可能占据主导地位 6.6软件开发方法及开发活动 6.6.1软件生存周期及模型 软件生存周期是一个软件从提出开发要求开始到该软件报废为止的整个时期,可大体 分为三个时期:计划时期(包括问题的定义和可行性分析)开发时期(包括需求分析、软 件设计、编码、测试)、运行时期(包括软件维护)。 软件生存周期过程规定了在获取、供应、开发、操作和维护软件时要实施的过程、活 动和任务。其目的是提供一个公共框架,以便软件开发人员可以使用“相同语言”在各自 的环境中编写和管理软件 软件生存周期模型是描述软件从项目需求定义开始,到开发成功后投入使用,在使用 过程中不断增补修订,直到停止使用,这一期间的各种活动如何执行的模型。软件生存周 期模型的作用是确立了软件开发中各阶段的次序限制,活动准则,所要遵守的规定和限制, 便于各种活动的协调,人员之间的有效通信,有利于活动重用和活动管理。目前主要的模 型有: 1.瀑布模型,将软件生存周期中各活动规定为依线性顺序连接的若干阶段。包括可行 性分析、项目开发计划、需求分析、概要设计、详细设计、编码、测试和维护。它是一种 理想的线性开发模式,缺乏灵活,特别是无法解决软件需求不明确的问题。不适合于需求 不明确,设计方案有一定风险的软件项目。 2.渐增模型,软件在模型中是“逐渐”开发出来的,开发一部分,展示一部分,能及 早发现问题。或者先开发“原型”软件,完成主要功能,然后逐步完善,最终获得满意的 软件产品 3.螺旋模型,将瀑布模型与増量模型结合起来,加入风险分析,弥补了这两种模型的 不足。开发分为四步:制定计划、风险分析、开发实施、用户评估。 4.喷泉模型,以用户需求为动力,以对象为驱动的模型,适合于面向对象开发方法, 使开发过程具有迭代性和无间隙性
12 间没有信息交换,且以分析、设计阶段的辅助工具为主,例如文档自动生成器、图表自动 生成器等。 第二个时期:20 世纪 80 年代中期。这一时期引入了系统信息中心库的概念,使得彼 此孤立的工具开始有了信息交换环境的支持,推动了从分析到设计的软件工程上游阶段开 发工具的一体化,即 CASE 上游工具集成。 第三个时期:20 世纪 80 年代后期。这一时期把应用程序开发、维护自动化与项目管 理工具结合起来,重视标准化的“接口型”的工具集成环境。 第四个时期:20 世纪 90 年代初期至今。这一时期明确了 CASE 的最终目标是“统一使 用开发支持工具,实现软件开发全过程的自动化”。如,在解决软件工程各阶段间信息交换 和信息一致性问题上引入了“百科全书”(Encyclopedia),在使结构化方法可视化上使用 图形工具,在使软件工程开发方法学与 CASE 工具统一化上使用了人工智能(AI)技术等等。 CASE 技术的发展有待于软件工程方法学的发展,同时 CASE 技术的发展又促进着软件 工程方法学的进一步发展。随着 CASE 技术在软件工程中的作用不断扩大和深化,在今后的 软件工程领域,CASE 技术将很有可能占据主导地位。 6.6 软件开发方法及开发活动 6.6.1 软件生存周期及模型 软件生存周期是一个软件从提出开发要求开始到该软件报废为止的整个时期,可大体 分为三个时期:计划时期(包括问题的定义和可行性分析)、开发时期(包括需求分析、软 件设计、编码、测试)、运行时期(包括软件维护)。 软件生存周期过程规定了在获取、供应、开发、操作和维护软件时要实施的过程、活 动和任务。其目的是提供一个公共框架,以便软件开发人员可以使用“相同语言”在各自 的环境中编写和管理软件。 软件生存周期模型是描述软件从项目需求定义开始,到开发成功后投入使用,在使用 过程中不断增补修订,直到停止使用,这一期间的各种活动如何执行的模型。软件生存周 期模型的作用是确立了软件开发中各阶段的次序限制,活动准则,所要遵守的规定和限制, 便于各种活动的协调,人员之间的有效通信,有利于活动重用和活动管理。目前主要的模 型有: 1.瀑布模型,将软件生存周期中各活动规定为依线性顺序连接的若干阶段。包括可行 性分析、项目开发计划、需求分析、概要设计、详细设计、编码、测试和维护。它是一种 理想的线性开发模式,缺乏灵活,特别是无法解决软件需求不明确的问题。不适合于需求 不明确,设计方案有一定风险的软件项目。 2.渐增模型,软件在模型中是“逐渐”开发出来的,开发一部分,展示一部分,能及 早发现问题。或者先开发“原型”软件,完成主要功能,然后逐步完善,最终获得满意的 软件产品。 3.螺旋模型,将瀑布模型与增量模型结合起来,加入风险分析,弥补了这两种模型的 不足。开发分为四步:制定计划、风险分析、开发实施、用户评估。 4.喷泉模型,以用户需求为动力,以对象为驱动的模型,适合于面向对象开发方法, 使开发过程具有迭代性和无间隙性
5.基于知识的模型,是瀑布模型与专家模型的结合。开发各阶段都利用相应专家系统 来辅助设计,使维护在系统需求一级进行 6.变换模型,适合于形式化开发方法的模型 6.6.2软件开发方法 软件开发方法就是使用定义好的技术及表示符号来组织软件生产过程的方法。软件开 发方法对软件开发步骤、文档格式和评价标准提出了规范化的要求,使软件生产进入有章 可循、向规范化和标准化迈进的“工程化”阶段。 1.结构化方法 结构化方法认为系统是由一些功能的相互联系、相互作用而形成,其总的指导思想是 自顶向下、逐步求精、单入口、单出口,基本原则是抽象和功能分解。结构化方法围绕处 理功能的实现“过程”来构造软件系统,特别适合于需求能够预先确定的系统的开发。目 前,根据软件工程生存周期的不同阶段已形成了一整套的结构化系列方法,即结构化分析 方法( Structured Analysis)、结构化设计方法( Structured Design)和结构化程序设计 方法( Structured Programming) 结构化方法简单实用,技术成熟,应用广泛。但对于大规模的项目或特别复杂的项目 结构化方法不够适用,它难于解决软件重用问题,难于适应需求变化,且软件维护依然比 较复杂,而这些问题在面向对象方法中可以很好地解决。 2.面向对象方法 面向对象方法认为系统是由一些对象的相互联系、相互作用而形成,其出发点和基本 原则是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世 界的方法与过程。目前,面向对象方法已形成了一整套的开发方法,它由面向对象分析 ( Ob ject- Oriented Analysis)、面向对象设计( Object- Oriented design)、面向对象程 序设计( Ob ject- Oriented programming)等组成。面向对象方法有下列要点: (1)客观世界是由各种对象( Ob ject)组成的,任何事物都是对象,复杂的对象可以 由比较简单的对象以某种方式组合起来。因此,面向对象的软件系统是由对象组成的,软 件中的任何元素都是对象,复杂的对象由比较简单的对象组合而成 (2)把所有的对象都归为各种类( Class),每个类都定义了一组数据和方法。数据用 于表示对象的静态属性,描述对象的状态信息:方法是对象所能执行的操作,也就是类中 所能提供的服务 (3)按照子类(也称为派生类)和父类(也称为基类)的关系,可以把若干个类组成 个层次结构的系统。在这种类层次结构中,通常下层的派生类具有一些和上层的基类相 同的特性(包括数据和方法),这一特性称为继承( Inheritance) (4)对象之间只能通过传递消息进行通信( Communication with Messages) 3.形式化方法 形式化方法( Formal methods),即形式化规格说明和证明技术,是提高计算机软件可 靠性的一种重要技术。形式化方法具有定义完备的语义,可以使用数学方法对其进行分析, 尤其是能够采用一致性和完备性技术识别系统开发潜在的问题。形式化方法已经开始被工 业界接受并用于开发实际系统。国外已开发出的比较成熟的形式化系统有:WDM系统、Z 系统、 RAISE系统等
13 5.基于知识的模型,是瀑布模型与专家模型的结合。开发各阶段都利用相应专家系统 来辅助设计,使维护在系统需求一级进行。 6.变换模型,适合于形式化开发方法的模型。 6.6.2 软件开发方法 软件开发方法就是使用定义好的技术及表示符号来组织软件生产过程的方法。软件开 发方法对软件开发步骤、文档格式和评价标准提出了规范化的要求,使软件生产进入有章 可循、向规范化和标准化迈进的“工程化”阶段。 1.结构化方法 结构化方法认为系统是由一些功能的相互联系、相互作用而形成,其总的指导思想是 自顶向下、逐步求精、单入口、单出口,基本原则是抽象和功能分解。结构化方法围绕处 理功能的实现“过程”来构造软件系统,特别适合于需求能够预先确定的系统的开发。目 前,根据软件工程生存周期的不同阶段已形成了一整套的结构化系列方法,即结构化分析 方法(Structured Analysis)、结构化设计方法(Structured Design)和结构化程序设计 方法(Structured Programming)。 结构化方法简单实用,技术成熟,应用广泛。但对于大规模的项目或特别复杂的项目, 结构化方法不够适用,它难于解决软件重用问题,难于适应需求变化,且软件维护依然比 较复杂,而这些问题在面向对象方法中可以很好地解决。 2.面向对象方法 面向对象方法认为系统是由一些对象的相互联系、相互作用而形成,其出发点和基本 原则是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世 界的方法与过程。目前,面向对象方法已形成了一整套的开发方法,它由面向对象分析 (Object-Oriented Analysis)、面向对象设计(Object-Oriented Design)、面向对象程 序设计(Object-Oriented Programming)等组成。面向对象方法有下列要点: (1)客观世界是由各种对象(Object)组成的,任何事物都是对象,复杂的对象可以 由比较简单的对象以某种方式组合起来。因此,面向对象的软件系统是由对象组成的,软 件中的任何元素都是对象,复杂的对象由比较简单的对象组合而成。 (2)把所有的对象都归为各种类(Class),每个类都定义了一组数据和方法。数据用 于表示对象的静态属性,描述对象的状态信息;方法是对象所能执行的操作,也就是类中 所能提供的服务。 (3)按照子类(也称为派生类)和父类(也称为基类)的关系,可以把若干个类组成 一个层次结构的系统。在这种类层次结构中,通常下层的派生类具有一些和上层的基类相 同的特性(包括数据和方法),这一特性称为继承(Inheritance)。 (4)对象之间只能通过传递消息进行通信(Communication with Messages)。 3.形式化方法 形式化方法(Formal Methods),即形式化规格说明和证明技术,是提高计算机软件可 靠性的一种重要技术。形式化方法具有定义完备的语义,可以使用数学方法对其进行分析, 尤其是能够采用一致性和完备性技术识别系统开发潜在的问题。形式化方法已经开始被工 业界接受并用于开发实际系统。国外已开发出的比较成熟的形式化系统有:VDM 系统、Z 系统、RAISE 系统等