软件测试基本理论

软件测试基本理论,第1张

软件测试概念:通过各种手段和测试工具,判断软件系统是否能够满足预期期望。

从软件开发的过程按阶段划分有

A单元测试

B集成测试

C确认测试

D系统测试

E验收测试

测试过程按4个步骤进行,即单元测试、集成测试、确认测试和系统测试及发版测试。

开始是单元测试,集中对用源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。

集成测试把已测试过的模块组装起来,主要对与设计相关的软件体系结构的构造进行测试。

确认测试则是要检查已实现的软件是否满足了需求规格说明中确定了的各种需求,以及软件配置是否完全、正确。

系统测试把已经经过确认的软件纳入实际运行环境中,与其它系统成份组合在一起进行测试。

单元测试 (Unit Testing)

单元测试又称模块测试,是针对软件设计的最小单位 — 程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。

单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。

1 单元测试的内容

在单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模块的I/O条件和模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别和响应。

(1) 模块接口测试

在单元测试的开始,应对通过被测模块的数据流进行测试。测试项目包括:

– 调用本模块的输入参数是否正确;

– 本模块调用子模块时输入给子模块的参数是否正确;

– 全局量的定义在各模块中是否一致;

在做内外存交换时要考虑:

– 文件属性是否正确;

– OPEN与CLOSE语句是否正确;

– 缓冲区容量与记录长度是否匹配;

– 在进行读写 *** 作之前是否打开了文件;

– 在结束文件处理时是否关闭了文件;

– 正文书写/输入错误,

– I/O错误是否检查并做了处理。

(2) 局部数据结构测试

不正确或不一致的数据类型说明

使用尚未赋值或尚未初始化的变量

错误的初始值或错误的缺省值

变量名拼写错或书写错

不一致的数据类型

全局数据对模块的影响

(3) 路径测试

选择适当的测试用例,对模块中重要的执行路径进行测试。

应当设计测试用例查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误。

对基本执行路径和循环进行测试可以发现大量的路径错误。

(4) 错误处理测试

出错的描述是否难以理解

出错的描述是否能够对错误定位

显示的错误与实际的错误是否相符

对错误条件的处理正确与否

在对错误进行处理之前,错误条件是否已经引起系统的干预等

(5) 边界测试

注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。

如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。

2 单元测试的步骤

模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的联系,用一些辅助模块去模拟与被测模块相联系的其它模块。

– 驱动模块 (driver)

– 桩模块 (stub) —— 存根模块

如果一个模块要完成多种功能,可以将这个模块看成由几个小程序组成。必须对其中的每个小程序先进行单元测试要做的工作,对关键模块还要做性能测试。

对支持某些标准规程的程序,更要着手进行互联测试。有人把这种情况特别称为模块测试,以区别单元测试。

集成测试(Integrated Testing)

集成测试 (集成测试、联合测试)

通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需要考虑的问题是:

– 在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;

– 一个模块的功能是否会对另一个模块的功能产生不利的影响;

– 各个子功能组合起来,能否达到预期要求的父功能;

– 全局数据结构是否有问题;

– 单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。

在单元测试的同时可进行集成测试,

发现并排除在模块连接中可能出现

的问题,最终构成要求的软件系统。

子系统的集成测试特别称为部件测试,它所做的工作是要找出集成后的子系统与系统需求规格说明之间的不一致。

通常,把模块集成成为系统的方式有两种

– 一次性集成方式

– 增殖式集成方式

1 一次性集成方式(big bang)

它是一种非增殖式组装方式。也叫做整体拼装。

使用这种方式,首先对每个模块分别进行模块测试,然后再把所有模块组装在一起进行测试,最终得到要求的软件系统。

2 增殖式集成方式

这种集成方式又称渐增式集成

首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统

在集成的过程中边连接边测试,以发现连接过程中产生的问题

通过增殖逐步组装成为要求的软件系统。

(1) 自顶向下的增殖方式

