需求分析与软件可靠性保证
 
2009-06-19 来源:ccw.com.cn
 

一、软件可靠性工程与需求工程的关系

软件需求分析是软件产品开发设计的第一步,也是最重要的一步。其工作质量的高低,不仅直接影响后续工程的质量,而且决定着所开发软件产品的价值。当然,完整、严密地描述用户需求,并不是一件十分容易的事。有些软件产品之所以功能不完善、性能差、可靠性低、可用度差、甚至不能使用,多数是因为用户需求分析工作不彻底所致。但是,目前软件可靠性工程研究与实践的重点,在于软件测试等一些事后的验证性工作,对软件可靠性设计重视不多,这在需求分析等前期阶段尤为突出。

二、软件需求分析

软件需求分析是软件设计的基础。它采用一系列行之有效的技术、方法和工具来分析用户需求,通过特定的形式系统地描述拟开发软件的功能、性能,以及行为特征和相关约束,定义所有内外部特征,最后形成既能指导软件设计、又能同用户沟通的软件需求规格说明。它覆盖了软件设计之前的各项活动。

软件需求分析是从用户最初的非形式化需求,到满足用户要求的软件产品设计的一个映射。

在软件计划的基础上,从深入分析用户需求出发,把用户的需求变换成以计算机为基础的系统需求。需求分析实际上是调查、评价、以致肯定用户对软件的需求的过程,是一个对用户意图不断进行揭示和判断的过程。其目的在于细化、精化软件的作用范围,确定拟开发软件的功能和性能,分析并确认其过程,确定软件成分及接口。

1.软件需求分析的任务与步骤

软件需求分析可分为四个步骤。

①归纳整理用户提出的各种问题和要求,弄清用户企图通过软件达到的目的,并把它作为要求和条件予以明确。即分析人员借助各种工具和方法,获得对用户需求的基本理解,然后在需求获取方法的驱动和指导下,从非形式需求陈述中提取出用户的实际需求。由此确定软件的功能、性能、接口关系及有关属性、软件条件、限制和边界等,标定软件的作用范围,确认支持性的软硬件环境及辅助工具与条件。此阶段还为软件需求分析活动提供了相应的过程控制机制。

②在需求获取的基础上,建立逻辑模型,使用自顶向下、逐层分解的方法,把用户对软件的需求分解成若干子系统或软件成分,将外部需求赋予软件的各个功能成分,定义软件成分的内部功能,并标定它们之间的接口。

③用准确、简练、无二义性的语言将用户需求规格化为软件需求规格说明,使用户和开发人员对拟开发软件有共同的理解,它同时还是软件确认、测试、验收和交付的基准。

④通过需求评审,对需求获取、需求定义等进行全面审查,力图发现需求分析中的错误和缺陷,最终确认软件需求规格说明。同时,以需求规格说明为输入,通过符号执行、模拟或快速原型等方法,向用户展示需求规格说明所刻划的系统外部行为和相应特征。

2.软件需求定义方法

在需求分析的前期,用户往往难以对其要求进行准确、完整的描述,因此获取并定义软件需求特别重要。常用的需求定义方法是需求背景描述法。它可以通过对下面问题的获取与分析,来获得对用户需求的定义。

  • 用户需求的数学、物理和工程技术等背景。
  • 相关数据量及其数据的准确性和提供方式。
  • 用户需求的规模和一般限制。
  • 精度要求。
  • 原始数据的诊断要求和参数缺省处理要求。
  • 操作控制与环境要求。
  • 可靠性要求。

在规范用户需求的基础上,分析用户的需求背景,应特别注意其差异。根据开发和运行环境限制,得到软件功能和性能的初始集合,最终形成需求集合。

另一种方法是问题求解过程定义。因为有些需求难以用简练的原始问题模型或输入/输出规格予以定义,需要把解决问题的过程逐步描述出来,即指定每一步的数学模型、数据加工、算法、精度要求及时间限制、模型校核、优化设计等,从而获得对用户需求过程的定义。

此外,事务元定义也是一种常用的方法。它通过软件所要完成的每个独立事务来推测用户对某些特殊功能或性能的需求。

3.软件需求规格说明

面向不同的需求对象,产生了多种需求规格说明方法。它们均针对不同的对象发挥了较好的作用,但目前尚无一种能"包治百病"的方法。现有的需求规格说明方法可分为三类:形式化方法、非形式化方法、基于知识表示的综合方法。

形式化方法是一种基于严格数学基础的系统特征描述方法,可分为两类。一是面向模型的,即通过应用一系列数学结构构造系统模型,来直接定义系统行为;二是面向特征的,即通过给出系统必须满足的公理集,来描述系统的特征,从而间接地定义系统行为。形式化方法往往与形式化的规格说明语言紧密地结合在一起。前者的典型方法有VDM、Z、Petri网和CSP等后者又可分为公理规格说明和代数规格说明。形式化方法通常有严格定义的分割、抽象、投影机制,其数学定义有助于澄清认识。规格说明的构造往往是增量式的,但数学定义不是所有软件开发人员都能轻易掌握的,它与一般应用尚存在相当的距离。

