软件质量_软件质量管理 - CSDN
精华内容
参与话题
  • 什么软件质量/如何评价软件的质量

    万次阅读 2010-01-05 14:23:00
    1. 软件质量: 软件质量是软件的生命,它直接影响着软件的使用和维护。通常软件的质量有下面几个方面来评价质量的优劣: (1) 软件需求是衡量软件质量的基础,不符合需求的软件就不具备质量。设计的软件应在...

     

    1.       软件质量:

             软件质量是软件的生命,它直接影响着软件的使用和维护。通常软件的质量有下面几个方面来评价质量的优劣:

                      (1)   软件需求是衡量软件质量的基础,不符合需求的软件就不具备质量。设计的软件应在功能、性能等方面都符合要求,并能可靠地运行。

                      (2)   软件结构良好,易读、易于理解,并易于修改、维护。

                      (3)   软件系统具有友好的用户界面,便于用户使用。

                      (4)   软件生存周期中各阶段文档齐全、规范,便于配置、管理。

     

    2.       如何评定软件质量(评价模型):

              一个软件,我们如何评定呢?最通用的一个规范标准就是使用ISO/IEC 9126-1991 标准规定的软件质量度量模特。这个标准在网上很容易down到,它不仅对软件质量做了定义,还涉及了整个软件测试的一些规范流程等等,设计测试计划的撰定,测试用例的设计。

     

         ISO/IEC 91261991标准规定的软件质量度量模型,它由3层组成,其中第1层称为质量特性,第2层称为质量子特性,第3层称为度量。

     

    1ISO软件质量度量模型

     

     

    3.       软件评价的过程(流程):

            软件质量评价的目的是为了直接支持开发并获得能满足用户要求的软件。最终目标是保证产品能提供所要求的质量,即满足用户明确的和隐含的要求。软件产品的一般评价过程是,确定评价需求,然后规定、设计和执行评价,如图所示。

     

     

    2:软件评价过程

     

     

    4.       怎么去保证软件的质量(执行评价):

             为了在软件开发过程中保证软件的质量,软件的质量保证活动应贯穿整个软件生存周期的每一个阶段。软件的质量保证的措施主要有检查、评审和测试。如图所示,软件质量保证的工作从项目一开始就应介入。

       

          图3:质量保证活动

     

               个人理解:检查和评审一般是由客户,有经验的PM,产品经理,软件测试人员等等(广义的QA)参与进来的活动,如项目中demo例会,在demo的同时,大家及时发现问题并讨论分析,以这种方式发现软件的问题。而测试一般是由QA(狭义的QA)参与进来的活动,它是一种普遍的测试行为,QA根据需求分析,设计test plantest case,然后根据项目的schedule去执行测试流程,当然对于测试,不一定就是专业的测试人员,PM,产品经理,customer也会参与进来。例如在软件Beta阶段,往往有客户参与进来。

     

    5.        软件测试 (图3中的第四步)

     

              简单地说,软件测试就是为了发现错误而执行程序的过程。在IEEE提出的软件工程标准术语中,软件测试被定义为:“使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清楚预期结果与实际结果之间的差别。 软件测试是与软件质量密切联系在一起的,归根结底,软件测试是为了保证软件质量。

     

             软件测试是一个找错的过程。软件测试的过程亦是程序运行的过程。程序运行需要数据,为测试设计的数据称为测试用例。测试用例的设计原则是尽可能暴露程序中的错误。

     

             软件是由人来完成的,所有由人做的工作都不会是完美无缺的。软件开发是个很复杂的过程,期间很容易产生错误。无论是软件从业人员、专家和学者做了多大的努力,软件错误仍然存在。因而大家也得到了一种共识:软件中残存着错误,这是软件的一种属性,是无法改变的。所以通常说软件测试的目的就是为了发现尽可能多的缺陷,并期望通过改错来把缺陷统统消灭,以期提高软件的质量一个成功的测试用例在于发现了至今尚未发现的缺陷。

     

              软件测试的目的是以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正各种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患所带来的商业风险。

     

    具体软件测试的流程,方法,规范等等略。

     

    展开全文
  • 软件质量基本概念

    千次阅读 2012-11-28 08:45:24
    如何理解软件质量 什么是质量? 词典的定义是:① 典型的或本质的特征;② 事物固有的或区别于其他事物的特征或本质;③ 优良或出色的程度。 CMM对质量的定义是:① 一个系统、组件或过程符合特定需求的程度;...
    如何理解软件的质量
    什么是质量?
    词典的定义是:① 典型的或本质的特征;② 事物固有的或区别于其他事物的特征或本质;③ 优良或出色的程度。
    CMM对质量的定义是:① 一个系统、组件或过程符合特定需求的程度;② 一个系统、组件或过程符合客户或用户的要求或期望的程度。
    上述定义很抽象,软件开发人员看了准会一脸迷惘。软件的质量不容易说清楚,但我们今天非得把它搞个水落石出不可。
    就以健康做类比吧。早先人们以为长得结实、饭量大就是健康,这显然是不科学的。现代人总是通过考察多方面的生理因素来判断是否健康,如测量身高、体重、心跳、血压、血液、体温等。如果上述因素都合格,那么表明这人是健康的。如果某个因素不合格,则表明此人在某个方面不健康,医生会对症下药。同理,我们也可以通过考察软件的质量属性来评价软件的质量,并给出提高软件质量的方法。
    一提起软件的质量属性,人们首先想到的是“正确性”。“正确性”的确很重要,但运行正确的软件就是高质量的软件吗?不见得,因为这个软件也许运行速度很低,并且浪费内存,甚至代码写得一塌糊涂,除了开发者本人谁也看不懂,也不会使用。可见正确性只是反映软件质量的一个因素而已。
    软件的质量属性很多,如正确性、精确性,健壮性、可靠性、容错性、性能、易用性、安全性、可扩展性、可复用性、兼容性、可移植性、可测试性、可维护性、灵活性等。除此之外还可以列出十几个,新词可谓层出不穷。
    上述这些质量属性“你中有我,我中有他”。如果开发人员每天都要面对那么多的质量属性咬文嚼字,不久就会迂腐得像孔乙己,因此我们有必要对质量属性做些分类和整合。质量属性可分为两大类:“功能性”与“非功能性”,后者有时也称为“能力”(Capability)。
    从实用角度出发,本章将重点论述“10大”质量属性,如表1-1所示。
    表1-1 “10大”软件质量属性

    功 能 性
    正确性(Correctness)
    健壮性(Robustness)
    可靠性(Reliability)
    非 功 能 性
    性能(Performance)
    易用性(Usability)
    清晰性(Clarity)
    安全性(Security)
    可扩展性(Extendibility)
    兼容性(Compatibility)
    可移植性(Portability)

     
    其中,功能性质量属性有3个:正确性、健壮性和可靠性;非功能性质量属性有7个:性能、易用性、清晰性、安全性、可扩展性、兼容性和可移植性。
    为什么碰巧是“10大”呢?
    不为什么,只是方便记忆而已(如同国际、国内经常评“10大”那样)。
    为什么“10大”里面不包括可测试性、可维护性、灵活性呢?它们不也是很重要的吗?
    它们是很重要,但不是软件产品的卖点,所以挤不进“10大”行列。我认为如果做好了上述“10大”质量属性,软件将会自然而然地具备良好的可测试性、可维护性。人们很少纯粹地去提高可测试性和可维护性,勿要颠倒因果。至于灵活性,它有益处也有坏处,该灵活的地方已经被其他属性覆盖,而不该灵活的地方就不要刻意去追求。
    根据经验,如果你想一股脑儿地把任何事情都做好,结果通常是什么都做不好,做事总是要分主次的。什么是重要的质量属性,应当视具体产品的特征和应用环境而定,请读者不要受本书观点的限制。最简单的判别方式就是考察该质量属性是否被用户关注(即卖点)。
    提高软件质量的基本方法
    质量的死对头是缺陷,缺陷是混在产品中的人们不喜欢、不想要的东西。缺陷越多质量越低,缺陷越少质量越高。
    Bug是缺陷的形象比喻,人们喜欢说Bug是因为可以把Bug当作“替罪羊”。软件的缺陷明明是人造成的,有了Bug这个词后就可以把责任推给Bug——“都是Bug惹的祸”。唉,当一只Bug真是太冤枉了!
    软件存在缺陷吗?是的,有以下典故为证。

    错误是严重的缺陷。医生犯的错误最终会被埋葬在地下,从此一了百了。但软件的错误不会自动消失,它会一直骚扰用户。据统计,对于大多数的软件产品而言,用于测试与改错的工作量和成本将占整个软件开发周期的30%,这是巨大的浪费。如果不懂得如何有效地提高软件质量,项目会付出很高的代价,你(开发人员)不仅没有功劳,也没人欣赏你的苦劳,你拥有最多的将只是疲劳。
    怎样才能提高软件的质量呢?
    还是先来听一个中国郎中治病的故事吧!

    提高软件质量的基本手段是消除软件缺陷。与上述三个郎中治病很相似,消除软件缺陷也有三种基本方式:
    (1)在开发过程中有效地防止工作成果产生缺陷,将高质量内建于开发过程之中。这就是“预防胜于治疗”的道理,无疑是最佳方式,但是要求开发人员必须懂得正确地做事(门槛比较高)。我们学习“高质量编程”的目的就是要在干活的时候一次性编写出高质量的程序,而不是在程序出错后才去修补。
    (2)当工作成果刚刚产生时马上进行质量检查,及时找出并消除工作成果中的缺陷—这种方式效果比较好,人们一般都能学会。最常用的方法是技术评审、测试和质量保证等(详见本章1.4节),已经被企业广泛采用并取得了成效。
    (3)当软件交付给用户后,用着用着就出错了,赶紧请开发者来补救,这种方式的代价最高。可笑的是,当软件系统在用户那里出故障了,那些现场补救成功的人倒成了英雄,好心用户甚至还寄来感谢信。J
    “零缺陷”理念
    质量的最高境界是什么?是尽善尽美,即“零缺陷”。
    “零缺陷”理念来源于国际上一些著名的硬件厂商。尽管软件的开发与硬件生产有很大的区别,但我们仍可以借鉴,从中得到启迪。
    人在做一件事情时,由于存在很多不确定的因素,一般不可能100%地达到目标。假设平常人做事能完成目标的80%。如果某个人的目标是100分,那么他最终成绩可达80分;如果某个人的目标只是60分,那么他最终成绩只有48分。我们在考场上身经百战,很清楚那些只想混及格的学生通常都不会及格。即使学习好的学生也常有失误,因而捶胸顿足。
    做一个项目通常需要多人协作。假设某系统的总质量是10个开发人员的工作质量之积,即最高值为1.0,最低值为0。如果每个人的质量目标是0.95,那么10个人的累积质量不会超过0.598。如果每个人的质量目标是0.9,那么10个人的累积质量不会超过0.35。只有每个人都做到1.0,系统总质量才会是1.0。只要其中一人的工作质量是0,那么系统总质量也就成了0。因系统之中的一个缺陷而导致机毁人亡的事件已不罕见。
    上述比喻虽然严厉了一些,但从严要求只有好处没有坏处。如果不严以律己,人的堕落就会很快。如果没有“零缺陷”的质量理念,也许缺陷就会成堆。
    从理念到行动还是有一定距离的,企业在开发产品时应当根据自身实力和用户的期望值来设定可以实现的质量目标。过低的质量目标会毁坏企业的声誉,而过高的质量目标则有可能导致成本过高而拖累企业(请参见本章1.3节)。
     
     
    本文节选自《高质量程序设计指南:C++/C语言》

    林锐,韩永泉编著
    电子工业出版社出版
    展开全文
  • 第六章 软件项目质量管理

    万次阅读 多人点赞 2018-07-02 13:48:40
    本章内容提要软件质量管理的基本概念全面软件质量管理缺陷跟踪缺陷移除和预防软件质量的常用度量案例分析第一节 软件质量管理的基本概念软件质量就是软件与用户需求相一致的程度。具体地说,软件质量是软件符合明确...

    本章内容提要

    软件质量管理的基本概念
    全面软件质量管理
    缺陷跟踪
    缺陷移除和预防
    软件质量的常用度量
    案例分析

    第一节 软件质量管理的基本概念

    • 软件质量就是软件与用户需求相一致的程度。具体地说,软件质量是软件符合明确叙述的功能和性能需求、以及所有专业开发的软件都应具有的隐含特征的程度。
    1. 用户需求是衡量软件质量的基础。
    2. 除满足明确定义的需求外,还要满足隐含的需求。

    软件质量的重要性

    • 软件质量问题可能导致经济损失甚至灾难性的后果。
    • 质量是软件产品和软件组织的生命线。
    • 质量问题会增加开发和维护软件产品的成本。

    软件质量属性


                                                                 McCall软件质量模型

    软件质量的形成

    • 软件的质量形成于软件的整个开发过程中,而不是事后的检查(如测试)。
    • 20世纪80年代起,质量管理逐步从单一的关注产品,转移到关注生产好产品的过程上,并且将过程的作用扩大到了组织运行的所有领域。

    质量产生于过程

    • 要真正地提高软件质量,必须有一个成熟和稳定的软件过程。


    • 特殊原因造成过程性能不稳定。

        根除特殊原因,使过程性能稳定,防止质量问题的出现。

    质量成本(CoQ)

    • 质量成本是为了达到产品或服务的质量而付出的所有努力的总成本,包括三部分:
    1. 预防成本:为防止将缺陷引入软件而进行的预防工作所消耗的费用。
    2. 评价成本:检查软件是否包含缺陷的工作所消耗的费用。
    3. 失效成本:修复缺陷工作所消耗的成本。

        PAF(Prevention / Appraisal / Failure)成本模型


    在项目早期预防和检测缺陷比在项目晚期检测和排除缺陷更有效、更节省成本。

    软件项目质量管理的目标

    • 软件项目质量管理的目标无疑是保证软件产品的质量。但是,对于一个具体的软件项目来说,保证软件产品的质量并不意味着追求“完美的质量”。
    • 对于绝大多数普通软件来说,没有必要付出巨大代价追求“零缺陷”,如果由于追求完美质量而造成严重的成本超支和进度拖延,而获得的质量提升为用户所带来的效益又极为有限,就得不偿失了。
    • 在软件项目中,对于软件的各种质量属性并不是放在同等重要的位置上,项目组织应该把关注点放在那些用户最关心的,对软件整体质量影响最大的质量属性上,这些质量属性称为“质量要素”。
    • 软件项目质量管理的目标是在项目整体目标的约束之下,使软件质量满足用户需求。

    第二节 全面软件质量管理


    质量管理计划

    • 质量管理计划就是为了实现项目的质量目标,对项目的质量管理工作所做的全面规划。软件项目质量管理计划一般应满足以下要求:
    1. 确定项目应达到的质量目标和所有特性的要求;
    2. 确定项目中的质量活动和质量控制程序;
    3. 确定项目采用的控制手段及合适的验证手段和方法;
    4. 确定和准备质量记录。
    • 质量管理计划一般包括以下主要内容:

    质量要素分析;
    质量目标;
    人员与职责;
    过程检查计划;
    技术评审计划;
    软件测试计划;
    缺陷跟踪工具。

    • (模板)

    评审(Review)

    • 评审相当于软件开发过程的“过滤器”,在软件开发的一些时间点上对中间产品执行评审,发现和排除错误,防止错误被遗留到后续阶段。因此评审对于保证软件质量和降低开发成本都极为重要。
    • 评审可以在软件项目的任何阶段执行,不必等到软件可运行之后,因此可以尽早发现和消除缺陷,提高软件质量,并降低开发成本。
    • 有统计数据表明,评审可发现75%的设计错误。

    技术评审(Technical Review)

    • 技术评审(Technical Review, TR)就是对工作成果进行审查和分析,发现其中的缺陷,并帮助开发人员及时消除缺陷。
    • 技术评审的主要对象:需求和设计规格说明、代码、测试计划、用户手册等。

    正式和非正式技术评审

    • 技术评审分为正式技术评审和非正式技术评审两种基本类型,前者比较严格,需要举行评审会议,参加人员比较多,后者的形式比较灵活,通常在同伴之间开展,不必举行评审会议,参与人员相对较少。
    • 一般来说,对重要性和复杂性较高的工作成果,应进行正式技术评审,对重要性和复杂性相对较低的工作成果,可进行非正式技术评审。

    技术评审会议

    • 技术评审以会议形式进行,一般有如下约束:
    1. 评审会议通常由3~5人参加。
    2. 会议之前评审人员要做准备,但每人的准备时间不超过2个小时。
    3. 评审会议的时间不超过2个小时。
    • 一次技术评审只关注软件的某一特定部分(例如需求或设计规格说明的一部分)。缩小评审焦点可提高发现错误的可能性。

    正式技术评审流程

    • 评审组长把待评审的材料分发给每个评审者,评审者(包括评审组长)审查材料,记下相关的要点,为评审会议做准备。
    • 开评审会议。评审会议由评审组长、评审者、评审对象的开发者参加。其中的一个评审者充当记录员,负责记录会议中发现的所有问题。
    • 由开发小组对提交的评审对象进行讲解。同时评审者可对开发者提问,提出建议和要求,展开讨论。
    • 在讨论中如果发现了问题和错误,由记录员记录下来。
    • 会议结束时必须做出以下三个决策之一:
    1. 接受该产品,不需要做修改。
    2. 由于错误严重,拒绝接受。等到错误改正后,还要进行另一次评审。
    3. 暂时接受该产品,但需要对某一部分进行修改,修改后不需要再进行另一次评审。
    • 决定作出后,所有参加会议的人员签字,确认会议结果。
    • 技术评审会议后,要完成一个“评审总结报告”,其内容包括:评审对象是什么?谁参加了评审?评审的结论是什么?有哪些重要发现?
    • 评审会议上所记录的问题列表通常作为评审总结报告的附件。
    • 跟踪与审核。开发者修改工作成果,消除已发现的缺陷。由指定的审查人员跟踪每个缺陷的状态,直到工作成果合格为止。

    技术评审的注意事项

    • 评审产品,而不是评审人。评审会议的气氛要轻松和愉快,注意提出问题时的方式和态度,不要让产品开发者产生被审问的感受。
    • 制订评审会议的议程并遵守进度。不要让会议过分拖延。问题的具体解决方案可以在会后讨论。
    • 使用检查清单。为不同的软件产品(需求、设计、代码等)开发检查清单,在检查清单中列出所有重要的、常见的问题,这样可以使评审会议聚焦于一些重要问题。

    同行评审(Peer Review)

    • 同行评审是一种特殊类型的技术评审。
    • 由与工作产品开发人员具有同等背景和能力的人员对工作产品进行技术评审,因此非常有利于发现工作产品中的问题。

    代码评审(Code Review)

    • 编码阶段的一种技术评审,由一组人员对程序进行阅读和静态分析,可以很有效地检查程序代码中的缺陷。
    • 评审内容:程序是否符合编码规范,程序结构是否合理,算法和程序逻辑是否正确,程序性能怎样等。
    • 很多程序逻辑错误很难通过测试发现。

    软件测试

    • 软件测试是通过执行软件来发现缺陷,它是控制软件质量的重要手段和关键活动。
    • 软件测试要在有了软件编码后才能执行,但测试的计划和设计应在项目前期就开始。测试计划确定了测试的内容和目标,明确了测试范围,制定了测试策略和用例设计方法,安排人力和设备资源等。测试设计就是利用各种测试用例设计方法,编写测试用例,并准备测试数据,开发辅助测试工具和编写自动化测试脚本。
    • 在测试执行阶段,要执行测试用例,发现和记录软件缺陷。测试执行完毕后,还要对测试的结果进行分析总结,撰写测试报告,给出结论。

    过程检查

    • 过程检查就是检查软件项目的工作过程和工作成果是否符合既定的规范。在软件项目中,如果工作过程和工作成果不合规范,很可能会导致质量问题。
    • 例如,代码和文档的版本及其命名不符合版本控制规范,重要的变更不遵循变更控制流程,都有可能造成开发工作的混乱,进而导致产品质量下降。
    • 工作过程和工作成果符合既定规范,也并不意味着产品质量一定能得到保证。因此过程检查只是保证质量的一个必要条件,而不是充分条件,它还需要与技术评审、软件测试、缺陷跟踪、过程改进等各方面措施互相配合,共同促进软件质量的提高。
    • 对过程检查要事先做出规划,确定主要检查项、检查时间(或频度)、负责人等。过程检查计划一般包含在软件项目质量管理计划中。

    软件过程改进

    • 软件过程(Software Process)是指开发和维护软件产品的活动、技术、实践的集合。软件过程描述了为了开发和维护用户所需的软件,什么人(who)、在什么时候(when)、做什么事(what)以及怎样做(how)。
    • 软件开发的过程观认为,软件是由一组软件过程生产的,因此软件质量和生产率在很大程度上是由软件过程的质量和有效性决定的,而软件过程可以被定义、控制、度量和不断改进。
    • 所谓软件过程改进是指根据实践中对软件过程的使用情况,对软件过程中的偏差和不足之处进行不断优化。
    • 软件过程改进是面向整个软件组织的。一个成熟的软件组织应该对其软件过程进行定义,形成一套规范的、可重用的软件过程,称为“组织级过程资产”。

    软件过程改进示意图


    • 软件过程改进可遵循某种过程改进模型(如CMMI)来执行。

    第三节 缺陷跟踪

    • 缺陷跟踪是指从缺陷被发现开始到被改正为止的整个跟踪流程。


    缺陷跟踪工具

    • 缺陷跟踪一般需要软件工具支持。常用的工具有Bugzilla、ClearQuest、JIRA、TrackRecord 等。

    缺陷跟踪工具Bugzilla

    • Bugzilla是Mozilla公司提供的一个开源的缺陷跟踪工具,在全世界拥有大量用户。
    • 它能够为软件组织建立一个完善的缺陷跟踪体系,包括报告缺陷、查询缺陷记录并产生报表、处理解决缺陷、管理员系统初始化和设置等。

    Bugzilla的功能和特点:

    • 基于Web方式运行,易于掌握。
    • 缺陷从最初的报告到最后的关闭,都有详细的操作记录,确保了缺陷不会被忽略,并允许用户在检查缺陷状态时获取历史记录。
    • 提供强大的查询匹配能力,能根据各种条件组合进行缺陷查询,并能够记忆搜索条件。

    Bugzilla的特点:

    • 当缺陷状态发生改变时,会自动发送邮件通知相关责任人。
    • 自带基于数据库的报表生成功能,主要生成两类图表:基于表格的视图和图形视图(条形图、线图、饼状图)。

    Bugzilla的基本操作说明

    • 报告缺陷
    • 分配缺陷
    • 处理缺陷
    • 验证已解决的缺陷

    第四节 缺陷移除和预防

    • 为了提高软件质量,必须在软件开发的各阶段尽量多地移除缺陷,并通过缺陷预防尽量少地引入缺陷。


    缺陷移除效率

    • 软件开发阶段的缺陷移除效率是衡量该阶段软件过程能力的一个重要指标,该指标可以定义为:


    • 例如,在某软件项目的高层设计阶段通过设计审查发现和移除了730个缺陷,在该阶段开始时存在120个缺陷,在该阶段引入了860个缺陷,则该阶段的缺陷移除效率为:



    缺陷的早期发现百分比

    • 应该在软件项目的早期阶段尽可能多地移除缺陷,这样不仅能够提高软件质量,还有利于降低项目成本。IBM公司用来管理质量的四个度量之一就是缺陷的早期发现百分比,也就是审查缺陷移除效率,如下式:


    早期开发阶段的缺陷移除

    • 早期开发阶段的缺陷移除一般来说代价较低。缺陷的发现距离被引入的时间越近,移除缺陷所需的工作量就越少。
    • 有研究者对来自IBM Santa Teresa实验室的数据进行了分析,发现软件生命周期的三个主要阶段,即设计、编码和用户使用(维护阶段)的缺陷移除代价的比率为:1:20:82。

    缺陷预防



    • 优点:主动

                  改进软件过程,降低出错几率
                  降低质量成本,实现项目效益

    缺陷的概念

    • 软件缺陷是指软件对其期望属性的偏离,它包含三个层面的信息:

    1. 失效(failure):指软件系统在运行时其行为偏离了用户的需求,即缺陷的外部表现。
    2. 错误(fault):指存在于软件内部的问题,如设计错误、编码错误等,即缺陷的内部原因。
    3. 差错(error):指人在理解和解决问题的思维和行为过程中所出现的问题,即缺陷的产生根源。

    缺陷原因分析

    • 一个差错可导致多个错误,一个错误又可导致多个失效。
    • 软件缺陷原因的分析不能只停留在“错误”这一层面上,而要深入到“差错”层面,才能防止一个缺陷(以及类似缺陷)的重复发生。
    • 因此软件缺陷的根本原因往往与过程及人员问题相关,缺陷预防总是伴随着软件过程的改进。
    • 软件缺陷原因分析过程一般包括选择缺陷数据、分析缺陷数据、识别公共原因并提出改进措施三个步骤。采用该方法的软件组织通常是在软件项目的每个开发阶段结束后,或者定期(如每个月末)进行缺陷原因分析,提出改进措施,从而促进组织的过程改进。

    软件缺陷原因分析方法

    Step1:选择缺陷数据。
        对小项目,可选择某一时期内发现的所有缺陷。
        对大项目,可选择一个缺陷样本集合。
    Step2:分析缺陷的根本原因
        对缺陷逐个进行分析,常以会议的方式进行。
        可对分析出的根本原因进行分类,例如:
        IBM:疏忽、培训、通信失效、书写错误
        Motorola:开发阶段相关、人员相关、项目相关、复审相关

    • 缺陷原因分析工具——因果图(鱼骨图)


    Step3:识别公共原因,制定改进措施。
       在逐个分析了缺陷之后,还要对分析得到的根本原因进行综合和归纳,识别导致缺陷产生的公共原因,并制定有关过程、技术和人员管理方面的改进措施。

    第五节 软件质量的常用度量

    • 初期故障率:指软件在初期故障期(一般以软件交付给用户后的三个月内为初期故障期)内单位时间的故障数。

        用来评价交付使用的软件的质量,预测什么时候软件运行达到基本稳定。
        一般以每100小时的故障数为单位。

    • 偶然故障率:指软件在偶然故障期(一般以软件交付给用户后的4个月以后为偶然故障期)内单位时间的故障数。

        它用来度量软件处于稳定状态下的质量。
        一般以每1000小时的故障数为单位。

    • 平均失效前时间(Mean Time to Failure,MTTF):指软件在失效前(两次失效之间)正常工作的平均统计时间。

        用来度量软件的可靠性。

    • 平均修复时间(Mean Time to Reparation,MTTR):指软件失效后,使其恢复正常工作所需要的平均统计时间。

        用来度量软件的可维护性。

    • 缺陷密度:指软件单位数量的源代码隐藏的缺陷数量


    通常以每千行无注解代码为一个单位

    案例分析

    “软件缺陷管理和度量系统”质量管理计划

    改进软件质量的一些要求

    软件质量活动必须经过规划并明文规定
    质量活动必须尽早开始
    质量小组必须独立存在
    质量小组的人员应该经过必要的培训

    本章内容小结

    理解质量管理的基本概念
        软件质量、质量属性、质量形成、质量成本
    理解全面软件质量管理所包含的措施
    理解缺陷跟踪流程
    理解缺陷预防的作用和方法
    掌握常用质量度量











































































    展开全文
  • 什么是软件质量

    千次阅读 2018-06-10 23:26:33
    如何提高软件质量? 为测试正名 开发中的常见问题和偏见 如何提高自身的软件设计能力? 一说到软件质量,很容易想到软件缺陷。因此,缺陷少就潜移默化地成为了高质量软件的代名词。但这种认识是片面的。 ...

    一说到软件质量,很容易想到软件缺陷。因此,缺陷少就潜移默化地成为了高质量软件的代名词。但这种认识是片面的。

    从用户角度来看

    • defect 和 bug 的数量越少以为着质量越好

    从开发的角度来看

    • 整体架构设计易于扩展
    • 模块之间耦合性低,易于复用
    • 代码简洁易懂,易于维护

    之所以将软件质量分成两个级别,是因为设计质量的外部不可见性。如果我们只从用户级别来考察软件质量,就会忽略设计质量的重要性,也就只局限在“只要功能正常就是好软件”这一认识范围内。

    如何提高软件质量?

    主导设计一旦确立了以后,产品的质量水准就基本确定了。尽管验证阶段对于产品质量很重要,但是验证工作做得再好也不能从本质上改变软件产品的质量水准了。

    那么,问题来了。我们如何保证软件质量呢?

    • 编码前,架构设计质量必须得到保证
    • 编码时,代码质量必须得到保证
    • 编码后,测试质量必须得到保证

    这里写图片描述

    事先进行架构设计可以时软件往更加模块化,并且设计好特定的接口。会软件的扩展性和可维护性更加好。

    如何保证设计质量?很容易让人想到通过开发流程和认证,比如敏捷软件开发方法、CMMI认证等。其实认证的本质还是流程。
    但是,高设计质量是不能简单地通过流程而获得的,因为流程所控制的游行的因素,而软件设计过程很多内容是悟性的。由于软件设计中艺术成分的非直观性,造成设计质量不易被量化以便加以评估。

    为测试正名

    在需求分析结束后,测试人员就需要接入项目
    - 根据需求分析进行功能测试用例的设计
    - 根据架构设计进行模块测试用例的设计
    - 根据产品标准进行压力测试用例的设计
    - …

    一个注重产品质量的公司,就越注重测试。因为多数BUG是由测试人员进行各种测试,得到的。但是并不是说可以完全吧所有BUG消除。

    开发中的常见问题和偏见

    • 测试时替罪羊或救命稻草
    • 但凡出现BUG,就是测试不给力
    • 资源永远不足
    • 现在没有时间和精力去做重构
    • 不改变就可以规避风险
    • 虽然有缺陷,但是功能不受影响,不做改变。

    如何提高自身的软件设计能力?

    • 对架构的完美性有精神上的追求,不满足功能正确
    • 积极思考方案,不停烦死是否能做得更好
    • 勇于实践与模仿,进而形成自己的风格和思想
    • 推敲前辈们的经典设计,尝试用于自己的项目
    • 总结设计原则,体会各个设计原则的内涵
    • 软件设计不是原则的叠加,而是一个平衡利弊的过程。
    展开全文
  • 软件质量:反应一个实体满足明确的和隐含的需求能力的特性总和(满足用户明确的或隐含需求的程度) 根据软件定义就会发现软件质量是一个多层次的概念: 用户角度角度:质量既符合需求又满足用户需求 软件产品角度...
  • 软件质量保证方案

    2017-03-29 21:00:04
    软件质量保证(SQA-Software Quality Assurance)提供一种有效的人员组织形式和管理方法,通过客观地从过程和产品两个方面评审和审计软件活动的质量,对其是否符合既定的标准进行监督,收集不符合项,及时反馈给项目...
  • 软件质量模型详解

    万次阅读 2019-07-04 19:54:24
    软件质量模型有6大特性、27个子特性组成。 功能性:满足用户明确的和隐含的需求功能 易用性;软件在指定的条件下,维护规定的性能级别的能力。 可靠性有“三规”:指定的环境,规定的时间,规定的性能。 可靠...
  • 软件质量浅谈

    2002-04-10 10:20:00
    软件质量浅谈转载自共创软件联盟 随着社会生产力的发展和科学技术的进步,全球性贸易竞争日益加剧,用户对质量提出了越来越严格的要求。如果企业想在竞争中生存,更不用说获利了,那么除了接受质量观念外就别无选择...
  • 软件质量管理

    千次阅读 热门讨论 2015-11-03 14:02:52
    软件质量特性 1)ISO/IEC 9126软件质量模型  功能性:与一组功能及其指定的性质有关的一组属性  可靠性:与在规定的一段时间和条件下,软件维持其性能水平的能力有关的一组属性  易用性:与一组规定或潜在的...
  • 软件中的质量属性(一)

    千次阅读 2017-06-30 09:55:59
    开发高质量软件是一件极具挑战的工作。其中一个重要的原因就是对于“质量”的定义各不相同,变化莫测。 杰拉尔德温伯格在他的四部曲巨作《质量软件管理》的第一卷第一章中就谈到了什么是质量以及质量的重要性。...
  • 软件质量基础知识

    千次阅读 2016-08-31 08:36:27
    软件质量模型 测试技术类型 测试流程规范 研发质量规范 问题交流   二、软件质量模型 1、好的架构 2、充分了解了用户需求 3、尽量少的bug 4、性能好     软件质量模型 功能性 可靠性 可移植性 易用...
  • 软件质量评估

    千次阅读 2018-06-08 11:47:35
    摘要: 本文从软件质量的有关概念出发,根据指标选取原则,在分析软件质量特征的基础上提出了相应的软件质量评估指标的选取原则,并进而建立了软件质量评估体系。关键词: 软件质量 质量评估指标体系1 软件质量的...
  • 软件质量保证

    千次阅读 2013-05-17 12:43:13
    软件质量保证(SQA)是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。软件质量保证的目的是使软件过程对于管理人员来说是可见的。它通过对软件产品和...
  • 软件质量 软件测试和质量保证

    千次阅读 2019-02-15 15:07:49
    软件质量:  软件质量包括  内部质量 外部质量 使用质量 就是说软件满足规定或潜在用户需求的能力,要从软件在内部、外部和使用中的表现来衡量   软件测试:  软件由文档、数据以及程序组成,那么软件...
  • 软件质量属性和质量要素

    千次阅读 2014-10-09 15:05:54
    软件质量是许多质量属性的综合体现,各种质量属性反映了软件质量的方方面面。人们通过改善软件的各种质量属性,从而提高软件的整体质量。 十大软件质量因素 n n功能性质量因素:正确性,健壮性,可靠性 n...
  • 软件质量保证测试

    千次阅读 2019-01-06 17:25:32
    1.软件是计算机程序、规程以及可能的相关文档和运行计算机系统需要的数据。包含4个部分,即计算机程序、规程、文档和软件系统运行所必需的数据。软件与硬件完全不同的特征:1、软件是...软件质量保证(Software Qual...
  • 软件质量黄金法则

    千次阅读 多人点赞 2020-08-30 14:49:43
    文章目录目录优秀软件的指标1. Upstream Fixed 原则2. KISS(Keep it simple and stupid)原则认知负荷的产生影响协同成本的因素降低软件的复杂度3. 功能模块高内聚原则4. 单元测试高覆盖率原则5. Code Review 原则 ...
  • 通常,这都是通过实现基于度量指标的性能目标(可能包括质量目标)以及利用最佳惯例规范商业流程来实现的。最后,要通过一些测试和报告形式来评估这些目标对企业的影响。在接受评估之前,机智的员工都会要一个评估单...
  • 如何对软件质量进行评估?

    千次阅读 2005-04-05 14:27:00
    摘要:本文从软件质量的有关概念出发,根据指标选取原则,在分析软件质量特征的基础上提出了相应的软件质量评估指标的选取原则,并进而建立了软件质量评估体系。关键词:软件质量 质量评估指标体系1 软件质量的有关...
  • 软件质量保证与测试

    千次阅读 2017-06-18 18:29:06
    所谓教材就是把一些简单易懂的词语,扩写成一堆谁也看不懂的句子。
1 2 3 4 5 ... 20
收藏数 398,851
精华内容 159,540
关键字:

软件质量