这种集成方式将模块按系统程序结构,沿控制层次自顶向下进行组装。

自顶向下的增殖方式在测试过程中较早地验证了主要的控制和判断点。

选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能。

(2) 自底向上的增殖方式

这种集成的方式是从程序模块结构的最底层的模块开始集成和测试。

因为模块是自底向上进行组装,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)已经组装并测试完成,所以不再需要桩模块。在模块的测试过程中需要从子模块得到的信息可以直接运行子模块得到。

自顶向下增殖的方式和自底向上增殖的方式各有优缺点。

一般来讲,一种方式的优点是另一种方式的缺点。

(3) 混合增殖式测试

衍变的自顶向下的增殖测试

– 首先对输入/输出模块和引入新算法模块进行测试;

– 再自底向上组装成为功能相当完整且相对独立的子系统;

– 然后由主模块开始自顶向下进行增殖测试。

自底向上-自顶向下的增殖测试

– 首先对含读 *** 作的子系统自底向上直至根结点模块进行组装和测试;

– 然后对含写 *** 作的子系统做自顶向下的组装与测试。

回归测试

– 这种方式采取自顶向下的方式测试被修改的模块及其子模块;

– 然后将这一部分视为子系统,再自底向上测试。

关键模块问题

在组装测试时,应当确定关键模块,对这些关键模块及早进行测试。

关键模块的特征:

① 满足某些软件需求;

② 在程序的模块结构中位于较高的层次(高层控制模块);

③ 较复杂、较易发生错误;

④ 有明确定义的性能要求。

确认测试(Validation Testing)

确认测试又称有效性测试。任务是验证软件的功能和性能及其它特性是否与用户的要求一致。

对软件的功能和性能要求在软件需求规格说明书中已经明确规定。它包含的信息就是软件确认测试的基础。

1 进行有效性测试(黑盒测试)

有效性测试是在模拟的环境 (可能就是开发的环境) 下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书列出的需求。

首先制定测试计划,规定要做测试的种类。还需要制定一组测试步骤,描述具体的测试用例。

通过实施预定的测试计划和测试步骤,确定

– 软件的特性是否与需求相符;

– 所有的文档都是正确且便于使用;

– 同时,对其它软件需求,例如可移植性、兼容性、出错自动恢复、可维护性等,也都要进行测试

在全部软件测试的测试用例运行完后,所有的测试结果可以分为两类:

– 测试结果与预期的结果相符。这说明软件的这部分功能或性能特征与需求规格说明书相符合,从而这部分程序被接受。

– 测试结果与预期的结果不符。这说明软件的这部分功能或性能特征与需求规格说明不一致,因此要为它提交一份问题报告。

2 软件配置复查

n 软件配置复查的目的是保证

u 软件配置的所有成分都齐全;

u 各方面的质量都符合要求;

u 具有维护阶段所必需的细节;

u 而且已经编排好分类的目录。

n 应当严格遵守用户手册和 *** 作手册中规定的使用步骤,以便检查这些文档资料的完整性和正确性。

验收测试(Acceptance Testing)

在通过了系统的有效性测试及软件配置审查之后,就应开始系统的验收测试。

验收测试是以用户为主的测试。软件开发人员和QA(质量保证)人员也应参加。

由用户参加设计测试用例,使用生产中的实际数据进行测试。

在测试过程中,除了考虑软件的功能和性能外,还应对软件的可移植性、兼容性、可维护性、错误的恢复功能等进行确认。

确认测试应交付的文档有:

– 确认测试分析报告

– 最终的用户手册和 *** 作手册

– 项目开发总结报告。

系统测试(System Testing)

系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。

系统测试的目的在于通过与系统的需求定义作比较, 发现软件与系统的定义不符合或与之矛盾的地方。

JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具

另外junit是在极限编程和重构(refactor)中被极力推荐使用的工具,因为在实现自动单元测试的情况下可以大大的提高开发的效率,但是实际上编写测试代码也是需要耗费很多的时间和精力的,那么使用这个东东好处到底在哪里呢?笔者认为是这样的:

