测试过程与管理(2)

软件测试过程与管理

        一个软件的测试工作,不是一次简单的测试活动,它与软件开发一样,是属于软件工程中的一个项目,因此,软件测试的过程管理是测试成功的重要保证。

配置管理

        软件测试过程的配置管理和软件开发过程的配置管理是一样。开发过程中,测试活动的配置管理属于整个软件项目配置管理的一部分。独立的测试组织应建立专门的配置管理系统。一般来说,软件测试配置管理包括4个最基本的活动:
    ①配置项标识
    ②配置项控制(变更控制)
    ③配置状态报告
    ④配置审计

1.配置项标识

  • 标识测试样品、标准、工具、文档(包括测试用例)、报告等配置项的名称和类型。
  • 指出何时基准化配置项(置于基线控制之下)
  • 标识各配置项的所有者及储存位置。

2.配置项控制

  • 规定测试基线,对每个基线必须描述下列内容:
    ①每个基线的项(包括文档、样品和工具)
    ②与每个基线有关的评审、批准事项以及验收标准
  • 规定何时何人创立新的基线,如何创立
  • 确定变更控制委员会的人员组成、职能(包括变更授权、确认与批准)工作程序
  • 确定变更请求的处理程序和终止条件
  • 确定变更请求的处理过程中各测试人员执行变更的职能
  • 确定变更请求和所产生结果的对应机制
  • 确定配置项提取和存入的控制机制与方式

3.配置状态报告

  • 定义配置状态报告形式、内容和提价方式
  • 确认过程记录和跟踪问题报告,更改请求,更改次序等
  • 确定测试报告提交的时间与方式

4.配置审计

  • 确定审计执行人员和执行时机
  • 确定审计的内容与方式
  • 确定发现问题的处理方法
        配置管理是管理和调整变更的关键,如下图。对于一个参与人员较多、变更较大的项目,它是至关重要的。软件测试配置管理概念相对比较简单,当实际操作却常常十分复杂。它应用于测试工具、用例,而且对于测试过程中的所有文档也是非常重要的,也可应用于测试样本和数据。

测试的组织与人员

        组织是指一个系统将材料、知识和方法组合起来,把各种不同的输入转换成有价值的输出。组织结构是指用一定的模式对责任、权威和关系进行安排,直至通过这种结构发挥功能。

1.组织结构设计因素

        测试组织结构设计因素包括:
  • 垂直还是平缓:垂直的组织结构是在首席管理者与低级测试人员之间设立许多层次,平缓的垂直组织结构设立很少的几个层次。平缓的组织结构的测试工作效率较高。
  • 市场还是产品:组织结构的设置可以是面向不同的市场或不同的产品
  • 集中还是分散:组织可以是集中的,也可以是分散的。这对于测试组织是比较关键的,为保证测试的独立性,一般测试组织要相对集中。
  • 分级还是分散:可以将组织按权力和级别一层一层地分级。也可以分散排列开。在软件开发小组内的测试常使用这种分散的方式,测试小组在开发小组内,可以是专职测试人员,或者以测试角色的形式组成。
  • 专业人员还是工作人员:测试组织应拥有一定比例的专业测试人员和工作人员。
  • 功能还是项目:测试组织可以面向功能或项目。

2.独立测试组织

        测试组织是一种资源或一系列的资源,专门从事测试活动。随着软件企业规模的不断增大,必须建立独立专门的测试队伍。只有不持偏见的人才能提供不持偏见的度量,测试度量软件质量才真正有效,测试必须独立进行。

3.测试组织管理者

        测试管理是很困难的,测试组织的管理者必须具备:
  • 理解与评价软件测试政策、标准、过程、工具、培训和度量的能力;
  • 领导一个测试组织的能力,该组织必须坚强有力、独立自主、办事规范没有偏见;
  • 吸引并留住杰出测试专业人才的能力;
  • 领导、沟通、支持和控制的能力;
  • 测试世间、质量和成本控制的能力。

4.集中管理的测试组织

        这种方式的优点是,软件立项后,由独立的测试组织提供资源与软件开发人员并肩作战,与合作伙伴一块行动,可以减少软件开发人员与测试人员合作时的不利因素。

