软件测试概述

2023-01-06

随着计算机技术的飞速发展, 它在国民经济和社会生活的各个方面得到了越来越广泛的应用。1962年的"水手1号"火箭爆炸, 1978年的哈特福德体育场倒塌, 2003年的美加停电事故以及2009年的"5.19"南方六省断网事件等都造成巨大的经济损失, 软件不可能是完美的, 但是一个小错误会带来巨大的损失。软件质量问题已成为所有用户关注的软件开发和发展的焦点。作为软件质量保证的重要手段之一, 软件测试也越来越受到重视新的测试理论、测试方法和测试方法正在出现, 软件测试机构和组织正在迅速发展。很多软件开发机构和软件质量管理部门建立了独立或者不独立的软件测试部门, 软件测试从业人员大量增加, 软件测试已然成为新型的行业。

一、软件测试的概念

软件测试作为一项技术型工作, 同时, 它也涉及到一些人的心理因素。测试执行不佳的主要原因之一是大多数测试人员开始误解“测试”一词的定义, 他们认为: (1) 软件测试的目标是软件能够正确地完成预期的功能。 (2) 软件测试就是证明软件不存在错误的过程; (3) 软件测试就是建立"软件做了其应该做的"信息的过程。这些定义都是本末倒置的。其实正确的认识软件测试, 应当是寻找软件的缺陷及漏洞, 通过测试提高程序的价值、可靠性或质量。因此软件测试不应只是正向思维也应该要逆向思维, 甚至于发散思维。在测试开始时, 您应该假设程序中存在隐藏的错误, 然后通过测试找到尽可能多的错误。软件测试就是通过不断的发现问题, 解决问题的方法是提高软件的质量。当然, 软件测试的标准定义是软件测试使用手动或自动方式来运行或测试系统, 其目的是测试其是否满足所需的要求或明确预期结果与实际结果之间的差异 (198) 。8、IEEE软件工程标准术语。

二、软件测试的原则

要成功测试软件应用程序, 测试人员需要有正确的态度。理解软件测试的基本原理: (1) 测试用例的一个必要部分是预期输出和结果的定义。用例必须包括程序输入数据的两部分描述和输入数据下程序正确输出的准确描述。; (2) 程序员应该避免测试他们自己的程序。因为程序员很难以一种"破坏性"的视角来审查自己的程序。就如文档作者在编辑或校对自己的文档时一般无法找出错误的道理是一样的, 程序员也存在同样问题; (3) 编写软件的组织不应当测试自己编写的软件。这类似于先前的一个论点, 即软件项目或编程组织是一个与单个程序员有相似心理的有机组织, 因此需要由更客观和独立的第三方进行测试。 (4) 应当具有足够的耐心及细心检查每一个测试结果; (5) 测试用例不仅应基于有效和预期的输入, 而且还应基于通常不会执行的无效和意外输入。当程序以新的或意想不到的方式运行时, 软件产品中突然暴露出来的许多问题都会被发现。因此, 有必要对不可预见的和无效的输入情况进行测试; (6) 应避免测试用例。当软件需要重新测试时, 重新设计用例需要投入大量的工作, 所以测试用例的复用性及保留测试用例是有必要的; (7) 计划测试工作是不应默认假定不会发现错误。这是使用了不正确的软件测试定义的一个迹象; (8) 测试不要穷举。穷举是测试时考虑所有可能的输入值, 若在测试过程中穷举所有数据组合需要耗费大量的时间, 然后, 我们需要考虑程序逻辑的全覆盖, 并确保程序中使用的所有条件都是可能的, 并且以最少的用例达到最大覆盖率; (9) 软件测试要尽早执行。软件生命周期包括软件开发、测试、维护的整个流程, 主要包括需求阶段, 设计阶段、编码阶段、单元测试阶段、验收阶段和维修阶段。实践证明, 在大多数情况下, 需求分析阶段会出现缺陷, 但维修成本很低, 因此软件测试应尽快进行并贯穿整个软件生命周期; (10) 软件测试应追溯到需求。软件测试的目标是发现问题。当然, 满足用户的需求更为重要。

三、软件测试的分类

