Skip to content

前言

所有的从事软件生产的都要学习软件质量,包括软件分析人员、设计人员、开发人员、测试人员、维护人员。

在软件质量管理中,我们要主要学习软件质量的定义、软件质量管理体系、软件质量模型、软件质量活动。

其中,我们要着重关注软件质量模型部分。

质量与质量管理体系

质量就是就是把客户的质量要求转化为设计参数,形成预期的产品,最终生产出低成本并且稳定可靠的产品。

ISO关于质量的定义如下:

一个实体的所有特性,基于这些特性可以满足明显的或隐含的需求,而质量就是实体基于这些实体特性满足需求的程序。

软件质量的三个层次

从质量的定义来看,我们可以引申出不同层次的软件质量:

  • 符合需求规格,符合开发者明确定义的目标,即产品是不是再让做它做的事情。目标是开发者定义的,并且是可以验证的。
  • 符合用户显式需求的,符合用户所明确说明的目标。目标是客户所定义的,符合目标即判断我们是不是在做我们需要做的事。
  • 符合用户实际需求,实际的需求包括用户明确说明的和隐含的需求。

我们对用户的显式或隐式的需求,作分析,整理出需求分析、概要设计、详细设计、代码设计、然后做单元测试、集成测试、系统测试。

最终用户的体验是包含我们是否满足了用户提出的隐式和显式需求的。

影响软件质量的因素

软件质量铁三角

那么我们接下来就要考虑,有哪些因素会影响软件的质量,进而影响用户的体验。

1832670933165277184.png

流程、技术、组织这三个因素是影响软件质量的的铁三角,软件质量的提高是一个综合因素,需要从各方面进行改进,同时还需要兼顾成本和进度。

流程

为了完成某个任务而进行一系列的相关联的活动,将最终的目标(进度、成本、质量)分解到各个活动中去,使得不可见的生产过程可视化,提高工作效率。

软件生产流程:计划 -- 分析 -- 设计(概要设计、详细设计) -- 实现(编码) -- 测试 -- 运行 -- 维护。

对于测试人员来讲,我们要清楚哪些相关软件工作的流程:

  • 软件开发的流程,需求分析、概要设计、详细设计、编码、测试、交付、验收、运行、维护。
  • 测试流程,单元测试流程、集成测试流程、系统测试流程,并且每个流程中都会有相应的计划、设计、实现、执行。除此之外,我们还需要了解配置管理流程、需求管理流程、同行评审流程。

影响流程的因素:各个活动中的角色、时间因素、步骤、相关规范、方法。

但严格按照流程执行,并不一定能生产出好的产品。

所以,我们还需要其他的手段来提高软件质量。

技术

在技术这块,我们要了解:

  • 开发技术,包括分析技术、设计技术、编码技术(编程语言:C语言、Java、Python;数据库技术:MySQL、Oracle、SQLserver、DB2)。
  • 测试技术,白盒测试技术、黑盒测试技术、自动化测试技术、测试分析技术、测试设计技术........
  • 工艺结构技术,就是说产品的工艺设计,比如说苹果系列的产品,都说做工是一流的。
  • 现有的技术,技术的积累:
    • 现有的代码库。
    • 测试案例库。
    • 缺陷。
    • 问题的解决方案。
    • 专利。

我们还需要将技术和流程相结合起来。

除了技术和流程的有效结合,还需要有效的组织管理。

组织

组织不力,会间接影响软件质量。

我们要通过组织制定相关流程,然后要有严格监督,还需要不断的优化流程与技术,另外还包括引进技术(技术本身、技术人员),技术沉淀、储备。

质量管理发展阶段

在质量管理的不断发展过程中,经历了三个阶段。

第一阶段,检验质量管理(19世纪末-20世纪初):

  • 专门的质量检验部门和人员。
  • 以事后检验为主。

产品都生产好了,你再检查,为时已晚,检查出来不合格的产品都将沦为废品。

那么怎么提高良品率呢,质量管理的发展来到了第二阶段。

第二阶段,统计质量控制(20世纪40年代-20世纪60年代):

  • 强调统计方法,基于数学上的统计。
  • 通过历史数据得出规律,指导将来的项目。

根据这些数据以及某些规律,发现质量问题不是在某一个环节出了问题,更多的出现在整个产品的生产周期内。

而此时质量管理发展到了第三阶段。

