软件研究人员往往根据自己的研究对象和研究范围对软件规格说明做了相应的限定和要求。例如, 软件工程的传统观点假定软件需求规格说明在需求分析的基础上产生, 软件设计规格说明在软件设计的基础上产生。然而, 根据程序设计方法学的观点, 则干脆把对程序的要求统称为程序规格说明。
简介
对软件所应满足的要求,以可验证的方式作出完全、精确陈述的文件。“规格说明”一词与其他工业产品的“规格说明书”有相似的含义。不过,在软件领域中,它已成为一个特定的技术用语。软件产品与使用环境之间的关系,软件产品内部各组成部分之间的接口往往十分复杂,并且在发展过程中软件产品要经历多次变换,以各种不同形式出现于不同的阶段。因此,对软件的各组成部分之间、各发展阶段之间的接口关系应当规定得十分准确。软件规格说明须用某种语言书写。自然语言的陈述中常存在歧义性,易引起误解。因而,最好使用人工语言或者人工语言与自然语言的混合形式书写软件的规格说明。这种语言就叫作规格说明语言。大型软件的规格说明往往十分冗长,因而希望这种语言易于用计算机处理,以便能用机器检查软件规格说明中有无遗漏或自相矛盾的地方。软件规格说明的内容可根据不同场合的需要而有所侧重。
功能规格说明
对软件所应具备的功能作出规定;
性能规格说明
对软件所应具备的性能,如计算精度、响应速度和占用存储空间的大小等作出规定;
接口规定说明
对软件与其环境之间、软件各组成部分之间的接口关系作出规定;
设计规格说明
对软件的设计加以说明。典型的内容包括使用的算法、控制逻辑、数据结构、模块间接口关系,以及输入-输出格式等。
说明标准
软件规格说明的使用者包括用户、设计人员、程序员、管理人员等, 涉及产品鉴定、质量保证、配置管理、软件维护、人员培训、市场分析、软件版权等诸多问题。可以把软件规格说明看成是一个具有概述、图示、例子等多视角的信息库。它既是用户和开发者的一份协议, 又是指导软一件开发、测试和维护的依据。
标准化的软件规格说明以统一的形式为各类相关人员提供各自所需要的信息。实践表明,广泛推行软件规格说明标准有助于提高软件开发的效率和质量。软件工程只有在广泛采用各种标准化技术以后方能成为一门真正的工程学科。
但是涉及软件规格说明的标准太多了, 以至于让人无所适从。闭由静态和动态的观点可知软件规格说明的标准化工作应从产品和过程两方面展开。根据软件开发的特点, 软件规格说明标准应加大软件过程标准化的比重。但是, 目前关于软件柳格说明的标准往往主要是软件产品“ 了的标准。近年来新提出的软件过程模型(和快速原型模型、增量开发模型、面向对象喷泉开发模型) 的标准化工作则显得很薄弱。
关于软件规格说明的国际或国家标准址一用范围广, 具有较高的理论价值。相比之下, 根据~ 应用领域的特点, 结合具体开发方法而制定的软件规格说明标准则具有更好的实用性。因而,国外许多大公司都制定有自己的软件规格说明标准。我国一些部门和单位也进行过类似的工气作。开发这种具体部门运用的软件规格说明标准要考虑以下问题。
1满足软件规格说明国家标准的要求, 可以补充国家标准未涉及的内容, 但不能违背软件工程原理。
2针对不同使用者, 提供所需要的信息。例如, 为用户提供一个相当于用户使用手册的规格说明, 为开发者提供一个相当于设计任务书的规格说明。
3容易使用和更改。
4有衡量软件规格说明质量的客观性手段。
5结合应用领域的特点及具体的开发方法, 综合使用标准的代价( 如在维护一致性上的时间) 和收益( 如可靠性、维护性的提高)。
软件规格说明方法
目前, 对软件规格说明认识的深度远不如软件设计和程序开发。所以, 尽管大多数人认为软件规格说明应与软件设计和实现充分分离, 但是软件规格说明中的许多观点不可避免地继承了软件设计和实现的经验。软件规格说明方法研究的问题是如何产生软件规格说明。可以从空间和时间两方面来考察软件规格说明。
1从空间的角度考察
从空间的角度观察, 广义上来说, 软件规格说明描述的是整个软件系统; 狭义来说, 软件规格说明描述的是软件系统的组成部件。
软件规格说明方法主要提供分解和精化的手段。例如, 结构化分析设计方法和逐步求精法均提供了这种手段。反过来, 软件规格说明方法还要提供抽象的手段。在产生软件规格说明的过程中需要对其组成部件进行抽象. 否则, 如果每一个组成部件都以自己特有的行为方式运转, 不同的组成部件交织在一起, 那么软件规格说明可能同软件实现一样复杂。这样也就失去了软件规格说明存在的意义。过程抽象和数据抽象是两种有用的抽象方法。过程抽象把一组输人映射到一组输出上, 包含了数据抽象, 并通过数据抽象的行为来定义。数据抽象提供了一组数据以及施加在这组数据上的操作。尽管这些操作也可视为一种过程抽象, 但是把数据抽象当作一个整体更能体现出它和现实世界实体的对应关系。
2从时间的角度考察
从时间的角度来观察, 广义来说, 软件规格说明方法适用于整个软件生命周期; 狭义上来说, 软件规格说明方法仅适用于软件生命周期的特定阶段。
在软件生命周期的某些阶段采用软件规格说明方法往往要等到以后的阶段中方显示出它的促进作用。例如, 软件设计规格说明划分了软件模块使用者和实现者的责任, 避免了编码阶段可能出现的混乱。所以, 研究软件规格说明方法既要考虑到特定开发阶段的特点, 又要联系整个软件生命周期, 统筹规划。软件工程的传统观点认为软件规格说明方法仅针对于开发前期的需求分析和软件设计。目前, 软件过程是一个很活跃的研究领域。把软件生命周期分解成一系列软件过程便形成了软件过程模型, 不同的分解方法对应于不同的过程模型。研究软件规格说明方法同软件过程结合起来更有利于改进整体的效果。这样就扩充了软件规格说明的传统观点。困扩充后的软件规格说明方法要包括:
① 源规格说明
② 目标规格说明
③ 从源规格说明开发出目标规格说明的方法
④ 验证源规格说明到目标规格说明的更换是否正确的方法。
应用领域和程序是软件规格说明抽象层次的两个极端。以下分别从这两个极端考察软件规格说明。
( 1) 从应用领域考察
软件开发的起点是根据用户需求产生软件需求规格说明。这是软件规格说明方法中的一个难点。应用领域包含着动态与静态、数据流与控制流、决策与计算、串行处理与并行处理等多种差别。我们可以从具体应用领域出发,探索适合特定应用领域的软件规格说明方法。于是,“ 需求工程” 这一概念便应运而生。商业上的应用总是显得迫不及待。各种各样的应用生成器a( 即ilc at io n ge en ar ot sr ) 纷纷推出. 这种工具通过分析应用领域的特点, 开发出专用问题描述语言, 并提供解决该语言所能描述问题的算法。当前应用生成器主要包括报表生成器, 屏幕窗口菜单生成器, 查询语言等。
(2 ) 从程序出发考察程序是软件在最低抽象层次的上的描述。开发软件规格说明不能不考虑在计算机上实现的可能性。大多数高级语言( 如F O R T R A N、P as ed ) 均是基于过程的计算模型。这种模型反映了计算机硬件的处理机制。现代提出的新型计算模型则偏重于反映人们思考方式的特点。例如, 函数模型, 逻辑模型, 面向对象模型等。由此可见, 程序设计语言正吸取着软件规格说明中的精华, 使自身抽象层次不断提高。第四代语言(4 G L ) 在一定程度上提高了软件开发效率, 已被广泛应用于各种决策支持系统, 计算机辅助软件开发环境、专家系统、数据库等。但现有的第四代语言工具往往具有通用性不强、抽象层次不高等缺点, 所以, 不适合作为软件规格说明语言。
软件维护和重用应在比程序更高的层次上进行。从原有的程序出发, 反向推导出软件规格说明是逆向工程的主要工作。这方面的研究也有利于加深对软件规格说明方法的理解。
表示方式
软件开发人员和用户之间以及软件开发人员内部之间的交流在相当程度上决定了软件规格说明的质量。表示方式就是这种交流的媒介。这是关于软件规格说明的争论较多的话题。目前认为, 软件规格说明表示方式要:
①适用于不同的应用领域
② 有良好的数学基础
③ 允许表示软件规格说明的不同侧面以及把它们组合成一个完整的软件规格说明
④能保留待定的问题, 表示方式不强迫做出不愿或不能做出的设计决定等。形式化软件规格说明和图形软件规格说明是当前的两个十分活跃的领域。
1形式化软件规格说明
形式化软件规格说明有精确定义的语法和语义, 可进行一致性、完整性检查, 有利于程序自动化生成, 倍受学术界推崇. 目前, 已研制出许多形式化规格说明语言。这些形式化软件规格说明语言按语义学方法可以分以下两类:
( 1 ) 面向模型的语言。这类形式化软件规格说明语言可根据数学结构(如集合、序列、函数) 描述系统的行为模型。在串行系统中有VDM 语言、Z 语言, 在并行系统和分布式系统中有PetriNets 、CCS、CSP。
(2 ) 面向特性的语言。这类形式化软件规格说明语言允许描述系统行为的最小约束, 又可分为两种: ① 公理类语言, 用一阶逻辑描述关于抽象数据类型操作的前后断言. 包括Larch、Anna 。② 代数类语言, 基于多序代数, 用代数实体的等量关系描述系统的行为特征, 在串行系统中有Clear、Act One。在并行和分布式系统中, 面向特性的语言有Temporal Logic、LOTOS。
上述这些形式化规格说明语言均侧重于功能描述。在非功能规格说明的形式化方面的研究很不充分。
在充分肯定形式化软件规格说明的同时, 我们还应认识到: 非形式化的表示方式中也含有形式化的成分, 形式化的表示方式中又包含着非形式化的理解。只有形成了对软件系统深人的理解, 方能使用形式化描述方法。形式化软件规格说明不能完全代替非形式化软件规格说明。形式化软件规格说明与非形式化软件规格说明要互相补充清洁屋技术就同时采用非形式化和形式化两种软件规格说明表示方式。
2图形软件规格说明
正文软件规格说明包含了大量字符流信息, 以至于让人难以形成整体的结构框架。图形比正文有着更多的视觉效果, 如形状、大小、方向、距离、位置等, 在计算机语言中采用图形并非近年才有。六十年代出现的流程图便是早期的图形语言。用图形描述软件规格说明可以做得比正文更好。Jho n 5M和K ar l GB曾提出一种软件的图形设计风范。该方法在一种元模型的基础上用图形描述解决了软件开发中的分析、设计、编码、维护和文档管理等问题。
许多软件规格说明方法都引人了一些图形和符号。图形规格说明要使用广泛接受的图形规范。
图形软件规格说明不可能象使用正文语言那样随意表达语义。所以图形软件规格说明至少是半形式化的表示方式。实现图形软件规格说明的硬件障碍正逐渐消失, 商品化的图形工作站已拥有十分强大的功能, 这更激发了研究图形软件规格说明的兴趣。
Petri网是一种系统的数学和图形描述和分析工具。与其它系统模型相比,Petri网的主要特点是: 可确切表示某种事件集合中的因果关系和独立性, 包括并发关系; 适合描述非顺序功能的系统; 易在不同抽象层次上用同样的描述语言表示系统; 易验证系统的性质及正确性。正由于这些特点, 目前Petri网已成为计算机科学中的一个重要研究课题和工具。基于Petri网的图形软件规格说明可望能有所作为。
关于图形软件规格说明其它方面的研究工作是: 图形肖像和图形词汇的定义, 图形语法和语义, 人机交互模式, 专用图形软件规格说明语言和环境等。