极限编程

要求在编写代码之前先写测试,这样可以强制你在写代码之前好好的思考代码(方法)的功能和逻辑,否则编写的代码很不稳定,那么你需要同时维护测试代码和实际代码,这个工作量就会大大增加。因此在极限编程中,基本过程是这样的:构思-> 编写测试代码-> 编写代码-> 测试,而且编写测试和编写代码都是增量式的,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。

重构

其好处和极限编程中是类似的,因为重构也是要求改一点测一点,减少回归错误造成的时间消耗。

其他情况

我们在开发的时候使用junit写一些适当的测试也是有必要的,因为一般我们也是需要编写测试的代码的,可能原来不是使用的junit,如果使用junit,而且针对接口(方法)编写测试代码会减少以后的维护工作,例如以后对方法内部的修改(这个就是相当于重构的工作了)。另外就是因为junit有断言功能,如果测试结果不通过会告诉我们哪个测试不通过,为什么,而如果是像以前的一般做法是写一些测试代码看其输出结果,然后再由自己来判断结果是否正确,使用junit的好处就是这个结果是否正确的判断是它来完成的,我们只需要看看它告诉我们结果是否正确就可以了,在一般情况下会大大提高效率。

软件测试定义是:为了发现程序中的错误而执行程序的过程

它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度(correctness) 、完全度(completeness)和质量(quality)的软件过程;是SQA(software quality assurance)的重要子域。

软件测试的目标:

(1)测试是为了发现程序中的错误而执行程序的过程;

