软件测试之-软件质量、软件质量特性

1.1 软件质量定义

  1)ISO关于质量的定义为:一个实体的所有特性,,基于这些特性可以满足明显的或隐含的需求。
                       质量就是实体基于这些特性满足需求的程度。
  2)质量的定义包含三个要素:实体、特性集合、需求。
                         对软件测试来说,实体即测试的对象。
                         实体的特性集合:不同实体,其特性集合不同。
  3)软件质量评价的标准:需求,质量和需求对应,需求有三个层次:显式需求、隐式需求、用户的实际需求。
  4)由以上可以引申出软件质量的3个层次:符合需求规格、符合用户显式需求、符合用户实际需求。
     *1*符合需求规格:符合开发者明确定义的目标,是内部质量,即从软件启动到交付用户之间产生的所有中间产品的质量。
     *2*符合用户显式需求:符合用户明确说明的目标,是验收质量。即用户在验收时评价产品的质量。
     *3*符合用户实际需求:包括用户明确说明的和隐含的需求,是使用质量,即用户在实际使用过程中对产品的质量评价。

1.2 软件质量大师

  1)戴明

是世界著名的质量管理专家,提出戴明质量管理的十四项原则,简介易明,称为本世纪全面质量管理的重要理论基础。

  *戴明质量管理的十四项原则*
     *1*创造产品与服务改善的恒久目的
        最高管理层必须从短期目标的迷途中归返,转回到长远建设的正确方向。也就是把改进产品和服务作为恒久的目的,坚持经营,这需要在所有领域加以改革和创新。
     *2*采纳新的哲学
        必须绝对不容忍粗劣的原料,不良的操作,有瑕疵的产品和松散的服务。
     *3*停止依靠大批量的检验来达到质量标准
        检验其实是等于准备有次品,检验出来已经是太迟,且成本高而效益低。正确的做法,是改良生产过程。
     *4*废除"价低者得"的做法
        价格本身并无意义,只是相对于质量才有意义。因此,只有管理当局重新界定原则,采购工作才会改变。公司一定要与供应商建立长远的关系,并减少供应商的数目。采购部门必须采用统计工具来判断供应商及其产品的质量。
     *5*不断地及永不间断地改进生产及服务系统
        在每一活动中,必须降低浪费和提高质量,无论是采购、运输、工程、方法、维修、销售、分销、会计、人事、顾客服务及生产制造。
     *6*建立现代的岗位培训方法
        培训必须是有计划的,且必须是建立于可接受的工作标准上。必须使用统计方法来衡量培训工作是否奏效。
     *7*建立现代的督导方法
        督导人员必须要让高层管理知道需要改善的地方。当知道之后,管理当局必须采取行动。
     *8*驱走恐惧心理
        所有同事必须有胆量去发问,提出问题,表达意见。
     *9*打破部门之间的围墙
        每一部门都不应只顾独善其身,而需要发挥团队精神。跨部门的质量圈活动有助于改善设计,服务,质量及成本。
     *10*取消对员工发出计量化的目标
        激发员工提高生产率的指标、口号、图像、海报都必须废除。很多配合的改变往往是在一般员工控制范围之外,因此这些宣传品只会导致反感。虽然无须为员工订下可计量的目标,但公司本身却要有这样的一个目标:永不间歇地改进。
     *11*取消工作标准及数量化的定额
        定额把焦点放在数量,而非质量。计件工作制更不好,因为它鼓励制造次品。
     *12*消除妨碍基层员工工作畅顺的因素
        任何导致员工失去工作尊严的因素必须消除,包括不明何为好的工作表现。
     *13*建立严谨的教育及培训计划
        由于质量和生产力的改善会导致部分工作岗位数目的改变,因此所有员工都要不断接受训练及再培训。一切训练都应包括基本统计技巧的运用。
     *14*创造一个每天都推动以上13项的高层管理结构。                
  2)朱兰

建立了朱兰学院,目前已成为世界上领先的质量管理咨询公司,他对实行组织内部质量策划的主要观点包括:

     *1*识别客户和客户需求
     *2*制定最佳质量目标
     *3*建立质量衡量方式
     *4*设计策划在运作条件下满足质量目标的过程
     *5*持续增加市场份额
     *6*优化价格,降低公司或工厂中的错误率

也提出了质量管理方法三部曲:质量策划、质量控制、质量改进。

  3)克劳士比

引发全球质量活动由生产制造业扩大到工商企业领域。

  4)石川馨

1.3质量铁三角

