第一章绪论
1.1软件测试概念和目的
1.1.1软件测试的概念
软件测试是为了发现错误而执行程序的过程,测试只能出程序中的错误,而不能证明程序无错。也就是说软件测试就是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度(correctness)、完全度(completeness)和质量(quality)的软件过程;是SQA(software quality assurance)的重要子域。
1.1.2软件测试的目的
Grenford J.Myers曾对软件测试的目的提出过以下观点:
(1)测试是为了发现程序中的错误而执行程序的过程;
(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;
(3)成功的测试是发现了至今为止尚未发现的错误的测试。
然而,这种观点指出测试是以查错误为中心,而不是为了演示软件的正确功能.但是只从字面意思理解,可能会产生误导,认为发现错误是软件测试的唯一目的,查不出错误的测试就是没有价值的测试,实际上并非如此!
(1)测试并不仅仅是为了出错误.通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进;
(2)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性;
(3)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法。
软件测试方法与测试过程的分析与研究
2
1.1.3软件测试框图说明
图1—1 软件测试框图
1.2 软件测试原则和分类
1.2.1 软件测试的基本原则
为了进行有效的测试,测试工程师必须掌握软件测试的基本原则,软件测试的几大原则:
1.所有的测试都应追溯到用户需求;
2.软件开发人员即程序员应当避免测试自己的程序;
3.应尽早地和不断地进行软件测试;
4.对测试用例要有正确的态度;
5.人以分,物以类聚,软件测试也不例外,一定要充分注意软件测试中的集现象,即“Pareto原则”;
6.严格执行测试计划,排除测试的随意性,以避免发生疏漏或者重复无效的工作;
7.应当对每一个测试结果进行全面检查;
8.妥善保存测试用例、测试计划、测试报告和最终分析报告,以备回归测试及维护之用。
在遵守以上原则的基础上进行软件测试,可以以最少的时间和人力出
软件中的各种缺陷,从而达到保证软件质量的目的。
第一章绪论
3
研究方法有哪些
1.2.2 软件测试的分类
软件测试的技术和方法是多种多样的,对于软件测试技术,可以从不同的角度加以分类。
1.从是否关心软件内部结构和具体实现的角度(即按测试方法)划分为白盒测试和黑盒测试。
2.从是否执行程序的角度(即按测试方式)划分为静态测试和动态测试。
3.从软件开发的过程按阶段(即按测试过程)划分为单元测试、集成测试、确认测试、系统测试和验收测试。这四个过程相互独立且顺序相接,依次进行。
4.从用户的需求(即测试目的)划分为功能测试、健壮性测试、接口测试和性能测试。
此外,按照测试目的划分还包括强度测试、压力测试、用户界面测试、安全测试、可靠性测试、安装\反安装测试、文档测试、恢复测试和兼容性测试。
1.3软件测试的复杂性与经济性
1.3.1软件测试的复杂性
设计测试用例是一项细致并需要高度技巧的工作,稍有不慎就会顾此失彼,发生不应有的疏漏。不论是黑盒测试方法还是白盒测试方法,由于测试情况数量巨大,都不可能进行彻底的测试。所谓彻底测试,就是让被测程序在一切可能的输入情况下全部执行一遍。通常也称这种测试为“穷举测试”。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。“白盒”法是穷举路径测试,贯穿程序的独立路径数是天文数字,但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。e.w.dijkstra的一句名言对测试
软件测试方法与测试过程的分析与研究
4
的不彻底性作了很好的注解:“程序测试只能证明错误的存在,但不能证明错误不存在”。
在实际测试中,穷举测试工作量太大,实践上行不通,这就注定了一切实际测试都是不彻底的。当然就不能够保证被测试程序中不存在遗留的错误。
1.3.2软件测试的经济性
软件工程的总目标是充分利用有限的人力和物力资源,高效率、高质量地完成测试。为了降低测试成本,选择测试用例时应注意遵守“经济性”的原则。第一,要根据程序的重要性和一旦发生故障将造成的损失来确定它的测试等级;第二,要认真研究测试策略,以便能使用尽可能少的测试用例,发现尽可能多的程序错误。掌握好测试量是至关重要的,一位有经验的软件开发管理人员在谈到软件测试时曾这样说过:“不充分的测试是愚蠢的,而过度的测试是一种罪孽”。测试不足意味着让用户承担隐藏错误带来的危险,过度测试则会浪费许多宝贵的资源。
第二章软件测试基本技术  5
第二章软件测试基本技术
2.1软件测试技术概述
通常人们把软件测试技术归结为两大类:白盒测试和黑盒测试。白盒测试又可分为静态测试和动态测试。静态测试技术不要求在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试。它主要包括代码检查法、静态结构分析法等;动态测试技术是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现程序错误的过程。它主要包括程序插桩、逻辑覆盖、基本路径测试等。黑盒测试一般可分为功能测试和非功能测试两大类;功能测试主要包括等价类划分、边值分析、因果图法、错误推测、功能图法等,主要用于软件确认测试;非功能测试主要包
括使用性能测试、性能测试、强度测试、兼容性测试、配置测试、安全测试等。对任何工程产品都可以使用白盒测试和黑盒测试两种方法之一进行测试。
2.2 白盒测试技术
2.2.1白盒测试的概述
白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。
这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异。白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。逻辑覆盖测试分支结构,循环覆盖测试循环结构。其中逻辑覆盖代码的覆盖深度是不同的,从覆盖源程序语句的详尽程度分析包括语句覆盖、判定覆盖、条件覆盖、