第三阶段,全面质量管理阶段(TQM,Total Quality Management):

  • 将质量控制扩展到产品生命周期全过程,强调全体员工参与质量把控。
  • TQM代表人物:
    • 克劳斯比(Crosby):美国质量之父,著名理论,ZD(Zero Defect)零缺陷。
    • 朱兰(Juran):最著名的一句话,适合使用。著名的质量三部曲,《质量计划》、《质量控制》、《质量改进》。
    • 戴明(Deming):最著名的就是PDCA循环,PDCA循环是美国质量管理专家休哈特博士首先提出的,由戴明采纳、宣传,获得普及,所以又称戴明环。全面质量管理的思想基础和方法依据就是PDCA循环。PDCA循环的含义是将质量管理分为四个阶段,即计划(Plan)执行(Do)检查(Check)处理(Act)。在质量管理活动中,要求把各项工作按照作出计划、计划实施、检查实施效果,然后将成功的纳入标准,不成功的留待下一循环去解决。这一工作方法是质量管理的基本方法,也是企业管理各项工作的一般规律。

1832670934280962048.png

质量管理体系

质量管理的不断发展,诞生了各种质量管理体系。

质量管理体系给控制质量、管理质量提供了支撑的框架。

常用的质量管理体系:

  • ISO9000系列,通用的质量管理体系。如ISO9126质量模型就说明了怎样从不同的角度考察软件的质量。
  • CMM质量体系。其英文全称为Capability Maturity Model for Software,英文缩写为SW-CMM,简称CMM。它是对于软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述。CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化、使企业能够更好地实现商业目标。
  • 六西格玛质量体系,非常精密的质量管理体系,适合大规模的生产中,并且保证极低的废品率。

ISO9000

ISO9000质量管理体系是国际标准化组织(ISO)制定的国际标准之一,在1987年提出的概念,是指“由ISO/TC176(国际标准化组织质量管理和质量保证技术委员会)制定的所有国际标准”。该标准可帮助组织实施并有效运行质量管理体系,是质量管理体系通用的要求和指南。我国在90年代将ISO9000系列标准转化为国家标准,随后,各行业也将ISO9000系列标准转化为行业标准。

它是由一族标准组成。

ISO9000:2000版标准

ISO9000族2000版标准主要由ISO9000、ISO9001和ISO9004三个核心标准组成。

ISO9000阐明了ISO9000:2000版标准制定的管理理念和原则,确定了新版标准的指导思想和理论基础、规范和确定了新版ISO9004族标准所使用的概念和术语。

ISO9001标准对组织质量管理体系必须履行的要求做了明确的规定,是对产品要求的进一步补充。

ISO9004是组织进行持续改进的标准指南。

ISO9000:2000版的八项质量管理原则

原则内容ISO9001标准条款
以顾客为中心组织依存与其顾客,因此,组织应理解顾客当前和未来的需求,满足顾客要求争取超越顾客期望。0.1、5.2、7.2.1、7.2.3、7.3、7.5.3、7.5.4、8.2.1
领导作用领导者将本组织的宗旨、方向和内部环境统一起来,并创造使用员工能够充分参与实现组织目标的环境。5.1、5.3、5.4.1、5.4.2、5.5.2、5.5.3、5.6、6.1
全员参与各级人员是组织之本,只有他们的充分参与,才能使他们的才干为组织带来最大的收益。5.1、5.3、6.2、7.5.4
过程方法将相关的资源和活动作为过程进行管理,可以更高效的得到期望的结果。0.3、5、6、7、8(标准的每一条款都涉及过程)
管理的系统方法针对设定的目标,识别、理解并管理一个由相互关联的过程所组织成的体系,有助于提高组织的有效性和效率4.1、7.1、8.2.2
持续改进持续改进是组织的一个永恒的目标5.2、5.6、7.5、8.2.2、8.5.1、8.5.3
基于事实的决策方法对数据和信息的逻辑分析或者直觉判断是有效决策的基础。7.5.2、7.5.5、7.6、8.2.3、8.3、8.4、8.5.2、8.5.3
互利的供方关系通过互利的关系,增强组织及其供方创造价值的能力7.4、8.3

八项质量管理原则的意义

是质量管理的理论基础。

用高度概括、易于理解的语言所表述的质量管理的最基本、最通用的一般性规律。

为组织建立质量管理体系提供了理论依据。

是组织的领导者有效地实施质量管理工作必须遵循的原则。

CMM

