(1)以语言为中心的环境(language-centered environments)
它们是围绕一种语言而构成的,可以提供一套适合于这种语言的工具集。这类环境是高度交互式的,通常对系统合成的支持是有限的,也不支持项目管理。换句话说,它基本上属于程序设计环境。
在现有的环境中,60年代末期出现的Lisp环境、70年代中期的以Mesa/Cedar语言为中心的Cedar环境、以Smalltalk语言为中心的Smalltalk环境及80年代早期形成的以Ada语言为中心的Rational环境等属于以语言为中心的环境。
(2)面向结构的环境(structure-oriented environments)
这种环境所采用的技术允许用户直接操作结构。初始的动机是给用户一个借于语言的结构来输入程序的交互式工具,即语法制导编辑器(syntax-directed editor)。这种能力后来扩展到提供一个单用户程序设计环境,它还支持交互式语义分析、程序执行和调试。编辑器是这种环境的中心组成部分。最重要的是这种形式化地描述一种语言的语法和静态语义的能力,由此可以生成一个结构编辑器的实例(instance)。也就是说,这种与语言无关的技术引出了环境生成器的概念,在支持局部编程、全局编程、历史记载和存取控制表方面继续所作的努力,使术语“语法制导”逐渐被“面向结构”所取代了。
在现有的环境中,80年代初期出现的Aloe编辑器就属于面向结构的环境,它是著名的Gendalf项目中的一个组成部分,它只允许用户在结构化元素上进行操作,也就是说,用户只看到抽象语法树,而看不到熟悉的源语言文本,不过它不会允许用户构造语法不正确的程序;稍后出现的Cornell程序合成器也属于面向结构的环境,它采用文本表示方式,以克服用户在输入和修改语言表示方面的困难。另外一些系统采用混合方式,用户可自由选择在哪种表示方式(文本或结构)上进行操作,系统内部保留两种形式,并始终使它们处于一致状态。
(3)工具箱环境(toolkit environments)
工具箱环境由一套工具组成,用于支持软件开发和编码阶段。它从操作系统开始,加入一些诸如编辑程序、编译程序、汇编程序、连接程序和调试程序等编码工具。此外,也有一些支持大型软件开发任务的工具,如版本控制和配置管理。它采用简单的数据模型来提高工具的可扩充性和可移植性。这样的环境允许高度的剪裁,但对工具集的使用几乎不提供任何环境定义、管理或控制的技术。当代工具箱环境是使用相当成熟的技术。商业化的环境设计者正在把高级接口放在普通操作系统的用户命令接口之上,即扩充操作系统。
商业化工具箱系统的例子是:UNIX程序员工作台UNIX/PWB和DEC VMS/VAX set等,它们都是在80年代中期推出的。对全局编程提供的工具分别是源代码控制系统(Source Code Control System-SCCS)和代码管理系统(Code Management System—CMS),它们都是起版本控制的作用,并用独立于具体的程序设计语言的。稍后开发的著名的工具箱环境的例子是:可移植的公用工具环境(Portable Common Tool Environrment—PCTE)和公用APSE接口集(Comˉmon APSE Interface Set—CAIS)。其中APSE是Ada程序设计支持环境的英文缩写。
(4)基于方法的环境(method-based environments)
这种环境支持一种特定的软件开发方法。这些方法可分为两类:①支持软件开发周期特定阶段的;②管理开发过程的。前者包括规格说明、设计、确认、验证和重用。方法不同,形式化的程序有很大不同,从非形式化到准形式化到形式化。后者又可细分为两个部分:支持产品管理与支持开发和维护产品的过程管理。产品管理包括版本、配置和投放管理。开发过程的管理包括项目计划和控制、任务管理、通信管理及加工过程建模。
这类环境的例子有:Anna———一种用于Ada的规格说明语言;VDM———用于软件开发的形式化方法,也是一种规格说明语言;SREM———分布式计算的设计系统SL/PSA———问题描述语言/问题描述分析程序,这是为信息处理系统的结构化文档编制和分析设计的。支持管理开发过程的典型环境有ISTAR———一个集成式项目管理系统MA———一个知识型软件环境中的项目管理部分。
3.按集成化程序分类
环境的形成与发展主要体现在各工具的集成化的程度上,当前国外软件工程界把软件开发环境分成三代,各代之间的主要区别及特征如下:
(1)第一代
①建立在操作系统之上(如VMS和UNIX等);
②工具间通过一个公用框架集成;
③只有工具使用的文件修改即可加入,由调用过程来使用这些工具;
④工具所使用的文件结构不变,而且成为环境文件库的一部分;
⑤从人机界面来看,这类环境主要采用单色、低分辨率的文字终端,图形能力较差,多数使用菜单技术。
例如,70年代中期的UNIX环境以文件库为集成核心,管道命令实施控制功能,SHELL语言表达的程序显示用户工作界面。
(2)第二代
①具有真正的数据库(如INGRES),而不是文件库,有时称为信息库,多数采用E-R模式或E-R-A模式;
②工具集成在更低的层次上,工具和文件都作为实体保存在数据库中,而不是简单地看作一种独立的成分;
③现有的工具不能随意放入,要作适当修改或定制;
④人机界面采用高分辨率、点阵式工作站,具有多窗口、图形符号等功能,采用鼠标装置。例如,Ada程序设计支持环境(APSE),以数据库为集成核心,有可移植性的工作界面。
(3)第三代
①建立在知识库系统上;
②顺序调用独立工具的概念完全被集成化的工具集所替化,用户不再需要在任务之间来回切换不同的工具;
③采用形式化方法,软件重用等新技术;
④由多个工具控制的多窗口技术被单个工具操纵的多窗口技术所替代;
显然,第三代软件开发环境中工具间的集成度最高,利用这些工具,人们逐渐从繁重的手工开发软件的活动中解放出来,从而实现软件开发和维护的自动化,提高软件开发和维护的质量和生产率,缩短软件开发周期并降低成本。为集中研究并解决这样一系列的问题,80年代提出了CASE思想,目前的研究重点集中于CASE的集成化方面。