5.选择合理的组织方案

        组织设计因素可以组成不同的组织方案,在实际中软件开发机构和测试机构也都建立了不同结构的测试组织形式。选择合理高效的测试组织结构方案的准则是:
    ①提供软件测试的快速决策能力;
    ②利于合作,尤其是产品开发与测试开发之间的合作;
    ③能够独立、规范、不带偏见地运作并具有精干的人员配置;
    ④有利于协调测试与质量管理的关系;
    ⑤有利于满足软件测试过程管理要求;
    ⑥有利于为测试技术提供专有技术;
    ⑦充分利用现有测试资源,特别是人;
    ⑧对测试者的职业道德和事业产生积极的影响。

6.测试人员

(1)测试人员的选择
        测试人员的能力包括以下几项:
    ①一般能力:包括表达、交流、协调、管理、质量意识、过程方法、软件工程等;
    ②测试技能及方法:包括测试基本概念及方法、测试工具及环境、专业测试标准、工作成绩评估等;
    ③测试规划能力:包括风险分析及防范、软件放行/接收准则指定、测试目标及计划、测试计划和设计的评审方法等;
    ④测试执行能力:包括测试数据/脚本/用例、测试比较及分析、缺陷记录及处理、自动化工具;
    ⑤测试分析、报告和改进能力:包括测试度量、统计技术、测试报告、过程监测及持续改进。
(2)测试人员的激励
【1】X理论+Y理论
  • X理论:胡萝卜+大棒——迫使人们工作;
  • Y理论:经理的职能部室督促人们工作,而是使人们有可能工作。
【2】需要的层次(Maslow模型)
  • 生存需要——工作职位、工资奖金、休息时间;
  • 安全需要——公正待遇、应付工作的能力和信心;
  • 社会需要——团队归属感,互相认同、理解和支持;
  • 自尊需要——具有受人尊重/赏识的能力或业绩;
  • 自我实现需要——成为自己期望的人物。
【3】人员激励的关键点
  • 管理者习惯用对自己有效的因素激励测试人员,很可能发现无效;
  • 过多使用权力、资金或处罚手段很可能导致项目失败;
  • 行业领先企业采取卓有成效的非货币形式的激励措施;
  • 在项目进行过程中,而不仅是在项目结束时实施激励措施;
  • 奖金应该在工作获得认同后尽快兑现;
  • 对人员的工作表现出真诚的兴趣是对他们最后的奖励;
  • 激励因素是因人而异、因时而异的。已经满足的需要很可能不再成为激励因素。
【4】人员自我激励
        测试工作的快乐哲学:选择积极的态度,把工作当游戏,让别人快乐,全身心投入工作。
        注意测试工作的7条效率原则:
    ①主动思考,积极行动;
    ②一开始就牢记目标,不迷失方向;
    ③重要的事情放在首位(但常常把紧急的事情放在首位);
    ④先理解人,后被人理解;
    ⑤寻求双赢;
    ⑥互相合作,追求1+1>2;
    ⑦终生学习,自我更新,不断进步。
(3)测试职业发展
        国际推荐的软件测试职业发展计划如下:
  • 1~2年,测试技能:熟悉整个测试过程及产品业务领域,学习和掌握自动测试工具,学习测试自动化编程技术;开发和执行测试脚本,承担凶弹测试实施任务;掌握编程语言、操作系统、网络与数据库方面的技能。
  • 3~4年,测试过程:深入了解测试过程,掌握测试过程设计及改进,参与软件工作产品的同行评审;进一步了解产品业务领域,改进测试自动化编程技术;能指导初级测试工程师;加强编程语言、操作系统、网络与数据库方面的技能。
  • 4~5年,测试组织工作:管理1~3名测试工程师,担任任务估算、管理及进度控制;进一步培养在软件项目管理及支持工具方面的技能。
  • 5~6年,技术管理:管理4~8名测试工程师,提高任务估算、管理及进度控制能力,完成测试规划并制定测试计划;研究测试的技术手段,保持使用项目管理及支持工具的技能;用大量时间为其他测试工程师提供技术及过程方面的指导;开始于客户打交道并做演示推介。
  • 6~12年,测试管理:管理8名以上测试工程师,负责一个或多个项目的测试工作;与客户打交道并做演示推介;保持使用项目管理及支持工具的技能。
(4)人员的培训
【1】软件测试培训内容分类
  • 测试基础知识和技能培训
  • 测试设计培训、测试工具培训
  • 测试对象——软件产品培训
  • 测试过程培训
  • 测试管理培训