软件行业遵循ISO9000能不能行,能行,但是应该根据软件行业的特点和特殊性,有更具体的体系标准,这就是CMM(Capability Maturity Model,能力成熟度模型)。

既然是模型就有对应的实体:软件组织,解决按时、按计划、高质量完成软件开发。

CMM用途是多样性的:流程成熟度内部评估、第三方评估、流程的改进。

CMM的历史起源

在20世纪60年代左右,美国军方在对联邦项目(由承包商完成的)的一项统计中,发现软件行业较为混乱,软件质量不高。但是,它又要用这些软件承包商开发的软件。后来,美国软件工程研究所(SEI)受美国国防部委托立项,要求提出一个模型,以评估软件承包商的能力,协助软件组织改进过程,提高过程能力。

1832670935925129216.png

项目负责人是:Watts Humphrey(CMM之父)。研究了大约1年多,拿出了他们的成果,于1987年发表承包商软件工程师能力评估方法,提出初始框架,根据这个框架来评估软件承包商的能力,那个时候,这个框架不叫CMM,而是叫做PMM(Process Maturity Model,流程成熟度模型),用来规范流程的。

1991年推出CMM1.0版,1993年提出CMM1.1版,维护到了2000年左右,由于不同行业的软件不同,分类又有很多,又制定了不同的模型。

但就像江湖一样,虽然分为各个流派,但总有人要一统江湖,那就是CMMI(Capability Maturity Model Integration For Software,软件能力成熟度模型集成),是在CMM(Capability Maturity Model For Software,软件能力成熟度模型)的基础上发展而来的。

那么CMM是如何评估软件承包商能力的呢?从以下几个方面展开的。

**软件流程能力:**遵循标准的软件流程,有多大可能达到预计的结果。软件流程能力提供一种有效的手段,可以预计软件组织承担某个项目最有可能结果是什么样子。

**软件流程性能:**遵循标准的软件流程,真正达到的结果是怎么样的,换而言之,软件流程能力是表示期望的结果,而软件流程性能表述的是软件表达的实际结果。

**软件流程成熟度:**指一个特定的流程,在多大程度上,被明白无误的定义、管理、衡量和控制,以及软件表达的效果是怎么样的。一个软件组织的软件流程成熟度是预示着它的软件流程能力有多大的发展潜力,这不仅指它的软件流程的丰富性、完备性,并且代表软件流程要做到一致。

CMM能力成熟度是一个阶梯式的模型。

1832670936168398848.png

模型共分为5级,每个级别都高度概括了该级别的特点。

很多公司都很推崇这个CMM框架的,并且已经达到了最高的级别,比如软通动力、亚星科技等等。尤其是外包公司,这代表着公司的实例!

CMM级别考核依据

过程能力等级特点关键过程域
1. 初始级软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力,管理是反应式的。
2. 可重复级建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功。a.需求管理
b.软件项目计划
c.软件项目跟踪和监督
d.软件子合同管理
e.软件质量保证
f.软件配置管理
3. 已定义级已将软件管理和工程两方面的过程文档化、标准化、并综合成该组织的标准软件过程。所有项目均使用经批准、裁剪的标准软件过程来开发和维护软件。a.组织过程定义
b.组织过程焦点
c.培训大纲
d.集成软件管理
e.软件产品工程
f.组际协调
g.同行评审
4. 已管理级收集对软件过程和产品质量的详细度量,对软件过程和产品都有定量的理解与控制。a.定量的过程管理
b.软件质量管理
5. 优化级过程的量化反馈和先进的新思想、新技术促使过程不断改进a.缺陷预防
b.技术变更管理
c.过程变更管理

划定流程成熟度的依据就是该级别的KPA 。

第一级别没有KPA,在CMM中,共有18个KPA分布在4个级别中。

什么是KPA呢?KPA(Key Process Area)是关键过程域。

如果你的公司想申请CMM3级,那么评定组织会首先评定你公司的二级6个KAP是否达到目标,如果达到则再评定3级的KPA,达到则是3级,否则还是2级。

每个KPA都设定了2~4个目标,我们称为KG(Key Goal)关键目标。这些关键目标是通过关键实践(key Practice)来完成的。

通过关键实践达到关键目标,关键目标达到,那么你的关键过程域也就达到了,这些关键过程域都达到了,你公司也就达到了某个级别。