(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;

(3)成功的测试是发现了至今为止尚未发现的错误的测试。

软件测试的内容:

软件测试主要工作内容是验证(verification)和确认(validation ),下面分别给出其概念:

验证(verification)是保证软件正确地实现了一些特定功能的一系列活动,即保证软件做了你所期望的事情。(Do the right thing)

1确定软件生存周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程;

2程序正确性的形式证明,即采用形式理论证明程序符号设一计规约规定的过程;

3评市、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否和规定的需求相一致进行判断和提出报告。

确认(validation)是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。即保证软件以正确的方式来做了这个事件(Do it right)

1静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确性;

2动态确认,通过执行程序做分析,测试程序的动态行为,以证实软件是否存在问题。

软件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期问各个阶段所产生的文档,如需求规格说明、概要设计文档、详细设计文档,当然软件测试的主要对象还是源程序。

从不同的角度出发,软件测试可以划分为不同的分类:

从是否关心软件内部结构和具体实现的角度划分

A白盒测试

B黑盒测试

C灰盒测试

从是否执行程序的角度

A静态测试

B动态测试。

从软件开发的过程按阶段划分有

A单元测试

B集成测试

C确认测试

D验收测试

E系统测试

测试过程按4个步骤进行,即单元测试、集成测试、确认测试和系统测试及发版测试。

开始是单元测试,集中对用源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。

集成测试把已测试过的模块组装起来,主要对与设计相关的软件体系结构的构造进行测试。

确认测试则是要检查已实现的软件是否满足了需求规格说明中确定了的各种需求,以及软件配置是否完全、正确。

系统测试把已经经过确认的软件纳入实际运行环境中,与其它系统成份组合在一起进行测试。

单元测试 (Unit Testing)

单元测试又称模块测试,是针对软件设计的最小单位 — 程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。

单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。

1 单元测试的内容

在单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模块的I/O条件和模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别和响应。

(1) 模块接口测试

在单元测试的开始,应对通过被测模块的数据流进行测试。测试项目包括:

– 调用本模块的输入参数是否正确;

– 本模块调用子模块时输入给子模块的参数是否正确;

– 全局量的定义在各模块中是否一致;

在做内外存交换时要考虑:

– 文件属性是否正确;

– OPEN与CLOSE语句是否正确;

– 缓冲区容量与记录长度是否匹配;

– 在进行读写 *** 作之前是否打开了文件;

– 在结束文件处理时是否关闭了文件;

– 正文书写/输入错误,

– I/O错误是否检查并做了处理。

(2) 局部数据结构测试

不正确或不一致的数据类型说明

使用尚未赋值或尚未初始化的变量

错误的初始值或错误的缺省值

变量名拼写错或书写错

不一致的数据类型

全局数据对模块的影响

(3) 路径测试

选择适当的测试用例,对模块中重要的执行路径进行测试。

应当设计测试用例查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误。

对基本执行路径和循环进行测试可以发现大量的路径错误。

(4) 错误处理测试

出错的描述是否难以理解

出错的描述是否能够对错误定位

显示的错误与实际的错误是否相符

对错误条件的处理正确与否

在对错误进行处理之前,错误条件是否已经引起系统的干预等

(5) 边界测试

注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。

如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。

2 单元测试的步骤

模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的联系,用一些辅助模块去模拟与被测模块相联系的其它模块。

– 驱动模块 (driver)

– 桩模块 (stub) —— 存根模块

如果一个模块要完成多种功能,可以将这个模块看成由几个小程序组成。必须对其中的每个小程序先进行单元测试要做的工作,对关键模块还要做性能测试。

对支持某些标准规程的程序,更要着手进行互联测试。有人把这种情况特别称为模块测试,以区别单元测试。

集成测试(Integrated Testing)

集成测试 (集成测试、联合测试)

通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需要考虑的问题是:

– 在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;

– 一个模块的功能是否会对另一个模块的功能产生不利的影响;

– 各个子功能组合起来,能否达到预期要求的父功能;

– 全局数据结构是否有问题;

– 单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。

在单元测试的同时可进行集成测试,

发现并排除在模块连接中可能出现

的问题,最终构成要求的软件系统。

子系统的集成测试特别称为部件测试,它所做的工作是要找出集成后的子系统与系统需求规格说明之间的不一致。

通常,把模块集成成为系统的方式有两种

– 一次性集成方式

– 增殖式集成方式

1 一次性集成方式(big bang)

它是一种非增殖式组装方式。也叫做整体拼装。

使用这种方式,首先对每个模块分别进行模块测试,然后再把所有模块组装在一起进行测试,最终得到要求的软件系统。

2 增殖式集成方式

这种集成方式又称渐增式集成

首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统

在集成的过程中边连接边测试,以发现连接过程中产生的问题

通过增殖逐步组装成为要求的软件系统。

(1) 自顶向下的增殖方式

这种集成方式将模块按系统程序结构,沿控制层次自顶向下进行组装。

自顶向下的增殖方式在测试过程中较早地验证了主要的控制和判断点。

选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能。

(2) 自底向上的增殖方式

这种集成的方式是从程序模块结构的最底层的模块开始集成和测试。

因为模块是自底向上进行组装,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)已经组装并测试完成,所以不再需要桩模块。在模块的测试过程中需要从子模块得到的信息可以直接运行子模块得到。

自顶向下增殖的方式和自底向上增殖的方式各有优缺点。

一般来讲,一种方式的优点是另一种方式的缺点。

(3) 混合增殖式测试

衍变的自顶向下的增殖测试

– 首先对输入/输出模块和引入新算法模块进行测试;

– 再自底向上组装成为功能相当完整且相对独立的子系统;

– 然后由主模块开始自顶向下进行增殖测试。

自底向上-自顶向下的增殖测试

– 首先对含读 *** 作的子系统自底向上直至根结点模块进行组装和测试;

– 然后对含写 *** 作的子系统做自顶向下的组装与测试。

回归测试

– 这种方式采取自顶向下的方式测试被修改的模块及其子模块;

– 然后将这一部分视为子系统,再自底向上测试。

关键模块问题

在组装测试时,应当确定关键模块,对这些关键模块及早进行测试。

关键模块的特征:

① 满足某些软件需求;

② 在程序的模块结构中位于较高的层次(高层控制模块);

