如何看待软件测试在保证产品质量中所起的作用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何看待软件测试在保证产品质量中所起的作用?相关的知识,希望对你有一定的参考价值。

1.如何看待软件测试在保证产品质量中所起的作用?

2.谈谈测试的原有目标?

3.需求分析、系统设计所存在的问题在软件缺陷中占有较大比例?

4.测试存在的误区对测试工作可能会产生什么影响?

1. 软件测试基础(P1-3)
测试基础知识的学习目标
本章的学习目标:完成下面模块(module)的学习后,将明确能做什么。
1.1测试的必要性
 通过具体的例子,来描述软件中的缺陷(defect)会以什么样的方式损害个人、损害环境或者损害公司利益。
 区分引起缺陷的根本原因及其影响之间的区别。
 通过举例的方式说明为什么需要测试。
 描述为什么测试是质量保证(quality assurance)的一部分,通过举例说明测试是如何来提高软件质量的。
 理解术语错误(mistake)、缺陷、失效(failure)以及相应的术语错误(error)和bug之间的区别。
1.2 什么是测试 (K2)
 认识测试的共同目标。
 描述测试作为发现缺陷的一种手段,测试在软件开发、维护和运行中的目的,同时通过测试,可以增强对被测软件的信心并获得一些相关的信息,从而用来预防缺陷。
1.3 测试的基本原则
 说明测试的基本原则。
1.4 基本的测试过程
再次认识从计划到测试结束过程中测试的基本活动,以及在每个活动中的主要任务(K1)。
1.5 测试的心理学
 认识测试的成功与否,会受测试心理因素的影响:
 清楚的目标;
 自己测试和独立测试之间的平衡;
 认识到谦恭的沟通和缺陷反馈在测试中的作用。
 对比测试员(tester)和开发员(developer)的心理差异。
1.1 为什么需要测试 (P4-5)
术语
缺陷(bug)、缺陷(defect)、错误(error)、失效(failure)、故障(fault)、错误(mistake)、质量(quality)、风险(risk)、软件(software)、测试(testing)。
1.1.1 软件系统的状况
在当今社会,软件系统(system)越来越成为生活中不可或缺的一部分,包括从商业应用(比如银行系统)到消费产品(比如汽车)各个领域。然而,很多人都有这样的经历:软件并没有按照预期进行工作。软件的不正确执行可能会导致许多问题,包括经济的损失、时间的浪费和商业信誉的丢失等等,甚至导致人身伤害和死亡。
1.1.2 引起软件缺陷的原因
所有的人都会犯错误。该错误error会成为设计的代码、软件、系统和文档中的缺陷。当存在缺陷的代码被执行时,系统就可能无法执行期望的指令(或者做了不应该执行的指令),从而引起软件失效(故障)。虽然软件、系统和文档中的缺陷可能会引起失效,但并不是所有的缺陷都会这样。
产生缺陷的原因是多种多样的:人们本身容易犯错误、时间的压力、复杂的代码、复杂的系统架构、技术的革新、或者系统之间的配合工作等。
失效也可能是由于环境条件引起的:放射、电磁辐射和污染等都有可能引起硬件的故障,或者由于硬件条件的改变而影响软件的执行。
※ error(错误) → 缺陷(fault,bug) → 故障
1.1.3 在软件开发、维护和运行中测试的角色
对软件系统和文档进行严格的测试,可以减少软件系统在运行环境中的风险,假如在软件正式发布之前发现和修正了缺陷,就可以提高软件系统的质量。
进行软件测试也可能是为了满足合同和法律法规的需求,或者是为了满足行业标准。
1.1.4 测试和质量
通过测试,根据发现的缺陷,就可能发现软件系统在功能(functional)和非功能(non-functional)需求方面的缺陷,对软件质量(software quality)进行评判。飞功能需求包括:可靠性(reliability)、可用性(usability)、效率(efficiency)和可维护性(maintainability)等方面,关于非功能测试方面的更多信息,可以参考第二章。更多关于软件特征的信息,可以参考[ Software Engineering - Software Product Quality (ISO9126) ]。※ISO9126对应与国内规格:JIS-X0129。
当测试发现很少或者没有发现缺陷的时候,就会对软件的质量充满信心。一个设计正确、合理的测试过程完成并顺利通过,可以降低整个系统存在问题的风险。而对测试过程中发现的缺陷进行了修正,则软件系统的质量就会提高。
我们应该从以前的项目中总结经验教训。通过分析在其他项目中发现的缺陷和引起缺陷的根本原因,我们就可以改进测试过程(process)。相继地,过程的改进又可以预防相同的缺陷再次发生,从而提高以后系统的质量。
测试应该作为质量保证的各种作业中(例如:开发标准、教育、缺陷分析)的不可或缺的一部分。
1.1.5 测试是否充分
测试应该进行到哪种程度,取决于技术、产品、项目风险的水平,以及在时间和预算等方面项目上的限制。 (风险将在第5章进行详细描述)
测试需要给利益相关者提供足够的信息,帮助他们决定是否发布被测的软件或系统,是否继续进行下阶段的开发或直接将产品交给用户。