非形式化方法常常以某种方法学或方法框架的形式出现,非形式化地描述一系列规格说明的步骤和原则,并定义相应的记号。其典型方法有结构化分析方法和面向对象分析方法等。结构化分析方法源于数据处理应用,是一种单纯的自顶向下的功能分解技术。面向对象分析方法大多通过对象(类)、状态、交互行为来刻划问题及问题的解,强调对对象及对象类的定义和求精。

在实践中,人们逐步认识到形式化和非形式化方法的不足。于是,力图寻求一种结合这两种方法的长处、并能有效克服其缺点的综合方法。基于知识表示的方法是这种方法的代表。

知识表示技术为需求规格说明奠定了形式基础,而非形式的方法框架给出了需求说明的指导原则。它由辅助系统检测当前的需求状态,提示下一步的工作。其辅助系统一般检测和提示多种意向的存在,并支持对需求的增量式开发。因此,其前景依赖于辅助系统的智能化程度和方法框架给出的各项指导原则的有效性。

需求说明语言的选择至关重要,它直接影响需求说明的质量和可理解性。一般地,需求说明语言应能对现实世界中的各种概念、特征、变化等具有完备的表达能力。而且,它应是易学、易用、易读、易懂的。目前,主要有自然语言、结构化行为描述语言、形式语言、半形式语言四类规格说明语言。

现在,大多数需求规格说明使用自然语言编制,但这相当危险,其非形式特征将妨碍软件开发人员就拟开发软件的各个细节达成共识。

三、需求分析工程中的可靠性保证

1.影响需求分析可靠性的因素

下述因素是影响软件需求分析可靠性的主要因素:

  • 分析工具、方法的选择、使用及其有效性。
  • 建模语言的选择与开发人员、分析对象和需求领域的适配性。
  • 需求分析人员与用户和专家之间的沟通。
  • 需求获取与分析的彻底性、完整性、准确性,以及分析方法的有效性。
  • 需求分析规格说明定义与描述的完整性、准确性、一致性、无二义性,以及可读性、易理解性和可维护性。
  • 功能需求包括备选功能的定义和识别。
  • 性能需求包括纠错及功能增加所产生的影响。
  • 环境要求对软件实现的影响。
  • 数据的准确性和逻辑组织。
  • 接口要求、定义与描述。
  • 需求分析的质量保证目标与手段。
  • 可靠性保证大纲对可靠性目标的要求及其本身的完备性与相关性。
  • 过程建模质量。
  • 原型的有效性与可信性。
  • 需求评审的彻底性与需求验证的合理性和有效性。
  • 操作使用要求,以及互操作性和其它特殊要求。

软件需求分析对软件可靠性的影响至关重要。在需求分析中,除了在思想上予以高度重视外,还应使用合适的技术,选用有效的方法和工具,并加强管理。用户、软件分析与设计人员及其他软件设计方面的专家和行业专家应通力协作,以控制所有可能影响软件功能、性能与可靠性的因素。并可请教在类似软件项目中已成功地进行了需求分析的人员,重用其成功的分析经验、方法和需求规格说明。

2.需求规格说明的质量保证体系

软件需求说明通过一系列相关属性来描述,但它们往往相互重叠或矛盾,目标和性质相互混杂,难以给出相关的质量评判标准、确立相应的可靠性目标。因此,建立软件需求的可靠性框架和质量保证体系不仅是必要的,而且是重要的。

软件需求说明的可靠性保证框架的构成包括:问题模型、问题论域、模型理解、建模语言四个方面,以及联系这四个方面的语义质量、语用质量和语法质量三个关系。其中,建模语言与应用领域的适配性、建模语言与开发小组的适配性、开发小组与应用领域的适配性、需求模型对用户需求的实际意义,以及语义质量、模型构造对建模语言的语法质量等是影响软件需求分析可靠性的主要因素。

语法质量的目标是语法的正确性,即所有语句在句法上完整,不准使用需求说明语言中不曾定义的符号,保证所有语句均满足语法规则。实践表明,错误的预防、检测和更正是语法质量保证的三种基本手段。检测错误是通过模型的构造发现错误;预防错误是拒绝在模型中加入错误的语句;更正错误是用正确的语句替换错误的语句。前两者可以通过需求说明语言的形式预防来完成,后者则较难自动化。

语义质量是需求模型有效性和完备性的保证。有效性要求模型中的所有语句都正确且与用户需求相关;完备性要求模型包含领域中关于问题的所有相关语句。需求模型与领域越相似,其语义质量越高。但对实际问题,不可能达到彻底的有效性和完备性,因而较为实际的目标是在约定的可信度下的有效性和完备性。多数提高模型质量的方法都依赖于人们对模型具体内容的理解,即语用手段。一致性检测往往可自动完成,而不必真正理解给出的模型。

语用质量影响人们对表达同一意义的多种表达方式的选择,其目标是可理解性。它不仅要使需求模型能被理解,而且要确保开发人员理解该模型。与语义质量目标一样,在可理解性中也需要引入可信度。任何有助于理解需求模型的手段都可以纳入达到语用目标的有益途径 。