③ 较复杂、较易发生错误;

④ 有明确定义的性能要求。

确认测试(Validation Testing)

确认测试又称有效性测试。任务是验证软件的功能和性能及其它特性是否与用户的要求一致。

对软件的功能和性能要求在软件需求规格说明书中已经明确规定。它包含的信息就是软件确认测试的基础。

1 进行有效性测试(黑盒测试)

有效性测试是在模拟的环境 (可能就是开发的环境) 下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书列出的需求。

首先制定测试计划,规定要做测试的种类。还需要制定一组测试步骤,描述具体的测试用例。

通过实施预定的测试计划和测试步骤,确定

– 软件的特性是否与需求相符;

– 所有的文档都是正确且便于使用;

– 同时,对其它软件需求,例如可移植性、兼容性、出错自动恢复、可维护性等,也都要进行测试

在全部软件测试的测试用例运行完后,所有的测试结果可以分为两类:

– 测试结果与预期的结果相符。这说明软件的这部分功能或性能特征与需求规格说明书相符合,从而这部分程序被接受。

– 测试结果与预期的结果不符。这说明软件的这部分功能或性能特征与需求规格说明不一致,因此要为它提交一份问题报告。

2 软件配置复查

n 软件配置复查的目的是保证

u 软件配置的所有成分都齐全;

u 各方面的质量都符合要求;

u 具有维护阶段所必需的细节;

u 而且已经编排好分类的目录。

n 应当严格遵守用户手册和 *** 作手册中规定的使用步骤,以便检查这些文档资料的完整性和正确性。

验收测试(Acceptance Testing)

在通过了系统的有效性测试及软件配置审查之后,就应开始系统的验收测试。

验收测试是以用户为主的测试。软件开发人员和QA(质量保证)人员也应参加。

由用户参加设计测试用例,使用生产中的实际数据进行测试。

在测试过程中,除了考虑软件的功能和性能外,还应对软件的可移植性、兼容性、可维护性、错误的恢复功能等进行确认。

确认测试应交付的文档有:

– 确认测试分析报告

– 最终的用户手册和 *** 作手册

– 项目开发总结报告。

系统测试(System Testing)

系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。

系统测试的目的在于通过与系统的需求定义作比较, 发现软件与系统的定义不符合或与之矛盾的地方。

其实软件测试不仅仅是用工具去检查别人的程序,他主要告诉就是保证所开发的软件错误降低到最小。

其实做软测的也要编代码,他们编的是软件的源程序,我们编的是测试用例,里面的内容很多,做软测也需要有一定的编程基础

软件测试是指使用人工或者自动的手段来运行或测定某个软件产品系统的过程,其目的是在于检验是否满足规定的需求或者弄清预期的结果与实际结果的区别。

一句话发现BUG

所谓“(Bug)”,是指电脑系统的硬件、系统软件(如 *** 作系统)或应用软件(如文字处理软件)出错。硬件的出错有两个原因,一是设计错误,一是硬件部件 老化失效等。软件的错误全是厂家设计错误。那种说用户执行了非法 *** 作的提示,是软件厂商不负责的胡说八道。用户可能会执行不正确的 *** 作,比如本来是做加法 但按了减法键。这样用户会得到一个不正确的结果,但不会引起bug发作。软件厂商在设计产品时的一个基本要求,就是不允许用户做非法的 *** 作。只要允许用户 做的,都是合法的。用户根本就没有办法知道厂家心里是怎么想的,哪些 *** 作序列是非法的。

从电脑诞生之日起,就有了电脑BUG。第一个有记载的bug是美国海军的编程员,编译器的发明者格蕾斯·哈珀(Grace Hopper)发现的。哈珀后来成了美国海军的一个将军,领导了著名计算机语言Cobol的开发。

1945年9月9日,下午三点。哈珀中尉正领着她的小组构造一个称为“马克二型”的计算机。这还不是一个完全的电子计算机,它使用了大量的继电 器,一种电子机械装置。第二次世界大战还没有结束。哈珀的小组日以继夜地工作。机房是一间第一次世界大战时建造的老建筑。那是一个炎热的夏天,房间没有空 调,所有窗户都敞开散热。

