摘要:本文首先对软件质量特征中的关键性和安全性进行了等级划分,然后从软件质量保证的角度,分析了如何基于关键性和安全性进行软件质量保证活动,对提高软件质量具有一定的促进作用。

     关键词:关键性、安全性、质量保证

     软件质量,是贯穿软件生存期的一个极为重要的问题。是软件开发过程中所使用的各种开发技术和验证方法的终体现。因此,在软件开发过程中要特别重视质量的保证,以生成高质量的软件产品。

     在各种有关软件质量的定义中,例如,ANSI/IEEE Std 729-1983定义软件质量为:与软件产品满足规定的和隐含的需求的能力有关的特征或特征的全体;.J.Fisher定义软件质量为:所有描述计算机软件程度的特性的组合。从这些定义中,我们可以得到一个重要的结论:软件质量的高低是通过一些质量特性来体现的。为此,本文主要结合关键性和安全性这两个质量特性来谈谈如何提高软件质量。

    1. 软件的关键性等级

     由于软件功能和应用场合的不同,软件或软件部件在出现故障时所带来的后果是不一样的。有的是灾难性的,它会造成人员的伤亡和巨大的经济损失;而有的只是一种错误而已,人们很容易将其纠正,而软件当前要做的工作可以留待下一阶段再做,其损失也只是时间和人力问题。根据这些原因我们可以把软件划分为下面的关键性等级:

     (1). A级软件

      这类软件可以是一个软件项目,也可以是项目中的一个或某几个部件。对这类软件有非常高的运行可靠性要求,一般情况下要求开发和运行都需要有相应的冗余和备份措施,以保证开发过程中的高质量控制要求和运行过程中的高可靠性要求达到满足。通常采取的办法是两组人员对同一个A级软件同时进行开发,后用质量高的一个或两个软件同时运行而互为备份;对于运行中的冗余,一般是在两个不同的环境中运行两个完全相同的软件或在同一个环境中运行两个不同人员开发的具有相同功能的软件。

     (2). B级软件

     同A级软件一样,这类软件也可以是一个软件项目或者是项目中的一个或某几个部件。对这类软件有较高的运行可靠性要求,一般情况下可采用运行冗余,即在两个配置相同的环境中运行两个完全相同的软件;在开发中要有严格的质量管理和质量控制措施,确保软件的质量和软件产品的运行可靠性。

     (3). C级软件

      同A级软件一样,这类软件也可以是一个软件项目或者是项目中的一个或某几个部件。但对这类软件的运行可靠性要求不是特别的高,在开发中有严格的质量管理和质量控制措施以保证软件的质量达到需求中的质量要求即可。

     (4). D级软件

      同其他种类的软件一样,这类软件也可以是一个软件项目或者是项目中的一个或某几个部件。但对这类软件的运行可靠性只是做一般的要求,在开发中有必要的质量管理和质量控制措施从而能保证软件的质量达到规定要求即可。

     2. 软件的安全性等级

     由于软件应用场合和应用领域的不同,软件产品在预防干扰、预防非法者侵入和信息安全保密的要求是不一样的。有的软件系统一旦有非法者进入并做了一些非法操作后,其结果可能是灾难性的,它会造成人员的伤亡和巨大的经济损失;而有的只是一种简单的破坏而已,花一定的时间进行修复即可。当然,不管是什么系统,其安全性越高越好,但高的安全性是需要用高的代价来换取的,所以安全性要求是要根据系统的使用场合来定的。对于不同安全性要求的软件,其管理、规划和质量控制的方法和要求是不一样的。

     如何来定义一个软件的安全性,通常采用的办法是按等级来定。关于软件系统的安全性划分,应该说到目前为止还没有一种完全统一的标准,本文参照美国国防部1985年发表的一本名为《可信计算机系统评估准则》的桔皮书的划分等级,该书把计算机系统的安全需求划分成从低到高的七个等级,即D、C1、C2、B1、B2、B3、A1。这七个等级又可分为四大类:

     (1)D类,无安全性要求。

     (2)C1/C2/B1类,一般商用操作系统所具有的安全特性。

     (3)B2类,要求建立系统的安全性模型、设置安全内核,并在此基础上对系统安全性给出精确的证明。

      (4)B3/A1类,要求在可信计算机基础上的形式化设计,要求对系统建立形式化模型,并对模型进行形式化描述,而且要对系统描述与实际系统的代码实现之间的一致性给出更为精确的测试和论证。

      这七个等级的安全特性及其安全要求分述如下。

     (1).D级

保护措施少。系统不具有任何安全特性。

     (2).C1级

     粗粒度任意安全保护。C1级系统适用的场合是相互协作的用户,处理相同敏感级别数据。C1级系统应具有以下特点:用户与数据分离;有效的任意访问控制机制,以便用户保护自己的数据,但是这种访问控制较粗,一般以组为单位进行,而且对这种访问控制机制并不进行严格的检验评估;防止对访问控制机制进行纂改的能力;允许用户决定何时使用访问控制机制,何时不用,以及允许用户决定对哪个客体或哪组客体进行访问;对C1级系统应进行测试以确保它能完成文档中声称的功能。

     (3). C2级