【2】制定测试人员培训计划
  • 是测试计划的一个重要组成部分。
  • 需要管理层的重视,在时间和资源上予以保证。
  • 认真调查和分析测试人员的培训需求。
  • 将培训活动安排在测试任务开始前。
  • “边干边学”模式很可能牺牲质量和效率。
  • 软件测试实习活动在整个培训中占较大比例。
  • 鼓励合作学习,团队演练。
  • 对培训效果要及时评价,发现不足进行改进。

软件测试风险分析

1.软件测试与商业风险

        软件测试是一种用来尽可能降低软件风险的控制措施。软件测试是检测软件开发是否符合计划,是否达到预期的结果的测试。如果检测表明软件的实现没有按照计划执行或与预期目标不符,就要采取必要的改进行动。因此,公司的管理者应该依靠软件测试之类的控制措施来帮助自己实现商业目标。
        软件测试人员必须明白他们的任务之一就是通过测试来评估产品的商业风险,并将结果报告给公司管理者。从这个角度来看,测试人员首先要理解什么是商业风险,并且要以这些风险为重点来制定测试策略。

2.什么事软件风险

        风险的定义为“伤害、损坏或损失的可能性;一种危险的可能或一种冒险事件。”风险涉及到一个事件发生的可能性,涉及到该事件产生的不良后果或影响。软件风险是指开发不成功引起损失的可能性,这种不成功事件会导致公司商业上的失败。

3.软件风险分析

        风险分析是一个对潜在问题识别和评估的过程,及对测试的对象进行优先级划分。风险分析包括两个部分:
    ①发生的可能性——发生问题的可能性有多大。
    ②影响严重性——如果问题发生了会有什么后果。
        风险分析由以下几个步骤组成:首先列出潜在问题,然后对标识的每个潜在问题发生的可能性和影响严重性赋值,进行风险测定。测试人员根据测试分析结果的排列,关注潜在问题,设计与选择测试用例。
        通常风险分析采用两种方法:表格分析法和矩阵分析法。
        通用的风险分析表包括以下几项内容。
    ①风险标识(ID)——标识风险事件的唯一标识。
    ②风险问题——问题发生现象的简要描述。
    ③发生的可能性——可能性值从1(低)~10(高)。
    ④影响的严重性——严重性值从1(低)~10(高)。
    ⑤风险预测值——发生可能性和影响严重性的乘积。
    ⑥风险优先级——风险预测值从高到低的排序。
        软件风险分析表的例子如下表:
        可能性与严重性的乘积产生的风险预测值,决定了风险优先级的排序。预测值越高,优先级别越高,针对该问题的测试就越重要。
        风险矩阵是风险分析得另一种有效方法,测试人员可以根据需要对风险潜在问题的可能性和严重性采用高(1)、中(2)低(3)三个等级来表示,形成一个二维风险矩阵,而风险优先级可用二者值之和来表示。这样,可能存在五个风险等级(即6、5、4、3、2)。
        综上所述,软件风险分析得目的是:确定测试对象、确定优先级,以及测试深度。在测试计划阶段,可以用风险分析的结果来确定软件测试的优先级。对每个测试项和测试用例赋予优先级代码,将测试分为高、中和低的优先级类型,这样可以在有限的资源和时间条件下,合理安排测试的覆盖与深度。

4.软件测试风险

        软件测试的风险是指软件测试过程出现的或潜在的问题,造成的原因主要是测试计划的不充分、测试方法有误或测试过程的偏离,造成测试的补充以及结果不准确。测试的不成功导致软件交付潜藏着问题,一旦在运行时爆发,会带来很大的商业风险。
        测试计划的风险一般指测试进度滞后或出现非计划事件,就是针对计划好的测试工作造成消极影响的所有因素,对于计划风险分析得工作是制定计划风险发生时应采取的应急措施。一些常见的计划风险包括:交付日期、测试需求、测试范围、测试资源、人员的能力、测试预算、测试环境、测试支持、劣质组件、测试工具。
        其中,交付日期的风险是主要风险之一。测试未按计划完成,发布日期推迟,影响对客户提交产品的承诺,管理的可信度和公司的信誉都要受到考验,同时也受到竞争对手的威胁。交付日期的滞后,也可能是已经耗尽了所有的资源。计划风险分析所做的工作重点不在于分析风险产生的原因,重点应放在提前制定应急措施来应对风险发生。当测试计划风险发生时,可能采用的应急措施有:缩小范围、增加资源、减少过程等措施。
        比如,用户在软件开发接近尾声时,提出重要需求变动。
  • 应急措施1:增加资源。请求用户团队为测试工作提供更多的用户支持。
  • 应急措施2:缩小范围。决定在进行后续发布中实现较低优先级的特性。
  • 应急措施3:减少质量过程。在风险分析过程中确定某些风险级别低的特征测试或少测试。
        上述列举的应急措施要涉及到有关方面的妥协:如果没有测试计划风险分析和应急措施处理风险,开发者和测试人员采取的措施比较匆忙,将不利于将风险的损失控制到最小。因此,软件风险分析和测试计划风险与应急措施是相辅相成的。综上所述,计划风险、软件风险、重点测试、不测试,甚至整个软件的测试与应急措施都是围绕“用风险来确定测试工作优先级”这样的原则来构造的。