突然,马克二型死机了。技术人员试了很多办法,最后定位到第70号继电器出错。哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布帖到“事件记录本”中,并注明“第一个发现虫子的实例。”[1]

从此以后,人们将计算机错误戏称为虫子(bug),而把找寻错误的工作称为(debug)

“BUG”的由来:

Bug一词的原意是“臭虫”或“虫子”。但是现在,在电脑系统或程序中,如果隐藏着的一些未被发现的缺陷或问题,人们也叫它“Bug”,这是怎么回事呢?

原来,第一代的计算机是由许多庞大且昂贵的真空管组成,并利用大量的电力来使真空管发光。可能正是由于计算机运行产生的光和热,引得一只小虫子 Bug 钻进了一支真空管内,导致整个计算机无法工作。研究人员费了半天时间,总算发现原因所在,把这只小虫子从真空管中取出后,计算机又恢复正常。后 来,Bug这个名词就沿用下来,表示电脑系统或程序中隐藏的错误、缺陷或问题。

与Bug相对应,人们将发现Bug并加以纠正的过程叫做“Debug”,意即“捉虫子”或“杀虫子”。遗憾的是,在中文里面,至今仍没有与 “Bug”准确对应的词汇,于是只能直接引用“Bug”一词。虽然也有人使用“臭虫”一词替代“Bug”,但容易产生歧义,所以推广不开。

所谓“(Bug)”,是指电脑系统的硬件、系统软件(如 *** 作系统)或应用软件(如文字处理软件)出错。硬件的出错有两个原因,一是设计错误, 一是硬件部件老化失效等。软件的错误全是厂家设计错误。那种说用户执行了非法 *** 作的提示,是软件厂商不负责的胡说八道。用户可能会执行不正确的 *** 作,比如 本来是做加法但按了减法键。这样用户会得到一个不正确的结果,但不会引起bug发作。软件厂商在设计产品时的一个基本要求,就是不允许用户做非法的 *** 作。 只要允许用户做的,都是合法的。用户根本就没有办法知道厂家心里是怎么想的,哪些 *** 作序列是非法的。

从电脑诞生之日起,就有了电脑BUG。第一个有记载的bug是美国海军的编程员,编译器的发明者格蕾斯·哈珀(GraceHopper)发现的。哈珀后来成了美国海军的一个将军,领导了著名计算机语言Cobol的开发。

1945年9月9日,下午三点。哈珀中尉正领着她的小组构造一个称为“马克二型”的计算机。这还不是一个完全的电子计算机,它使用了大量的继电 器,一种电子机械装置。第二次世界大战还没有结束。哈珀的小组日以继夜地工作。机房是一间第一次世界大战时建造的老建筑。那是一个炎热的夏天,房间没有空 调,所有窗户都敞开散热。

突然,马克二型死机了。技术人员试了很多办法,最后定位到第70号继电器出错。哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布帖到“事件记录本”中,并注明“第一个发现虫子的实例。”[1]

从此以后,人们将计算机错误戏称为虫子(bug),而把找寻错误的工作称为(debug)。

程序中隐藏的功能缺陷或错误。由于现在的软件复杂程度早已超出了一般人能控制的范围,如Win95、Win98这样的较成熟的 *** 作系统也会不定期地公布其中的Bug。如何减少以至消灭程序中的Bug,一直是程序员所极为重视的课题

1983年,IEEE提出了软件工程标准术语,软件测试定义为:

“使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。”

简单的说,软件测试就是对软件中的缺陷进行检测和预防。

以上就是关于软件测试基本理论全部的内容,包括:软件测试基本理论、JUnit主要用来完成什么、软件测试具体是做什么的(面试人员说刚开始做的是处理一些代码非常枯燥的事)请有做过工作的过来人指点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10173400.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存