细粒度任意安全保护。C2级系统应具有以下特点:有效的任意访问控制,但控制粒度较细,可对单个用户实施保护;每个主体对每个客体的每次访问或访问企图都必须能予以审计跟踪;消除残余信息的泄漏能力。

    (4).B1级

    带标记的安全保护。所有的B级(B1、B2、B3)系统都应具有强制访问控制机制。B1级系统的主要特点有:为每个控制主体和客体分配了一个相应的安全级别;系统同时具有任意访问控制和强制访问控制这两套机制;系统的访问控制既基于层次模型又基于非层次模型;设计文档、源代码和目标代码都应该经过全面的分析及测试;可以采用非形式化模型也可采用形式化模型进行系统的设计。

    (5).B2级

    结构化安全保护。B2级系统应具有如下主要特点:在设计B2级系统时,应提出一个合理的总体设计方案,设计方案应具有明确的模块化和结构化特征;系统设计应遵循小授权原则;访问控制机制应对所有主体和客体予以保护;应对系统进行隐秘通道分析,并堵塞所有发现的隐秘通道;系统应具有完整性访问控制机制;系统的设计及代码实现必须完全通过检验和测试,测试的结果必须保证系统完全实现了总体设计方案;在系统运行过程中,应有专人负责系统中访问控制策略的设置和实施,而系统的操作员仅仅承担与系统后续操作有关的职责。

    (6).B3级

    安全域机制。B3级系统应具有以下特点:B3级系统应具有主体/客体作用域,应有能力对每个客体实施访问保护;像B2级系统那样,应具有完整性访问控制机制;B3级系统应当实现彻底的监督程序的概念,以便每次访问都要经监督程序检查访问的合法性;应当有效地“综合运用分层、模型抽象以及信息隐藏”等设计原则来设计系统;系统应当具有审计能力;在应用分层原则设计系统时,系统的高层设计必须完整,但在安全模型的抽象上必须简单,要去掉所有与安全无关的因素,以便使系统中与安全功能有关的模块足够少,以利对系统进行彻底的测试;必须有令人信服的证据表明所设计的系统实现了预定的设计目标;B3级系统的设计还应考虑到在将来系统也能完全抵御入侵者对系统的破坏。

     (7).A1级

     可验证设计。A1级系统的性能要求与B3级完全一样,但它的设计方法不同。在可信计算机系统评估准则中,要求对A1级系统的设计采用可验证的形式化设计方法。对A1级系统应当进行以下五个方面的验证:系统的形式化总体说明;系统的形式化模型;证明形式化模型与总体说明的一致性;非形式化地论证系统的代码实现与系统的形式化模型和形式化总体说明的一致性;对隐秘通道进行形式化分析。

    3. 软件质量保证

    我们前面对软件的关键性等级和安全性等级进行了详细的说明,下面我们基于这两个特性来关注一下软件质量保证。

    首先,我们要弄清楚什么是质量保证?我们认为,质量保证是为保证产品和服务充分满足消费者要求的质量而进行的有计划、有组织的活动。质量保证是面向消费者的活动,是为了使产品实现用户要求的功能,站在用户立场上来掌握产品质量的。

    其次,我们要弄清楚什么是软件质量保证?我们认为,软件质量保证是向用户及社会提供满意的高质量的产品,满足各项质量特征的产品,它包括软件产品从诞生到消亡为止的所有阶段的质量活动,即为了确定、达到和维护需要的软件质量而进行的所有有计划、有系统的管理活动。

    关键性和安全性是软件的两个特殊质量特征,在针对它们的质量保证活动中,主要分为以下几个步骤:

    (1).明确质量保证的任务和目的

    为使开发出来的软件具有满意的关键性和安全性,从计划阶段开始,不仅需要明确软件的功能,还要明确软件应达到什么样的关键性标准和安全性标准,即参照前面所列的关键性等级和安全性等级,确定软件所要达到的级别。总的说来,软件质量保证的主要任务可以归纳为以下几点:

a.软件质量保证人员必须熟练掌握正确定义用户要求的技术,包括熟练使用和指导他人使用定义软件需求的支持工具。必须十分重视领导全体开发人员收集和积累有关关键性和安全性领域的各种资料和数据,培养这种操作技能。

b.利用已有软件成果是提高软件质量和软件生产率的重要途径。为此,在考虑一个软件产品的关键性和安全性特征时,首先应考虑有哪些既有软件可以复用,通过借鉴类似产品的经验,准确、快速的制定质量保证的目标。

