标准是什么
GJB5000A标准首先是软件能力成熟度模型,可以据此判断组织已经达到的成熟度等级,反过来,组织也可以据此进行过程改进,判断自己的软件能力水平。
这是GJB5000A标准开宗明义,在“范围”一章中明确指出的,也是标准的源起和根本所在。
同时,标准也是软件业界优秀实践的大集合。
过程域中的期望部件就是由专用实践和共用实践组成(总共445个实践),过程域中的资料性部件的组成当中也包含大量的子实践(总共756个)。标准中的实践数详见表1-5。
表1-5 标准中的各类实践数
无标题8.png
这些实践都是软件业界优秀的做法的提炼,这些实践是帮助我们更好地实现标准中各个过程域的专用目标和共用目标,从而达到各成熟度等级的要求。
当然,这是标准给出的一条满足过程域要求的可行之路,但并不是唯一之路。这些实践来自于不同的组织,这些组织的实施软件工程的具体环境完全不同,所以这些实践不一定适合所有的组织。因此,标准将这些实践定义为期望部件和资料性部件,言外之意,就是允许组织可以使用替代实践来满足过程域的要求。
虽然标准的含义本身是用来为某一范围内的活动及其结果制定规则、规范或者准则,其目的是确保材料、产品、过程和服务能够符合需要,但并不是说标准就是金科玉律,一字不容修改,必须全盘遵守,一丝不得违背。
标准用于指导我们进行某项活动,GJB5000A标准用于指导我们进行软件工程活动,它是通过引导组织满足各个过程域的专用目标和共用目标来指导组织的。所以,这些目标是组织应努力实现的,而标准中的各个过程域的各类实践则仅仅是期望部件和资料性部件,这些内容就不是不容更改的,是可以根据组织的情况采用自己的实践来代替的。
从标准的源起来看,推行GJB5000A标准的根本目的还是提高各军工单位的软件工程能力,最终达到提高军用软件质量,避免出现美国国防部遇到的软件延期交付,或者交付软件质量低下的问题。所以,我们GJB5000A标准实施得好不好,并不是看我们对标准的遵循程度,不是看我们的做法是否与标准一致,而是看我们实施标准有没有出成效,有没有解决我们软件中存在的问题。“实践是检验真理的唯一标准”,如果我们的替代实践能够提高软件的质量,能够解决软件的问题,那么它与标准是否完全一致还重要吗?
实际上,没有一个方法或过程能完美地适合所有软件项目。即使项目的背景相差无几,即使项目是由同一个团队来完成,项目的实际进程当中将会遇到的情况也不尽相同。
所以我们依据标准建立的软件体系也不应该是死板的、教条的、一成不变的,非得让所有项目严格遵守,不能有一丝一毫逾越。
我们应该把体系建成框架。
因为框架主要起指导作用,并辅以可行的建议,而不是一个必须生搬硬套的“菜谱”或一个规范的方法论。
项目团队可以根据实际情况采用组织的建议或者找到适合自己的替代方法。只要在体系的框架内,都是被鼓励的。
体系可以提供经典的应用开发方法:敏捷开发方法、软件工程方法、RUP方法等等。但不会要求项目团队必须采用哪种方法,甚至每个方法论中的具体实践也允许项目团队灵活采用。
这样做的的好处是,既对项目进行一定的约束,避免项目成员随心所欲,而是按照一定的规范行事,又可以避免教条主义,给项目团队太多的束缚,打击项目成员的积极性。