1.4 软件工具与开发环境
软件工程的主要目标是提高软件生产率,改善软件质量和降低软件成本,而这些目标的实现只能依靠软件工具、软件开发环境和计算机辅助软件工程(Computer-aided Softeware Engineering,CASE)的广泛应用。
软件工具是指能支持软件生存周期中某一阶段(如需求分析、系统定义、设计、编码、测试或维护等)的需要而使用的软件系统;软件开发环境和CASE则是面向软件整个生存周期,为支持各个阶段的需要,在基本硬件和宿主软件的基础上使用的一组软件系统。软件工具和软件开发环境都是软件工程的重要支柱,对于提高软件生产率,改进软件质量,以及适应计算机技术的迅速发展有着越来越大的作用,因而受到人们的高度重视。
1.4.1 软件工具
软件工具是“用来帮助开发、测试、分析或维护的一个计算机程序或它的文件。”它一般是为专门应用而开发的,其主要目的是为了提高软件生产率和改善软件的质量。
计算机软件发展的历史也是软件工具不断开发、演变、提高的历史。随着软件工程概念的提出,支持软件生存周期各阶段的支撑工具得到了更多的重视,出现了一批软件工具或系统,例如密执安大学著名的PSL/PSA需求分析工具以及支持软件设计的PDL工具、支持测试的静态分析工具DAVE及程序评估测试系统PET等,这些软件工具有力地支持了整个软件的开发和维护工作,对于提高软件质量和生产率,降低软件研制成本起着积极的作用。
如今,软件工具重视用户界面的设计,不断地采取新理论和新技术,正由单个工具向多个工具集成方向发展,且注重工具间的平滑过渡和互操作性。软件工具的商品化推动着软件产业的发展。而软件产业的发展又增加了对软件工具的需求,促进了软件工具的商品化进程。
软件工具的范围很广,它既包括比较成熟的传统工具,如操作系统、编译程序、解释程序和汇编程序等,又包括支持软件生存周期各阶段,如需求分析、设计、编码、测试及维护等的开发和管理工具。例如,可以把软件工具分为13类:即系统模拟和模型、需求追踪、需求分析、设计、编码和单元测试、测试和集成、文档、项目管理、配置管理、质量保证、度量、软件再用、其他。
1.4.2 软件开发环境
从20世纪70年代末开始,专家们就致力于软件开发自动化工具的研究,并逐步形成了应用于软件过程的集成的项目支撑环境和计算机辅助软件工程(CASE)工具。在此基础上建立集成式软件开发环境,全面支持软件开发过程,以期实现软件设计过程的自动化或半自动化。
软件开发环境是指在计算机基本软件的基础上,为了支持软件的开发而提供的一组工具软件系统。1985年第八届国际软件工程会议提出的关于“软件开发环境”的定义是:“软件开发环境是相关的一组软件工具集合,它支持一定的软件开发方法或按照一定的软件开发模型组织而成。”
一般来说,软件开发环境都具有层次式的结构,可区分为以下4层。
1)宿主层:它包括基本宿主硬件和基本宿主软件。
2)核心层:包括工具组、环境数据库、通信设施和运行时刻支持设施。
3)基本层:包括一组工具,如编译程序、编辑程序、调试程序、连接程序和装配程序等。这些工具都是由核心层来支援的。
4)应用层:以特定的基本层为基础,包括一些补充工具,以便更好地支持各种应用软件的研制。
按内容分,软件开发环境一般由环境数据库、接口软件和工具组等构成。
1)环境数据库。这是软件开发环境的核心,其中存放了被研制软件在其生存周期中所必需的信息和软件研制工具的有关信息等。例如,它把经过各种软件工具加工后的软件产品和半成品(如各种文件、源代码及测试数据)存入库内,以便根据需要进行查询、修改或输出等。在环境数据库中,可以分别标识的信息组称为对象;作为一组相关的版本而存在的一组对象称为版本组。把一个项目中不同的“对象组”组合起来,就可以构成各种软件配置。
2)接口软件。包括系统与用户的接口、子系统和子系统之间的接口。开发环境要求所有的接口都具有统一性。例如,为了实现用户和各种系统的通信,要求有统一调用方式。
3)工具组。软件开发环境中的工具彼此有交互作用。工具组中的各个工具被设计成由一些基本功能成分组成。这些成分可以组合,供用户选用,并且可通过环境数据库进行通信。
●语言工具。它一般提供编译(或解释)程序、连接装配程序、调试程序、静态及动态分析程序等一系列语言支撑工具。也有的系统支持非过程语言的运行。
●质量保证工具。目前大量使用的仍是静态、动态测试技术,以及各种形式的评审技术。与形式方法相联系的程序证明和验证技术已为许多专家所重视。
●需求分析及设计工具。主要由文本编辑工具、图形工具及一致性检验工具等支持。
●配置管理工具。对于不同用户或不同的硬件配置,一个系统往往需要不同的软件配置,即使同一软件也有不同的版本,加上软件产品的修改需要进行严格的管理等原因,软件的配置管理已成为软件生产管理的重要课题。
软件开发环境的发展方向是集成化的软件工程环境,即软件生存周期中各个阶段的开发环境(工具与支持系统)集成为一致的用户接口,包括制定各种标准接口。