资源预览内容
第1页 / 共580页
第2页 / 共580页
第3页 / 共580页
第4页 / 共580页
第5页 / 共580页
第6页 / 共580页
第7页 / 共580页
第8页 / 共580页
第9页 / 共580页
第10页 / 共580页
亲,该文档总共580页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
软件测试,软件测试的目的和原则 软件测试的重要性 错误的分类 软件测试用例设计 软件测试的过程与策略 软件测试种类 程序的静态测试 程序调试,GUI测试 文档测试 面向对象系统的测试 客户/服务器系统的测试 WEB系统的测试 RUP中的测试工作流,软件测试的目的和原则,软件测试的目的 软件测试的原则 软件测试的对象 测试信息流 测试与软件开发各阶段的关系,软件测试的目的,基于不同的立场,存在着两种完全不同的测试目的。 从用户的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。 从软件开发者的角度出发,则希望测试成为表明软件产品中不存在错误的过程,验证该软件已正确地实现了用户的要求,确立人们对软件质量的信心。,Myers软件测试目的,(1) 测试是程序的执行过程,目的在于发现错误; (2) 一个好的测试用例在于能发现至今未发现的错误; (3) 一个成功的测试是发现了至今未发现的错误的测试。,换言之,测试的目的是 想以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷。如果我们成功地实施了测试,我们就能够发现软件中的错误。 测试的附带收获是,它能够证明软件的功能和性能与需求说明相符合。 实施测试收集到的测试结果数据为可靠性分析提供了依据。 测试不能表明软件中不存在错误,它只能说明软件中存在错误。,软件测试的原则,1. 测试计划可以在需求模型一完成就开始,详细的测试用例定义可以在设计模型被确定后立刻开始。因此所有测试可以在任何代码被产生前进行计划和设计。 应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。 2. 所有的测试都应追溯到用户需求。软件测试的目标在于揭示错误,而最严重的错误(从用户角度看)是那些导致程序无法满足需求的错误。,3. 测试用例应由测试输入数据和对应的预期输出结果这两部分组成。 4. 程序员应避免检查自己的程序。 5. 在设计测试用例时,应包括合理的输入条件和不合理的输入条件。 6. 测试应从“小规模”开始,逐步转向“大规模”。从单元测试到组装测试再到系统测试 7。穷举测试是不可能的,然而充分覆盖程序逻辑,并确保程序设计中使用的所有条件是有可能的。,软件测试的原则,8. Pareto原则应用于软件测试。Pareto原则暗示着测试发现的错误中80%很可能起源于程序模块中20%。因此应集中精力孤立有疑点的模块,对其进行彻底测试,这对测试的安排很重要。 9. 充分注意测试中的群集现象。经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。 10. 严格执行测试计划,排除测试的随意性。应当对每一个测试结果做全面检查。妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。,软件测试的原则,软件测试的对象,软件测试并不等于程序测试。软件测试应贯穿于软件定义与开发的整个期间。 需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应成为软件测试的对象。,为把握软件开发各个环节的正确性,需要进行各种确认和验证工作。 确认(Validation),是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。 需求规格说明确认 程序确认 (静态确认、动态确认) 验证(Verification),试图证明在软件生存期各个阶段,以及阶段间的逻辑协调性、完备性和正确性。,测试信息流,测试信息流,软件配置:软件需求规格说明、软件设计规格说明、源代码等; 测试配置:测试计划、测试用例、测试程序等; 测试工具:测试数据自动生成程序、静态分析程序、动态分析程序、测试结果分析程序、以及驱动测试的测试数据库等等。,测试结果分析:比较实测结果与预期结果,评价错误是否发生。 排错(调试):对已经发现的错误进行错误定位和确定出错性质,并改正这些错误,同时修改相关的文档。 修正后的文档再测试:直到通过测试为止。,通过收集和分析测试结果数据,对软件建立可靠性模型 利用可靠性分析,评价软件质量: 软件的质量和可靠性达到可以接受的程度; 所做的测试不足以发现严重的错误; 如果测试发现不了错误,可以肯定,测试配置考虑得不够细致充分,错误仍然潜伏在软件中。这些错误最终不得不由用户在使用中发现,并在维护时由开发者去改正。但那时改正错误的费用将比在开发阶段改正错误的费用要高出40倍到60倍。,测试与软件开发各阶段的关系,软件开发过程是一个自顶向下,逐步细化的过程 软件计划阶段定义软件作用域 软件需求分析建立软件信息域、功能和性能需求、约束等 软件设计 把设计用某种程序设计语言转换成程序代码,测试过程是依相反顺序安排的自底向上,逐步集成的过程。,返,传统测试过程,建立,设计,测试,测试生命周期,建立 1,建立 2,建立 3,建立 4,用户改进迭代,测试,测试,测试,测试,测试需要尽早的开始,设计,无须 “冻结” 规格,测试生命周期,测试生命周期,测试生命周期,测试生命周期,测试生命周期,测试计划 定义测试项目的过程,以便测试项目能被正确的度量和控制。 包括测试需求,测试策略,测试资源和测试计划,测试生命周期,测试设计 为了最有效的验证测试需求被覆盖,定义自动的测试,测试生命周期,测试开发 在测试设计期间已被定义,创建或获得自动的测试过程.,测试生命周期,测试执行 运行与被测试应用的软件构造相对应的测试过程集,并记录结果日志,包括缺陷报告和测试日志。,测试生命周期,测试评估 分析测试结果,确定是否测试标准被覆盖的过程.,测试生命周期,缺陷跟踪 初始记录测试故障或用户问题,检查测试故障以及提供解决它们的结构的过程。,测试人员,项目持续时间,测试人员,代码实现,消除缺陷,维护的费用 1x 10x 100x,软件测试重要性,项目持续时间,消除缺陷,消除缺陷,软件测试重要性,100%,软件测试重要性,越早测试越好 自动的测试 测试每一个版本,传统的测试是在代码实现之后进行,软件测试重要性,程序错误分类,(1) 按错误的影响和后果分类 较小错误:只对系统输出有一些非实质性影响。如,输出的数据格式不合要求等。 中等错误:对系统的运行有局部影响。如输出的某些数据有错误或出现冗余。 较严重错误:系统的行为因错误的干扰而出现明显不合情理的现象。比如开出了0.00元的支票,系统的输出完全不可信赖。 严重错误:系统运行不可跟踪,一时不能掌握其规律,时好时坏。 非常严重的错误:系统运行中突然停机,其原因不明,无法软启动。 最严重的错误:系统运行导致环境破坏,或是造成事故,引起生命、财产的损失。,(2) 按错误的性质和范围分类。B.Beizer从软件测试观点出发,把软件错误分为5类。 功能错误 规格说明错误:规格说明可能不完全,有二义性或自身矛盾。 功能错误:程序实现的功能与用户要求的不一致。这常常是由于规格说明中包含错误的功能、多余的功能或遗漏的功能所致。 测试错误:软件测试的设计与实施发生错误。软件测试自身也可能发生错误。 测试标准引起的错误:对软件测试的标准要选择适当,若测试标准太复杂,则导致测试过程出错的可能就大。, 系统错误 外部接口错误:外部接口指如终端、打印机、通信线路等系统与外部环境通信的手段。所有外部接口之间,人与机器之间的通信都使用形式的或非形式的专门协议。如果协议有错,或太复杂,难以理解,致使在使用中出错。此外还包括对输入输出格式错误理解,对输入数据不合理的容错等等。 内部接口错误:内部接口指程序之间的联系。它所发生的错误与程序内实现的细节有关。例如,设计协议错、输入输出格式错、数据保护不可靠、子程序访问错等。 硬件结构错误:这类错误在于不能正确地理解硬件如何工作。例如,忽视或错误地理解分页机构、地址生成、通道容量、IO指令、中断处理、设备初始化和启动等而导致的出错。,操作系统错误:这类错误主要是由于不了解操作系统的工作机制而导致出错。当然,操作系统本身也有错误,但是一般用户很难发现这种错误。 软件结构错误:由于软件结构不合理或不清晰而引起的错误。这种错误通常与系统的负载有关,而且往往在系统满载时才出现。这是最难发现的一类错误。例如,错误地设置局部参数或全局参数;错误地假定寄存器与存储器单元初始化了;错误地假定不会发生中断而导致不能封锁或开中断;错误地假定程序可以绕过数据的内部锁而导致不能关闭或打开内部锁;错误地假定被调用子程序常驻内存或非常驻内存等等,都将导致软件出错。 控制与顺序错误:这类错误包括:忽视了时间因素而破坏了事件的顺序;猜测事件出现在指定的序列中;等待一个不可能发生的条件;漏掉先决条件;规定错误的优先级或程序状态;漏掉处理步骤;存在不正确的处理步骤或多余的处理步骤等。 资源管理错误:这类错误是由于不正确地使用资源而产生的。例如,使用未经获准的资源;使用后未释放资源;资源死锁;把资源链接在错误的队列中等等。, 加工错误 算术与操作错误:指在算术运算、函数求值和一般操作过程中发生的错误。包括:数据类型转换错;除法溢出;错误地使用关系比较符;用整数与浮点数做比较等。 初始化错误:典型的错误有:忘记初始化工作区,忘记初始化寄存器和数据区;错误地对循环控制变量赋初值;用不正确的格式,数据或类型进行初始化等等。 控制和次序错误:这类错误与系统级同名错误类似,但它是局部错误。包括:遗漏路径;不可达到的代码;不符合语法的循环嵌套;循环返回和终止的条件不正确;漏掉处理步骤或处理步骤有错等。 静态逻辑错误:这类错误主要包括:不正确地使用CASE语句;在表达式中使用不正确的否定(例如用“”代替“”的否定);对情况不适当地分解与组合;混淆“或”与“异或”等。, 数据错误 动态数据错误:动态数据是在程序执行过程中暂时存在的数据。各种不同类型的动态数据在程序执行期间将共享一个共同的存储区域,若程序启动时对这个区域未初始化,就会导致数据出错。由于动态数据被破坏的位置可能与出错的位置在距离上相差很远,因此要发现这类错误比较困难。 静态数据错误:静态数据在内容和格式上都是固定的。它们直接或间接地出现在程序或数据库中。由编译程序或其它专门程序对它们做预处理。这是在程序执行前防止静态错误的好办法,但预处理也会出错。 数据内容错误:数据内容是指存储于存储单元或数据结构中的位串、字符串或数字。数据内容本身没有特定的含义,除非通过硬件或软件给予解释。数据内容错误就是由于内容被破坏或被错误地解释而造成的错误。 数据结构错误:数据结构是指数据元素的大小和组织形式。在同一存储区域中可以定义不同的数据结构。数据结构错误主要包括结构说明错误及把一个数据结构误当做另一类数据结构使用的错误。这是更危险的错误。 数据属性错误:数据属性是指数据内容的含义或语义。例如,整数、字符串、子程序等等。数据属性错误主要包括:对数据属性不正确地解释,比如错把整数当实数,允许不同类型数据混合运算而导致的错误等。, 代码错误,主要包括 语法错误 打字错误 对语句或指令不正确理解所产生的错误。,(3) 按软件生存期阶段分类,Gerhart分类方法把软件的逻辑错误按生存期不同阶段分为4类。 问题定义(需求分析)错误:它们是在软件定义阶段,分析员研究用户的要求后所编写的文档中出现的错误。换句话说,这类错误是由于问题定义不满足用户的要求而导致的错误。 规格说明错误:这类错误是指规格说明与问题定义不一致所产生的错误。它们又可以细分成: 不一致性错误:规格说明中功能说明与问题定义发生矛盾。 冗余性错误:规格说明中某些功能说明与问题定义相比是多余的。 不完整性错误:规格说明中缺少某些必要的功能说明。 不可行错误:规格说明中有些功能要求是不可行的。 不可测试错误:有些功能的测试要求是不现实的。, 设计错误:这是在设计阶段产生的错误,它使系统的设计与需求规格说明中的功能说明不相符。它们又可以细分为: 设计不完全错误:某些功能没有被设计,或设计得不完全。 算法错误:算法选择不合适。主要表现为算法的基本
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号