但是,你也不要忽略非关键过程域,而是关键过程域和非关键因素相结合来评定。比如第2级别中的缺少某些工程活动,比如说软件测试活动。

如果你对这些理解起来比较困难,相对抽象,那么你可以参考医院的评定级别来考虑。比如医院如何被评选为三级甲等的,要达到哪些硬性指标,或者其他的指标,这跟CMM很相似。

那么这些我们都需要重点了解什么呢?如上表加粗部分,2级的需求管理、配置管理,3级的同行评审。

CMM:1级特点

一个软件公司成立之后,默认的就是CMM1级。

那么初始级的软件公司是处于什么样的状况呢?

  • 一般不能提供开发和维护软件的稳定环境,缺乏健全的管理实践,不适当的规划和反应式的驱动体系会降低良好的软件工程实践所带来的效益。
  • 在危急时刻,项目一般抛弃预定的规程,恢复到仅做编码和测试,项目的成功完全依赖于有一个杰出的经理及一个有经验的、战斗力强的软件团队,但当他们离开项目后,他们能使过程稳定的影响也随之消失。
  • 等级1组织的过程能力是不可以预测的,过程是无序的。进度、预算、功能性和产品质量一般是不可预测的,实施情况依赖于个人的技能、知识和动机。

总的来说,全靠英雄主义来救场了。

CMM:2级特点

再来看可重复级的特点:

  • 已建立管理软件项目的方针和实施这些方针的规程,基于在类似项目上的经验对新项目进行策划和管理,达到等级2目的是使软件项目的有效管理过程制度化,这使得组织能重复在以前类似项目上的成功实践。
  • 项目已设置基本的软件管理和控制。
  • 过程能力课概括为有纪律的,因为软件项目的策划和跟踪是稳定的, 能重复以前的成功,由于遵循切实可行的计划,项目过程处于项目管理系统的有效控制之下。

总的来说,根据以往的经验,总结下来,应用到新项目中,降低对人的依赖,并且项目是可控的。

但这仍然是不完善的, 因为这一级别只是项目级的,而不是组织级的。

CMM:3级特点

CMM2级只能针对项目的成功,会使下一个类似项目成功,但仍然是有局限性的,那么我们来寻求更高层次的成功,比如说组织级的成功,也就是已定义级。

  • 全组织的开发和维护软件的标准过程已文档化,包括软件工程过程和软件管理过程,而且这些过程被集成为一个有机的整体,称为组织的标准软件过程
  • 组织中有一个专门组织的软件过程活动的组,例如软件工程过程组(SEPG,Software Engineering Process Group)。它负责整个组织的流程活动,明确组织各个角色以及角色职责,当然还要制定并实施全组织的培训计划。
  • 项目根据其特征剪裁组织的标准软件过程,建立项目定义软件过程
  • 过程能力可概括为标准的和一致性的。在所建立的产品线内,成本、进度和功能性均受控制、对软件质量进行跟踪,整个组织范围内对已定义过程中的活动、角色和职责有共同的理解。

CMM:4级特点

再来看CMM4级,已管理的特点:

  • 组织对软件产品的过程都设置定量的质量目标,对所有项目都测量其重要的软件过程活动的生产率和质量。利用全组织的软件过程数据库收集和分析从项目定义软件过程中得到的数据,软件过程均已配备有妥善定义的和一致的度量。
  • 项目通过将其过程实施的变化限制在定量的可接受的范围之内,从而实现对其产品和过程的控制,开发新应用领域的软件所带来的风险是已知的,并得到精心的管理。
  • 过程能力可概括为可预测的,因为过程是已测量的并在可测的范围内运行,组织能定量地预测过程和产品质量方面的趋势,软件产品具有可预测的高质量。

三级简单来说,就是说这个人漂亮不漂亮,下了定义,但4级可以通过调整一些量让这个人变得更漂亮,也就是纠正偏差(纠偏)。

4级也就是有了更多的度量指标,来调控整个项目的过程,所以软件的质量是可预测的,它强调的是量化管理。

那么我们根据度量指标来纠偏,以致于软件质量有更大的进步,所以,我们来看优化级。

CMM:5级特点

优化级的特点是:

  • 整个组织集中精力进行不断的过程改进。为了预防缺陷出现,组织有办法识别出过程的弱点并预先予以加强。利用有关软件过程有效性的数据,识别出最佳技术创新,推广到整个组织。
  • 所有软件项目组都分析缺陷,确定期原因,并且认真评价软件过程,以防止已知类型的缺陷再次出现,同时将经验教训告知其它项目。
  • 过程能力的基本特征是不断改进,不断改善期项目的过程性能,为此,即采用现有过程中增量式前进的办法,也采用借助新技术、新方法进行革新的办法。