流程(过程)、技术(工具)、组织(人)三个方面是影响软件质量的铁三角。

  1)流程(Flow)
     *1*流程指一个或一系列有规律的行动,这些行动以确定的方式发生或执行,导致特定结果的出现。
     *2*流程的好处
          a)使得不可见的软件开发过程变得可见并可控;
          b)流程驱动每一个研发人员的活动,减少了内耗,提高了效率。
  2)技术
     *1*技术的承载者是人
          a)现有员工所承载的技术能力
          b)公司发展过程中积累下来的技术能力            
     *2*技术从类型上分
          a)开发技术
          b)测试技术
          d)结构工艺技术      
  3)组织
     *1*通过技术和流程间接影响质量。
     *2*组织对技术的影响
          a)能确保具备相应技术能力的人去从事相应的活动
          b)是否重视对技术的积累
  4)流程、技术、组织三者之间的关系:
     *1*组织是流程成功实施的保障,好的组织结构能够有效的促进流程的实施;
     *2*流程对于产品的成功有着关键作用,一个适合于组织特点和产品特点的流程能够极大的提高产品开发的效率和产品质量。
     *3*对企业来说,人是技术的载体,技术发展的方向应该与现在的开发流程和规范相结合,这样有利于专业技能的提高。

2.1 软件质量模型

ISO9126软件质量模型有6个特性,27个子特性组成。测试工作需要依据该模型去测试、评价软件。

涉及到软件生命周期的几种质量的含义。

  1)过程质量         
  2)内部质量
  3)外部质量
  4)使用质量

