一、软件可靠性工程与需求工程的关系 软件需求分析是软件产品开发设计的第一步,也是重要的一步。其工作质量的高低,不仅直接影响后续工程的质量,而且决定着所开发软件产品的价值。当然,完整、严密地描述用户需求,并不是一件十分容易的事。有些软件产品之所以功能不完善、性能差、可靠性低、可用度差、甚至不能使用,多数是因为用户需求分析工作不彻底所致。但是,目前软件可靠性工程研究与实践的重点,在于软件测试等一些事后的验证性工作,对软件可靠性设计重视不多,这在需求分析等前期阶段尤为突出。
二、软件需求分析
软件需求分析是软件设计的基础。它采用一系列行之有效的技术、方法和工具来分析用户需求,通过特定的形式系统地描述拟开发软件的功能、性能,以及行为特征和相关约束,定义所有内外部特征,后形成既能指导软件设计、又能同用户沟通的软件需求规格说明。它覆盖了软件设计之前的各项活动。
软件需求分析是从用户初的非形式化需求,到满足用户要求的软件产品设计的一个映射。
在软件计划的基础上,从深入分析用户需求出发,把用户的需求变换成以计算机为基础的系统需求。需求分析实际上是调查、评价、以致肯定用户对软件的需求的过程,是一个对用户意图不断进行揭示和判断的过程。其目的在于细化、精化软件的作用范围,确定拟开发软件的功能和性能,分析并确认其过程,确定软件成分及接口。
1.软件需求分析的任务与步骤
软件需求分析可分为四个步骤。
①归纳整理用户提出的各种问题和要求,弄清用户企图通过软件达到的目的,并把它作为要求和条件予以明确。即分析人员借助各种工具和方法,获得对用户需求的基本理解,然后在需求获取方法的驱动和指导下,从非形式需求陈述中提取出用户的实际需求。由此确定软件的功能、性能、接口关系及有关属性、软件条件、限制和边界等,标定软件的作用范围,确认支持性的软硬件环境及辅助工具与条件。此阶段还为软件需求分析活动提供了相应的过程控制机制。
②在需求获取的基础上,建立逻辑模型,使用自顶向下、逐层分解的方法,把用户对软件的需求分解成若干子系统或软件成分,将外部需求赋予软件的各个功能成分,定义软件成分的内部功能,并标定它们之间的接口。
③用准确、简练、无二义性的语言将用户需求规格化为软件需求规格说明,使用户和开发人员对拟开发软件有共同的理解,它同时还是软件确认、测试、验收和交付的基准。
④通过需求评审,对需求获取、需求定义等进行全面审查,力图发现需求分析中的错误和缺陷,终确认软件需求规格说明。同时,以需求规格说明为输入,通过符号执行、模拟或快速原型等方法,向用户展示需求规格说明所刻划的系统外部行为和相应特征。
2.软件需求定义方法
在需求分析的前期,用户往往难以对其要求进行准确、完整的描述,因此获取并定义软件需求特别重要。常用的需求定义方法是需求背景描述法。它可以通过对下面问题的获取与分析,来获得对用户需求的定义。
用户需求的数学、物理和工程技术等背景。 相关数据量及其数据的准确性和提供方式。 用户需求的规模和一般限制。 精度要求。 原始数据的诊断要求和参数缺省处理要求。 操作控制与环境要求。 可靠性要求。 在规范用户需求的基础上,分析用户的需求背景,应特别注意其差异。根据开发和运行环境限制,得到软件功能和性能的初始集合,终形成需求集合。
另一种方法是问题求解过程定义。因为有些需求难以用简练的原始问题模型或输入/输出规格予以定义,需要把解决问题的过程逐步描述出来,即指定每一步的数学模型、数据加工、算法、精度要求及时间限制、模型校核、优化设计等,从而获得对用户需求过程的定义。
此外,事务元定义也是一种常用的方法。它通过软件所要完成的每个独立事务来推测用户对某些特殊功能或性能的需求。
3.软件需求规格说明
面向不同的需求对象,产生了多种需求规格说明方法。它们均针对不同的对象发挥了较好的作用,但目前尚无一种能“包治百病”的方法。现有的需求规格说明方法可分为三类:形式化方法、非形式化方法、基于知识表示的综合方法。
形式化方法是一种基于严格数学基础的系统特征描述方法,可分为两类。一是面向模型的,即通过应用一系列数学结构构造系统模型,来直接定义系统行为;二是面向特征的,即通过给出系统必须满足的公理集,来描述系统的特征,从而间接地定义系统行为。形式化方法往往与形式化的规格说明语言紧密地结合在一起。前者的典型方法有VDM、Z、Petri网和CSP等后者又可分为公理规格说明和代数规格说明。