第5级强调的是流程的持续改进思想。

再回过头来看软件组织的流程,从无到有,从杂乱无章到某一个相同项目的成功重复,再到一致标准性到定量的发展,再到持续的优化。

所以,1~4级着重创建,而第5级,重点在优化、持续改进。

处于第5级的软件组织已经具备了自我改进的基础架构,因为它经历了前面的经验积累、技术储备,有了相当陈厚的沉淀。

现在,我们在来聊聊CMM和CMMI的区别。

第一个区别是CMMI比CMM多了集成,都是那些方面呢?

  • 系统工程SE。
  • 软件工程SWE。
  • 集成产品流程开发IPPD。
  • 供应源SS。

另一个区别是表达方式的区别,CMMI的表达方式:

  • 阶段式,同样分为5个级别,1、3、5级名称不变,2级变为管理级;4级是定量管理级。并且,CMMI相对于CMM的18个KPA而言,多了8个KPA,也就是24个KPA。
  • 连续式:过程管理、项目管理、工程管理、支持管理。

除此之外:

  • CMMI强调对需求的管理,REQM、RD。
  • CMMI加强了对工程过程的重视,强调度量,MA。
  • CMMI加强了对风险的管理,RSKM。
  • CMM中的“组间协调”在CMMI中作为“集成化项目管理”中的一个目标。
  • CMM中的KPA“同行评审”在CMMI中抽象为KPA“验证”。
  • CMM是作为评估标准出现的。
  • CMMI是作为改进模型出现,罗列了较多的最佳实践,利于过程改进。

那么,我们说CMM是软件质量管理体系,它跟ISO9001质量管理体系有什么关系呢?

最大的相似点:强调管理、过程、规范化和文档化。

不同点:CMM把焦点严格对准软件;ISO9001的范围包括硬件、软件、流程性材料和服务。

两者之间的联系:CMM2级与ISO9001强相关。CMM的每个关键过程域至少按照某种解释与ISO9001弱相关。

CMM级别与质量的关系

每千行缺陷数软件过程成熟度级别软件准时提交的百分比软件需要返工的百分比平均软件失效时间(近似)
大于10初始级<=50>=452到60分钟
小于10可重复级90201-160分钟
小于1已定义级9910不确定
小于0.1管理级降低开发时间到1/25不确定
小于0.01优化级降低开发时间1/4<=2近似完全可靠

CMM的用途

评估组用来识别组织中的强项和弱点。

评价组用来识别不同的业务承包商的风险和监督合同。

管理者用来了解其组织的能力,并了解为了提高其能力成熟度而进行软件过程改进所需要进行的活动。

技术人员和过程改进组用来作为指南,指导他们在组织中定义和改进软件的过程。

六西格玛

这里的西格玛指的是统计学的偏差,表示数据的离散程度。那六西格玛就是六倍的西格玛,也就是六倍的标准偏差。

六西格玛管理法

  • 六西格玛管理法是以质量作为主线,以客户需求为中心,利用对事实和数据的分析,改进提升一个组织的业务流程能力,从而增强企业竞争力,是一套灵活,综合性的管理方法体系。
  • 六西格玛要求企业完全从外部客户角度,而不是从自己的角度,来看待企业内部的各种流程。
  • 利用客户的要求来建立标准,设立产品与服务的标准与规格,并以此来评估企业流程的有效性与合理性。
  • 它通过提高企业流程的绩效来提高产品服务的质量和提升企业的整体竞争力。
  • 通过贯彻实施来整合塑造一流的企业文化。

六西格玛模式的本质是一个全面管理概念,而不仅仅是质量提高手段

何为六西格玛(6 sigma)

6个西格玛流程能力等于百万个样本中,仅有3.4个缺陷。

Sigma CapabilityYieldDefect Rate(DPMO)
1 Sigma30.230000%697700
2 Sigma69.123000%308770
3 Sigma93.318900%66811
4 Sigma99.379000%6210
5 Sigma99.976700%233
6 Sigma99.999660%3.4
7 Sigma99.999998%0.019

不同西格玛水平的绩效影响