软件测试成本管理

        有效的测试方法可以识别和评价软件的各种风险,能把这些风险缩小到测试范围内,我们可以承受的风险,并制定测试计划实现这个目标。

1.测试费用有效性

        测试费用的有效性,可以用测试费用——质量曲线(如下图)来表示。随着测试费用的增加,发现的缺陷也会越多,两线相交的地方是过多测试开始的地方,这时,排除缺陷的测试费用超过了缺陷给系统造成的损失费用。

2.测试成本控制

        测试的成本控制目标是使测试开发成本、测试实施成本和测试维护成本最小化。在软件产品开发过程中,各个阶段实施的测试成本并不很重要,有时可以看作是开发成本的一部分。但是,作为产品发布每一新版本而进行的重复性的测试所需的成本是主要考虑的问题。测试实施成本组成部分包括:测试准备成本、测试执行成本和测试结束成本。
(1)测试准备成本控制
        测试准备成本控制的目标是使时间消耗总量、劳动力总量,尤其是准备工作所需的熟练劳动力总量最小化。准备工作一般包括:硬件配置、软件配置、测试环境建立,以及测试环境的确定等。
(2)测试执行成本控制
        测试执行成本控制的目标是使总执行时间和所需的测试专用设备尽可能地减少。执行时间要求操作和用户进行手工操作执行测试时间应尽量减少,同时对劳动力和所需的技能也要尽量减少。如果需要重新测试,不同的选择会有不同的成本控制效果,重新测试的决策是在成本与风险的矛盾中进行的。
        完全重新测试:将测试全部重新执行一遍,将风险降至最低,但加大了测试执行的成本。
        部分重新测试:有选择地重新执行部分测试,能减少执行成本,但同时加大了风险。
        对部分重新测试进行合理的选择,将风险降至最低,而成本同样会很高,必须将其与测试执行成本进行比较,权衡利弊。利用测试自动化,进行重新测试,其成本效益是较好的。
        部分重新测试选择方法有两种:
    ①对由于程序变化而受到影响的每一部分进行重新测试;
    ②对与变化有密切和直接关系的部分进行重新测试。
        其中,第一种办法风险要小一些,而第二种是一种主观制定的办法,是建立在对软件产品十分了解的基础上的。一般地,选择重新测试的策略建立在软件测试错误的多少(即软件风险的大小)与测试的时间、人力、资源投入成本的大小之间的折中基础上。
(3)测试结束成本控制
        测试结束成本的控制是进行测试结果分析和测试报告编制、测试环境的消除与恢复原环境所需的成本,使所需的时间和熟练劳动力总量减少到最低限度。
(4)降低测试实施成本
        测试准备环境的配置是十分重要的,要求与软件的运行环境相一致。测试环境应建立在固定的测试专用硬软件及网络环境中,尽可能使用软件和测试环境配置自动化。
        测试实施尽可能采用自动化的测试工具,减少手工辅助测试。若测试执行需要人工,最好是请初级技术人员,而不是测试工程师。测试工程师一般是作为测试项目经理。
        测试结束编制测试报告时,测试结果与预期结果的比较采用自动化方法,以降低分析比较成本。
        测试自动化的方法主要有:使用测试工具;测试用例的自动化执行;测试文档编制的模板自动化生成。