例如,各种逐项阅读、以求理解的模型检查,以图表代替文字的模型可视化,利用动画表现系统动态特征的模型动画显示,根据统计数据预测模型所刻划软件行为特征的系统模型,基于解释的模型查阅手段,基于过滤(甚至包括语言翻译)的阅读范围控制等。

3.软件需求分析中的可靠性分析、设计与管理

在软件需求分析过程中,可靠性任务包含四方面内容:一是对可靠性需求的获取、分析二是确定拟开发软件的可靠性目标;三是软件需求分析过程中的可靠性设计;四是为实现可靠性目标而采取的可靠性管理。在需求分析活动中,将这四方面的可靠性任务以用户和软件开发人员共同熟悉的软件可靠性度量加以反映。

用户需求中有时已经包含了用户对可靠性的要求,这样,需求分析人员只需将其可靠性要求和其它要求一起进行细化,并以规定的要求和形式形成能综合反映可靠性要求的规格说明即可。不过,大部分用户对可靠性提不出明确的要求、甚至没有要求,这就需要根据用户对拟开发软件的功能、性能等要求,来确定用户对可靠性的要求和可靠性目标,并将其随软件功能的分解而分解。

在软件需求分析过程中,我们可以很方便地列举出影响软件需求分析可靠性的一些常见的错误和缺陷,并可以估计需求分析错误相对这些错误和缺陷的分布。

为了进一步开展软件需求分析中的可靠性设计,可以用需求分析中的错误或缺陷度量来对需求分析的有关可靠性指标进行度量。通过度量,明确主要的软件错误分布及对软件需求分析可靠性的影响,以及软件需求分析阶段的错误或缺陷指标后,我们就可以对相关的错误或缺陷进行控制。

需求分析中的错误或缺陷,主要残存于需求规格说明中。对此,可通过仔细的复核、审查与评审来降低。当然,分析人员素质的提高,以及分析工具、方法和说明语言的选择都相当重要。

软件需求分析阶段中的可靠性问题,同样严重受制于其复杂性。因此,有效地控制其复杂性(包括结构的、功能分解的、总体的、规格说明的复杂性),是确保需求分析阶段可靠性的有效措施。

为了能有效地避免需求分析中的人为因素,需求重用在很多时候是一种非常有效的方法。它包括模型、方法、概念、工具的重用,以及需求规格说明的片段、甚至完全的重用。

因为软件需求分析是一项纯智力活动,所以需要在这一过程中、尤其在需求分析的后期,进行有效的评审和验证。它们是发现需求分析错误和缺陷的最有效的办法。当然,它们也只能发现需求分析中的错误和缺陷,并不能保证需求分析没有错误和缺陷。此时,采用基于严格数学正确性证明和公理证明的非形式化正确性证明方法,会收到意想不到的效果。

四、结束语

软件需求分析工作主要解决需求分析的指导原则、方法框架和操作启示。形式化需求分析技术在软件需求分析中的研究与应用,推动了软件需求分析自动化的进程,使软件需求的获取与分析更加严密、精确。

目前,基于结构化的非形式化需求分析方法是一种使用较为广泛的需求分析技术,是一种单纯的自顶向下、逐步求精的功能分解方法,具有较好的分割、抽象能力,为开发人员找到了一种中间语言,软件人员易于掌握。但它难以直接应用领域术语,这无疑为其更广泛的应用设置了障碍。

随着面向对象软件开发技术的成熟与广泛应用,人们自然也研究了面向对象软件的形式化分析。面向对象的需求分析强调系统是对现实的模拟,通过对象、状态、服务及对象之间的交互,来同时刻划软件系统的动态、静态特征。在形式化的需求分析规格说明中,Z语言是一个成功的范例。用Z语言进行描述时,通常把系统看成一个状态机。在这种意义下,即可用Z语言描述面向对象的系统。但Z语言未提供描述面向对象系统的足够机制。因此,人们又在Z语言的基础上进行了改进和扩充,如Object-Z和Z++。此外,人们还开发了基于代数规格描述技术、面向对象分析的形式化描述语言,如OBJ-3和COLD-K等。

尽管人们已经认识到了需求工程在软件产品开发中的重要性,并逐步认识到需求规格说明是软件开发的基石。但无论从技术、支持环境,还是从分析工具与方法上来看,软件需求分析所获得的支持都非常有限。目前,它面临如下困难:

  • 应用领域与用户问题的多样性,以及需求变更的不可预测性。
  • 用户要求的实效性、多变性、不确定性与模糊性。
  • 用户需求的内在矛盾及其潜在冲突。
  • 自然概念中存在的本质矛盾。
  • 用户需求的获取过程与描述形式的非形式特征,以及规范描述的困难性。
  • 需求分析方法论和分析工具的缺乏,及其应用范围的局限性。
  • 对软件需求分析认识不足、重视不够。

目前,软件需求分析的重要性正日益引起人们的普遍关注和重视,这方面的研究正在大力开展。其中,人工智能中关于知识表示、知识获取与知识处理的研究,似乎对进一步推动需求分析研究带来了希望,我们期盼着它的成功。


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织