软件开发技术的发展促进了软件测试技术的发展。出现了各种不同的软件测试技术, 对此可以从不同的角度进行分类。 (1) 按照是否需要运行测试对象的角度, 可以分为静态测试盒动态测试。 (a) 不实际运行被测软件, 而是通过控制流、信息流、数据流对程序进行分析分析, 检查代码、文档中的问题等技术对测试对象进行检测的过程称之为静态测试。 (b) 实际运行被测程序, 输入预先设计的数据及步骤, 检查实际输出结果和设置输出结果的过程称为动态测试; (2) 根据测试对象的输入、输出和处理, 将其分为白盒测试和黑盒测试。 (a) 黑盒测试只关注测试过程的输入和输出。对软件内部的处理过程不做判断。如我们的输入数据为 (2, 2) , 我们的预期输出为4, 经过测试实际结果为4, 那么我们就认为测试是通过的, 至于内部计算处理过程是2+2, 、22、2×2亦或是其他更复杂的处理方式。 (b) 白盒测试是打开盒子来研究源代码和程序结构的。在检查程序中, 对程序的逻辑结构进行检查, 从中获取测试数据; (3) 从测试执行时是否需要人工干预的角度, 分为人工测试和自动测试。 (a) 在人工测试中, 测试人员用一些测试数据开执行程序, 然后将结果和预期的结果进行比较, 并记录结果将存在差异的顶峰报告程序开发人员。人工测试可以更多的发现未预料到的问题, 但是对于大数据等运行更加繁琐的测试对于人工测试来说完成相对困难。 (b) 在自动化测试中, 测试是通过程序去执行的。自动化测试可以运行更多更繁琐的测试, 可以通过自动化模拟同时多个用户操作来达到测试的目标, 测试具有一致性和可重复性, 编写测试脚本测试自动执行每次输入和执行内容一致, 少量更改或者不做更改可重复使用, 但是有许多脑力判断的结果无法使用, 工具本身没有想象力, 对于程序以新的或者未预料到的方式运行时发现的问题存在局限性。当然, 根据软件测试的阶段, 可以分为单元测试、集成测试和系统测试箱验收测试。 (1) 单元测试是对软件中最小可测试模块和驱动模块的检查和验证;单元测试通常由白盒测试工程师在白盒测试工程师的程序员代码之后测试。主要依据代码注释及详细设计文档; (2) 集成测试, 在单元测试的基础上, 对单元模块组装的系统或子系统进行测试, 测试不同模块的接口。集成测试是单元测试的下一个阶段。主要依据为单元测试的模块以及概要设计文档; (3) 系统测试是一个集成软件、硬件、环境、数据、人员和其他系统元素的系统软件。系统测试是集成测试的下一阶段。它主要采用黑箱测试型测试系统来满足系统的需要, 无论系统的性能是否满足要求, 以及系统在不同的软硬件环境下的兼容性。主要依据是对系统需求的文档规划 (4) 验收测试是软件交付用户。最后一个测试阶段, 主要以用户为主由测试人员等质量保障人员一起参与测试, 向用户说明软件按照客户要求完成工作。主要测试是黑盒测试, 主要是根据系统要求进行规划文档编制。

四、总结

国内软件测试尚处于起步阶段。目前仍以人工测试为主。测试时测试工程师的心态也很重要, 软件测试与软件质量息息相关, 做好测试策略并严格执行尤为重要。当然这只是我对软件测试的表面了解, 首先是要将理论知识运用到实践中, 两者结合才能将自身能力发挥出来, 强大的知识储备和丰富的实践经验是测试工程师都要面临的课题。软件测试可以帮助识别计算机软件 (整体或部分) 完成 (或最终版本) 的计算机软件 (整体或部分) 的正确完整性 (完整性) 和质量 (质量) 的软件过程并且是QA的关键子域。 (软件质量保证) 。软件测试是软件生命周期中不可缺少的一部分, 软件测试是软件质量的保证, 软件测试贯穿软件开发的整个生命周期。随着软件测试行业的发展, 软件测试工程师越来越多地参与到项目工程中。为软件质量提升添砖加瓦, 在工程项目中做好软件交付用户的最后一班岗。

摘要:随着中国IT业的发展和市场的成熟, 软件测试作为保障软件质量的一个重要手段, 随着人们对软件的期望越来越高, 也逐渐被重视, 进而确保软件的质量、可靠性等方面。本文介绍软件测试的背景、基本概念等后, 介绍了软件测试的一些基本原则, 在软件测试过程中的误区及注意事项, 并从不同角度对软件测试的分类进行了阐述。

关键词:软件测试,测试定义,测试原则,测试分类

参考文献

[1] 王鹏.军事电子信息系统测试评估工具的研究与实践[J].中国电子科学研究院学报, 2007, 2 (1) :73-79.

[2] Glenford J Myers, Tom Badgett, Corey Sandler.The Art of Software are Testing (Third Edition) [M].机械工业出版社, 2012, 4-14.

[3] 于秀山, 于洪敏.软件测试新技术与实践[M].电子工业出版社, 2006.9-12.

[4] 赵斌.软件测试技术经典教程[M].科学出版社, 2007.55-59.

上一篇:体育锻炼与学生心理健康关系浅析下一篇:解读大数据时代下档案管理的价值提升