西格玛手术事故婴儿出生信件邮递DPMO产出率
每年有200000宗做错手术事件每年120000婴儿出生时因医护人员过时死亡每年有130000000封信邮寄错误6880093.32000%
3.875σ每年有25000宗做错手术事件每年15000婴儿出生时因医护人员过时死亡每年有17520000封信邮寄错误880099.1200%
每年有650宗做错手术事件每年392婴儿出生时因医护人员过时死亡每年有47909封信邮寄错误23099.97700%
每年有9宗做错手术事件每年5.8婴儿出生时因医护人员过时死亡每年有6770封信邮寄错误3.499.99966%

六西格玛管理法原则

以质量为主线,以客户需求为中心:

  • 注重客户。
  • 注重流程。
  • 全员参与。
  • 预防为主。
  • 事实依据的决定。
  • 持续和突破性改进。
  • 周期时间(流程速度,回应能力)。
  • 输出物的变差(产品或服务的直通率,缺陷成本降低,客户满意升高)。
  • 营运效率(更低成本)。

六西格玛的实施方式

1832670936759795712.png

六西格玛管理组织结构

六西格玛也不是一般人能玩的转的,下图展示了六西格玛管理组织的结构。

1832670937493798912.png

它需要管理层的大力支持,需要有委员会,还要有倡导者。

绿带是兼职的,主黑带和黑带是全职的。一个有一千人规模的公司有1个主黑带就不错了,一个百人规模的公司有个黑带也是很好了。

主黑带(做管理),也称黑带大师,想要拿到相应的资质也是很不容易的。绿带可以由开发人员测试人员兼任。

如果碰到有主黑带或者黑带的公司,那这个公司就很厉害了。

软件质量模型

质量模型:一组特性及特性之间的关系,它提供规定质量需求和评价质量的基础。

首先来看质量模型中的内部和外部质量。

1832670939695808512.png

各质量的关系是相互影响又相互依赖的关系。

过程质量

对于软件的质量好坏,要从软件的研发过程来控制,有严格的方式方法,这也是一个质量保证。

过程质量由公司的QA(Quality assurance)人员来保证,QA保证软件的研发过程是按照比较科学的方式方法进行,并将科学的方式贯彻到项目团队,这个活动我们称为软件质量保证(SQA,software quality assurance)。

内部质量

内部质量是指软件研发过程中软件的质量,在这个过程中会产生的需求文档、概要设计、详细设计等文档依据,这些文档的优劣直接影响内部质量。内部质量是由开发来把控。

外部质量

外部质量指地是软件开发完成后,整体运行时暴露出来质量特性,外部质量的界定是由系统测试的来对软件进行质量评判的工作,外部质量由测试人员把控。

使用质量

当软件交付用户后,由用户在使用时感受及目标的符合程度,简单来说就是用户说你的软件好不好,这就是使用质量。

前面的过程、内部、外部质量都是由公司的内部人员来进行评估的;使用质量由用户来评估的。

ISO9126提出了如下图的质量模型。

1832670940152987648.png

六大特性包含了27个子特性,但它只是一个质量模型,我们还是要根据具体的软件环境、背景去考察其他方面的特性。

功能性

功能性这里主要来探讨其包含的子特性。

**适合性(suitability):**指软件产品为指定的任务和用户目标提供一组合适的功能的能力。

就是来探讨合适不合适的问题。

比如一个交友软件,你有即时通信、传视频啥的就很合适,但是你这里有查物流的功能,还合适吗?

**准确性(accuracy):**指软件产品提供具有所需精确度的正确或相符的结果或效果的能力。

就是来探讨对不对的问题。

比如计算器的计算功能。

互操作性(interoperability):软件产品与一个或更多的规定系统进行交互的能力。

比如Word软件和各个厂商打印机之间的交互能力。

再比如手机入网测试。

**保密安全性(security):**指软件产品保护信息和数据的能力,以使未授权的人员或系统不能阅读或者修改这些信息和数据,而不拒绝授权人员或系统对它的访问。

常见的安全性测试:

  • 用户验证类,用户登录密码验证、IP地址访问限制。
  • 用户权限的管理,不能够让低权限的人得到高权限用户的权限。
  • 系统数据的保护,数据加密、备份。
  • 注入测试,比如SQL注入,DDos攻击。

DDos拒绝服务攻击,简单来说就是攻击方使劲儿的耗费被测软件的资源,导致它没有资源处理正常的服务。