2.2 软件质量特性

  1)功能性(Functionality)
     功能性是指软件是否满足了客户的需求,其子属性有:
     *1*合适性
        提供的功能是用户所需要的,及用户所需要的功能软件系统已提供。
     *2*准确性
        此特性容易理解,在实际的工程应用中也常遇到,例如财务类软件系统提供给用户的功能是否满足用户对该功能的精确度要求。软件,如果不涉及特殊用户的需求(如科研机构的特种应有),精度一般都容易满足。
     *3*互操作性
        软件系统与一个或多个周边系统进行信息交互的能力。例如,运行在windows操作系统上的应用软件,与运行在Linux系统上的软件进行通信,如:Linux系统是数据的发送方,把数据发送到windows系统上,在windows系统上运行的应用软件需能读出特有数据格式的能力,然后在界面上显示。
     *4*安全性
        指软件系统保护信息和数据的能力。可以从以下两方面理解:
           #1#防止未得到授权的人或系统访问相关的信息或数据;
           #2#保证得到授权的人或系统能正常访问相关的信息或数据。
        常见的安全性测试:
           #1#用户验证:登录密码验证(如windows登录验证,邮箱验证等)、IP地址访问限制等;
           #2#用户权限管理:验证低级别用户是否具有了高级别用户的权限,各级别用户权限都得到了实现。例如windows 7操作系统,某些应用程序的运行必须以管理员身份才允许;
           #3#系统数据的保护:例如对系统文件、用户密码文件等进行隐藏,机密文件内容进行加密、备份;
     *5*功能性的依从性
        遵循相关的标准(国际标准、国家标准、行业标准、企业内部规范等)约定或法规以及类似规定的能力。例如:在中国研发与生产的医疗设备如果要在美国上市销售必须经过FDA(Food and Drug Administration美国食品及药物管理局)的审核,并通过。

  2)可靠性(Reliability)
     可靠性是指软件是否能够一直在一个稳定的状态上满足可用性。
     *1*成熟性
        软件系统防止内部错误扩散而导致失效的能力。测试过程中常遇到的例子如:模块A更改了某参数,但没考虑到某参数同时被模块B调用,由于模块B并未作相关更改,结果使得模块B的相关功能失效。
     *2*容错性
        软件系统防止外部接口错误扩散而导致系统失效的能力。
        例如:应用软件在操作过程中需操作一个文件,但由于此文件已遭破坏,由于缺少容错处理,结果执行文件操作时,软件崩溃。
     *3*易恢复性
        系统失效后重新恢复原有功能、性能的能力,包括对原有能力恢复的程度与速度。
        例如:我们经常使用的windows系统有时会遇到系统不响应的情况,只好按Reset或关掉电源重新开机。这种情况,当前未保存的数据当然是丢失了,系统重启后能否正常进入系统便是易恢复性的一种体现。

  3)可用性(Usability)
     可用性,是衡量用户使用软件需要付出多大的努力的质量属性。其中,我们经常提到的易用性就是可用性的一个重要方面,指产品易于学习和使用,可减轻记忆负担等,具体可从以下几方面进行理解。
     *1*易理解性
        易理解性指用户在使用软件系统的过程中,展示给用户的信息是否准确、清晰、易懂,能帮助用户准确理解系统当前真实的状态,并指导其进一步的操作。
     *2*易学性
        易学性是指软件提供相关的辅助手段,帮助用户学习使用它的能力。例如:是否具有在线帮助。在线帮助常见的有两种,一种是跟随功能而变的帮助,如Word、Excel中的菜单项鼠标提示(tips);另一种是在线帮助手册,如同windows程序按快捷键F1自动调出帮助手册内容。
     *3*易操作性
        易操作性指用户基本不用额外学习即能操作软件,包括多方面的内容。例如:
           #1#常用功能路径不要太深,最好能提供快捷键,且这些快捷键具有普适性(用户已广泛接受),如前面提到的windows程序激活帮助功能的快捷键F1。目前有很多软件采用这种已符合人们的使用习惯的操作。
           #2#最好提供一键返回桌面的功能,这一点苹果的Iphone手机做得比较好,无论用户当前在什么位置,只要按下“返回桌面”主键,立即可退出。
           #3#操作尽量简单,例如软件的安装或升级,按提示点击“下一步”且不要太长的时间或多个选择路径。
  4)效率(Efficiency)
     效率,这里指衡量软件正常运行需要耗费多少时间及物理资源,是性能测试的重点内容。
     *1*时间效率
        时间效率主要指软件系统在各业务场景下完成用户指定的业务请求所需的响应时间。
        例如:我们在互联网上发表博文,点击“提交”后,一般情况都需等待几秒钟,然后自动跳转到博文显示页面,那么此等待时间,我们可以理解为系统响应的时间。
     *2*资源效率
        资源效率主要指软件系统在完成用户指定的业务请求所消耗的系统资源,如CPU占有率、内存占有率、通信带宽占有率、软件内部消息包资源占有率等。例如不同业务功能之间,不同GUI界面相互之间的切换,如果切换过程中有明显的后影,或速度太慢,很可能资源占用方面没有处理好。

   5)可维护性(Maintainability)
      可维护性,衡量对已经完成的软件进行调整需要多大的努力,其又可分为下面四个子属性。
     *1*易分析性
        指软件系统提供辅助手段帮助开发人员分析识别缺陷、失效产生的原因,找出待修复部分的能力。这也是工程实践中很重要的一方面,可以减少缺陷定位的时间,提高开发人员工作效率。采用系统日志记录的方法,如同windows的事件查看器(eventvwr),把软件执行代码的轨迹或某些错误、状态进行记录,是一种常见的方法。
     *2*易改变性
        指软件缺陷的修复容易被实施,这与软件的设计有着密切关系。例如设计上封装性好、高内聚(同层次设计时,一个实体只完成一个功能)、低耦合的代码,为未来可能的变化留有扩充余地,它的易改性会更好。
     *3*稳定性
        指软件系统在长时间连续工作环境下能否正常工作,不出错,无异常情况等。测试人员常用长时间压力测试的方式检验软件的稳定性,稳定性与资源效率有紧密联系,例如内存的慢泄漏,时间越长,系统稳定性越差,内存资源占用越多,最后可能导致系统瘫痪。
     *4*易测试性
        指从测试验证角度,软件存在可测试性的难易程度。例如:UI界面,提示框对话框,按钮响应状态变化等是很容易观察到的,可测试性强;有明确的输入输出数据,尽管此数据对于用户来说可能不容易被看到,但通过某种方法仍 可验证到,可测试性次子。对鉴于系统设计原因,某种用户场景难于验证,测试的条件苛刻,需特定的实验室条件,如高温高压等,这种情况需考虑改变软件内部状 态,通过发布特殊版本进行测试。易测试性作为可维护性的子属性之一,与质量是否存在必然的正向关系呢,即能不能说越容易测试的软件,其质量将越好。从工程 最佳实践来看,这种必然的关系倒并不成立,但反过来是成立的,越难验证的软件,其存在问题的风险将可能成倍增大。

   6)可移植性(Portability)
      可移植性,是衡量软件是否能够方便地部署到不同的运行环境中的能力,它有下面几个特性。
     *1*适应性
        指软件系统无需做任何相应变动就能适应不同运行环境的能力,其中运行环境通常是指操作系统平台、数据库平台、硬件平台等。例如我们在项目常遇到的情况,某系统软件原来运行在windows XP操作系统上,但后来由于Microsoft推出了windows 7,windows 8,应用新系统的用户比比皆是,新用户需要某系统软件能在新平台上正常运行。这种因平台的变化,系统应用软件的适应性在设计之初是需考虑的。
     *2*易安装性
        指平台变化后,成功安装软件的难易程度。有些软件可不作任何变化即可成功部署,有些需作部分变化,如安装过程增加用户选项等。对于软件的安装过程,能尽量考虑用户少参与,多一些自动安装过程会让用户更放心。
     *3*共存性
        指软件系统在公共环境与其共享资源的其他系统共存的能力。这个特性表明我们在测试时不仅需要关注自身软件特性的实现,还要关注本软件是否影响了其他软件的正常功能。
        关于共存性,笔者曾遇一个这样的案例,在应用程序进行输入中文时,只要打开紫光拼音,则软件将自动退出。还有一种是人为的限制,在已知情况下,软件A打开,限制软件B不能运行,有意防患,适合某特殊应用场景。
     *4*易替换性
        指软件系统的升级能力,包括在线升级、打补丁升级等。易替换性相对于嵌入式产品软件系统来说,由于涉及硬件物料的更新换代,如某主控芯片、USB接口芯片的换代,还可能会触发底层驱动的升级。
posted @ 2015-05-10 20:13  印记嘟嘟  阅读(5287)  评论(0编辑  收藏  举报