(5)降低测试维护成本
        降低测试维护成本,与软件开发过程一样,加强软件测试的配置管理,所有测试的软件样品、测试文档(测试计划、测试说明、测试用例、测试记录、测试报告)都应置于配置管理系统控制之下。降低测试维护工作成本主要考虑:
  • 对于测试中出现的偏差要增加测试;
  • 采用渐进式测试以适应新变化的测试;
  • 定期检查维护所有测试用例,以获得测试效果的连续性。
        保持测试用例效果的连续性是重要的措施,有以下几个方面:
  • 每一个测试用例都是可以执行的,即被测产品,功能上不应有任何变化;
  • 基于需求和功能的测试都应是适合的,若产品需求和功能发生小的变化,不应使测试用例无效;
  • 每一个测试用例不断增加使用价值,即每一个测试用例不应是完全冗余的,连续使用应是成本效益高的。

3.质量成本

        测试是一种带有风险性的管理活动,减少企业在未来因为产品质量低劣而花费不必要的成本。
(1)质量成本要素
【1】一致性成本
        一致性成本是指用于保证软件质量的支出,包括预防成本和测试预算,如测试计划、测试开发、测试实施费用。测试预算被称为审查费:
【2】非一致性成本
        非一致成本是由出现的软件错误和测试过程故障(如延期、劣质的测试发布)引起的。这些问题会导致测试返工、补测、延迟。追加测试时间和资金是一种由于内部故障引起的非一致成本。非一性成本还包括外部故障(软件遗留错误影响客户)引起部分。这些成本还包括技术支持小组预算,错误修正花费、产品收回、赔偿和销售成本。

         一般情况下,外部故障非一致成本要大于一致性成本与内部故障非一致成本之和,即:

(2)质量成本计算
        质量成本=一致性成本+非一致性成本,即:

4.缺陷探测率(DDP Defect Detection Percentage)

        缺陷探测率DDP是另一个衡量测试工作效率的软件质量成本的指标:

         其中,为测试者发现的错误数;为客户发现并反馈技术支持人员进行修复的错误数。

        缺陷探测率越高,也就是测试者发现的错误多,发布后客户发现的错误就越少,降低了外部故障不一致成本,达到了节约总成本的目的,可获得较高的测试投资回报率(ROI)。因此,缺陷探测率是衡量测试投资回报的一个重要指标。

5.测试投资回报举例

        下面,通过一个案例来说明质量成本的概念。假设对一个开发的客户管理软件CRM进行测试。属于质量预防方面的一致性成本只考虑软件测试的投资,把发布之前和之后发现及修改的错误看成非一致性成本,假设发现的错误为300个,故障成本已知,测试过程的估算如下。
        各阶段花费在发现及修改错误的成本假设如下:
    ①在开发过程单元测试阶段,软件开发人员发现及修改一个错误需要50元;
    ②建立独立的测试进行集成和系统测试,测试人员发现错误,开发人员修改后,测试人员再确认,一个错误需要300元;
    ③在产品发布后,由客户发现,报告技术支持人员、相关开发人员修改,测试组再进行回归测试,一个错误需要2000元。
        第1种情况,开发单位未建立独立测试队伍,由开发人员进行测试,发现100个错误,而产品发布后客户发现错误200个,只存在故障成本构成的总成本为405000元,缺陷探测率为33.30%。
        第2种情况,开发单位建立了独立测试队伍,进行手工测试。投资预算人员费用为60000元,测试环境使用费为8000元,测试投资(一致性成本)为68000元;除了开发过程中开发人员发现并修改100个错误外,测试过程中测试人员发现错误150个,而产品发布后客户发现50个错误。总质量成本下降到218000元(如表4-2),手工测试总质量成本节约了187000元,即为利润。投资回报率(ROI)为275%,缺陷探测率为83.3%。

         第3种情况,开发单位在独立测试中,采用自动化测试工具,投资中增加10000元的工具使用费,测试投资为(一致性成本)78000元。由于使用测试工具,测试人员在测试中发现错误增加到190个,在产品发布后,客户发现错误下降到10个。总质量成本下降到160000元,比未建立独立测试前节约了245000元。投资回报率为314%,缺陷探测率为96.7%

         综上所述,建立独立的软件测试,选择好的测试方案,不但软件缺陷的探测率高,有效地控制软件的风险,提高软件质量,而且降低了软件的质量成本,测试的投资回报率也将随着明显提高。

原文地址:https://www.cnblogs.com/Archer-Xin/p/12437118.html