DDos的另一种表现形式比如春节12306抢票,由于大量的人员去网站抢有限的票,导致某些用户无法访问该网站的购票服务,也就是12306官网拒绝提供服务。

**功能性的依从性(functionality compliance):**指软件产品遵循与功能性相关的标准、约定或者法规以及类似规定的能力。这些标准要考虑国际标准、国家标准、行业标准、企业内部规范等。

比如钢铁物流中,行业标准中关于称重误差是千分之三;再比如我们国内生产的医药设备要在美国市场流通,就必须遵循美国的FDA(美国食品与药品管理局)的审核。

可靠性

**可靠性子特性:**在指定条件下使用时,软件产品维持规定的性能级别的能力。

上述定义,有三个要素要考虑:

  • 规定的环境,比如某些设备中的某些零件在高海拔或者潮湿环境,它的实际寿命要小于规定寿命;在比如网络流量监控软件,监控视频监控环境下流量使用情况,这么着的话,流量监控软件的规定环境就是视频监控的环境。
  • 规定的时间,比如服务类型的软件,如7*24*365全天候的服务。
  • 规定的性能,比如CPU在规定的温度条件下,持续续航不降频。

**成熟性(maturity):**指软件产品为避免由软件中错误而导致失效的能力。

比如遇到支付失败的问题,软件要有成熟的处理手段。

比如我们向国家电网交电费,在国家电网内部的软件因为某个模块出现问题导致交电费失败的问题。

**容错性(fault tolerance):**指在软件出现故障或者违反指定接口的情况下,软件产品维持规定的性能级别的能力。

现在,国家电网把收费委托给了支付宝,每次用户支付后,支付宝都会给国家电网一个反馈,那么如果有意外出现,比如本来要返回给国家电网一个状态码, 现在给了一个文本文件,那么国家电网的相关接口要处理这种意外情况的能力。

不能因为某个节点出现问题,导致整个系统瘫痪。

**易恢复性(recoverability):**指在软件失效(崩溃)的情况下,软件产品重建规定的性能级别并恢复首直接影响的数据的能力。

比如系统突然蓝屏,我们正在编辑的Word,在系统重启后内容是否还存在。Word是有这个功能的。

比如Google浏览器发现浏览器异常关闭,再重启后会提示是否打开原来的那些窗口。

一般的比如服务器都会有主备两套服务,来避免主机突然挂掉而影响业务。

**可靠性的依从性(reliability compliance):**指软件产品遵循与可靠性相关的标准、约定或法规的能力。

比如有些车辆的召回,不同的国家有不同的相关规定, 那么如果车辆出现问题,在召回的时候,各国的召回情况也有所不同。这就是可靠性要依从各个规定、标准。

易用性

易用性子特性:在指定的条件使用时,软件产品被理解、学习、使用和吸引用户的能力。

**易理解性(understandability):**指软件产品使用用户能理解软件是否合适以及如何能将软件用于特定的任务和使用环境的能力。

比如拼音和五笔输入法,那肯定是拼音相对理解。

再比如,小爱音响关于QQ音乐的绑定,在绑定QQ音乐的时候,从小爱音响跳转到QQ音乐去授权,然后QQ音乐会有授权相关的操作, 但我就碰到了跳转到了QQ音乐然后就没有然后了,我不知道该干什么了,没有授权成功等操作也没有.....这就让人难以理解。

**易学性(learnability):**指软件产品使用户能学习其应用的能力。

比如用户手册,是否有中文版的文档报告。

**易操作性(operability):**指软件产品使用户能操作和控制它的能力。

比如在手机的任何页面,按home键都能返回主页。

**吸引性(attractiveness):**指软件产品吸引用户的能力。

吸引性也就是用户体验,比如抖音、微信他们为什么能吸引那么多的用户。

**易用性的依从性(usability compliance):**指软件产品遵循与易用性相关的标准、约定、风格指南或法规的能力,这些标准要考虑国际标准、国家标准、行业标准、企业内部规范等,例如企业内部的界面规范。

比如说软件的提示是否一致,图标风格是否一致,错误处理个格式是否一致等。

效率

效率:在规定的条件下,相对于所用资源的数量,软件产品可提供适当性能的能力。

**时间特性(time behavior):**指在规定条件下,软件产品执行其功能时,提供适当的响应和处理时间以及吞吐率的能力,即完成用户的某个功能需要的响应时间。

