软件质量体系之思
引言
软件质量一直是一个争议不断的概念,也是一个百花齐放的领域。现在最为常见的分类是将其分为外部质量和内部质量,而外部质量又可以分为功能质量和非功能质量。其中外部质量传统意义上最被大部分人关注的部分,而外部质量中功能质量最先被体现出来,所以最被看重,然后非功能质量只有在某些特定的情况体现出来,所以重要性次于功能质量。其次最不被看重的则是内部质量,因为它很难在短时间体现出来,只有在长时间的项目开发或维护中才慢慢显现出来,导致最不被人看重。
但是真实的情况是外部质量和内部质量是相辅相成的,特别是在大型的长时间的项目中,它们的关系尤其紧密,已经到了鱼水不分的阶段。并且由于质量的复杂性,必须通过一个完整的体系来展现,并且通过体系化的方式来实施,才能真正有效的保障软件系统的质量。
体系
对于现在的软件系统,特别是大型软件系统,一个成熟的质量体系是一个相对复杂的,并不是简单的实施一些实践就可以了,它需要有自上而下的管理框架,也需要自下而上的主动意识。其中自上而下的框架就是基于顶层的设计,整体包含哪些部分,它们的作用是什么,互相之间的关系是什么等。而自下而上的主动意识是每个员工基于他们不同的角色,主动关注质量相关的工作,并且主动做属于自己角色应该做的质量工作。
通过多年的工作和学习,我总结了下面这个软件质量体系。
首先,使用和精益屋的类似的房屋结构可以表述一个稳定的结构,其中一个屋顶和三大支柱,屋顶是质量图景,三大支柱分别是行业标准,质量人员,质量实施。
其中质量图景主要是展示了从三万里高空看下去,一个质量体系的顶层全貌是什么样子,比如应该有质量愿景和目标,即软件系统的质量使命是什么,为了完成这个使命应该完成哪些;质质量文化,即项目团队应该以什么样的信仰和态度来对待这里;还有组织协同工作,质量内建等,团队的员工应该遵循什么的流程和工作方式来实施质量工作。
其次是三大支柱:
- 质量行业标准,主要是指当前软件行业里面的各种关于测试和质量的标准,而且这些标准的数量也是比较多的,比如ISO/IEC 包含一系列关于质量工作的标准,比如ISO/IEC 2500n是关于质量管理的系列标准,ISO/IEC 2501n 是关于软件系统质量模型的系列标准,ISO/IEC 2502n是关于质量度量的系列标准,ISO/IEC 2503n 是关于质量需求的系列标准,最后ISO/IEC 2504n是关于质量评估的系列标准;还比如PII(Personal Identifiable Information )是关于个人身份信息安全的标准;当然还有正在蓬勃发展的敏捷测试,虽然还没有统一的业界标准出现,但是不同的公司或者业界的一些权威人士都总结和发表了自己的敏捷测试定义,所以当前还处在百花齐放的时代,希望未来能出现一个得到绝大多人认可的敏捷测试行业标准出现。由于有些标准关注的方面不一样,所以对于有不同的质量需求和质量等级的项目,可能需要不同的行业标准,甚至是多个不同的行业标准组合起来使用。
- 质量实施,不管选不选用任何标准,还是选用什么标准,都需要实施相应的质量工作。不管什么标准,质量实施一般都分为三个维度,即质量策略,质量实践,质量基础设施。其中基于我们自己敏捷测试的标准来进行实施,则质量策略里面包含了测试分类分层策略,持续测试策略,测试左移策略和测试右移策略等;而质量实践则包含开卡结卡,CI/CD,TDD,测试活文档等;二质量基础设施则包含测试环境和测试工具等。质量实施的核心是将标准进行定制化,并按照资源的多少,优先级的高低进行系统的实施。
- 质量人员,无论制定什么样的质量图景,选用什么样的标准,定制化出来什么样的实践和计划,最终都是需要人来实施的,所以人员是一个必不可少的质量支柱。这里的质量人员是指做与质量有关工作的人员,或者是做的工作会影响质量的人员,即全体项目人员。所以需要建立全员质量意识,建立质量学习机制和质量能力模型,建设质量文化,然后制定质量职责分工和协同工作的方式与流程,并对质量进行绩效工作等。这些都是实施良好质量体系的基础。
综上所述,一个良好的质量体系需要通过质量图景,指导质量人员,选择适用的质量标准,并定制化后系统的实施,最终支撑起质量图景,从而完成一个高质量的软件系统。
未来
经过几十年的发展,当前软件质量体系已经非常丰富和基本完整了,但是由于完整实施的成本很高,所以只有质量要求很高的软件系统才能比较完整的实施质量体系,而对于质量要求不高或者资金和资源不足的软件项目来讲只能实施体系中一些比较重要的实践,从而尽量的保障一定的质量。但是未来随着技术的发展,特别是自动化技术和AI技术的发展,质量体系的实施成本一定会大幅度降低,从而可以提升越来越多的软件系统的质量。
参考:
https://en.wikipedia.org/wiki/Software_quality
https://iso25000.com/index.php/en/iso-25000-standards
https://insights.thoughtworks.cn/agile-testing-manifesto/