c.由于关键性和安全性往往牵涉到用户的实际情况,因此需要改善软件开发者与用户的协作开发能力,加强共同开发管理。必须明确规定进度管理、质量管理、交接检查、维护制度等各方面的要求,建立跟踪检查的体制。

d.因为对产品的关键性和安全性性能要求把握不准确,而造成设计失误、重复劳动的现象,是影响产品质量的。为此,需要建立互相交流、信息往来通畅、具有横向交流特征的信息交流平台,大可能的降低因沟通不畅而导致的方向性错误。

e.发挥每个开发者的能力,软件生产是人的智能生产活动,它依赖于人的能力和开发组织团队的能力。因此,必须调动开发者学习关键性和安全性方面的业务知识的积极性,管理者或产品服务者要制定相应的技术培训计划、技术水平标准,使其能准确把握产品的性能特征。

f.对于大型软件开发项目来说,提高工程项目管理能力极其重要。提高管理能力的方法是重视和强化项目开发初期计划阶段的项目计划评价,计划执行过程中及计划完成报告的评价。正确地评价开发计划和实施结果,不仅可以提高软件开发项目管理的精确度,还可以积累项目管理经验资料,提高日后进行项目管理水平。

(2).采取适当的方法实施质量保证活动

软件质量保证所采用的一般方法是:在质量体系的基础上,建立质量方针,建立质量保障和控制制度,在开发和维护过程中实施质量管理和控制,保证方针和制度得到严格的落实。

首先,要建立质量管理机构,并规定机构内每个成员的分工和责任,这是进行有效的质量保证活动的基础。要根据项目的大小和可能持续的时间来确定机构的建立情况,如当项目比较大或项目对关键性和安全性要求非常高时,投入的质量保证人员和控制人员要多一些,分工要尽可能的细;相反,人员投入要少一些,每个人的分工不要那么细致。不管怎样,质量管理人员是必不可少的,只是根据项目的实际情况有所调整而已。

其次,要根据用户和软件系统特定应用环境的需要,确定关键性和安全性的定性描述或定量值。根据具体应用要求,确定每一个质量要素的各子特征描述及其度量方法。再根据选定的软件开发模型和里程碑划分,把各个质量要素及其子特征分解到各个阶段、阶段产品、开发活动和活动产品上去,并给出各自的度量方法、验证方法和标准。

第三,要对整个开发过程中的关键性和安全性的质量控制活动进行详细的规划。为了控制软件系统开发过程中的质量,使其终产品或阶段产品在关键性和安全性上满足需求,必须确定所有质量保证活动的时间、内容、目的、所使用和参照的标准、活动有关的规章和约束、活动对资源的要求等。

第四,在整个质量保证活动中,对质量保证人员的知识和技能要定期或不定期地进行培训和更新,使他们能及时掌握当前先进的工程方法和管理技能。同时,对开发中的质量保证活动要及时进行总结,并不断改进和完善管理方法和管理结构,为进一步的活动提供经验和教训。

(3).按质量保证的要求进行检验

为了确保每一个开发活动中的关键性和安全性要求,防止把不合格的软件产品传递到下一个活动中,必须进行质量检验。检验的类型有:

a.供货检验:这是指对委托外单位承担开发作业,而后买进或转让的构成软件产品的部件、规格说明、半成品或产品的检查。由于委托单位、委托时间等情况差别很大,往往与质量相关的信息不完全,要想只靠供货时检查,质量很难保证。因此要调查接受委托单位的开发能力,并且要充分交流情况。

b.中间检验或阶段评审:在各阶段的中途或向下一阶段移交时进行的检查叫做中间检验或阶段评审。阶段评审的目的是为了判断是否可以进入下一阶段进行后续开发工作,避免将差错传播到后续工作中,给后续工作带来不良影响,造成损失。

c.验收检验:确认产品是否已达到可以进行产品检验的质量要求。

d.产品检验:这是软件产品交付使用前进行的检查。其目的是判定向用户提供的软件,作为产品,是否达到了令人满意的程度。

总之,检验的目的有两个:第一,切实搞好开发过程中的管理,检查各阶段的关键性和安全性特征保证活动开展的如何;第二,预先防止由于对关键性和安全性特征把握不准而给用户和开发组织带来的损失。

4. 结束语

本文中我们讨论了软件质量要素中的关键性和安全性,并在此基础上对软件的质量保证活动进行了一些说明。其实,软件的质量要素不仅仅包括关键性和安全性,还包括:易用性、完整性、效率、可靠性、正确性、易维护性、灵活性、易测试性、易移植性、易复用性、互用性等等,这每一个因素又可以分解为若干个子特性。因此,我们在实践中实施软件质量保证活动时,必须综合考虑,有所取舍。能同时实现所有质量特性优化的情况几乎是不可能的,我们必须在这些因素里进行权衡,抓住其中关键、重要的质量因素,忽视非主要因素,只有这样,才能实现软件产品整体质量的大化。