比如,在规定的网速带宽下,某个页面的响应时间必须在多少秒内。

**资源利用率(resource utilization):**指在规定的条件下,软件产品执行其功能时,使用合适的资源数量和类别的能力。

比如说是CPU,内存等它的资源利用率。

**效率依从性(efficiency compliance):**指软件产品遵循与效率相关的标准或约定的能力。

比如刚才那个页面响应时间,可能行业标准时2秒内响应是快,5秒是慢,8秒是极慢。

维护性

软件产品可被修改的能力,修改可能包括修正、改进或软件对环境、需求和功能规格说明变化的使应。

在这部分中,易分析性、易改变性、稳定性都属于软件质量中的内部质量。

**易分析行(analyzability):**指软件产品诊断软件中的缺陷或失效原因或识别待修改部分的能力。

当软件发生缺陷或者失效时,易分析性就是易定位,我们很快的找到缺陷位置。

**易改变性(changeability):**指软件产品使指定的修改可以被实现的能力。

软件一旦发生问题,我们在定位到缺陷位置后,修改其中的一部分,就能很快的解决,而不是牵一发而动全身导致代码要大改,也就是编程中强调的解耦合,使各功能相互独立,出了问题不至于引发一系列问题。另外就是再开发时,预留一些扩展接口,方便日后代码迭代升级。

**稳定性(stability):**指软件产品避免由于软件修改而造成意外结果的能力。

在编码时,避免不要硬编码,比如将数字写死在代码中,这么写的话,当这个数字要改动的话,你都不知道要改动多少出,可能因为你遗漏了之后,导致程序再次运行时,导致程序发生隐患,降低了程序的稳定性。

**易测试性(testability):**指软件产品使已修改软件能被确认的能力。

比如UI界面某些按钮,按下会有反馈等,某些选项有提示,这样就比较容易测试。

比如500人的群,你要测试...这可就有点麻烦喽。

但越是难以测试到的功能点,它的安全隐患也是越大。

**维护性的依从性(maintainability):**指软件产品遵循与维护性相关的标准或约定的能力。

比如我们在conding时,对于编码规范没有严格遵守,那么在后续的维护时,会因为缺少相关注释或不规范导致维护起来相当麻烦。

可移植性

可移植性:软件产品从一种环境迁移到另外一种环境的能力。

**适应性(adaptability):**指软件产品无需采用有别于为考虑该软件的目的而准备的活动或者手段就可以适应不同的指定环境的能力。

简单来说,我们希望不需要做太大的变动,软件就能在不同的系统平台中部署。

**易安装性(installability):**指软件产品在指定的环境中被安装的能力。

比如说某款软件在windows平台, 会自动安装补丁,比如缺少dll文件,或者依赖文件,而无需由用户参与。

**共存性(co-existence):**指软件产品在公共环境中同与其它分享公共资源的其它独立软件共存的能力。

比如说在很早之前,有段时间卡巴斯基会影响Word的保存功能,这种情况就是卡巴斯基与Word不能共存。

**易替换性(replaceability):**指软件产品在同样的环境下,替代另一个相同用途的指定软件产品的能力。

比如软件的升级,在线升级或者打补丁升级,或者固件升级,这里就包含之前的适应性和易安装性的属性了,不会由于某些问题,在版本升级中,无法卸载老版本而使新版本安装失败。

**可移植性的依从性(portability compliance):**指软件产品遵循与可移植性相关的标准或者约定的能力。

比如关于路径分隔符,Linux和Windows平台是不一样的,而开发者在开发的时候,就要自己去处理路径分隔符。而公司为了可移植性而专门成立的部门来处理相关的问题,那么就要求开发者在遇到类似的问题时,就要使用公司提供的相关接口来完成。

软件质量活动

之前我们了解各种保证软件质量的体系,那我们怎么做这件事——保证软件质量,会有怎么样的软件活动。

软件组织主要的软件质量活动:

  • 软件质量保证(SQA,Software Quality Assurance)。
  • 测试。

SQA和测试的关系

软件质量由组织、流程和技术三方面决定:

  • SQA从流程方面保证软件的质量。
  • 测试从技术方面保证软件的质量。
  • 只进行SQA活动或者只进行测试活动不一定能产生好的软件质量。

SQA监控整个项目的流程,比如项目的立项、开发、测试、发布。

测试活动就是项目流程中的一部分。

欢迎斧正,that's all