1.条款要求
8.5.1条款是生产和服务提供的控制,该条款全部要求如下:组织应在受控条件下进行生产和服务提供。c)在适当阶段实施监视和测量活动,以验证是否符合过程或输出的控制准则以及产品和服务的接收准则;d)为过程的运行使用适宜的基础设施,并保持适宜的环境;f)若输出结果不能由后续的监视或测量加以验证,应对生产和服务提供过程实现策划结果的能力进行确认,并定期再确认;与2008版标准相比,2016版标准8.5.1条款合并了原标准7.5.1和7.5.2条款的内容,同时还进行了适当扩展。关于此条款,对以下几点内容进行详细分析:所谓受控条件,一般是一组在组织控制下的环境、人员、资源、设施等,通常包括“人、机、料、法、环、测”几个部分;除此之外,标准还强调了对过程确认的要求(f)以及对放行的要求(h)。标准的所谓适用,不是自己认为可做可不做,而是产品生产过程客观是否存在标准规定的这样的要求。如果存在,必须满足标准要求;如果不存在,无法提供证据满足标准这个要求,于是标准这条要求就不适用。比如,某一生产过程全部采用机器自动化完成,不可能产生人为错误,那么标准条款中关于“采取措施防止人为错误”就不适用于这一生产过程。同样关于f)条,过程确认,如果生产过程没有需要确认的过程,那么f)条款就不适用。成文信息一般有两类:文件和记录。8.5.1条款规定的成文信息主要是指文件,包括两类文件:其一,“拟生产的产品、提供的服务或进行的活动的特性”,主要是指产品特性指标、技术要求等,包括设计输出的图纸、设计文件、接口文件等,都属于此类成文信息;其二,“拟获得的结果”,主要是指产品的接受准则和过程的控制准则,实际上是生产产品的验收依据和审查过程的控制要求,比如过程的CPI指标,这些属于过程控制要求。适用时,也要形成成文信息,明确下来。c)条,“在适当阶段实施监视和测量活动,以验证是否符合过程或输出的控制准则以及产品和服务的接收准则”,这实际上说了两件事:首先是对过程进行监视和测量,确保过程或输出符合控制准则;其次是对产品进行监视和测量,符合产品的接收准则。其中控制要求和产品接收准则在a)条以成文信息的形式明确,而本条则是要求实施适当的监视和测量活动满足a)条要求。这是新版8.5.1的新增条款,合并了2008版中7.5.2条款的要求。按照GJB1405定义,对形成的产品是否合格不易或不能经济地进行验证的过程,通常称之为特殊过程。实际上需要确认的过程不完全是特殊过程。比如汽车行业,按照ISO/TS 16949标准,为了增加安全性、可靠性,对于一些后续可以验证的过程也要求做过程确认,但这显然超出了GB19001要求。对比以上三种情况,可以很明显看出,GB 19001规定的需要确认的过程外延最小,其次是GJB 1405定义的特殊过程,外延最大的是ISO/TS 16949。组织可以根据需要选择即使后续能验证的过程进行确认,但这属于加严要求,标准并不要求一点。注意该条款与8.5.5条“交付后的活动”以及8.6条“产品和服务的放行”的区别。8.5.1强调的是受控条件,意思是关于“实施放行、交付和交付后的活动”必须在受控条件下实施,这种受控条件包括但不限于“放行、交付测试、环境要求、人员要求、成文信息要求等”,而8.5.5说的是在8.5.1的受控条件下实施“交付后的活动”,8.6说的是在8.5.1的受控条件下实施“放行的活动”。8.5.1是给他们策划条件,8.5.5和8.6分别说的是实施这些活动。
条款在软件组织中的实施
1.软件组织关于8.5.1条款的几个相关概念
什么是软件的生产过程?软件编码是否属于软件的生产过程?软件生产阶段始于哪一个环节?为了弄清这个问题,我们需要看看软件的生存周期模型。一般认为,瀑布模型是最基本也是最常用的软件生存周期模型,其他大部分模型可以认为是瀑布模型的延伸和变形。瀑布模型定义的软件生存周期如下图所示:
按照瀑布模型,与硬件生产过程进行对比,会发现软件的生产阶段始于编码有一定道理,因为编码阶段就是在产生实际的软件产品,编码完成后实际上就形成了交付给用户的产品,后面就是对该产品的检验测试阶段。但是,如果按照生产的定义和要求,软件的编码阶段纳入生产环节是有待商榷的。生产强调的是可重复、一致性。将一份设计文件交给程序员去编码,不同的程序员编出来的代码会有很大区别,但都符合设计要求。那么将软件的复制环节开始作为软件的生产阶段是否合适呢?显然也不合适。因为在复制前,实际上软件必然经过各类测试,而软件的测试是属于典型的生产过程中的检验环节。实际上,问题出在瀑布模型,上述瀑布模型并没有完整地将软件研制流程展现出来,实际的软件在编码完成后,还有编译、链接、发布、安装等过程,我们将瀑布模型的编码与测试阶段进一步细分,如下图所示。
由上图可以看出,在瀑布模型的编码和测试之间至少还应该有编译、链接及发布等环节。通过这些环节将源代码生产成目标代码,而这些环节是可重复进行的,基于一定的规则,不同的人,对同一段代码编译连接出来的结果也应该是一致的,这个过程其实就是一个软件生产过程。这样看来,软件的生产过程实际上是将源代码经过编译链接发布等环节生产目标代码的过程。将软件的生产阶段定义为从编译环节开始,包括编译、链接、发布、以及后续的安装、复制等环节,其中复制环节属于批量生产。明确了软件生产过程,我们再来对照f)条要求审查软件生产过程是否有需要确认的过程,即是否有特殊过程。一般情况下,软件的编译、链接以及发布均是工具软件自动完成,基于一定的编译链接规则,对源代码进行编译链接形成目标码,在此过程中,一般不需要人为干预。那么编译后的软件是否可以测试验证呢?显然是可以的。在瀑布模型中,后续的单元测试、集成测试以及配置项测试都是基于目标代码进行测试,因此此过程的输出结果是可以由后续的监视或测量加以验证,显然不属于特殊过程,不需要确认。同样,关于软件的复制过程,更是有多种手段进行验证复制的准确性,也是可以验证的,因此软件的复制过程也无需确认。综上,对于软件的生产过程,过程的确认条款f)一般是不适用的。如前所述,对于编译链接发布等环节一般自动完成,很少人工干预,这些环节此条基本不适用,但对于软件的复制过程,很容易发生人为错误,例如版本错误、复制不完整等,对于该环节应该制定并采取措施防止人为错误。8.5.1其余条款,包括a)、b)、c)、d)、e)、h)条,对于软件组织都是适用的。
2.软件组织实施8.5.1条款建议
综上分析,对于8.5.1,软件组织适用的条款,包括8.5.1中的a)、b)、c)、d)、e)、g)、h)条。过程控制活动,例如程序的编译(含链接)准则、编译(含链接)环境、编译(含链接)约束、编译(含链接)工具等;发布活动,例如生成、发布准则、发布环境控制、发布约束等;交付后活动,例如操作、维护和客户支持、技术升级等。建立软件的生成、发布、修改和复制流程,以及生成和发布活动的配置管理:根据用户使用的频率和(或)影响,识别发布的类型(或类);制定决策标准,以确定在哪里可以合并本地化的 “补丁”,或在哪里发布完整更新的软件产品副本的。规定所需的文件,如手册、用户指南、许可证和发布说明,包括标识和包装;确保产品副本的正确性和完整性的规定,防止人为错误。交付的形式,例如是通过媒介的物理转移还是通过电子传输来实现。如果是客户或第三方进行安装,组织应给出客户执行安装所需采取的步骤。如果安装是由组织进行的,可适用以下规定:
软件组织中的审核要点
综上分析,对于软件组织,在8.5.1条款审核时应重点关注以下要点:软件的各级测试测试说明(单元/集成/配置项/系统测试等);是否实施了软件各级测试测试(单元/集成/配置项/系统测试等);是否识别了软件编译链接发布以及复制测试等过程的基础设施,包括工具、平台、环境要求等;基础设施的维护是否合理(可结合7.1.3进行审核)。是否识别了软件生产过程(含测试过程)的人员资格要求(可结合7.2进行审核);对于容易发生人为错误的软件生产环节是否进行了识别;对于识别处内的会出现人为错误的软件生产环节是否制定并采取了措施。是否策划了放行、交付和交付后的活动的受控条件,包括人员、资源等;放行、交付和交付后的活动是否在受控条件下执行(结合8.5.5,8.6条款审核)。
济南ISO9001认证,GB/T 19001-2016标准8.5.1条款在软件研制过程中的实施和审核具有一定的难点,如何合理界定软件的生产过程是重点。本文基于8.5.1条款要求,结合软件研制过程的瀑布模型,剖析了软件生产过程的主要环节,在此基础上,给出了软件组织在8.5.1条款的实施建议并给出了审核要点,对于软件组织有效实施该条款要求具有一定的指导作用。