软件企业建立质量体系应注意的几个问题
软件企业建立质量体系应注意的一些问题(一)
CANT注册高级审核员
QuEST Forum论坛注册TL9000审核员袁伦成
软件产品的实现与硬件产品的实现过程在质量管理方面有很大的差异。在按照ISO9000:2000《质量管理体系要求》标准建立质量管理体系时,应根据其产品特性注意以下问题:
一、建立质量管理体系应依据的主要准则和要求:
软件企业建立质量管理体系主要依据的准则是GB/T19001-2000《质量管理体系要求》标准或TL9000 R3.0《质量管理体系要求手册》和《质量管理体系测量手册》。
但同时还应满足以下技术标准和规范:
GB/T19000.3-1997 ISO 9000-3-97《GB/T19001-ISO9001 质量保证标准在计算机软件开发、供应、安装和维护中的应用指南》;
以及下列软件专业基础、过程、质量、技术与管理、工具方法、数据标准和规范:专业基础:
GB/T11457-1995 《软件工程术语》
GB/T13702-1992 《计算机软件分类与代码》
GB/T15538-1995 《软件工程标准分类》
软件过程:
GB/T 8566-2001《信息技术软件生存周期过程》
GB/T 8567-1988 《计算机软件产品开发文件编制指南》
GB/T9385-1988 idt IEEE 830:1984 《计算机软件需求说明编制指南》
GB/T9386-1988 idt IEEE 829:1983 《计算机软件测试文件编制规范》
GB/T12505-1990 《计算机软件配置管理计划规范》
GB/T15532-1995《计算机软件单元测试》
GB/T14079-1993《软件维护指南》
GB/T16680-1996《软件文档管理指南》
GB/T 8566-2001《信息技术软件生存周期指南》
软件质量:
GB/T 12504-1990《计算机软件质量保证计划规范》
GB/T17544-1998 《信息技术软件包质量需求合测试》
GB/T18491.1- 2001《信息技术软件测量功能规模测量第一部分概念定义》GB/T18492-2001 《信息技术系统文件完整性级别》
技术管理:
GB/T 13423-1992《工业控制用软件评定准则》
GB/T 14394-1993《计算机软件可靠性可维护性管理》
GB/T16260—1996 idt ISO/IEC 9126:1991 《信息技术软件产品评价质量特性及其使用指南》
GB/T18905.1-2002 《软件工程产品评价第一部分概述》
GB/T18905.2-2002 《软件工程产品评价第二部分策划和管理》
GB/T18905.3-2002 《软件工程产品评价第三部分开发者的过程》
GB/T18905.4-2002 《软件工程产品评价第四部分需方用的过程》
GB/T18905.5-2002 《软件工程产品评价第五部分评价者用的过程》
GB/T18905.6-2002 《软件工程产品评价第六部分评价模块的文档编制》
工具与方法:
GB/T15853-1995《软件支持环境》
GB/T18914-2002《信息技术软件工程 CASE工具的采用指南》
GB/T18234-2000《信息技术CASE工具的评价与选择指南》
数据:
GB/T1526-1998 《信息处理数据流程图、程序流程图、系统流程图、程序网络和系统资源图的文件编制符号及约定》
GB/T13502-1992《信息处理系统计算机系统配置图符合及约定》
GB/T15535-1995《信息处理单命中判定》
GB/T15697-1995《信息处理按记录组处理顺序文卷的程序流程》
质量管理体系:
GB/T19001-2000 idt ISO 9001:2000 《质量管理体系要求》
GB/T 19004-2000 idt ISO 9004:2000《质量管理体系-业绩改进指南》
GB/T 19000.3-1997 ISO 9000-3-97《GB/T19001-ISO9001 质量保证标准在计算机软件开发、供应、安装和维护中的应用指南》
行业标准规定:
信息产业部文件信部规[1999]1047号《计算机信息系统集成资质管理办法(试行)》
信息产业部文件信部规[2003] 440号文《计算机信息系统集成资质等级评定条件(修订)》
2000年10月16日信息产业部、教育部、科学技术部、国家税务总局《软件企业认定标准及管理办法(试行)》
SJ/T30003-93《电子计算机机房施工及验收规范》
GB 2887-89 《计算机场地技术条件》
GB 9361-88 《计算机场地安全要求》
GB/T50314--2000《智能建筑设计标准》
GBJ/T 50311-2000 《建筑与建筑群综合布线工程系统设计规范》
GBT/T 50312-2000 《建筑与建筑群综合布线系统工程验收规范》
上述准则并不是全部,仅以为例。应注意保持所建立的质量体系与上述标准、规范的符合性。
二、按照ISO9001:2000标准的 4.1总要求的规定,应识别软件设计、开发、安装及计算机系统集成服务的实现过程,这些过程与硬件产品的实现过程有较明显的区别。体现在以下几方面:
(一)研制过程不同
----- 软件
计算机软件是一种以逻辑实体形式存在的信息产品。经确认并实现的软件产品的
本身始终不会自然变化,只是其载体可变:如计算机硬盘、软盘、MO磁光盘、CDRW、CDR可刻录光盘或磁带等。
与硬件相比具有以下特点:
1、软件产品的研制过程主要依靠开发者利用适宜的开发工具的一系列智力劳动的过程。其可见性差,难以测量,产品的缺陷和不可靠问题基本上是人为差错。
为此,应对软件的设计开发人员进行经常性的培训、教育,提高开发技能和水平。保证开发所需的基础设施、工作环境、计算机软件、硬件应与开发项目要求相适宜。
但这一点,因软件业存在人员频繁流动,员工新旧更替相对比较频繁的特点,新员工未经规范性系统培训的开发习惯及人员之间的沟通问题可能导致产品质量控制不能到具体的人,使这种人为差错难以规避。没有前兆;并
2、软件研制的工作量大都集中在计划和开发阶段。没有明显的生产制造过程,其生产和制造过程即是软件产品的复制、包装、安装、交付和交付后的维护(补丁、升级)活动。因此:
软件的设计与开发过程往往密不可分;
产品的开发与实现过程往往密不不可分;
开发输出的验证和确认过程与产品的监视和测量过程往往密不分。
这三个密不可分可导致在质量管理体系的策划中往往把软件产品的设计验证和确认活动与过程监视测量和产品的监视测量作为同一过程来策划和实施。
3、软件之间存在一定的耦合,耦合的不正确性可能导致缺陷。
软件之间的耦和可分为:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合、非直接耦合七种耦合。是对模块之间相对独立性的量度,也称为块间联系。软件之间的耦合亦可称为开发各环节的接口,它不易保证其正确性。这种偶合的不正
确性可能导致“软件缺陷”。它是程序内部不合理的逻辑结构、不正确的语句和不适当的指令所引起的。
又由于软件系统模型的离散性,输入微小变化可能引起输出的巨大变化,在前阶段出现的缺陷,可能残留,并在后续阶段被放大。据统计,如软件概要设计中出现的缺陷残留,在详细设计阶段可能放大到1.5倍,而在产品的实现阶段,缺陷的放大系数甚至达到3。这种情况可能导致一个程序的修改会影响其他模块。因此,程序修改后,必须进行回归测试。
但另一方面,软件缺陷的存在并不一定会引起程序不能运行。只有当程序中的缺陷被执行时,故障才会发生。故障的形成无物理原因,失效发生取决于输入值和运行状态的组合。所以,一旦程序出了故障,其中必定隐藏着相应的缺陷。
4、软件产品应在其整个“生命活动周期”内都实施配置管理,保证对其开发过程和交付后的维护支持过程中的各种变化的“标识和可追溯性”。
软件的交付后维护支持过程包括修改设计、增加补丁及补丁程序以及增加软件功能。任何软件都不可能逾越这一阶段。除非该软件已经到了生命的结束期,即软件产品的终止期。
5、由于大多数软件产品孤立性(单个开发,不能形成批量销售的产品),导致对其控制要求存在很大的差异。主要来自于以下方面:
◆软件的研制过程模型不同:瀑布模型或原型开发模型。
◆嵌入式软件或非嵌入式:多用汇编语言编写的嵌入式软件与硬件联系紧
密;实时性要求高;有严格的时序;要求具有高可靠性、安全性、更能抵
抗恶劣环境。
◆开发工具的应用程度;不同的软件可能采用手工开发或采用开发工具、管
理工具和测试工具开发两种开发方式。手工开发难于避免出现差错。
◆软件关键性等级;一般分为A、B、C、D四级。等级越高控制要求越高。
◆软件的规模;对源代码行数小于5000的非嵌入式软件和源代码行数小于3000的嵌入式软件,可视为小型软件,控制要求相对弱些。
6、软件测试技术具有局限性,尤其是不少小型软件组织和小规模软件。
7、软件质量指标许多尚未量化,也难已量化;
8、软件(客户)的需求不定性及软件技术的快速发展,使软件产品不可能绝对无缺陷才释放发布。软件产品始终处于需要不断更新的状况。
软件(客户)的需求不定性使软件开发初期阶段不能真正反映用户意图。而确定需求是非常重要的工作,它既是后继阶段开发的基础,又是完成后验收的依据,并且还是工期和开发成本估计的出发点。
------ 硬件
1、硬件产品是物理实体。每件同规格产品之间都有散差,会随时间和使用而老
化、磨损,以至失效;
2、生产和服务提供过程是人力劳动和机具设备的加工过程,过程有形,便于测控;
3、除了设计原因外,产品(或零、部件)在生产和使用过程中都会产生故障;
4、故障总是由组成产品的零、部件或其结合的故障引起;
5、系统故障的形成和失效一般都是物理原因,有前兆。
(二)可维护性和可靠性工程不同
----- 软件
软件维护阶段的关键任务是通过各种必要的维护活动使系统持续满足用户需要。
通常有四类维护活动:
改正性维护,也就是诊断和改正在使用过程中发现的软件错误;
适应性维护,即修改软件以适应环境的变化;
完善性维护,即根据用户的要求改进或扩充软件使它更完善;
预防性维护,即修改软件为将来的维护活动预先做准备。
前三种维护是在用户提出请求后由维护人员完成的。预防性维护对那些生命周期较长,但需作重大修改、完善功能的软件进行的可靠性或可维护性改善。
据有关资料统计各种维护活动的分布如图:
改正性维护20%;适应性维护25%;完善性维护50%;预防性维护5%
可靠性(Reliability)是软件的一项重要指标。它指的“在规定的条件下和规定的时间内,计算机完成规定功能(无故障运行)的概率”。为了提高其可靠性,需要注意以下几方面:
1、研究的对象:应考虑软件与一般的系统或产品不同的特有的一些性质;
2、规定的功能、故障和缺陷的含义;
3、规定软件的工作环境和使用环境:不同的环境,软件发生故障和暴露缺陷的
可能性有很大差距;
4、规定的时间:泛指的广义时间。如因对象的不同遇到的次数、周期、距离等
时间的量。此外,还有连续使用、间歇使用、放置、长时间、短时间、瞬间等
各种时间概念。
----- 硬件
1、产品的可维护性和可靠性往往在设计开发过程中已经确定。可靠性参数有物理基础。生产过程对产品的可靠性影响也很大,应加强控制;
2、产品的生产需要建立环境应力条件,通过对零、部件的筛选,排除故障;
3、相同的部件之间是自然独立的,在可靠性设计中采用适当的冗余可以提高其可靠性;
4、使用过程中出现产品故障,只需通过维护活动更换或修复失效部件即可使产品恢复良好状态,但可靠性一般不会因此提高;
5、维修一处一般不会对它处造成影响;
6、失效率变化类似浴盆曲线;
(三)生成活动周期阶段及其过程不同
1、典型的软件的生存活动周期阶段划分(Life Cycle Mode—生命周期模式)