追求完全的品质,从成本的角度来看没有效果

缺陷成本:为了修正而产生的成本、产生不良结果的成本
Joseph M. Juran 1.テストの必要性(3/3
1.2 什么是测试(P7-8)
术语
代码(code)、调试(debugging)、(软件)开发(development)、需求(requirement)、评审(review)、测试依据(test basis)、测试用例(test case)、测试(testing)、测试目标(test objectives)。
背景
在一般人的理解当中,测试活动只包含了运行测试,也就是执行软件。但实际上这只是测试的一部分,而不是测试的所有活动。
测试的活动包含了测试执行之前和之后的一些活动,包括计划(planning)和控制(control)、选择测试条件(test condition)、设计测试用例(test case)、检查测试结果(result)、评估完成准则(completion criteria)、报告测试过程(test process)及被测系统、测试结束或总结。测试同时也包括文档的评审(review)(包括代码)和静态分析(static analysis)。
动态测试(dynamic testing)和静态测试这两种手段都可以达到相似的目标,即以提供信息来改进被测试软件系统的质量,以及改善开发和测试的过程。
􀂋 测试执行前的作业
- 计划、测试条件、测试用例设计
􀂋 测试执行时的作业
- 执行结果的Check、完了基准的验证、测试结果报告
􀂋 测试执行后的作业
- 软件的整理
􀂋 通过整体的作业
- 项目控制、评审
※ 在下一节的《基本的测试流程》中,会将测试执行前的作业分为计划和设计,当作5个流程来定义。

不同的测试具有不同的测试目标:
 发现缺陷;
 获取对产品质量的信心,以及提供信息;
 预防缺陷。
在软件生命周期早期进行测试用例的设计,可以帮助避免将缺陷引入代码中。同时文档的评审(例如需求文档)也可以预防将缺陷引入代码。
不同的测试阶段,需要考虑不同的测试目标。比如,在开发中的测试里,如单元测试(unit testing)、集成测试(integration testing)和系统测试(system testing)等,测试的主要目标是尽可能的发现失效,从而识别和修正尽可能多的缺陷。在验收测试(acceptance testing)中,测试的主要目标是用来确认系统是否按照预期工作,从而在系统是否满足需求方面获取信心。而在有些情况下,测试的主要目标是对软件的质量进行评估(不是为了修正缺陷),从而为利益相关人提供这样的信息:在给定时间内发布的系统版本所存在的风险。而保守测试 (维护测试maintenance testing)通常是为了验证在开发过程中的变更是否引入新的缺陷。在运行测试阶段,测试的主要目标是为了评估系统的特征,比如可靠性或可用性等。
必须明确,调试和测试是两个不同的概念。测试可以发现由于软件存在的缺陷引起的失效。而调试是一种开发活动,用来识别引起缺陷的原因,修改代码以及验证是否正确的修改了软件的缺陷。随后由测试员进行的确认测试(confirmation testing)是为了确认修改的代码已经解决了失效问题。每个活动的职责是截然不同的,即测试员进行测试,开发人员进行调试。
1.3 测试的基本原则
术语
穷尽测试(exhaustive testing)。
原则
在过去40年中,软件测试界提出了很多的测试原则,并且提供了适合所有测试的一些共同的测试指南。
原则1 - 测试显示缺陷的存在
测试可以显示缺陷(defect)的存在,但不能证明系统不存在缺陷。测试可以减少软件中存在缺陷的可能性,但即使测试没有发现任何缺陷,也不能证明软件或系统是完全正确的。
原则2 - 穷尽测试是不可能的
除了小型项目,进行完全(各种输入和前提条件的组合)的测试是不现实的。通过运用风险管理(risk management)和不同系统功能的测试优先级,来确定测试的关注点,从而替代穷尽测试。
原则3 - 测试尽早介入
在软件或系统开发生命周期中,测试活动应该尽可能早的介入,并且应该将关注点放在已经定义的测试目标(test objective)上。
原则4 - 缺陷集群性
版本发布前进行的测试所发现的大部分缺陷和软件运行失效是由于少数软件模块引起的。
原则5 - 杀虫剂悖论
同样的测试用例一遍一遍重复进行测试,最后将不再能够发现新的缺陷。为了克服这种杀虫剂悖论,测试用例需要经常性的评审和修改,同时需要不断增加新的不同的测试用例来测试软件或系统的不同部分,从而发现潜在的更多的缺陷。
原则6 - 测试活动依赖于测试内容
针对不同的测试内容,进行的测试活动也是不同的。比如,对关注安全的软件进行测试,与一般的商业软件测试的重点是不一样的。
原则7 - 0缺陷的谬论
假如系统无法使用,或者系统不能完成客户的需求和期望,发现和修改缺陷是没有任何帮助的。

「所有的模式都是错误的。但是,有的模式能够起到作用」

原则上,是将现实世界抽象化、故意让很多信息欠缺。
欲将软件开发和测试这种极富多样性的活动,用几个原则来进行说明,
本身就不太可能。但是,这种原则对于理解测试的重要一面,确实有着
非常重要的作用。总而言之,工具是可以使用的。

1.4 基本的测试过程
术语
确认测试(confirmation testing)、出口准则(exit criteria)、事件(incident)、回归测试(regression testing)、测试依据(test basis)、测试条件(test condition)、测试覆盖(test coverage)、测试数据(test data)、测试执行(test execution)、测试日志(test log)、测试计划(test plan)、测试策略(test strategy)、测试总结报告(test summary report)、测试件(testware)。
背景
测试最显而易见的活动是测试的执行。但是为了提高效率,在测试计划中,同样需要保留比较多的时间用于计划测试活动、设计测试用例、准备测试的执行和评估测试的状态。
基本的测试过程主要由下面一些活动组成:

 1 计划和控制;
 2 分析和设计;
 3 实现和执行;
 4 评估出口准则和测试报告;
 5 测试结束活动。

虽然上面这些活动在逻辑上是有连续的,但在整个测试过程中它们可能会重叠或同时进行。
1.4.1 测试计划和控制阶段
测试计划的主要活动是:识别测试的任务、定义测试的目的;以及为实现测试目的而决定测试作业的式样。
测试控制是持续进行的活动:通过对测试进展和测试计划之间的比较,报告测试的状态,包括与计划之间存在的偏差。测试控制包括在必要的时候采取必要的措施来满足测试的任务和目标。需要在项目的整个生命周期中对测试活动进行监控,以达到控制测试过程的目的。同时,测试计划的制定也需要借鉴以前项目测试监控活动的经验和有用信息。
测试计划阶段主要任务:
 确定测试的范围和风险,识别测试的目的;
 确定测试方法:测试技术、测试项(test item)、测试覆盖(test coverage)、识别和联系相关的测试团队和测试件;
 确定测试需要的资源:人员、测试环境(test environment)和计算机等;
 贯彻测试方针和策略;
 计划测试分析和测试设计任务的时间进度;
 计划测试作成、执行和验证的时间进度;
 确定测试的结束(出口)准则。
测试控制阶段主要任务:
 测量和分析结果;
 监控和记录测试进展、测试覆盖和测试出口准则的文档化;
 修改软件的缺陷;
 做出决定。
1.4.2 测试分析和设计阶段
测试分析和设计是将抽象的测试目标转化为实实在在的测试条件和测试设计的一系列活动。
测试分析和设计阶段的主要任务:
1. 评审测试依据(比如需求、系统架构、设计和接口说明等)。
2. 识别测试条件或测试需求(test requirement),根据测试项、详细规格说明、系统行为和结构分析得到必要的测试条件和数据。
3. 设计测试用例。
4. 评估系统和需求的可测试性(testability)。
5. 规划测试环境的搭建和确定测试需要的基础设施(infrastructure)和工具。

1.4.3 测试实现和执行阶段
测试实现和执行是将测试条件转化为测试用例、测试件的一系列活动,并进行测试环境的搭建。
测试实现和执行阶段的主要任务:
1. 测试用例的开发和确定它们的优先级,创建测试数据,描述测试的具体步骤,同时也可以准备测试用具(test harnesses)和设计测试脚本(test script)。
2. 根据测试用例建立测试套件(test suite),以提高测试执行的效率。
3. 确认已经正确搭建了的测试环境。
4. 根据计划的执行顺序,通过手工或使用测试执行工具(test execution tool)来执行测试用例。
5. 记录测试执行的结果,以及被测软件的标识和版本、使用的测试工具和测试件。
6. 将实际结果和预期结果进行比较。
7. 对实际结果和预期结果之间的差异,作为缺陷上报,并且分析这些缺陷以确定引起缺陷的原因(代码缺陷、具体测试数据缺陷、测试文档缺陷、或测试执行的方法有错误等)。
8. 缺陷修正后,重新进行测试活动。比如通过再次执行在上个版本中失败的用例来确认缺陷是否已经被修正(确认测试)。执行修正后的测试用例或执行一些测试用例来确保缺陷的修正没有在软件中引入新的问题后或没有引起其他的缺陷(回归测试)。
テストベース、テストスイート、テストケース、テストプロシージャ:

1.4.4 评估出口准则和测试报告阶段
评估出口准则阶段是将测试的执行结果和已经定义的测试目标进行比较的活动。这个活动在各个测试级别(test level)上都需要进行。
评估测试出口准则的主要任务:
1. 将测试结果记录与测试计划作业中定义的终了基准相对比。
2. 判断是否需要进行更多的测试,或是否需要更改测试的出口准则。
3. 为利益相关者提供一个测试总结报告。

Bug管理图
1.4.5 测试结束阶段
测试结束阶段从完成的测试活动中收集资料来巩固测试经验,收集测试件、影响测试的因素和其他数据。比如什么时候软件系统可以发布?什么时候项目测试结束或取消?什么时候达到里程碑?或者何时可以发布一个维护版本等?
测试结束阶段的主要任务:
 检查提交了哪些计划的交付物(deliverable)、缺陷报告是否关闭、提交的变更记录是否仍处于开放状态、以及系统的验收文档状态等等。
 归档测试件(testware)、测试环境和测试基础设备(test infrastructure),以备将来的项目使用。
 移交测试件到维护部门。
 分析学到的经验教训,作为将来项目和版本的参考及用来改进测试成熟度(test maturity)。
1.5 测试的心理学
术语
独立测试(independent testing)。
背景
在测试和评审中使用的思想方法,与在项目分析和开发中使用的方法不同。开发员可以测试他们自己写的代码,但这与测试员职责之间是存在区别的,明白这一点,测试员的独立测试需要提供专门的工作量,并且具有以下优点:通过专业的培训和利用专业的测试资源,实现独立的测试;独立测试可以应用于任何测试级别。
一定程度的独立测试(可以避免开发人员对自己代码的偏爱),可以更加高效的发现软件缺陷和软件存在的失效。但独立测试不是完全的替代物,因为开发人员也可以高效的在他们的代码中找出很多缺陷。可以定义不同级别的独立测试:
 测试用例由软件本身编写的人员来设计(低级别的独立测试)。
 测试用例由开发小组中的其他成员来设计。
 测试用例由组织内的其他小组成员来设计(独立的测试小组)。
 测试用例由来自其他组织或其他公司的成员来设计(测试外包)。
测试的目标驱使着小组成员和项目的活动。小组成员将根据管理层或其他利益相关者设定的目标对他们的计划进行调整,比如需要发现更多的缺陷,或确认软件是否可以正常工作。因此,对测试的目标进行清晰的设定是非常重要的。
测试过程中发现的失效,可能会被看成是测试员对产品的责难或对产品开发者的不恭。因此,测试通常被认为是破坏性的活动,即使它对于管理产品风险是非常有建设性作用的。在系统中发现失效需要测试员具有一颗好奇的心、专业的怀疑态度、一双挑剔的眼睛、探究根底的精神、与开发人员良好的沟通能力以及对常见的错误进行判断的经验。
假如可以用建设性的态度对发现的缺陷或失效进行沟通,就可以避免测试员、分析人员和开发设计者之间的不愉快。这个道理同样适用于文档的评审过程。
在以建设性的方式讨论缺陷、进度和风险时,测试员和测试的负责人都需要具有良好的人与人之间沟通的能力。通过良好的沟通,要让软件代码或文档的作者明白,发现缺陷的信息可以帮助他们来提高他们的技术水平。在测试阶段发现和修复缺陷可以在项目后期节省时间和金钱,而且可以减少项目的风险。
沟通方面的问题经常会发生,特别是当测试员只是作为不受欢迎的缺陷消息的传递者的时候。然而可以使用下面的一些建议和方法来改善测试员和其他小组成员之间的沟通和相互关系:以合作而不是争斗的方式开始项目,时时提醒项目的每位成员:共同目标是追求高质量的产品。
对产品中发现的问题以中性的和以事实为依据的方式来沟通,而不要嘲笑引入这个问题的小组成员或个儿。比如,客观而实际的描写缺陷报告和评审(review)发现的问题。
尽量理解其他成员的感受,以及他们为什么会有这种反应。
确信其他成员已经理解你的描述,反之亦然。
参考技术A 我是做软件测试工作的,仁者见仁智者见智,水平有限,就你提出的问题作一个简单的回答吧,一是期望对你的问题有所帮助,二也是对我自己的提高。
1、我对你的第一个问题表示质疑,你认为测试是保证软件质量吗?能保证吗?
测试只能提高软件质量,做不到保证,bug是永远存在的,测试工作可以让这
量减少、降低严重问题的存在;软件过程才可能保证它的质量,不是软件测
试,所以这一点我要明确出来。一个软件的质量好坏不依赖于测试者,测试
再高明,软件设计本身的水平面要品质不高,巧妇也有无米之炊的无奈。

2、测试的原本目标就是发现缺陷,挑毛病,工作性质和开发人员相反,但目标
是一致的,都是为了使软件更完美、更稳定。

3、盖房子的时候,先打地基,地基如果有毛病(如不够深、不平),那以后房
盖起来了住个几年,你会发现楼上的梁会发裂,渗水,然后越来越让人担
忧。这时你要修复怎么办,再怎么补都不放心,因为地基有缺陷啊!这个道
和第三个问题是一模一样的,修复的代价太大太大了!在测试中有一个规
则,问题越早解决代价越小,单元测试发现的问题解决只要1块钱,等到集成
测试再解决,要10块钱,你认为比例有多大?需求分析系统设计是源头,重
中之重,这个比例我认为要在上面我举例中增加80%,就是说它会导致你在编
码阶段多付出8块钱。前期可能不觉得,越到后期将发现非常头痛,这也是我
的经验之谈,没有太多的科学性哦。

4、对于测试员,首先是效率减低;对于项目而言,成本增加了。瞧病就错了
诊,影响大么?将导致后面的百分之八十的事情白做了,百分之二在长远
目标中有后期帮助,同时证明另外百分之八十步入歧途。这就要在测试设计
的时候要仔细全面,但是这种事情多少都避免不了,早一点发现并改变,也
是很重要的,另外多布置一些小结会议,有利到测试的工作方向和目标。

usfo,希望我的回答对你稍有帮助哦。本回答被提问者采纳
参考技术B 第一二个问题我一起来回答吧!测试从技术保证软件质量,QA从流程上保证软件质量。
第三个问题莫名其妙,我不知道你要问什么?需求分析形成软件需求规格说明书(SRS),软件缺陷占有的比例这个问题你就是找盖茨来都不能回答你这个问题,只能说普通情况下,修复缺陷的比例多少属于正常范围。
第四,无穷无尽的回归测试,永远也写不完的测试计划,,方案,用例,导致测试无法执行。如果是这样,开发人员可能要集体下课了!
参考技术C 1、软件测试在保证产品质量中所起的作用,就是在产品发布前提前发现问题解决问题,节约产品发布后的维护费用。
2、软件测试的原有目标也就是为了减少产品发布后的客户投诉,现在说法有好多,可以说叫做节约成本,提高收益,还可以保证产品质量。。。。。目的其实就这么一个。。。。
3、问题有点笼统,但是系统设计如果出现问题,将会对整个测试工作都产生影响,这个不敢妄下结论。
4、测试存在的误区对测试工作的影响,缺陷的露出啦,这个是最直接的表现。
参考技术D 北大测试在北京是最早开展 软件测试培训的机构,合作的企业据说已经达到了300多家,他们有这样的实力才敢说入学签订包就业的合同的。

以上是关于如何看待软件测试在保证产品质量中所起的作用?的主要内容,如果未能解决你的问题,请参考以下文章

如何编写测试用例

未来中国企业信息化主要呈现出五大特征

软件测试的目的和任务

函数如何保证代码质量

函数如何保证代码质量

数字证书