影响软件质量的点


前言

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

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

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

回到顶部回到顶部度量、控制和改善其软件过程的实践中各个发展阶段的描述。CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化、使企业能够更好地实现商业目标。
  • 六西格玛质量体系,非常精密的质量管理体系,适合大规模的生产中,并且保证极低的废品率。
  • 国际标准化组织(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(Capability Maturity Model For Software,软件能力成熟度模型)的基础上发展而来的。

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

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

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

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

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

    模型共分为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 >=45 2到60分钟
    小于10 可重复级 90 20 1-160分钟
    小于1 已定义级 99 10 不确定
    小于0.1 管理级 降低开发时间到1/2 5 不确定
    小于0.01 优化级 降低开发时间1/4 <=2 近似完全可靠

    CMM的用途

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

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

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

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

    回到顶部回到顶部

    软件质量活动

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

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

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

    SQA和测试的关系

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

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

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

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

    相关